Commit 37389fa7 authored by diesys's avatar diesys 🎈

merge fix

parents 36def0d0 85fbfeca
tornelo.code-workspace
data/singolo/
data/doppio/
data/singolo/singolo.json
//TODO:
singolo e doppio
//TODO:
per i futuro aggiungere variabile url per il torneo e git sui json ad ogni submit di dati così da avere una timeline (commit con ora data e tipo di azione)
//TODO:
fare qr da mettere al torneo per i risultati
//TODO: ADMIN!!! con input bootstrap
i giocatori conviene aggiungerli a mano e le partite invece fare una pagina admin.php con password x inserire i risultati (così che non debba aggiungere tutto io ogni partita)
//TODO:
fare funzione per stampa output bello per liste
per i futuro aggiungere variabile url per il torneo e
//TODO:
inserire data/ora per partite
git sui json ad ogni submit di dati così da avere una timeline (commit con ora data e tipo di azione)
//TODO:
a parita' di rank conta il numero di partite giocate
ampliare ad ogni tipo di torneo (anche punteggi)
CLASSIFICA parità numero partite e minimo num di partite x starci (sennò stanno in mezzo di partenza)
\ No newline at end of file
## TODO
nel GET url usare per mostrare rank se agg/elim giocatre, partite se agg partita e messaggio alert
\ No newline at end of file
This diff is collapsed.
<?php
$valid_passwords = array ("uova" => "frittata");
$valid_users = array_keys($valid_passwords);
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if (!$validated) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
die ("Not authorized");
}
?>
<!doctype html>
<html lang='it'>
<head>
<!-- Required meta tags -->
<title>Admin | TornELO</title>
<meta charset='utf-8'>
<meta name="description" content="TornELO is a self-hosted opensource tournament server and script" />
<meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>
<link rel='stylesheet' media='screen' href='https://fontlibrary.org/face/raleway' type='text/css'/>
<link rel='icon' href='img/antipong_favicon.png'>
<meta name="HandheldFriendly" content="true" />
<meta name="mobile-web-app-capable" content="yes">
<!-- bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link rel="stylesheet" href="css/main.css" />
</head>
<body>
<img id='logo' src='img/antipong_idle2.gif' height='70px' width='70px' alt='Smash the ball, smash fascism!' />
<span id='titolo'>
<h1 id='itolo'>Admin | TornELO</h1>
</span>
<div id='content' class="container-fluid">
<h2 class="titleSection">Modifica torneo</h2>
<center>
<div class="input-group input-padding">
<select class="custom-select col-2" id="inputGroupSelect01">
<option selected>Torneo</option>
<option value="singolo">singolo</option>
<option value="doppio">doppio</option>
</select>
<input type="text" aria-label="Giocatore1" placeholder="Giocatore 1" class="form-control">
<input type="text" aria-label="Giocatore2" placeholder="Giocatore 2" class="form-control">
<select class="custom-select col-2" id="inputGroupSelect01">
<option selected>esito</option>
<option value="1">1</option>
<option value="0.5">x</option>
<option value="0">2</option>
</select>
<div class="input-group-append">
<button class="btn btn-outline-secondary bg-danger text-white bigFontButton" type="submit"><span class="bigFontButton">+</span></button>
</div>
<?php
// if (isset($_POST['action'])) {
// echo '<br />The ' . $_POST['submit'] . ' submit button was pressed<br />';
// }
?>
</div>
</center>
</div>
<div class="container-fluid">
<h2 class='titleSection'>Dettagli TORNEi</h2>
<div class="row">
<div class="col-sm-6 col-xs-push-6">
<h2 class='titleSection'>Singolo</h2>
<div class="row">
<div class="col-lg-6">
<h4 class='titleSection'>Ranking</h4>
<p class="centered">
<?php
$output1 = shell_exec('./tornelo.py --ranking singoloProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output1));
?>
</p>
</div>
<div class="col-lg-6">
<h4 class='titleSection'>Partite</h4>
<p class="centered">
<?php
$output2 = shell_exec('./tornelo.py --match singoloProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output2));
?>
</p>
</div>
</div>
</div>
<div class="col-sm-6 col-xs-push-6">
<h2 class='titleSection'>Doppio</h2>
<div class="row">
<div class="col-lg-6">
<h4 class='titleSection'>Ranking</h4>
<p class="centered">
<?php
$output1 = shell_exec('./tornelo.py --ranking doppioProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output1));
?>
</p>
</div>
<div class="col-lg-6">
<h4 class='titleSection'>Partite</h4>
<p class="centered">
<?php
$output2 = shell_exec('./tornelo.py --match doppioProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output2));
?>
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
#!/usr/bin/env python3
import math, sys, json
from math import atan, pi
import sys, json
from collections import OrderedDict
class Torneo(object):
class TornElo(object):
def __init__(self,nome):
self.nome = nome
self.giocatori = {}
def __str__(self):
s = ""
s += "="*(len(self.nome)+2)+"\n"
s += " "+self.nome+"\n"
s += "="*(len(self.nome)+2)+"\n"
for id in self.giocatori:
s = "="*(len(self.nome)+2)+"\n "+self.nome+"\n"+"="*(len(self.nome)+2)+"\n"
for id in self.classifica():
s+=str(self.giocatori[id]['NOME'])
s+=" ("+str(self.giocatori[id]['ID'])+"):"
s+="\t"+str(self.giocatori[id]['PUNTI'])+" pt"
......@@ -93,7 +91,7 @@ class Torneo(object):
risultatoY = 1 - risultatoX
#calcola risultato atteso per il giocatoreX e il giocatoreY
attesoX = 1/2 + (math.atan((punteggioX - punteggioY)/200)) / math.pi
attesoX = 1/2 + (atan((punteggioX - punteggioY)/200)) / pi
attesoY = 1 - attesoX
#calcolo coefficienti moltiplicativi per il giocatoreX e il giocatoreY
......@@ -150,15 +148,7 @@ class Torneo(object):
def classifica(self):
"""
Da fare
Ordina il dizionario self.giocatori rispetto ai punteggi
"""
return Null
t = Torneo("TornElo")
t.aggiungiGiocatore("Adrian")
t.aggiungiGiocatore("Jose")
t.aggiungiGiocatore("Clara")
t.aggiornaPunteggi("Adrian","Jose",1)
t.aggiornaPunteggi("Jose","Clara",1)
t.aggiornaPunteggi("Clara","Adrian",1)
print(t)
classifica = OrderedDict(sorted(self.giocatori.items(), key = lambda kv: kv[1]['PUNTI'], reverse=True))
return classifica
.hidden {
display: none;
}
body {
font-family: 'RalewayRegular';
font-weight: normal;
......@@ -7,6 +11,14 @@ body {
padding: 0;
left: 0;
top: 0;
position: absolute;
width: 100%;
min-height: 100%;
transition: background .3s;
}
body.dark {
background: hsl(210, 10%, 20%);
color: #eee;
}
#logo {
......@@ -18,9 +30,13 @@ body {
border: 10px solid #fff;
box-shadow: 0 9px 30px -21px rgba(0,0,0,.7);
}
body.dark > #logo {
border: 10px solid hsla(210, 10%, 10%, 90%);
box-shadow: 0 10px 25px -10px rgba(0,0,0,.8);
}
#titolo {
box-shadow: 0 -5px 30px -8px rgba(0,0,0,.4);
box-shadow: 0 -5px 30px -10px rgba(0,0,0,.4);
position: fixed;
width: 100%;
top: 0;
......@@ -30,6 +46,11 @@ body {
padding: 0;
height: 56px;
z-index: 10;
transition: background .3s;
}
body.dark > #titolo {
box-shadow: 0 -5px 30px 1px rgba(0, 0, 0, 0.45);
background: hsl(210, 10%, 10%);
}
#titolo > h1 {
position: absolute;
......@@ -41,14 +62,40 @@ body {
}
#content {
margin-top: 80px;
/* margin: 0; */
width: 100%;
overflow-x: hidden;
min-height: 100%;
position: absolute;
}
#qr {
margin: 20px 0;
margin: 10px 0 20px 0;
border: 8px solid #fff;
box-shadow: 0 0px 10px -5px rgba(0,0,0,.4);
border-radius: 12px;
}
#menu {
width: 100%;
position: fixed;
min-height: 20px;
margin-top: 30px;
padding: 50px 20px 5px 20px;
box-shadow: 0 -5px 30px -8px rgba(0, 0, 0, .4);
background: #fafafa;
z-index: 8;
transition: background .3s;
}
body.dark #menu {
background: hsl(180, 10%, 7.5%);
}
#menu span.torneo-icon {
padding: 2px 5px;
}
#menu span.torneo-icon > ion-icon {
font-size: 24px;
}
.titleSection {
font-size: 22px;
font-weight: bold;
......@@ -67,13 +114,78 @@ p.centered {
text-align: center;
}
.adminButton {
position: absolute;
right: 0;
top: 0;
height: 56px;
z-index: 10;
border-left: 1px solid rgba(0, 0, 0, .1);
padding: 12px 14px 8px 14px;
transition: all .3s;
color: #999;
}
#admin_icon {
transform: none;
transition: all .3s .1s;
transform-origin: 50% 50%;
}
#admin_icon.active {
transition: all .3s;
transform: rotate(45deg);
}
.adminButton:hover, .adminButton:active {
color: #777;
background: #ebebeb;
}
body.dark .adminButton:hover,
body.dark .adminButton:active {
color: #aaa;
background: rgba(0, 0, 0, .3);
}
/* BOOTSTRAP */
.table-dark td, .table-dark th, .table-dark thead th {
border-color: rgba(0,0,0,.1);
}
body.dark .btn-outline-primary,
body.dark .btn-outline-danger {
border-color: hsla(210, 11%, 10%, 1);
}
body.dark .btn-outline-danger:not(:disabled):not(.disabled).active,
body.dark .btn-outline-danger:not(:disabled):not(.disabled):active,
body.dark .show>.btn-outline-danger.dropdown-toggle,
body.dark .btn-outline-primary:not(:disabled):not(.disabled).active,
body.dark .btn-outline-primary:not(:disabled):not(.disabled):active,
body.dark .show>.btn-outline-primary.dropdown-toggle {
color: hsl(210, 10%, 10%)
}
.btn-outline-danger:not(:disabled):not(.disabled).active,
.btn-outline-danger:not(:disabled):not(.disabled):active,
.show>.btn-outline-danger.dropdown-toggle,
.btn-outline-primary:not(:disabled):not(.disabled).active,
.btn-outline-primary:not(:disabled):not(.disabled):active,
.show>.btn-outline-primary.dropdown-toggle {
color: #fff;
}
.btn {
transition: all .3s;
}
.btn > ion-icon {
vertical-align: middle;
}
.btn.bigFontButton {
height: 38px;
padding: 0 0px;
width: 34px;
padding: 0;
width: 40px;
}
.btn.bigFontButton ion-icon {
width: 24px;
}
.btn.bigFontButton > span {
font-size: 40px;
......@@ -84,6 +196,76 @@ p.centered {
}
.input-padding {
margin-bottom: 40px;
max-width: 800px;
margin-bottom: 25px;
max-width: 650px;
}
.alert {
max-width: 400px;
border-radius: 25px;
box-shadow: 0 2px 15px -10px rgba(0, 0, 0, .3);
border-color: rgba(0, 0, 0, .1);
}
.alert.alert-success {
background: #8ae09f;
color: #13421e;
}
/* fix button touch active */
.btn-outline-danger.collapsed,
.btn-outline-primary.collapsed {
background: none;
}
.btn-outline-danger.collapsed > ion-icon {
color: #dc3545;
}
.btn-outline-primary.collapsed > ion-icon {
color: #007bff;
}
body.dark .btn.bigFontButton,
body.dark .input-group-text,
body.dark .form-control,
body.dark .custom-select {
border: none;
color: #dedede;
background-color: hsla(180, 12%, 3.4%, 1);
}
body.dark .input-group-append > span,
body.dark .input-group-prepend > span {
background-color: hsla(180, 12%, 12%, 1);
}
/* ANIMATIONS ########################## */
.collapse.show {
transition: all 1s;
}
/* RESPONSIVE ########################## */
@media only screen and (max-width: 670px) {
.input-padding {
width: 100%;
}
#menu {
margin: 45px 0;
padding: 50px 0px 5px 0px;
}
/* fix input a tutto schermo */
.input-group>.input-group-append>.btn,
.input-group>.input-group-append>.input-group-text,
.input-group>.input-group-append:not(:last-child)>.btn,
.input-group>.input-group-append:not(:last-child)>.input-group-text,
.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),
.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),
.input-group>.input-group-prepend>.input-group-text,
.input-group>.input-group-prepend:first-child>.btn:not(:first-child),
.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),
.input-group>.input-group-prepend:not(:first-child)>.btn,
.input-group>.input-group-prepend:not(:first-child)>.input-group-text {
border-radius: 0;
margin: inherit -1px
}
}
\ No newline at end of file
{"NOME": "doppio", "N_MIN_PARTITE": "6", "FILE": "data/doppio/doppio.json", "GIOCATORI": {"0": {"NOME": "marieta", "ID": "doppio_0", "RANK": 1440, "MATCH": 14}, "1": {"NOME": "marco marley e ruben", "ID": "doppio_1", "RANK": 1440, "MATCH": 0}, "2": {"NOME": "laura e delia", "ID": "doppio_2", "RANK": 1440, "MATCH": 6}, "3": {"NOME": "ciccio marley e il cafone", "ID": "doppio_3", "RANK": 1450, "MATCH": 13}, "4": {"NOME": "le suocere", "ID": "doppio_4", "RANK": 1425, "MATCH": 3}, "5": {"NOME": "giovannino e gioele", "ID": "doppio_5", "RANK": 1451, "MATCH": 11}, "6": {"NOME": "popo e ezi", "ID": "doppio_6", "RANK": 1516, "MATCH": 4}, "7": {"NOME": "giorgio e stefano", "ID": "doppio_7", "RANK": 1401, "MATCH": 2}, "8": {"NOME": "ringo", "ID": "doppio_8", "RANK": 1509, "MATCH": 6}, "9": {"NOME": "bufa e mario", "ID": "doppio_9", "RANK": 1401, "MATCH": 2}, "10": {"NOME": "kristi e mattia", "ID": "doppio_10", "RANK": 1401, "MATCH": 4}, "11": {"NOME": "lorenza e bonny", "ID": "doppio_11", "RANK": 1385, "MATCH": 3}, "12": {"NOME": "i paladini di marchionne", "ID": "doppio_12", "RANK": 1438, "MATCH": 2}, "13": {"NOME": "md", "ID": "doppio_13", "RANK": 1440, "MATCH": 0}}, "MATCHES": [["marieta", "giorgio e stefano", 1.0, "(1:30 - 14/5)"], ["laura e delia", "giorgio e stefano", 1.0, "(1:30 - 14/5)"], ["marieta", "laura e delia", 1.0, "(1:31 - 14/5)"], ["laura e delia", "ciccio marley e il cafone", 1.0, "(1:31 - 14/5)"], ["giovannino e gioele", "le suocere", 1.0, "(19:40 - 14/5)"], ["giovannino e gioele", "ciccio marley e il cafone", 0.0, "(19:40 - 14/5)"], ["marieta", "le suocere", 0.0, "(19:40 - 14/5)"], ["marieta", "giovannino e gioele", 0.0, "(19:41 - 14/5)"], ["bufa e mario", "popo e ezi", 0.0, "(17:53 - 16/5)"], ["bufa e mario", "ciccio marley e il cafone", 0.0, "(17:53 - 16/5)"], ["le suocere", "popo e ezi", 0.0, "(17:54 - 16/5)"], ["giovannino e gioele", "popo e ezi", 0.0, "(17:55 - 16/5)"], ["popo e ezi", "ciccio marley e il cafone", 1.0, "(17:56 - 16/5)"], ["giovannino e gioele", "kristi e mattia", 0.0, "(17:57 - 16/5)"], ["i paladini di marchionne", "lorenza e bonny", 1.0, "(17:58 - 16/5)"], ["i paladini di marchionne", "marieta", 0.0, "(19:23 - 16/5)"], ["ringo", "marieta", 1.0, "(19:23 - 16/5)"], ["giovannino e gioele", "lorenza e bonny", 1.0, "(19:24 - 16/5)"], ["giovannino e gioele", "laura e delia", 1.0, "(19:24 - 16/5)"], ["kristi e mattia", "laura e delia", 0.0, "(19:25 - 16/5)"], ["kristi e mattia", "marieta", 0.0, "(19:25 - 16/5)"], ["ciccio marley e il cafone", "kristi e mattia", 1.0, "(19:32 - 16/5)"], ["ciccio marley e il cafone", "ringo", 0.0, "(23:5 - 16/5)"], ["laura e delia", "ringo", 0.0, "(23:5 - 16/5)"], ["ringo", "marieta", 0.0, "(20:41 - 17/5)"], ["ciccio marley e il cafone", "marieta", 1.0, "(20:41 - 17/5)"], ["lorenza e bonny", "ringo", 0.0, "(9:28 - 20/5)"], ["giovannino e gioele", "marieta", 1.0, "(2:8 - 22/5)"], ["ciccio marley e il cafone", "giovannino e gioele", 1.0, "(21:25 - 24/5)"], ["ciccio marley e il cafone", "marieta", 1.0, "(21:26 - 24/5)"], ["ciccio marley e il cafone", "marieta", 0.0, "(21:26 - 24/5)"], ["ciccio marley e il cafone", "marieta", 0.0, "(21:26 - 24/5)"], ["ringo", "giovannino e gioele", 1.0, "(21:26 - 24/5)"], ["giovannino e gioele", "ciccio marley e il cafone", 1.0, "(21:41 - 25/5)"], ["marieta", "ciccio marley e il cafone", 0.0, "(21:41 - 25/5)"]], "RANKING": [["popo e ezi", 1516, 4, false], ["ringo", 1509, 6, true], ["giovannino e gioele", 1451, 11, true], ["ciccio marley e il cafone", 1450, 13, true], ["marieta", 1440, 14, true], ["laura e delia", 1440, 6, true], ["marco marley e ruben", 1440, 0, false], ["md", 1440, 0, false], ["i paladini di marchionne", 1438, 2, false], ["le suocere", 1425, 3, false], ["kristi e mattia", 1401, 4, false], ["giorgio e stefano", 1401, 2, false], ["bufa e mario", 1401, 2, false], ["lorenza e bonny", 1385, 3, false]]}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<!doctype html>
<html lang='it'>
<head>
<!-- Required meta tags -->
<title>TornELO</title>
<meta charset='utf-8'>
<meta name="description" content="TornELO is a self-hosted opensource tournament server and script" />
<meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>
<link rel='stylesheet' media='screen' href='https://fontlibrary.org/face/raleway' type='text/css'/>
<link rel='icon' href='img/antipong_favicon.png'>
<meta name="HandheldFriendly" content="true" />
<meta name="mobile-web-app-capable" content="yes">
<!-- bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link rel="stylesheet" href="css/main.css" />
</head>
<?php
// $output1 = shell_exec('./tornelo.py --update prova dddd cccc 0 --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
// echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output1));
?>
<body>
<!-- <center> -->
<img id='logo' src='img/antipong_idle2.gif' height='70px' width='70px' alt='Smash the ball, smash fascism!' />
<span id='titolo'>
<h1 id='itolo'>Torneo '19</h1>
</span>
<div id="content" class="container-fluid">
<center>
<img id='qr' src='img/torneloQR.gif' height='140px' width='140px' alt='http://flowin.space/tornelo/' />
</center>
<div class="row">
<div class="col-sm-6 col-xs-push-6">
<h2 class='titleSection'>Singolo</h2>
<div class="row">
<div class="col-md-6">
<h4 class='titleSection'>Ranking</h4>
<p class="centered">
<?php
$output1 = shell_exec('./tornelo.py --ranking singoloProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output1));
?>
</p>
</div>
<div class="col-md-6">
<h4 class='titleSection'>Partite</h4>
<p class="centered">
<?php
$output2 = shell_exec('./tornelo.py --match singoloProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output2));
?>
</p>
</div>
</div>
</div>
<div class="col-sm-6 col-xs-push-6">
<h2 class='titleSection'>Doppio</h2>
<div class="row">
<div class="col-md-6">
<h4 class='titleSection'>Ranking</h4>
<p class="centered">
<?php
$output1 = shell_exec('./tornelo.py --ranking doppioProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output1));
?>
</p>
</div>
<div class="col-md-6">
<h4 class='titleSection'>Partite</h4>
<p class="centered">
<?php
$output2 = shell_exec('./tornelo.py --match doppioProva --web 2>&1');
# inserisce una <br/> dopo il newline (nl2br) e sostituisce i tre spazi (formattati in python json)
echo nl2br(str_replace(" ", '&nbsp;&nbsp;&nbsp;&nbsp;', $output2));
?>
</p>
</div>
</div>
</div>
</div>
</div>
<!-- </center> -->
</body>
</html>
<?php
// echo $output2
# get a json and dump
// $json = file_get_contents('data/ping/ping.json');
// $json_output = json_decode($json, true);
// echo $json_output;
// foreach ($json_output as $trend){
// echo $trend['text']."\n";
// }
# trasforma il dizionario python in un array php
// $data = json_decode($output, true);
// print_r($data);
// if (count($data->stand)) {
// // Open the table
// echo "<table>";
// // Cycle through the array
// foreach ($data->stand as $idx => $stand) {
// // Output a row
// echo "<tr>";
// echo "<td>$stand->afko</td>";
// echo "<td>$stand->positie</td>";
// echo "</tr>";
// }
// // Close the table
// echo "</table>";
// }
// function build_table($array){
// // start table
// $html = '<table>';
// // header row
// $html .= '<tr>';
// foreach($array[0] as $key=>$value){
// $html .= '<th>' . htmlspecialchars($key) . '</th>';
// }
// $html .= '</tr>';
// // data rows
// foreach( $array as $key=>$value){
// $html .= '<tr>';
// foreach($value as $key2=>$value2){
// $html .= '<td>' . htmlspecialchars($value2) . '</td>';
// }
// $html .= '</tr>';
// }
// // finish table and return it
// $html .= '</table>';
// return $html;
// }
// echo build_table($data);
?>
\ No newline at end of file
function toggleTheme() {
// UI
$('body').toggleClass('dark');
// tabelle
$('table').toggleClass('table-dark');
$('tr.success').toggleClass('bg-success');
$('tr.success').toggleClass('table-success');
// browser color
if($('body').hasClass('dark'))
color = '#17191c';
else
color = '#ffffff';
$('#browserColor').attr('content', color);
$('#browserColorwp').attr('content', color);
$('#browserColorap').attr('content', color);
console.log('changing theme...');
}
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
vars[key] = value;
});
return vars;
}
window.onload = function () {
/////////// Auto NIGHT MODE ///////////////////
var urlVars = getUrlVars();
var d = new Date();
var hour = d.getHours();
if (hour < 7 | hour > 18) {
toggleTheme();
console.log('auto-enabling dark mode...')
} else
if (urlVars["night"]) {
toggleTheme();
console.log('URL var detected: enabling dark mode...')
}
/////////// BINDING ///////////////////////////
// theme / logo
$('#logo').bind('click', function(){
toggleTheme();
console.log('Logo clicked, changing theme...')
});
// open menu
$('#admin_button').bind('click', function(){
$('#menu').slideToggle();
$('#admin_icon').toggleClass('active')
console.log('Menu button clicked, toggling menu...')
});
// close menu (when active) on outside click
$('#content').bind('click', function() {
if ($('#menu').css('display') != 'none') {