Re #11 - start working on an api

Also some locale negotiator bugfixes & it is now possible to serialize Service and Incident classess to JSON
This commit is contained in:
Vojtěch Sajdl 2018-04-13 21:31:03 +02:00
parent 416070ba5f
commit 9f7e15fcd1
No known key found for this signature in database
GPG Key ID: 082BC82518E5F32E
7 changed files with 88 additions and 8 deletions

View File

@ -1,7 +1,7 @@
# Server status page # Server status page
![screenshot](https://status.trucksbook.eu/img/screenshot.png) ![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? ## 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. Simply put the files on your server and access it from your browser. There will be a simple install dialog waiting for you.

11
api/incidents.php Normal file
View File

@ -0,0 +1,11 @@
<?php
if (!file_exists("../config.php"))
{
header("Location: ../");
}
else{
require_once("../config.php");
require_once("../classes/constellation.php");
}

40
api/status.php Normal file
View File

@ -0,0 +1,40 @@
<?php
if (!file_exists("../config.php"))
{
header("Location: ../");
}
else{
require_once("../config.php");
require_once("../classes/constellation.php");
if (!isset($_GET['id']))
{
$array = $constellation->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);
}
}

View File

@ -69,7 +69,7 @@ class Constellation
* @param boolean $admin * @param boolean $admin
* @return array of services * @return array of services
*/ */
public function render_status($admin = 0){ public function render_status($admin = false, $heading = true){
global $mysqli; global $mysqli;
$query = $mysqli->query("SELECT id, name FROM services"); $query = $mysqli->query("SELECT id, name FROM services");
@ -93,9 +93,11 @@ class Constellation
$array[] = new Service($result['id'], $result['name']); $array[] = new Service($result['id'], $result['name']);
} }
} }
if ($heading)
{
echo Service::current_status($array); echo Service::current_status($array);
} }
}
else{ else{
$array[] = new Service(0, _("No services"), -1); $array[] = new Service(0, _("No services"), -1);
} }

View File

@ -2,7 +2,7 @@
/** /**
* Class for creating and rendering an incident * Class for creating and rendering an incident
*/ */
class Incident class Incident implements JsonSerializable
{ {
private $id; private $id;
private $date; private $date;
@ -183,4 +183,16 @@ class Incident
</article> </article>
<?php <?php
} }
public function jsonSerialize() {
return [
"id" => $this->id,
"date" => $this->date,
"end_date" => $this->end_date,
"text" => $this->text,
"type" => $this->type,
"title" => $this->title,
"username" => $this->username
];
}
} }

View File

@ -279,6 +279,8 @@ class LocaleNegotiator
$best_match = false; $best_match = false;
//So we have also lang code as value //So we have also lang code as value
$accepted_langs = array_flip($this->accepted_langs); $accepted_langs = array_flip($this->accepted_langs);
global $lang;
foreach ($langs as $lang) { foreach ($langs as $lang) {
if (strlen($lang)>2){ if (strlen($lang)>2){
if (in_array($lang, $accepted_langs)){ if (in_array($lang, $accepted_langs)){
@ -292,7 +294,9 @@ class LocaleNegotiator
}); });
if (count($possible)){ if (count($possible)){
$best_match = $possible[0]; foreach ($possible as $value) {
$best_match = $value;
}
break; break;
} }
} }

View File

@ -2,7 +2,7 @@
/** /**
* Class for managing services * Class for managing services
*/ */
class Service class Service implements JsonSerializable
{ {
private $id; private $id;
private $name; private $name;
@ -167,4 +167,15 @@ class Service
</div> </div>
<?php <?php
} }
public function jsonSerialize() {
global $statuses;
return [
"id" => $this->id,
"name" => $this->name,
"status" => $this->status,
"status_string" => $statuses[$this->status]
];
}
} }