diff options
author | Philip Häusler <msquare@notrademark.de> | 2013-12-09 17:10:07 +0100 |
---|---|---|
committer | Philip Häusler <msquare@notrademark.de> | 2013-12-09 17:10:07 +0100 |
commit | ad5899f02876e9c2e81804d6d3a58988fae8c3db (patch) | |
tree | 76f21c9544bb5e2af5cb4d3772c9949f5d694b00 /includes | |
parent | 9a1ffdf198c74466b86129568fb78a677dc56025 (diff) |
api export for all shifts
Diffstat (limited to 'includes')
-rw-r--r-- | includes/controller/shifts_controller.php | 32 | ||||
-rw-r--r-- | includes/model/NeededAngelTypes_model.php | 35 | ||||
-rw-r--r-- | includes/model/ShiftEntry_model.php | 17 | ||||
-rw-r--r-- | includes/model/Shifts_model.php | 24 |
4 files changed, 104 insertions, 4 deletions
diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 0ffc3c75..6e5b71fd 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -1,17 +1,41 @@ <?php /** + * Export all shifts using api-key. + */ +function shifts_json_export_all_controller() { + global $api_key; + + if ($api_key == "") + die("Config contains empty apikey."); + + if (! isset($_REQUEST['api_key'])) + die("Missing parameter api_key."); + + if ($_REQUEST['api_key'] != $api_key) + die("Invalid api_key."); + + $shifts_source = Shifts(); + if ($shifts_source === false) + die("Unable to load shifts."); + + header("Content-Type: application/json; charset=utf-8"); + echo json_encode($shifts_source); + die(); +} + +/** * Export filtered shifts via JSON. * (Like iCal Export or shifts view) */ function shifts_json_export_controller() { global $ical_shifts, $user; - + if (isset($_REQUEST['key']) && preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) $key = $_REQUEST['key']; else die("Missing key."); - + $user = User_by_api_key($key); if ($user === false) die("Unable to find user."); @@ -19,14 +43,14 @@ function shifts_json_export_controller() { die("Key invalid."); if (! in_array('shifts_json_export', privileges_for_user($user['UID']))) die("No privilege for shifts_json_export."); - + if (isset($_REQUEST['export']) && $_REQUEST['export'] == 'user_shifts') { require_once ('includes/pages/user_shifts.php'); view_user_shifts(); } else { $ical_shifts = sql_select("SELECT `Shifts`.*, `Room`.`Name` as `room_name` FROM `ShiftEntry` INNER JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) INNER JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($user['UID']) . " ORDER BY `start`"); } - + header("Content-Type: application/json; charset=utf-8"); echo json_encode($ical_shifts); die(); diff --git a/includes/model/NeededAngelTypes_model.php b/includes/model/NeededAngelTypes_model.php new file mode 100644 index 00000000..85890f2d --- /dev/null +++ b/includes/model/NeededAngelTypes_model.php @@ -0,0 +1,35 @@ +<?php + +/** + * Returns all needed angeltypes and already taken needs. + * + * @param Shift $shift + */ +function NeededAngelTypes_by_shift($shift) { + $needed_angeltypes_source = sql_select(" + SELECT `NeededAngelTypes`.*, `AngelTypes`.`name`, `AngelTypes`.`restricted` + FROM `NeededAngelTypes` + JOIN `AngelTypes` ON `AngelTypes`.`id` = `NeededAngelTypes`.`angel_type_id` + WHERE `shift_id`=" . sql_escape($shift['SID']) . " + OR `room_id`=" . sql_escape($shift['RID']) . " + ORDER BY `room_id` DESC + "); + if ($needed_angeltypes === false) + return false; + + $needed_angeltypes = array(); + foreach ($needed_angeltypes_source as $angeltype) + $needed_angeltypes[$angeltype['id']] = $angeltype; + + foreach ($needed_angeltypes as &$angeltype) { + $shift_entries = ShiftEntries_by_shift_and_angeltype($shift['SID'], $angeltype['id']); + if ($shift_entries === false) + return false; + + $angeltype['taken'] = count($shift_entries); + } + + return $needed_angeltypes; +} + +?>
\ No newline at end of file diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php new file mode 100644 index 00000000..79652c9b --- /dev/null +++ b/includes/model/ShiftEntry_model.php @@ -0,0 +1,17 @@ +<?php + +/** + * Returns all shift entries in given shift for given angeltype. + * @param int $shift_id + * @param int $angeltype_id + */ +function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id) { + return sql_select(" + SELECT * + FROM `ShiftEntries` + WHERE `SID`=" . sql_escape($shift_id) . " + AND `TID`=" . sql_escape($angeltype_id) . " + "); +} + +?>
\ No newline at end of file diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php new file mode 100644 index 00000000..84d14c7a --- /dev/null +++ b/includes/model/Shifts_model.php @@ -0,0 +1,24 @@ +<?php + +/** + * Returns all shifts with needed angeltypes and count of subscribed jobs. + */ +function Shifts() { + $shifts_source = sql_select(" + SELECT `Shifts`.*, `Room`.`RID`, `Room`.`Name` as `room_name` + FROM `Shifts` + JOIN `Room` ON `Room`.`RID` = `Shifts`.`RID` + "); + if ($shifts_source === false) + return false; + + foreach ($shifts_source as &$shift) { + $needed_angeltypes = NeededAngelTypes_by_shift($shift); + if ($needed_angeltypes === false) + return false; + + $shift['angeltypes'] = $needed_angeltypes; + } +} + +?>
\ No newline at end of file |