begin room view and shifts filter renderer
parent
27c9650dc4
commit
6fff6a6c1a
@ -0,0 +1,2 @@
|
|||||||
|
INSERT INTO `Privileges` (`id`, `name`, `desc`) VALUES (40, 'view_rooms', 'User can view rooms');
|
||||||
|
INSERT INTO `GroupPrivileges` (`id`, `group_id`, `privilege_id`) VALUES (NULL, '-2', '40');
|
@ -1,7 +1,87 @@
|
|||||||
<?php
|
<?php
|
||||||
|
use Engelsystem\ShiftsFilterRenderer;
|
||||||
|
use Engelsystem\ShiftsFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Room controllers for managing everything room related.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View a room with its shifts.
|
||||||
|
*/
|
||||||
|
function room_controller() {
|
||||||
|
global $privileges, $user;
|
||||||
|
|
||||||
|
if (! in_array('view_rooms', $privileges)) {
|
||||||
|
redirect(page_link_to());
|
||||||
|
}
|
||||||
|
|
||||||
|
$room = load_room();
|
||||||
|
$all_shifts = Shifts_by_room($room);
|
||||||
|
$days = [];
|
||||||
|
foreach ($all_shifts as $shift) {
|
||||||
|
$day = date("Y-m-d", $shift['start']);
|
||||||
|
if (! in_array($day, $days)) {
|
||||||
|
$days[] = $day;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$shiftsFilter = new ShiftsFilter(false, [
|
||||||
|
$room['RID']
|
||||||
|
], []);
|
||||||
|
$shiftsFilter->setStartTime(time());
|
||||||
|
$shiftsFilter->setEndTime(time() + 24 * 60 * 60);
|
||||||
|
|
||||||
|
$shiftsFilterRenderer = new ShiftsFilterRenderer($shiftsFilter);
|
||||||
|
$shiftsFilterRenderer->enableDaySelection($days, EventConfig());
|
||||||
|
|
||||||
|
return [
|
||||||
|
$room['Name'],
|
||||||
|
Room_view($room, $shiftsFilterRenderer)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dispatch different room actions.
|
||||||
|
*/
|
||||||
|
function rooms_controller() {
|
||||||
|
global $privileges;
|
||||||
|
|
||||||
|
if (! isset($_REQUEST['action'])) {
|
||||||
|
$_REQUEST['action'] = 'list';
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($_REQUEST['action']) {
|
||||||
|
default:
|
||||||
|
case 'list':
|
||||||
|
redirect(page_link_to('admin_rooms'));
|
||||||
|
case 'view':
|
||||||
|
return room_controller();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function room_link($room) {
|
function room_link($room) {
|
||||||
|
return page_link_to('rooms') . '&action=view&room_id=' . $room['RID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function room_edit_link($room) {
|
||||||
return page_link_to('admin_rooms') . '&show=edit&id=' . $room['RID'];
|
return page_link_to('admin_rooms') . '&show=edit&id=' . $room['RID'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads room by request param room_id
|
||||||
|
*/
|
||||||
|
function load_room() {
|
||||||
|
if (! test_request_int('room_id')) {
|
||||||
|
redirect(page_link_to());
|
||||||
|
}
|
||||||
|
|
||||||
|
$room = Room($_REQUEST['room_id']);
|
||||||
|
if ($room == null) {
|
||||||
|
redirect(page_link_to());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $room;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem;
|
||||||
|
|
||||||
|
class ShiftsFilterRenderer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shiftFilter to render.
|
||||||
|
*
|
||||||
|
* @var ShiftsFilter
|
||||||
|
*/
|
||||||
|
private $shiftsFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the filter display a day selection.
|
||||||
|
*
|
||||||
|
* @var boolean
|
||||||
|
*/
|
||||||
|
private $daySelectionEnabled = false;
|
||||||
|
|
||||||
|
private $days = [];
|
||||||
|
|
||||||
|
private $event_config = null;
|
||||||
|
|
||||||
|
public function __construct(ShiftsFilter $shiftsFilter) {
|
||||||
|
$this->shiftsFilter = $shiftsFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders the filter.
|
||||||
|
*
|
||||||
|
* @return Generated HTML
|
||||||
|
*/
|
||||||
|
public function render() {
|
||||||
|
$toolbar = [];
|
||||||
|
if ($this->daySelectionEnabled && ! empty($this->days)) {
|
||||||
|
$today = date("Y-m-d");
|
||||||
|
$selected_day = date("Y-m-d", $this->shiftsFilter->getStartTime());
|
||||||
|
$day_dropdown_items = [];
|
||||||
|
foreach ($this->days as $day) {
|
||||||
|
$day_dropdown_items[] = toolbar_item_link('', '', $day);
|
||||||
|
}
|
||||||
|
$toolbar[] = toolbar_dropdown('', $selected_day, $day_dropdown_items, 'active');
|
||||||
|
}
|
||||||
|
return toolbar_pills($toolbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the filter display a day selection.
|
||||||
|
*/
|
||||||
|
public function enableDaySelection($days, $event_config) {
|
||||||
|
$this->daySelectionEnabled = true;
|
||||||
|
$this->days = $days;
|
||||||
|
$this->event_config = $event_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the filter display a day selection.
|
||||||
|
*/
|
||||||
|
public function isDaySelectionEnabled() {
|
||||||
|
return $this->daySelectionEnabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
Loading…
Reference in New Issue