summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Häusler <msquare@notrademark.de>2013-12-09 17:10:07 +0100
committerPhilip Häusler <msquare@notrademark.de>2013-12-09 17:10:07 +0100
commitad5899f02876e9c2e81804d6d3a58988fae8c3db (patch)
tree76f21c9544bb5e2af5cb4d3772c9949f5d694b00
parent9a1ffdf198c74466b86129568fb78a677dc56025 (diff)
api export for all shifts
-rw-r--r--includes/controller/shifts_controller.php32
-rw-r--r--includes/model/NeededAngelTypes_model.php35
-rw-r--r--includes/model/ShiftEntry_model.php17
-rw-r--r--includes/model/Shifts_model.php24
-rw-r--r--locale/de_DE.UTF-8/LC_MESSAGES/default.mobin16110 -> 16110 bytes
-rw-r--r--locale/de_DE.UTF-8/LC_MESSAGES/default.po4
-rw-r--r--public/index.php28
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
index 53527e92..47a0aa3f 100644
--- a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo
+++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo
Binary files differ
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();