mirror of
https://gitlab.com/JKANetwork/CheckServer.git
synced 2026-02-19 03:31:34 +01:00
First commit. Check if all is uploaded well.
This commit is contained in:
13
assets/html/footer.twig
Executable file
13
assets/html/footer.twig
Executable file
@@ -0,0 +1,13 @@
|
||||
<footer class="main-footer">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<p>JKA Network © 2017-actualidad. Versión 0.1 Alpha</p>
|
||||
</div>
|
||||
<div class="col-sm-6 text-right">
|
||||
<p>Design by <a href="https://bootstrapious.com" class="external">Bootstrapious</a></p>
|
||||
<!-- Please do not remove the backlink to us unless you support further theme's development at https://bootstrapious.com/donate. It is part of the license conditions. Thank you for understanding :)-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
42
assets/html/header.twig
Executable file
42
assets/html/header.twig
Executable file
@@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
|
||||
<meta charset="utf-8">
|
||||
<title>CheckServer - Estado de los servicios</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
|
||||
<!-- Fonts CSS-->
|
||||
<link rel="stylesheet" href="assets/fonts/styles.css">
|
||||
|
||||
<script src="assets/js/Chart.min.js"></script> <!-- For charts -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="page forms-page" style="width:100%;">
|
||||
<!-- navbar-->
|
||||
<header class="header">
|
||||
<nav class="navbar">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-holder d-flex align-items-center justify-content-between">
|
||||
<div class="navbar-header"><a href="index.php" class="navbar-brand">
|
||||
<div class="brand-text hidden-sm-down"><span>CheckServer</span></div></a></div>
|
||||
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
|
||||
<li class="nav-item"><a href="login.php" class="nav-link logout">Entrar<i class="icon-sign-in"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="breadcrumb-holder">
|
||||
<div class="container-fluid">
|
||||
<ul class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="index.html">Inicio</a></li>
|
||||
<li class="breadcrumb-item active">Estado</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
149
assets/html/indexpage.twig
Executable file
149
assets/html/indexpage.twig
Executable file
@@ -0,0 +1,149 @@
|
||||
{% include 'header.twig' %}
|
||||
<!-- Pages -->
|
||||
<section>
|
||||
<div class="col-lg-10 mhcenter">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">{{T_.statdif1}}</h2>
|
||||
</div>
|
||||
<div class="card-block">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<!--<th>#</th>-->
|
||||
<th>{{T_.name}}</th>
|
||||
<th>{{T_.status}}</th>
|
||||
<th>{{T_.last_check}}</th>
|
||||
<th>{{T_.last_err}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for check in checks %}
|
||||
{% if check.ID_G != beforegroup %}
|
||||
<tr>
|
||||
<th colspan="4" class="thgrp">{{check.nameGroup}}</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set beforegroup = check.ID_G %}
|
||||
<tr>
|
||||
<td>{{check.name}}</td>
|
||||
|
||||
|
||||
{# "Switch" type #}
|
||||
{% if check.ID_TC == 1 or check.ID_TC == 2 or check.ID_TC == 4 %} {# Ping, HttpCode, SQL DB #}
|
||||
<td>
|
||||
{#IF/SWITCH status text#}
|
||||
{%if check.status == 0%}
|
||||
<span class='green' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_right}}</span>
|
||||
{%elseif check.status == 1%}
|
||||
<span class='blue' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_lproblems}}</span>
|
||||
{%elseif check.status == 2%}
|
||||
<span class='orange' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_problems}}</span>
|
||||
{%elseif check.status == 3%}
|
||||
<span class='red' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_outofserv}}</span>
|
||||
{%elseif check.status == 4%}
|
||||
<span class='blue' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_maintenance}}</span>
|
||||
{%else%}
|
||||
<span class='grey' data-tooltip='Type of check: {{check.nameCheck}}' data-tooltip-position='top'>{{T_.status_empty}}</span>
|
||||
{%endif%}
|
||||
{#END IF/SWITCH#}
|
||||
|
||||
</td>
|
||||
{% if check.status is defined %}{#Only if records exists#}
|
||||
<td>
|
||||
{{check.dateLastChk}} -
|
||||
{% if check.failedLastChk == 0 %}
|
||||
<span style="color:green">{{T_.status_right}}</span>
|
||||
{% else %}
|
||||
<span style="color:red">{{T_.failed}}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
{%else%}
|
||||
<td>Dame tiempo para recopilar estadísticas</td>
|
||||
{%endif%}
|
||||
<td>
|
||||
{%if check.dateLastErr is not null%}
|
||||
{{check.dateLastErr}}
|
||||
{%else%}
|
||||
{{T_.no_errs}}
|
||||
{%endif%}
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
{% if check.ID_TC == 3 %}
|
||||
<td colspan="3">
|
||||
<div style="width:170px;height:90px;">
|
||||
<canvas id="visits{{ check.ID_C }}"></canvas>
|
||||
</div>
|
||||
<script>
|
||||
var visits{{ check.ID_C }} = document.getElementById("visits{{ check.ID_C }}").getContext("2d");
|
||||
var Chart{{ check.ID_C }} = new Chart(visits{{ check.ID_C }}, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: [{{ check.dateArray | raw}}],
|
||||
datasets: [
|
||||
{
|
||||
label: "Visitas",
|
||||
backgroundColor: "rgba(100,176,243,1)", // Color del sombreado de la grafica en ese lugar
|
||||
borderColor: "#4ba4f3", // Colores de la linea y punteado
|
||||
pointBorderColor: "#4ba4f3",
|
||||
pointBackgroundColor: "#fff",
|
||||
data: [{{ check.visitsArray }}],
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
legend: {display: false},
|
||||
scales:{
|
||||
yAxes:[{ticks:{beginAtZero: true}}]
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
{# Fin Switch #}
|
||||
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div style="margin-top: 3em;"></div>
|
||||
|
||||
<!-- Noticias -->
|
||||
<section>
|
||||
<div class="col-lg-10" style="margin: 0 auto;">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Noticias sobre los servicios</h2>
|
||||
</div>
|
||||
<div class="card-block">
|
||||
{# {% if user.nick != "" %}
|
||||
<h3>Añadir incidencia: (Usa Markdown)</h3>
|
||||
<form action="index.php?do=addincident" method="POST">
|
||||
<textarea name="text" style="width:90%;height:150px;"></textarea>
|
||||
<br/><button type="submit">Enviar</button>
|
||||
</form>
|
||||
{% endif %} #}
|
||||
{% for onenews in news %}
|
||||
<h3>Day {{ onenews.day }}</h3>
|
||||
<div class="incident">
|
||||
{{ onenews.text | raw }}
|
||||
|
||||
{% if user.nick != "" %}
|
||||
<hr/>
|
||||
<button type="submit" onclick="window.location.href='?do=delincident&ID_Inc={{ incident.ID_Inc }}">Delete</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% include 'footer.twig' %}
|
||||
122
assets/html/install.twig
Executable file
122
assets/html/install.twig
Executable file
@@ -0,0 +1,122 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
|
||||
<meta charset="utf-8">
|
||||
<title>CheckServer - Installer</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
|
||||
<!-- Fonts CSS-->
|
||||
<link rel="stylesheet" href="assets/fonts/styles.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="page forms-page" style="width:100%;">
|
||||
<!-- navbar-->
|
||||
<header class="header">
|
||||
<nav class="navbar">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-holder d-flex align-items-center justify-content-between">
|
||||
<div class="navbar-header">
|
||||
<div class="brand-text hidden-sm-down"><span style="color:white;">CheckServer</span></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
|
||||
<section class="forms">
|
||||
<div class="container-fluid">
|
||||
<header>
|
||||
<h1 class="h3 display">CheckServer installer</h1>
|
||||
</header>
|
||||
|
||||
{% if part != 2 %}
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-12">
|
||||
<p>Welcome to the "one-minute" installer of CheckServer. We only need the lang and admin data to configure the site and take the control to you</p>
|
||||
</div>
|
||||
</div>
|
||||
<form class="form-horizontal" method="POST" action="?page=install">
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Language</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="lang">
|
||||
<option value="es">Spanish</option>
|
||||
<option value="en">English</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Site name</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="websiteName" type="text" placeholder="Nombre del sitio." value="CheckServer" class="form-control form-control-success"><small class="form-text">For "naming" CheckServer</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Admin username</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="username" type="text" placeholder="Nombre de usuario" value="" class="form-control form-control-success"><small class="form-text">Your username</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="passw1" type="password" placeholder="" value="" class="form-control form-control-success"><small class="form-text">Your password</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Repeat password</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="passw2" type="password" placeholder="" value="" class="form-control form-control-success"><small class="form-text">Your password, again.</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-10 offset-sm-2">
|
||||
<button type="submit" class="btn btn-primary">Install</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{%else%}
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-12">
|
||||
<p>Installed!<br/>Well, not all, there is one manual step left to you. You have to
|
||||
configure your cron service (If using cpanel is in cron jobs, in standard linux see distro cron).
|
||||
</p>
|
||||
<p>You have to create a cron that executes using php the file cronchk.php that is here.<br/>
|
||||
Example using cron of Linux:</p>
|
||||
<pre>
|
||||
*/5 * * * * root cd /srv/http/checkserver/ && /usr/bin/php -f cronchk.php >/dev/null 2>&1
|
||||
</pre>
|
||||
<p>In this example, cron runs every 5 mins, you can adjust it, but I do not recommend less than 3 mins if you have somewhat much checks, it can slow server.</p>
|
||||
<p>Go to <a href="index.php">home</a> to start using CheckServer! Welcome</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{%endif%}
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
32
assets/html/login.twig
Executable file
32
assets/html/login.twig
Executable file
@@ -0,0 +1,32 @@
|
||||
{% include 'header.twig' %}
|
||||
<section>
|
||||
<div class="col-lg-10 mhcenter">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Inicio de sesión de CheckServer</h2>
|
||||
</div>
|
||||
<div class="card-block">
|
||||
{% if status == 'error' %}
|
||||
<h2>Datos incorrectos, vuelva a intentarlo</h2>
|
||||
{% endif %}
|
||||
<form id="form1" method="post" action="login.php">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="textT">Nick:</td>
|
||||
<td style="padding-left:10px;"><input name="nick" type="text" id="nick"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="textT">Contraseña:</td>
|
||||
<td style="padding-left:10px;"><input name="pass" type="password" id="pass" required="required"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td><td><button type="submit" class="btn">Enviar</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
165
assets/html/panel/p_addedit.twig
Executable file
165
assets/html/panel/p_addedit.twig
Executable file
@@ -0,0 +1,165 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Add/edit form -->
|
||||
<section class="forms">
|
||||
<div class="container-fluid">
|
||||
<header>
|
||||
{%if type == 'edit' %}
|
||||
<h1 class="h3 display">Editando {{check.name}}</h1>
|
||||
{%else%}
|
||||
<h1 class="h3 display">Nuevo check</h1>
|
||||
{%endif%}
|
||||
</header>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<form class="form-horizontal" method="POST"
|
||||
{%if type == 'edit'%}
|
||||
action="?page=updatecheck&ID_C={{check.ID_C}}"
|
||||
{%else%}
|
||||
action="?page=savenewcheck"
|
||||
{%endif%}>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Nombre</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" placeholder="Nombre del check" value="{{check.name}}" class="form-control form-control-success"><small class="form-text">Nombre del checkeo.</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2 form-control-label">Grupo</label>
|
||||
<div class="col-sm-10 select">
|
||||
<select name="group" id="group" class="form-control">
|
||||
{% for group in groups %}
|
||||
<option value="{{group.ID_G}}" {%if group.ID_G == check.ID_G %} selected="selected" {%endif%}>
|
||||
{{group.name}}
|
||||
</option>
|
||||
{%endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2 form-control-label">Tipo de check</label>
|
||||
<div class="col-sm-10 select">
|
||||
<select name="tcheck" id="tcheck" class="form-control" onchange="showOptData(this);">
|
||||
{% for tchk in tchecks %}
|
||||
<option value="{{tchk.ID_TC}}" {%if tchk.ID_TC == check.ID_TC %} selected="selected" {%endif%}>
|
||||
{{tchk.name}}
|
||||
</option>
|
||||
{%endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Aquí empiezan los campos "opcionales" dependiendo del tipo de check #}
|
||||
{# Sacar variables #}
|
||||
{% if check.ID_TC == 1%}
|
||||
{% set t1 = check.URL|split(':') %}
|
||||
{% elseif check.ID_TC == 2%}
|
||||
{% set t2_url = check.URL %}
|
||||
{% set t2_code = check.TCParam %}
|
||||
{% elseif check.ID_TC == 4%}
|
||||
{% set t4_url = check.URL %}
|
||||
{% endif %}
|
||||
|
||||
{# Trozos de formulario #}
|
||||
|
||||
{# Tipo 1 - Ping IP #}
|
||||
<div id="t1" style="display:none;">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">IP</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="t1url" type="text" placeholder="URL" value="{{t1[0]}}" class="form-control form-control-success"><small class="form-text">IP/Web a hacer "ping".</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Puerto</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="t1port" type="text" placeholder="Puerto" value="{{t1[1]}}" class="form-control form-control-success"><small class="form-text">Puerto que comprobar. Por defecto es el 80/www.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Tipo 2 - HttpCode (WWW) #}
|
||||
<div id="t2" style="display:none;">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">URL</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="t2url" type="text" placeholder="URL" value="{{t2_url}}" class="form-control form-control-success"><small class="form-text">URL a la que comprobar si funciona o no.</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Codigo esperado</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="t2code" type="text" placeholder="Puerto" value="{{t2_code}}" class="form-control form-control-success"><small class="form-text">Codigo esperado, si no se pone nada, es el 200 (Ok)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Tipo 3 - Visit Counter #}
|
||||
<div id="t3" style="display:none;">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2"></label>
|
||||
<div class="col-sm-10">
|
||||
<p><small class="form-text">Al aceptar, en las opciones del check, está el código HTML para añadir a la web</small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Tipo 4 - Database #}
|
||||
<div id="t4" style="display:none;">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Lugar donde estará el fichero PHP de la comprobación en tu servidor</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="t4url" type="text" placeholder="URL" value="{{t4_url}}" class="form-control form-control-success"><small class="form-text">Aquí debes poner la URL completa al fichero php que se te dará para comprobar el estado de la base de datos (Por seguridad, sus datos no se guardan en CheckServer)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-10 offset-sm-2">
|
||||
<button type="submit" class="btn btn-primary">Guardar cambios</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
function showOptData(valSel){
|
||||
optVal = valSel.value;
|
||||
|
||||
if(optVal == '1'){
|
||||
document.getElementById("t1").style.display = "block";
|
||||
document.getElementById("t2").style.display = "none";
|
||||
document.getElementById("t3").style.display = "none";
|
||||
document.getElementById("t4").style.display = "none";
|
||||
}else if(optVal == '2'){
|
||||
document.getElementById("t1").style.display = "none";
|
||||
document.getElementById("t2").style.display = "block";
|
||||
document.getElementById("t3").style.display = "none";
|
||||
document.getElementById("t4").style.display = "none";
|
||||
}else if(optVal == '3'){
|
||||
document.getElementById("t1").style.display = "none";
|
||||
document.getElementById("t2").style.display = "none";
|
||||
document.getElementById("t3").style.display = "block";
|
||||
document.getElementById("t4").style.display = "none";
|
||||
}else {
|
||||
document.getElementById("t1").style.display = "none";
|
||||
document.getElementById("t2").style.display = "none";
|
||||
document.getElementById("t3").style.display = "none";
|
||||
document.getElementById("t4").style.display = "block";
|
||||
}
|
||||
}
|
||||
showOptData(document.getElementById("tcheck"))
|
||||
</script>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
230
assets/html/panel/p_checks.twig
Executable file
230
assets/html/panel/p_checks.twig
Executable file
@@ -0,0 +1,230 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Checks -->
|
||||
<section>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Checks de la web. Desde aquí puedes ver, editar, y añadir nuevos checkeos a tus servidores</h2>
|
||||
</div>
|
||||
<div class="card">
|
||||
{% if you.fullRights == 1 %}
|
||||
<div class="card-header d-flex align-items-center">
|
||||
{% if groups is not empty %}
|
||||
<h2><a href="?page=addcheck" class="btn btn-info">{{T_.add}}</a></h2>
|
||||
{%else%}
|
||||
<h5>{{T_.add_grp_to_add_chk}}</h5>
|
||||
{%endif%}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="card-block">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{T_.name}}</th>
|
||||
<th>Tipo Check</th>
|
||||
<th>{{T_.edit}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for check in checks %}
|
||||
{% if check.ID_G != beforegroup %}
|
||||
<tr>
|
||||
<th colspan="4" class="thgrp">{{check.nameGroup}}</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set beforegroup = check.ID_G %}
|
||||
<tr>
|
||||
<td>{{check.name}}</td>
|
||||
<td>{{check.nameTCheck}} - {{check.URL}}</td>
|
||||
<td>
|
||||
{% if you.fullRights == 1 %}
|
||||
<a href="?page=editcheck&ID_C={{check.ID_C}}" class="btn btn-primary">{{T_.edit}}</a>
|
||||
{% if check.ID_TC == 3 %}{#Visitas#}
|
||||
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#countercode_{{check.ID_C}}">Código del contador</button>
|
||||
|
||||
{% elseif check.ID_TC == 4 %}{#Database#}
|
||||
<a href="#" data-toggle="modal" data-target="#dbcode_{{check.ID_C}}" class="btn btn-info">Codigo para check database</a>
|
||||
{% endif %}
|
||||
<div class="dropdown show"> <!-- Dropdown más opciones -->
|
||||
<a class="btn btn-secondary dropdown-toggle" href="#" id="more_{{check.ID_C}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{T_.more_opts}}
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="more_{{check.ID_C}}">
|
||||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editGrp_{{check.ID_C}}">Cambiar de grupo</a>
|
||||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editName_{{check.ID_C}}">Editar nombre</a>
|
||||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#delChk_{{check.ID_C}}">{{T_.delete}}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Modal de "Cambiar de grupo" -->
|
||||
<div id="editGrp_{{check.ID_C}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Nuevo grupo para {{check.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=modcheckgrp&ID_C={{check.ID_C}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<select name="group_{{check.ID_C}}" class="form-control">
|
||||
{% for group in groups %}
|
||||
<option value="{{group.ID_G}}" {%if group.ID_G == check.ID_G %} selected="selected" {%endif%}>
|
||||
{{group.name}}
|
||||
</option>
|
||||
{%endfor%}
|
||||
</select>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar grupo</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
<!-- Modal de "Editar nombre" -->
|
||||
<div id="editName_{{check.ID_C}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Editando el nombre de {{check.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=modcheckname&ID_C={{check.ID_C}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<input type="text" name="name_{{check.ID_C}}" value="{{check.name}}"/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar nombre</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
<!-- Modal de "Eliminar" -->
|
||||
<div id="delChk_{{check.ID_C}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{T_.delete}} {{check.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=delcheck&ID_C={{check.ID_C}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>¿Estas seguro de eliminar el check {{check.name}}? Es irreversible</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-danger">{{T_.delete}}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
|
||||
{# Modales concretos #}
|
||||
|
||||
{% if check.ID_TC == 3 %} {#Contador de visitas #}
|
||||
<!-- Modal para descargar el codigo de comprobación de DB -->
|
||||
<div id="countercode_{{check.ID_C}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Código HTML del contador de visitas</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<h3>Código a copiar para que el contador de visitas funcione:</h3>
|
||||
<pre style="width:100%;">
|
||||
<script type="text/javascript">
|
||||
var SiteID={{check.ID_C}};
|
||||
</script>
|
||||
<script src="{{you.webRoot}}counter.js"></script>
|
||||
</pre>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-dismiss="modal" class="btn btn-primary">Cerrar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
{% elseif check.ID_TC == 4 %}
|
||||
<!-- Modal para descargar el codigo de comprobación de DB -->
|
||||
<div id="dbcode_{{check.ID_C}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{{T_.delete}} {{check.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="downdbcode.php?ID_C={{check.ID_C}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<h3>Datos de la conexión (Para generar el fichero)</h3>
|
||||
<p>Tipo de base de datos:
|
||||
<select name="dbcode_type">
|
||||
<option value="sqlite3">SQLite3</option>
|
||||
<option value="mysqli">MySql</option>
|
||||
<option value="pgsql">PostgreSQL</option>
|
||||
</select>
|
||||
</p>
|
||||
<p><small>En Sqlite3 solo hay que rellenar en host la ubicación de la base de datos, nada más</small></p>
|
||||
<p>Host (Usualmente localhost): <input type="text" name="dbcode_host" placeholder="Host" /></p>
|
||||
<p>Usuario bd<input type="text" name="dbcode_user" placeholder="Usuario" /></p>
|
||||
<p>Contraseña bd<input type="pass" name="dbcode_pass" placeholder="Contraseña" /></p>
|
||||
<p>Base de datos<input type="text" name="dbcode_db" placeholder="Base de datos" /></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Enviar y descargar php</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% for group in emptygrp %}
|
||||
<tr>
|
||||
<th colspan="4" class="thgrp">{{group.name}}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Este grupo está vacío. Puedes eliminarlo desde grupos</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
105
assets/html/panel/p_groups.twig
Executable file
105
assets/html/panel/p_groups.twig
Executable file
@@ -0,0 +1,105 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Grupos -->
|
||||
<section>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Aquí se pueden crear, renombrar y borrar grupos para ordenar tus checkeos.</h2>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{T_.name}}</th>
|
||||
<th>{{T_.edit}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if you.fullRights == 1 %}{#New group only admins #}
|
||||
<form action="?page=addgroup" method="POST">
|
||||
<tr>
|
||||
<td><input type="text" name="grpname" placeholder="Nombre del nuevo grupo"/></td>
|
||||
<td>
|
||||
<button type="submit" class="btn btn-info">{{T_.add}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% for group in groups %}
|
||||
<tr>
|
||||
<td>{{group.name}}</td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editName_{{group.ID_G}}">{{T_.edit}}</button>
|
||||
<!-- Modal Editar -->
|
||||
<div id="editName_{{group.ID_G}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Nuevo nombre para {{group.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=changegroup&ID_G={{group.ID_G}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p><input type="text" name="GN_{{group.ID_G}}" value="{{group.name}}"/></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#delGrp_{{group.ID_G}}">{{T_.delete}}</button>
|
||||
<!-- Modal borrar -->
|
||||
<div id="delGrp_{{group.ID_G}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Se va a borrar {{group.name}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=delgroup&ID_G={{group.ID_G}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p class="black">Borrar un grupo es irreversible</p>
|
||||
{% if group.checks > 0 %}
|
||||
<h3 class="black">Hay checks dentro de {{group.name}}. Si continúa, se borrarán también.</h3>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-danger">{{T_.delete}}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<script>
|
||||
function changeName(Id_G,name){
|
||||
var retVal = prompt("Nuevo nombre para "+name+" ", name);
|
||||
alert("You have entered : " + retVal);
|
||||
}
|
||||
</script>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
79
assets/html/panel/p_header.twig
Executable file
79
assets/html/panel/p_header.twig
Executable file
@@ -0,0 +1,79 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- Credits to https://bootstrapious.com/p/bootstrap-4-dashboard -->
|
||||
<meta charset="utf-8">
|
||||
<title>Panel de administración</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="assets/css/panel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/patchpanel.css" id="theme-stylesheet">
|
||||
<link rel="stylesheet" href="assets/fonts/roboto/stylesheet.css">
|
||||
|
||||
<!-- Fonts CSS-->
|
||||
<link rel="stylesheet" href="assets/fonts/styles.css">
|
||||
|
||||
<script src="assets/js/Chart.min.js"></script> <!-- For charts -->
|
||||
<script src="assets/js/jquery-3.2.1.min.js"></script> <!-- For bootstrap -->
|
||||
<script src="assets/js/popper.min.js"></script> <!-- For bootstrap dropdown -->
|
||||
<script src="assets/js/bootstrap-util-modal-dropdown.min.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- Side Navbar -->
|
||||
<nav class="side-navbar">
|
||||
<div class="side-navbar-wrapper">
|
||||
<div class="sidenav-header d-flex align-items-center justify-content-center">
|
||||
<div><p class="text-center"> Panel de control</p></div>
|
||||
</div>
|
||||
<div class="main-menu">
|
||||
<ul id="side-main-menu" class="side-menu list-unstyled">
|
||||
<li {%if mpage == 'index'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=index"> <i class="icon-home-house-streamline"></i><span>{{T_.home}}</span></a>
|
||||
</li>
|
||||
<li {%if mpage == 'checks'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=checks"><i class="icon-browser-streamline-window"></i><span>{{T_.checks}}</span></a>
|
||||
</li>
|
||||
<li {%if mpage == 'groups'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=groups"><i class="icon-coffee-streamline"></i><span>{{T_.groups}}</span></a>
|
||||
</li>
|
||||
<li {%if mpage == 'news'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=news"><i class="icon-notebook-streamline"></i><span>{{T_.news}}</span></a>
|
||||
</li>
|
||||
{% if you.fullRights == 1 %}
|
||||
<li {%if mpage == 'settings'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=settings"><i class="icon-settings-streamline-1"></i><span>{{T_.settings}}</span></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {%if mpage == 'users'%} class="active"{%endif%}>
|
||||
<a href="panel.php?page=users"><i class="icon-man-people-streamline-user"></i><span>{{T_.users}}</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="page forms-page">
|
||||
<!-- navbar-->
|
||||
<header class="header">
|
||||
<nav class="navbar">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-holder d-flex align-items-center justify-content-between">
|
||||
<div class="navbar-header"><a href="index.php" class="navbar-brand">
|
||||
<div class="brand-text hidden-sm-down"><span>CheckServer</span></div></a></div>
|
||||
<ul class="nav-menu list-unstyled d-flex flex-md-row align-items-md-center">
|
||||
<li class="nav-item"><a href="login.php?do=logout" class="nav-link logout">Salir<i class="icon-sign-out"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="breadcrumb-holder">
|
||||
<div class="container-fluid">
|
||||
<ul class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="index.html">Inicio</a></li>
|
||||
<li class="breadcrumb-item active">Estado</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
70
assets/html/panel/p_index.twig
Executable file
70
assets/html/panel/p_index.twig
Executable file
@@ -0,0 +1,70 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
<!-- Controles numéricos -->
|
||||
<section class="dashboard-counts section-padding">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-xl-3 col-md-4 col-6">
|
||||
<div class="wrapper count-title d-flex">
|
||||
<div class="icon"><i class="icon-eye"></i></div>
|
||||
<div class="name"><strong class="text-uppercase">Tests</strong><span>Controles activos</span>
|
||||
<div class="count-number">{{data.checks}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-3 col-md-4 col-6">
|
||||
<div class="wrapper count-title d-flex">
|
||||
<div class="icon"><i class="icon-exclamation-triangle"></i></div>
|
||||
<div class="name"><strong class="text-uppercase">Test erróneos</strong><span>Desde el {{data.errinidate}}</span>
|
||||
<div class="count-number">{{data.err}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="col-xl-2 col-md-4 col-6">
|
||||
<div class="wrapper count-title d-flex">
|
||||
<div class="icon"><i class="icon-padnote"></i></div>
|
||||
<div class="name"><strong class="text-uppercase">Incidencias</strong><span>Desde el</span>
|
||||
<div class="count-number">{{data.err}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
</div><!--Row-->
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Lastest fails -->
|
||||
<section class="updates section-padding">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
||||
<div class="wrapper recent-updated">
|
||||
<div id="new-updates" class="card-header d-flex justify-content-between align-items-center">
|
||||
<h2 class="h5 display"><a data-toggle="collapse" data-parent="#accordion" href="#upadtes-box" aria-expanded="true" aria-controls="upadtes-box">Ultimos fallos</a></h2>
|
||||
</div>
|
||||
<div id="upadtes-box" role="tabpanel" class="collapse show">
|
||||
<ul class="news list-unstyled">
|
||||
<!-- Item-->
|
||||
{% for fail in fails %}
|
||||
<li class="d-flex justify-content-between">
|
||||
<div class="left-col d-flex">
|
||||
<div class="icon"><i class="icon-times"></i></div>
|
||||
<div class="title">{{fail.name}} - <strong>{{fail.groupName}}</strong>
|
||||
<p>{{fail.typeCheck}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-col text-right">
|
||||
<div class="update-date">{{fail.date}}<span class="month">{{fail.hour}}</span></div>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
114
assets/html/panel/p_news.twig
Executable file
114
assets/html/panel/p_news.twig
Executable file
@@ -0,0 +1,114 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Noticias -->
|
||||
<section>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Vista rápida de noticias.</h2>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
|
||||
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#new_{{news.ID_N}}">Nueva noticia</button>
|
||||
<!-- Modal Editar -->
|
||||
<div id="new_{{news.ID_N}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Nueva noticia.</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=newnews" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>Se acepta el uso de MarkDown y/o texto plano.</p>
|
||||
<p><textarea style="width:100%;height:250px;" name="text_new"></textarea></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Nueva noticia</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
</div>
|
||||
<div class="card-block">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Fecha</th>
|
||||
<th>Noticia</th>
|
||||
<th>Opciones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for news in allnews %}
|
||||
<tr>
|
||||
<td>{{news.date}}</td>
|
||||
<td>{{news.text | raw}}</td>
|
||||
<td>
|
||||
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#edit_{{news.ID_N}}">Editar</button>
|
||||
<!-- Modal Editar -->
|
||||
<div id="edit_{{news.ID_N}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Editando noticia...</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=editnews&ID_N={{news.ID_N}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p><textarea style="width:100%;height:250px;" name="text_{{news.ID_N}}">{{news.mdtext}}</textarea></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#delnews_{{news.ID_N}}">Borrar</button>
|
||||
<!-- Modal borrar -->
|
||||
<div id="delnews_{{news.ID_N}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Se va a borrar la noticia</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=delnews&ID_N={{news.ID_N}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p class="black">Borrar una noticia es irreversible</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-danger">Borrar</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
21
assets/html/panel/p_notperm.twig
Executable file
21
assets/html/panel/p_notperm.twig
Executable file
@@ -0,0 +1,21 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Add/edit form -->
|
||||
<section class="forms">
|
||||
<div class="container-fluid">
|
||||
<header>
|
||||
<h1 class="h3 display">No tienes permisos</h1>
|
||||
</header>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<p class="black">No tienes permisos para entrar en esta página</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
41
assets/html/panel/p_settings.twig
Executable file
41
assets/html/panel/p_settings.twig
Executable file
@@ -0,0 +1,41 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Add/edit form -->
|
||||
<section class="forms">
|
||||
<div class="container-fluid">
|
||||
<header>
|
||||
<h1 class="h3 display">Opciones de CheckServer</h1>
|
||||
</header>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-block">
|
||||
<form class="form-horizontal" method="POST" action="?page=saveopts">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Nombre de la web</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" placeholder="Nombre del check" value="{{sys.name}}" class="form-control form-control-success"><small class="form-text">Nombre para sacar en titulos.</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-2">Cantidad de resultados (Individuales) a guardar en historial por cada check</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="maxChecksSave" type="numeric" placeholder="Nombre del check" value="{{sys.maxChecksSave}}" class="form-control form-control-success"><small class="form-text">300 es un buen numero</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-10 offset-sm-2">
|
||||
<button type="submit" class="btn btn-primary">Guardar cambios</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
191
assets/html/panel/p_users.twig
Executable file
191
assets/html/panel/p_users.twig
Executable file
@@ -0,0 +1,191 @@
|
||||
{% include 'panel/p_header.twig' %}
|
||||
|
||||
<!-- Checks -->
|
||||
<section>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2 class="h5 display">Usuarios</h2>
|
||||
</div>
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#changepass">Editar tu contraseña</button></h2>
|
||||
</div>
|
||||
|
||||
<!-- Modal editar password -->
|
||||
<div id="changepass" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Cambiar tu contraseña</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=edituserpass" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>Contraseña nueva: <input name="userpass1" type="password" value=""/><br/>
|
||||
Repetir contraseña: <input name="userpass2" type="password" value=""/></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar contraseña</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
{% if you.fullRights == 1 %} {#Only for admins #}
|
||||
<div class="card-header d-flex align-items-center">
|
||||
<h2><button type="button" class="btn btn-info" data-toggle="modal" data-target="#newUser">Añadir usuario</button></h2>
|
||||
</div>
|
||||
|
||||
<!-- Modal nuevo usuario -->
|
||||
<div id="newUser" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Nuevo usuario</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=adduser" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Nombre: <input name="nuser_name" type="text"/><br/>
|
||||
Contraseña (Luego se puede cambiar): <input name="nuser_pass" type="password"/><br/>
|
||||
Permisos:
|
||||
<select name="nuser_type">
|
||||
<option value="1">Permisos completos</option>
|
||||
<option value="0">Solo visualización y noticias</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Crear usuario</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
{%endif%}
|
||||
<div class="card-block">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nombre</th>
|
||||
<th>Tipo de acceso</th>
|
||||
<th>Editar</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td>{{user.nick}}</td>
|
||||
<td>
|
||||
{% if user.fullrights == 0 %}
|
||||
Acceso limitado
|
||||
{% else %}
|
||||
Derechos de administración
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if you.ID_U == user.ID_U %} {#Only you can edit your name#}
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editName_{{user.ID_U}}">Editar nombre</button>
|
||||
{% endif %}
|
||||
{% if you.ID_U != user.ID_U and you.fullRights == 1 %}
|
||||
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#editPerm_{{user.ID_U}}">Cambiar permisos</button>
|
||||
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteUser_{{user.ID_U}}">Borrar usuario</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Modal editar nombre -->
|
||||
<div id="editName_{{user.ID_U}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Cambiar nombre de usuario para {{user.nick}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=editusername&ID_U={{user.ID_U}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>Nick: <input name="name_{{user.ID_U}}" type="text" value="{{user.nick}}"/></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar nombre</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
<!-- Modal cambiar permisos -->
|
||||
<div id="editPerm_{{user.ID_U}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Cambio de permisos de {{user.nick}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=edituserperm&ID_U={{user.ID_U}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Permisos:
|
||||
<select name="nperm_{{user.ID_U}}">
|
||||
<option value="1">Permisos completos</option>
|
||||
<option value="0">Solo visualización y noticias</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">Cambiar permisos</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
|
||||
<!-- Modal borrar -->
|
||||
<div id="deleteUser_{{user.ID_U}}" class="modal fade" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<!-- Modal content-->
|
||||
<div class="modal-content" role="document">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Borrar el usuario {{user.nick}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<form action="?page=deluser&ID_U={{user.ID_U}}" method="POST">
|
||||
<div class="modal-body">
|
||||
<p>Borrar un usuario no es reversible, no pulses el botón si no estás seguro.</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-danger">Borrar usuario</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Fin modal -->
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% include 'footer.twig' %}
|
||||
Reference in New Issue
Block a user