mirror of
https://github.com/ShaYmez/FreeSTAR-Status-Engine.git
synced 2024-11-18 02:01:47 -05:00
266 lines
7.9 KiB
PHP
266 lines
7.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Class for managing services
|
|
*/
|
|
class Service implements JsonSerializable
|
|
{
|
|
private $id;
|
|
private $name;
|
|
private $description;
|
|
private $group_name;
|
|
private $status;
|
|
|
|
/**
|
|
* Constructs service from its data.
|
|
* @param int $id service ID
|
|
* @param String $name service name
|
|
* @param String $descriotion service description for tooltip
|
|
* @param int $status current service status
|
|
*/
|
|
function __construct($id, $name, $description = null, $group_name = '', $status = 3)
|
|
{
|
|
//TODO: Maybe get data from ID?
|
|
$this->id = $id;
|
|
$this->name = $name;
|
|
$this->description = $description;
|
|
$this->group_name = $group_name;
|
|
$this->status = $status;
|
|
}
|
|
|
|
/**
|
|
* Returns status of this service
|
|
* @return int status
|
|
*/
|
|
public function get_status()
|
|
{
|
|
return $this->status;
|
|
}
|
|
|
|
/**
|
|
* Returns id of this service
|
|
* @return int id
|
|
*/
|
|
public function get_id()
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
* Returns name of this service
|
|
* @return String name
|
|
*/
|
|
public function get_name()
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* Returns description of this service
|
|
* @return String description
|
|
*/
|
|
public function get_description()
|
|
{
|
|
return $this->description;
|
|
}
|
|
|
|
/**
|
|
* Processes submitted form and adds service unless problem is encountered,
|
|
* calling this is possible only for admin or higher rank. Also checks requirements
|
|
* for char limits.
|
|
* @return void
|
|
*/
|
|
public static function add()
|
|
{
|
|
global $user, $message;
|
|
if (strlen($_POST['service']) > 50) {
|
|
$message = _("Service name is too long! Character limit is 50");
|
|
return;
|
|
} else if (strlen(trim($_POST['service'])) == 0) {
|
|
$message = _("Please enter name!");
|
|
return;
|
|
}
|
|
|
|
if ($user->get_rank() <= 1) {
|
|
global $mysqli;
|
|
$name = htmlspecialchars($_POST['service']);
|
|
$description = htmlspecialchars($_POST['description']);
|
|
$group_id = $_POST['group_id'];
|
|
$stmt = $mysqli->prepare("INSERT INTO services ( name, description, group_id ) VALUES ( ?, ?, ? )");
|
|
$stmt->bind_param("ssi", $name, $description, $group_id);
|
|
$stmt->execute();
|
|
$stmt->get_result();
|
|
header("Location: " . WEB_URL . "/admin/?do=settings");
|
|
} else {
|
|
$message = _("You don't have the permission to do that!");
|
|
}
|
|
}
|
|
/**
|
|
* Processes submitted form and adds service unless problem is encountered,
|
|
* calling this is possible only for admin or higher rank. Also checks requirements
|
|
* for char limits.
|
|
* @return void
|
|
*/
|
|
public static function edit()
|
|
{
|
|
global $user, $message;
|
|
if (strlen($_POST['service']) > 50) {
|
|
$message = _("Service name is too long! Character limit is 50");
|
|
return;
|
|
} else if (strlen(trim($_POST['service'])) == 0) {
|
|
$message = _("Please enter name!");
|
|
return;
|
|
}
|
|
|
|
if ($user->get_rank() <= 1) {
|
|
global $mysqli;
|
|
$service_id = $_POST["id"];
|
|
$name = htmlspecialchars($_POST['service']);
|
|
$description = htmlspecialchars($_POST["description"]);
|
|
$group_id = $_POST["group_id"];
|
|
$stmt = $mysqli->prepare("UPDATE services SET name=?, description=?, group_id=? WHERE id = ?");
|
|
$stmt->bind_param("ssii", $name, $description, $group_id, $service_id);
|
|
$stmt->execute();
|
|
$stmt->get_result();
|
|
header("Location: " . WEB_URL . "/admin/?do=settings");
|
|
} else {
|
|
$message = _("You don't have the permission to do that!");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deletes this service - first checks if user has permission to do that.
|
|
* @return void
|
|
*/
|
|
public static function delete()
|
|
{
|
|
global $user, $message;
|
|
if ($user->get_rank() <= 1) {
|
|
global $mysqli;
|
|
$id = $_GET['delete'];
|
|
|
|
$stmt = $mysqli->prepare("SELECT status_id as status, (SELECT count(*) FROM services_status as s WHERE s.status_id=status) as count FROM services_status WHERE service_id = ? GROUP BY status");
|
|
$stmt->bind_param("i", $id);
|
|
$stmt->execute();
|
|
$query = $stmt->get_result();
|
|
|
|
while ($res = $query->fetch_assoc()) {
|
|
if ($res['count'] == 1) {
|
|
Incident::delete($res['status']);
|
|
}
|
|
}
|
|
|
|
$stmt = $mysqli->prepare("DELETE FROM services WHERE id = ?");
|
|
$stmt->bind_param("i", $id);
|
|
$stmt->execute();
|
|
$query = $stmt->get_result();
|
|
|
|
$stmt = $mysqli->prepare("DELETE FROM services_status WHERE service_id = ?");
|
|
$stmt->bind_param("i", $id);
|
|
$stmt->execute();
|
|
$query = $stmt->get_result();
|
|
|
|
header("Location: " . WEB_URL . "/admin/?do=settings");
|
|
} else {
|
|
$message = _("You don't have the permission to do that!");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Renders current status for services from passed array of services.
|
|
* @param Service[] $array array of services
|
|
* @return void
|
|
*/
|
|
public static function current_status($array)
|
|
{
|
|
global $all, $some, $classes;
|
|
$statuses = array(0, 0, 0, 0);
|
|
$worst = 5;
|
|
|
|
foreach ($array as $service) {
|
|
if ($service->status < $worst) {
|
|
$worst = $service->get_status();
|
|
}
|
|
$statuses[$service->get_status()]++;
|
|
}
|
|
|
|
echo '<div id="status-big" class="alert-' . $classes[$worst] . '">';
|
|
|
|
if ($statuses[$worst] == count($array)) {
|
|
echo $all[$worst];
|
|
} else {
|
|
echo $some[$worst];
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
/**
|
|
* Renders this service.
|
|
* @param $boolGroup set to true if the groups name is to be rendered
|
|
* @return void
|
|
*/
|
|
public function render()
|
|
{
|
|
global $statuses;
|
|
global $classes;
|
|
static $arrCompletedGroups = array();
|
|
//static $boolClosed;
|
|
static $boolOpened;
|
|
|
|
// Check if previous ul has been opened, and if a empty/new group is being
|
|
// render_header, close the UL first.
|
|
if ($boolOpened) {
|
|
if (empty($this->group_name) || !in_array($this->group_name, $arrCompletedGroups)) {
|
|
echo '</ul>';
|
|
$boolOpened = false;
|
|
}
|
|
}
|
|
|
|
// If no group exist or group is new, start a new UL
|
|
if (!empty($this->group_name) && !in_array($this->group_name, $arrCompletedGroups)) {
|
|
echo '<ul class="list-group components mt-3">';
|
|
//echo '<ul class="platforms list-group mb-2">';
|
|
// Render the group status if it exists
|
|
echo '<li class="list-group-item list-group-item-' . $classes[$this->status] . ' group-name"><span><i class="fas fa-folder-open"></i></span> ' . $this->group_name . '<div class="status text-' . $classes[$this->status] . '">' . _($statuses[$this->status]) . '</div></li>';
|
|
//echo '<li class="cist-group-item d-flex flex-row justify-content-between platform list-group-item-action py-0 expanded" role="button">' . $this->group_name .'<div class="status '. $classes[$this->status] .'"'. _($statuses[$this->status]).'</div></li>';
|
|
$arrCompletedGroups[] = $this->group_name;
|
|
$boolOpened = true;
|
|
}
|
|
|
|
if (empty($this->group_name)) {
|
|
echo '<ul class="list-group components">';
|
|
|
|
// echo '<ul class="platforms list-group mb-2">';
|
|
$boolFinish = true;
|
|
}
|
|
|
|
// Render the service status
|
|
echo '<div>';
|
|
echo '<li class="list-group-item sub-component"><strong>' . $this->name . '</strong>';
|
|
//echo '<li class="list-group-item d-flex flex-columns justify-content-between><span>+</span><h3 class="py-2 my-0 flex-fill expanded">' . $this->name . '</h3>';
|
|
if (!empty($this->description)) {
|
|
echo '<a class="desc-tool-tip" data-toggle="tooltip" data-placement="top" title="' . $this->description . '"> <span><i class="fas fa-question"></i></span></a>';
|
|
}
|
|
if ($this->status != -1) { ?><div class="status text-<?php echo $classes[$this->status]; ?>"><?php echo _($statuses[$this->status]); ?></div>
|
|
<?php
|
|
}
|
|
echo '</li>';
|
|
if (isset($boolFinish) && $boolFinish) {
|
|
echo '</ul>';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
|
|
public function jsonSerialize()
|
|
{
|
|
global $statuses;
|
|
return [
|
|
"id" => $this->id,
|
|
"name" => $this->name,
|
|
"description" => $this->description,
|
|
"status" => $this->status,
|
|
"status_string" => $statuses[$this->status]
|
|
];
|
|
}
|
|
}
|