From 4143680297808dd23fe03b121f28ad5183601b8b Mon Sep 17 00:00:00 2001 From: msquare Date: Sun, 10 Dec 2017 15:02:37 +0100 Subject: remove room number and visible flag, rename pentabarf to frab and introduce map/c3nav integration as well as markdown description for rooms --- db/update.sql | 12 +++++- includes/controller/rooms_controller.php | 10 ++--- includes/model/Room_model.php | 24 +++++------ includes/pages/admin_import.php | 6 +-- includes/pages/admin_rooms.php | 73 +++++++++++++++----------------- includes/pages/user_shifts.php | 2 +- includes/sys_menu.php | 13 +----- includes/view/Rooms_view.php | 49 +++++++++++++++------ tests/Feature/Model/RoomModelTest.php | 2 +- 9 files changed, 103 insertions(+), 88 deletions(-) diff --git a/db/update.sql b/db/update.sql index c5187675..b36ea522 100644 --- a/db/update.sql +++ b/db/update.sql @@ -34,4 +34,14 @@ ALTER TABLE `LogEntries` CHANGE COLUMN `nick` `level` VARCHAR(20) NOT NULL; -- Angeltype contact update ALTER TABLE `AngelTypes` DROP FOREIGN KEY angeltypes_ibfk_1; -ALTER TABLE `AngelTypes` DROP `contact_user_id`; \ No newline at end of file +ALTER TABLE `AngelTypes` DROP `contact_user_id`; + +-- Room update +ALTER TABLE `Room` DROP `Number`; +ALTER TABLE `Room` DROP `show`; +ALTER TABLE `Room` DROP `Man`; +ALTER TABLE `Room` ADD `from_frab` BOOLEAN NOT NULL AFTER `FromPentabarf`; +update Room set `from_frab`=(`FromPentabarf`='Y'); +ALTER TABLE `Room` DROP `FromPentabarf`; +ALTER TABLE `Room` ADD `map_url` VARCHAR(300) NULL AFTER `from_frab`; +ALTER TABLE `Room` ADD `description` TEXT NULL AFTER `map_url`; diff --git a/includes/controller/rooms_controller.php b/includes/controller/rooms_controller.php index d6da9709..596cb6d7 100644 --- a/includes/controller/rooms_controller.php +++ b/includes/controller/rooms_controller.php @@ -21,10 +21,7 @@ function room_controller() } $request = request(); - $room = load_room(false); - if ($room['show'] != 'Y' && !in_array('admin_rooms', $privileges)) { - redirect(page_link_to()); - } + $room = load_room(); $all_shifts = Shifts_by_room($room); $days = []; @@ -104,16 +101,15 @@ function room_edit_link($room) /** * Loads room by request param room_id * - * @param bool $onlyVisible * @return array */ -function load_room($onlyVisible = true) +function load_room() { if (!test_request_int('room_id')) { redirect(page_link_to()); } - $room = Room(request()->input('room_id'), $onlyVisible); + $room = Room(request()->input('room_id')); if ($room == null) { redirect(page_link_to()); } diff --git a/includes/model/Room_model.php b/includes/model/Room_model.php index 74a08be4..79536e93 100644 --- a/includes/model/Room_model.php +++ b/includes/model/Room_model.php @@ -5,12 +5,11 @@ use Engelsystem\Database\DB; /** * returns a list of rooms. * - * @param boolean $show_all returns also hidden rooms when true * @return array */ -function Rooms($show_all = false) +function Rooms() { - return DB::select('SELECT * FROM `Room`' . ($show_all ? '' : ' WHERE `show`=\'Y\'') . ' ORDER BY `Name`'); + return DB::select('SELECT * FROM `Room` ORDER BY `Name`'); } /** @@ -39,21 +38,21 @@ function Room_delete($room_id) * * @param string $name Name of the room * @param boolean $from_frab Is this a frab imported room? - * @param boolean $public Is the room visible for angels? - * @param int $number Room number + * @param string $map_url URL to a map tha can be displayed in an iframe + * @param description markdown description * @return false|int */ -function Room_create($name, $from_frab, $public, $number = null) +function Room_create($name, $from_frab, $map_url, $description) { DB::insert(' - INSERT INTO `Room` (`Name`, `FromPentabarf`, `show`, `Number`) + INSERT INTO `Room` (`Name`, `from_frab`, `map_url`, `description`) VALUES (?, ?, ?, ?) ', [ $name, - $from_frab ? 'Y' : '', - $public ? 'Y' : '', - (int)$number, + (int) $from_frab, + $map_url, + $description, ] ); @@ -67,13 +66,12 @@ function Room_create($name, $from_frab, $public, $number = null) * @param bool $onlyVisible * @return array|false */ -function Room($room_id, $onlyVisible = true) +function Room($room_id) { return DB::selectOne(' SELECT * FROM `Room` - WHERE `RID` = ? - ' . ($onlyVisible ? 'AND `show` = \'Y\'' : ''), + WHERE `RID` = ?', [$room_id] ); } diff --git a/includes/pages/admin_import.php b/includes/pages/admin_import.php index e97f95e1..dcf4e0d1 100644 --- a/includes/pages/admin_import.php +++ b/includes/pages/admin_import.php @@ -251,7 +251,7 @@ function admin_import() list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); foreach ($rooms_new as $room) { - $result = Room_create($room, true, true); + $result = Room_create($room, true, null, null); $rooms_import[trim($room)] = $result; } @@ -309,7 +309,7 @@ function prepare_rooms($file) $data = read_xml($file); // Load rooms from db for compare with input - $rooms = DB::select('SELECT `Name`, `RID` FROM `Room` WHERE `FromPentabarf`=\'Y\''); + $rooms = DB::select('SELECT `Name`, `RID` FROM `Room` WHERE `from_frab`=TRUE'); $rooms_db = []; $rooms_import = []; foreach ($rooms as $room) { @@ -348,7 +348,7 @@ function prepare_events($file, $shifttype_id, $add_minutes_start, $add_minutes_e global $rooms_import; $data = read_xml($file); - $rooms = Rooms(true); + $rooms = Rooms(); $rooms_db = []; foreach ($rooms as $room) { $rooms_db[$room['Name']] = $room['RID']; diff --git a/includes/pages/admin_rooms.php b/includes/pages/admin_rooms.php index 9e153bf1..c5b7b610 100644 --- a/includes/pages/admin_rooms.php +++ b/includes/pages/admin_rooms.php @@ -22,8 +22,8 @@ function admin_rooms() foreach ($rooms_source as $room) { $rooms[] = [ 'name' => Room_name_render($room), - 'from_pentabarf' => glyph_bool($room['FromPentabarf'] == 'Y'), - 'public' => glyph_bool($room['show'] == 'Y'), + 'from_frab' => glyph_bool($room['from_frab']), + 'map_url' => glyph_bool(!empty($room['map_url'])), 'actions' => table_buttons([ button(page_link_to('admin_rooms', ['show' => 'edit', 'id' => $room['RID']]), _('edit'), 'btn-xs'), button(page_link_to('admin_rooms', ['show' => 'delete', 'id' => $room['RID']]), _('delete'), 'btn-xs') @@ -35,9 +35,9 @@ function admin_rooms() if ($request->has('show')) { $msg = ''; $name = ''; - $from_pentabarf = ''; - $public = 'Y'; - $number = ''; + $from_frab = false; + $map_url = null; + $description = null; $room_id = 0; $angeltypes_source = DB::select('SELECT `id`, `name` FROM `AngelTypes` ORDER BY `name`'); @@ -49,16 +49,16 @@ function admin_rooms() } if (test_request_int('id')) { - $room = Room($request->input('id'), false); + $room = Room($request->input('id')); if ($room == null) { redirect(page_link_to('admin_rooms')); } $room_id = $request->input('id'); $name = $room['Name']; - $from_pentabarf = $room['FromPentabarf']; - $public = $room['show']; - $number = $room['Number']; + $from_frab = $room['from_frab']; + $map_url = $room['map_url']; + $description = $room['description']; $needed_angeltypes = DB::select( 'SELECT `angel_type_id`, `count` FROM `NeededAngelTypes` WHERE `room_id`=?', @@ -90,20 +90,14 @@ function admin_rooms() $msg .= error(_('Please enter a name.'), true); } - $from_pentabarf = ''; - if ($request->has('from_pentabarf')) { - $from_pentabarf = 'Y'; - } + $from_frab = $request->has('from_frab'); - $public = ''; - if ($request->has('public')) { - $public = 'Y'; + if ($request->has('map_url')) { + $map_url = strip_request_item('map_url'); } - if ($request->has('number')) { - $number = strip_request_item('number'); - } else { - $valid = false; + if ($request->has('description')) { + $description= strip_request_item_nl('description'); } foreach ($angeltypes as $angeltype_id => $angeltype) { @@ -127,33 +121,32 @@ function admin_rooms() UPDATE `Room` SET `Name`=?, - `FromPentabarf`=?, - `show`=?, - `Number`=? + `from_frab`=?, + `map_url`=?, + `description`=? WHERE `RID`=? LIMIT 1 ', [ $name, - $from_pentabarf, - $public, - $number, + (int) $from_frab, + $map_url, + $description, $room_id, ]); engelsystem_log( 'Room updated: ' . $name - . ', pentabarf import: ' . $from_pentabarf - . ', public: ' . $public - . ', number: ' . $number + . ', frab import: ' . ($from_frab ? 'Yes' : '') + . ', map_url: ' . $map_url + . ', description: ' . $description ); } else { - $room_id = Room_create($name, $from_pentabarf, $public, $number); + $room_id = Room_create($name, $from_frab, $map_url, $description); engelsystem_log( 'Room created: ' . $name - . ', pentabarf import: ' - . $from_pentabarf - . ', public: ' . $public - . ', number: ' . $number + . ', frab import: ' . ($from_frab ? 'Yes' : '') + . ', map_url: ' . $map_url + . ', description: ' . $description ); } @@ -191,9 +184,11 @@ function admin_rooms() div('row', [ div('col-md-6', [ form_text('name', _('Name'), $name), - form_checkbox('from_pentabarf', _('Frab import'), $from_pentabarf), - form_checkbox('public', _('Public'), $public), - form_text('number', _('Room number'), $number) + form_checkbox('from_frab', _('Frab import'), $from_frab), + form_text('map_url', _('Map URL'), $map_url), + form_info('', _('The map url is used to display an iframe on the room page.')), + form_textarea('description', _('Description'), $description), + form_info('', _('Please use markdown for the description.')), ]), div('col-md-6', [ div('row', [ @@ -239,8 +234,8 @@ function admin_rooms() msg(), table([ 'name' => _('Name'), - 'from_pentabarf' => _('Frab import'), - 'public' => _('Public'), + 'from_frab' => _('Frab import'), + 'map_url' => _('Map'), 'actions' => '' ], $rooms) ]); diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php index ef21ff1b..2871ceb5 100644 --- a/includes/pages/user_shifts.php +++ b/includes/pages/user_shifts.php @@ -92,7 +92,7 @@ function update_ShiftsFilter(ShiftsFilter $shiftsFilter, $user_shifts_admin, $da function load_rooms() { $rooms = DB::select( - 'SELECT `RID` AS `id`, `Name` AS `name` FROM `Room` WHERE `show`=\'Y\' ORDER BY `Name`' + 'SELECT `RID` AS `id`, `Name` AS `name` FROM `Room` ORDER BY `Name`' ); if (empty($rooms)) { error(_('The administration has not configured any rooms yet.')); diff --git a/includes/sys_menu.php b/includes/sys_menu.php index 385a6948..863808d2 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -186,7 +186,7 @@ function make_room_navigation($menu) } // Get a list of all rooms - $rooms = Rooms(true); + $rooms = Rooms(); $room_menu = []; if (in_array('admin_rooms', $privileges)) { $room_menu[] = toolbar_item_link(page_link_to('admin_rooms'), 'list', _('Manage rooms')); @@ -195,16 +195,7 @@ function make_room_navigation($menu) $room_menu[] = toolbar_item_divider(); } foreach ($rooms as $room) { - if ( - $room['show'] == 'Y' // room is public - || ( - // room is not public, but user can admin_rooms - $room['show'] != 'Y' - && in_array('admin_rooms', $privileges) - ) - ) { - $room_menu[] = toolbar_item_link(room_link($room), 'map-marker', $room['Name']); - } + $room_menu[] = toolbar_item_link(room_link($room), 'map-marker', $room['Name']); } if (count($room_menu) > 0) { $menu[] = toolbar_dropdown('map-marker', _('Rooms'), $room_menu); diff --git a/includes/view/Rooms_view.php b/includes/view/Rooms_view.php index bd6138e1..1f0f9954 100644 --- a/includes/view/Rooms_view.php +++ b/includes/view/Rooms_view.php @@ -1,35 +1,60 @@ ' . _('Description') . ''; + $parsedown = new Parsedown(); + $description .= '
' . $parsedown->parse($room['description']) . '
'; + } + + $tabs = []; + $selected = 0; + if (! empty($room['map_url'])) { + $tabs[_('Map')] = '
'; + } + + $tabs[_('Shifts')] = div('first', [ $shiftsFilterRenderer->render(page_link_to('rooms', [ - 'action' => 'view', - 'room_id' => $room['RID'] + 'action' => 'view', + 'room_id' => $room['RID'] ])), - $assignNotice, $shiftCalendarRenderer->render() ]); + + $selected_tab = 0; + $request = request(); + if ($request->has('shifts_filter_day')) { + $selected_tab = count($tabs) - 1; + } + + return page_with_title(glyph('map-marker') . $room['Name'], [ + $assignNotice, + $description, + tabs($tabs, $selected_tab) + ]); } /** - * @param array $room + * + * @param array $room * @return string */ function Room_name_render($room) diff --git a/tests/Feature/Model/RoomModelTest.php b/tests/Feature/Model/RoomModelTest.php index adf0218e..4edb20c3 100644 --- a/tests/Feature/Model/RoomModelTest.php +++ b/tests/Feature/Model/RoomModelTest.php @@ -15,7 +15,7 @@ class RoomModelTest extends TestCase public function createRoom() { - $this->room_id = Room_create('test', false, true, ''); + $this->room_id = Room_create('test', false, null, null); } public function testRoom() -- cgit v1.2.3-54-g00ecf