From 9f7e15fcd1d900108cbb0b3cad4bdc5ecf8b741b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Sajdl?= Date: Fri, 13 Apr 2018 21:31:03 +0200 Subject: [PATCH] Re #11 - start working on an api Also some locale negotiator bugfixes & it is now possible to serialize Service and Incident classess to JSON --- README.md | 2 +- api/incidents.php | 11 ++++++++++ api/status.php | 40 +++++++++++++++++++++++++++++++++++ classes/constellation.php | 8 ++++--- classes/incident.php | 14 +++++++++++- classes/locale-negotiator.php | 6 +++++- classes/service.php | 15 +++++++++++-- 7 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 api/incidents.php create mode 100644 api/status.php diff --git a/README.md b/README.md index 68a53f6..ceb367e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Server status page ![screenshot](https://status.trucksbook.eu/img/screenshot.png) -Very simple server status page written in PHP that can run on **PHP 5.3+** - even on **shared webhosting**. Because why waste your money on another server (or host on a server that you might want to do maintenance on), when you can use cheap webhosting? +Very simple server status page written in PHP that can run on **PHP 5.4+** - even on **shared webhosting**. Because why waste your money on another server (or host on a server that you might want to do maintenance on), when you can use cheap webhosting? ## How do I install this thing? Simply put the files on your server and access it from your browser. There will be a simple install dialog waiting for you. diff --git a/api/incidents.php b/api/incidents.php new file mode 100644 index 0000000..569e41c --- /dev/null +++ b/api/incidents.php @@ -0,0 +1,11 @@ +render_status(true, false); + echo json_encode($array); + }else{ + $query = $mysqli->prepare("SELECT name FROM services WHERE id=?"); + $query->bind_param("i", $_GET['id']); + $query->execute(); + $result = $query->get_result()->fetch_assoc(); + if (!count($result)) + { + die(json_encode(["error" => _("Service does not exist!")])); + } + + $sql = $mysqli->prepare("SELECT type FROM services_status INNER JOIN status ON services_status.status_id = status.id WHERE service_id = ? AND `time` <= ? AND (`end_time` >= ? OR `end_time`=0) ORDER BY `time` DESC LIMIT 1"); + + $sql->bind_param("iii", $id, $timestamp, $timestamp); + $sql->execute(); + $tmp = $sql->get_result(); + if ($tmp->num_rows) + { + $service = new Service($_GET['id'], $result['name'], $tmp->fetch_assoc()['type']); + } + else{ + $service = new Service($_GET['id'], $result['name']); + } + + echo json_encode($service); + } +} \ No newline at end of file diff --git a/classes/constellation.php b/classes/constellation.php index 7b9e964..6f01fa4 100644 --- a/classes/constellation.php +++ b/classes/constellation.php @@ -69,7 +69,7 @@ class Constellation * @param boolean $admin * @return array of services */ - public function render_status($admin = 0){ + public function render_status($admin = false, $heading = true){ global $mysqli; $query = $mysqli->query("SELECT id, name FROM services"); @@ -93,8 +93,10 @@ class Constellation $array[] = new Service($result['id'], $result['name']); } } - - echo Service::current_status($array); + if ($heading) + { + echo Service::current_status($array); + } } else{ $array[] = new Service(0, _("No services"), -1); diff --git a/classes/incident.php b/classes/incident.php index 11d8157..b1b6344 100644 --- a/classes/incident.php +++ b/classes/incident.php @@ -2,7 +2,7 @@ /** * Class for creating and rendering an incident */ -class Incident +class Incident implements JsonSerializable { private $id; private $date; @@ -183,4 +183,16 @@ class Incident $this->id, + "date" => $this->date, + "end_date" => $this->end_date, + "text" => $this->text, + "type" => $this->type, + "title" => $this->title, + "username" => $this->username + ]; + } } \ No newline at end of file diff --git a/classes/locale-negotiator.php b/classes/locale-negotiator.php index 138ac2e..bcd1ccb 100644 --- a/classes/locale-negotiator.php +++ b/classes/locale-negotiator.php @@ -279,6 +279,8 @@ class LocaleNegotiator $best_match = false; //So we have also lang code as value $accepted_langs = array_flip($this->accepted_langs); + + global $lang; foreach ($langs as $lang) { if (strlen($lang)>2){ if (in_array($lang, $accepted_langs)){ @@ -292,7 +294,9 @@ class LocaleNegotiator }); if (count($possible)){ - $best_match = $possible[0]; + foreach ($possible as $value) { + $best_match = $value; + } break; } } diff --git a/classes/service.php b/classes/service.php index 87d28f9..25a0972 100644 --- a/classes/service.php +++ b/classes/service.php @@ -2,7 +2,7 @@ /** * Class for managing services */ -class Service +class Service implements JsonSerializable { private $id; private $name; @@ -167,4 +167,15 @@ class Service $this->id, + "name" => $this->name, + "status" => $this->status, + "status_string" => $statuses[$this->status] + ]; + } + +} \ No newline at end of file