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 | |
parent | 9a1ffdf198c74466b86129568fb78a677dc56025 (diff) |
api export for all shifts
-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 | ||||
-rw-r--r-- | locale/de_DE.UTF-8/LC_MESSAGES/default.mo | bin | 16110 -> 16110 bytes | |||
-rw-r--r-- | locale/de_DE.UTF-8/LC_MESSAGES/default.po | 4 | ||||
-rw-r--r-- | public/index.php | 28 |
7 files changed, 125 insertions, 15 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 diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo Binary files differindex 53527e92..47a0aa3f 100644 --- a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo +++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.po b/locale/de_DE.UTF-8/LC_MESSAGES/default.po index 5abcab38..64d09ad7 100644 --- a/locale/de_DE.UTF-8/LC_MESSAGES/default.po +++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Engelsystem 2.0\n" -"POT-Creation-Date: 2013-12-03 16:28+0100\n" -"PO-Revision-Date: 2013-12-03 16:28+0100\n" +"POT-Creation-Date: 2013-12-03 16:58+0100\n" +"PO-Revision-Date: 2013-12-03 16:59+0100\n" "Last-Translator: msquare <msquare@notrademark.de>\n" "Language-Team: \n" "Language: de_DE\n" diff --git a/public/index.php b/public/index.php index 60e0068c..56cf6620 100644 --- a/public/index.php +++ b/public/index.php @@ -11,6 +11,8 @@ require_once ('includes/sys_page.php'); require_once ('includes/sys_template.php'); require_once ('includes/model/LogEntries_model.php'); +require_once ('includes/model/NeededAngelTypes_model.php'); +require_once ('includes/model/Shifts_model.php'); require_once ('includes/model/User_model.php'); require_once ('includes/view/Questions_view.php'); @@ -23,7 +25,7 @@ require_once ('includes/helper/message_helper.php'); require_once ('includes/helper/error_helper.php'); require_once ('config/config.default.php'); -if(file_exists('config/config.php')) +if (file_exists('config/config.php')) require_once ('config/config.php'); require_once ('includes/pages/admin_active.php'); @@ -58,10 +60,15 @@ load_auth(); // JSON Authorisierung gewünscht? if (isset($_REQUEST['auth'])) json_auth_service(); - - // Gewünschte Seite/Funktion + +$api_pages = array( + 'stats', + 'shifts_json_export_all' +); + +// Gewünschte Seite/Funktion $p = isset($user) ? "news" : "login"; -if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && ($_REQUEST['p'] == 'stats' || (sql_num_query("SELECT * FROM `Privileges` WHERE `name`='" . sql_escape($_REQUEST['p']) . "' LIMIT 1") > 0))) +if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (in_array($_REQUEST['p'], $api_pages) || (sql_num_query("SELECT * FROM `Privileges` WHERE `name`='" . sql_escape($_REQUEST['p']) . "' LIMIT 1") > 0))) $p = $_REQUEST['p']; $title = $p; @@ -76,6 +83,9 @@ if ($p == "ical") { } elseif ($p == "shifts_json_export") { require_once ('includes/controller/shifts_controller.php'); shifts_json_export_controller(); +} elseif ($p == "shifts_json_export_all") { + require_once ('includes/controller/shifts_controller.php'); + shifts_json_export_all_controller(); } elseif ($p == "stats") { require_once ('includes/pages/guest_stats.php'); guest_stats(); @@ -186,13 +196,13 @@ if (isset($user) && $p != "user_messages") // Hinweis für Engel, die noch nicht angekommen sind if (isset($user) && $user['Gekommen'] == 0) $content = error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."), true) . $content; - -if(isset($user) && $enable_tshirt_size && $user['Size'] == "") + +if (isset($user) && $enable_tshirt_size && $user['Size'] == "") $content = error(_("You need to specify a tshirt size in your settings!"), true) . $content; -if(isset($user) && $user['DECT'] == "") +if (isset($user) && $user['DECT'] == "") $content = error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."), true) . $content; - + // Erzengel Hinweis für unbeantwortete Fragen if (isset($user) && $p != "admin_questions") $content = admin_new_questions() . $content; @@ -208,7 +218,7 @@ echo template_render('../templates/layout.html', array( 'menu' => make_menu(), 'content' => $content, 'header_toolbar' => header_toolbar(), - 'faq_url' => $faq_url + 'faq_url' => $faq_url )); counter(); |