summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2017-12-10 15:02:37 +0100
committermsquare <msquare@notrademark.de>2017-12-10 15:02:37 +0100
commit4143680297808dd23fe03b121f28ad5183601b8b (patch)
tree75d8c819afd4590d0d792200a6d906c7957b63dc
parentef0dbe8a1bd80fb9bec0400e84550df02f138dbd (diff)
remove room number and visible flag, rename pentabarf to frab and introduce map/c3nav integration as well as markdown description for rooms
-rw-r--r--db/update.sql12
-rw-r--r--includes/controller/rooms_controller.php10
-rw-r--r--includes/model/Room_model.php24
-rw-r--r--includes/pages/admin_import.php6
-rw-r--r--includes/pages/admin_rooms.php73
-rw-r--r--includes/pages/user_shifts.php2
-rw-r--r--includes/sys_menu.php13
-rw-r--r--includes/view/Rooms_view.php49
-rw-r--r--tests/Feature/Model/RoomModelTest.php2
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 @@
<?php
-
use Engelsystem\ShiftCalendarRenderer;
use Engelsystem\ShiftsFilterRenderer;
/**
- * @param array $room
- * @param ShiftsFilterRenderer $shiftsFilterRenderer
- * @param ShiftCalendarRenderer $shiftCalendarRenderer
+ *
+ * @param array $room
+ * @param ShiftsFilterRenderer $shiftsFilterRenderer
+ * @param ShiftCalendarRenderer $shiftCalendarRenderer
* @return string
*/
function Room_view($room, ShiftsFilterRenderer $shiftsFilterRenderer, ShiftCalendarRenderer $shiftCalendarRenderer)
{
global $user;
-
+
$assignNotice = '';
- if (config('signup_requires_arrival') && !$user['Gekommen']) {
+ if (config('signup_requires_arrival') && ! $user['Gekommen']) {
$assignNotice = info(render_user_arrived_hint(), true);
}
-
- return page_with_title(glyph('map-marker') . $room['Name'], [
+
+ $description = '';
+ if (! empty($room['description'])) {
+ $description = '<h3>' . _('Description') . '</h3>';
+ $parsedown = new Parsedown();
+ $description .= '<div class="well">' . $parsedown->parse($room['description']) . '</div>';
+ }
+
+ $tabs = [];
+ $selected = 0;
+ if (! empty($room['map_url'])) {
+ $tabs[_('Map')] = '<div class="map"><iframe style="width: 100%; min-height: 400px; border: 0px none;" src="' . $room['map_url'] . '"></iframe></div>';
+ }
+
+ $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()