summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/controller/api.php219
-rw-r--r--includes/model/AngelType_model.php29
-rw-r--r--includes/model/Message_model.php29
-rw-r--r--includes/model/Room_model.php31
4 files changed, 308 insertions, 0 deletions
diff --git a/includes/controller/api.php b/includes/controller/api.php
new file mode 100644
index 00000000..07a389b1
--- /dev/null
+++ b/includes/controller/api.php
@@ -0,0 +1,219 @@
+<?php
+
+
+/************************************************************************************************
+ * API Documentation
+ ************************************************************************************************
+
+General:
+--------
+All API calls output JSON-encoded data. Client parameters should be passed encoded using JSON in HTTP POST data.
+Every API Request must be contained the Api Key (using JSON parameter 'key') and the Command (using JSON parameter 'cmd').
+
+
+Testing API calls (using curl):
+-------------------------------
+$ curl -d '{"key":"<key>","cmd":"getVersion"}' '<Address>/?p=api'
+
+
+Methods:
+--------
+getVersion
+ Description:
+ Returns API version.
+ Parameters:
+ nothing
+ Return Example:
+ {"version": "1"}
+
+getRoom
+ Description:
+ Returns a list of all Rooms (no id set) or details of a single Room (requested id)
+ Parameters:
+ id (integer) - Room ID
+ Return Example:
+ [{"RID":"1"},{"RID":"2"},{"RID":"3"},{"RID":"4"}]
+ {"RID":"1","Name":"Room Name","Man":null,"FromPentabarf":"","show":"Y","Number":"0"}
+
+getAngelType
+ Description:
+ Returns a list of all Angel Types (no id set) or details of a single Angel Type (requested id)
+ Parameters:
+ id (integer) - Type ID
+ Return Example:
+ [{"id":"8"},{"id":"9"}]
+ {"id":"9","name":"Angeltypes 2","restricted":"0"}
+
+getUser
+ Description:
+ Returns a list of all Users (no id set) or details of a single User (requested id)
+ Parameters:
+ id (integer) - User ID
+ Return Example:
+ [{"UID":"1"},{"UID":"23"},{"UID":"42"}]
+ {"UID":"1","Nick":"admin","Name":"Gates","Vorname":"Bill","Telefon":"","DECT":"","Handy":"","email":"","ICQ":"","jabber":"","Avatar":"115"}
+
+getShift
+ Description:
+ Returns a list of all Shifte (no id set, filter is optional) or details of a single Shift (requested id)
+ Parameters:
+ id (integer) - Shift ID
+ filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
+ filterTask (Array of integer) - Array if Task (optional, for list request)
+ filterOccupancy (integer) - Occupancy state: (optional, for list request)
+ 1 occupied
+ 2 free
+ 3 occupied and free
+ Return Example:
+ [{"SID":"1"},{"SID":"2"},{"SID":"3"}]
+ {"SID":"1","start":"1388185200","end":"1388199600","RID":"1","name":"Shift 1","URL":null,"PSID":null}
+
+getMessage
+ Description:
+ Returns a list of all Messages (no id set) or details of a single Message (requested id)
+ Parameters:
+ id (integer) - Message ID
+ Return Example:
+ [{"id":"1"},{"id":"2"},{"id":"3"}]
+ {"id":"3","Datum":"1388247583","SUID":"23","RUID":"42","isRead":"N","Text":"message text"}
+
+
+************************************************************************************************/
+
+
+/**
+ * General API Controller
+ */
+function api_controller() {
+ global $DataJson, $_REQUEST;
+
+ // decode JSON request
+ $input = file_get_contents("php://input");
+ $input = json_decode($input, true);
+ $_REQUEST = $input;
+
+ // get API KEY
+ if (isset($_REQUEST['key']) && preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key']))
+ $key = $_REQUEST['key'];
+ else
+ die("Missing key.");
+
+ // check API key
+ $user = User_by_api_key($key);
+ if ($user === false)
+ die("Unable to find user.");
+ if ($user == null)
+ die("Key invalid.");
+
+ // get command
+ $cmd='';
+ if (isset($_REQUEST['cmd']) )
+ $cmd = strtolower( $_REQUEST['cmd']);
+
+ // decode command
+ switch( $cmd) {
+ case 'echo':
+ $DataJson = $input;
+ break;
+ case 'getversion':
+ getVersion();
+ break;
+ case 'getroom':
+ getRoom();
+ break;
+ case 'getangeltype':
+ getAngelType();
+ break;
+ case 'getuser':
+ getUser();
+ break;
+ case 'getshift':
+ getShift();
+ break;
+ case 'getmessage':
+ getMessage();
+ break;
+ default:
+ die("Unknown Command (". $cmd. ")");
+ }
+
+
+ header("Content-Type: application/json; charset=utf-8");
+ echo json_encode($DataJson);
+ die();
+}
+
+/**
+ * Get Version of API
+ */
+function getVersion(){
+ global $DataJson;
+ $DataJson['Version'] = 1;
+}
+
+/**
+ * Get Room
+ */
+function getRoom(){
+ global $DataJson, $_REQUEST;
+
+ if (isset($_REQUEST['id']) ) {
+ $DataJson = mRoom( $_REQUEST['id']);
+ } else {
+ $DataJson = mRoomList();
+ }
+}
+
+/**
+ * Get AngelType
+ */
+function getAngelType(){
+ global $DataJson, $_REQUEST;
+
+ if (isset($_REQUEST['id']) ) {
+ $DataJson = mAngelType( $_REQUEST['id']);
+ } else {
+ $DataJson = mAngelTypeList();
+ }
+}
+
+/**
+ * Get User
+ */
+function getUser(){
+ global $DataJson, $_REQUEST;
+
+ if (isset($_REQUEST['id']) ) {
+ $DataJson = mUser_Limit( $_REQUEST['id']);
+ } else {
+ $DataJson = mUserList();
+ }
+}
+
+/**
+ * Get Shift
+ */
+function getShift(){
+ global $DataJson, $_REQUEST;
+
+ if (isset($_REQUEST['id']) ) {
+ $DataJson = mShift( $_REQUEST['id']);
+ } else {
+ $DataJson = mShiftList();
+ }
+}
+
+/**
+ * Get Message
+ */
+function getMessage(){
+ global $DataJson, $_REQUEST;
+
+ if (isset($_REQUEST['id']) ) {
+ $DataJson = mMessage( $_REQUEST['id']);
+ } else {
+ $DataJson = mMessageList();
+ }
+}
+
+?>
diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php
new file mode 100644
index 00000000..49d1c702
--- /dev/null
+++ b/includes/model/AngelType_model.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Returns AngelType id array
+ */
+function mAngelTypeList() {
+ $angelType_source = sql_select("SELECT `id` FROM `AngelTypes`");
+ if ($angelType_source === false)
+ return false;
+ if (count($angelType_source) > 0)
+ return $angelType_source;
+ return null;
+}
+
+/**
+ * Returns angelType by id.
+ *
+ * @param $id angelType ID
+ */
+function mAngelType($id) {
+ $angelType_source = sql_select("SELECT * FROM `AngelTypes` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
+ if ($angelType_source === false)
+ return false;
+ if (count($angelType_source) > 0)
+ return $angelType_source[0];
+ return null;
+}
+
+?> \ No newline at end of file
diff --git a/includes/model/Message_model.php b/includes/model/Message_model.php
new file mode 100644
index 00000000..0141208b
--- /dev/null
+++ b/includes/model/Message_model.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Returns Message id array
+ */
+function mMessageList() {
+ $message_source = sql_select("SELECT `id` FROM `Messages`");
+ if ($message_source === false)
+ return false;
+ if (count($message_source) > 0)
+ return $message_source;
+ return null;
+}
+
+/**
+ * Returns message by id.
+ *
+ * @param $id message ID
+ */
+function mMessage($id) {
+ $message_source = sql_select("SELECT * FROM `Messages` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
+ if ($message_source === false)
+ return false;
+ if (count($message_source) > 0)
+ return $message_source[0];
+ return null;
+}
+
+?> \ No newline at end of file
diff --git a/includes/model/Room_model.php b/includes/model/Room_model.php
new file mode 100644
index 00000000..fea241a6
--- /dev/null
+++ b/includes/model/Room_model.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Returns room id array
+ */
+function mRoomList() {
+ $room_source = sql_select("SELECT `RID` FROM `Room`");
+ if ($room_source === false)
+ return false;
+ if (count($room_source) > 0)
+ return $room_source;
+ return null;
+}
+
+
+/**
+ * Returns room by id.
+ *
+ * @param $id RID
+ */
+function mRoom($id) {
+ $room_source = sql_select("SELECT * FROM `Room` WHERE `RID`=" . sql_escape($id) . " LIMIT 1");
+ if ($room_source === false)
+ return false;
+ if (count($room_source) > 0)
+ return $room_source[0];
+ return null;
+}
+
+
+?>