Commit 64b4a795 authored by diesys's avatar diesys 🎈

Merge branch 'dev'

parents 8253086d 79b65a99
//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!!!
//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:
la pagine pricipale deve contenere classifica, partite giocate
//TODO:
domanda: ma il ranking tiene conto anche del ranking degli altri a ritroso? ha senso?
//TODO:
fare funzione per stampa output bello per liste
//TODO:
i match non sono ordinati?
inserire data/ora per partite
//TODO:
a parita' di rank conta il numero di partite giocate
//TODO:
inserire data/ora per partite
\ No newline at end of file
CLASSIFICA parità numero partite e minimo num di partite x starci (sennò stanno in mezzo di partenza)
\ No newline at end of file
<?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>
<!-- <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'>Admin | TornELO</h1>
</span>
<div id='content' class="container-fluid">
<h2 class="titleSection">Modifica torneo</h2>
<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="button"><span class="bigFontButton">+</span></button>
</div>
</div>
</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 prova --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 prova --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 cippo --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 cippo --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>
<!-- <img id='qr' src='img/torneloQR.gif' height='140px' width='140px' alt='http://flowin.space/tornelo/' /> -->
<!-- </center> -->
</body>
</html>
\ No newline at end of file
body {
font-family: 'RalewayRegular';
font-weight: normal;
font-style: normal;
background: #eee;
margin: 0;
padding: 0;
left: 0;
top: 0;
}
#logo {
position: fixed;
top: 0px;
left: 10px;
z-index: 100;
border-radius: 100px;
border: 10px solid #fff;
box-shadow: 0 9px 30px -21px rgba(0,0,0,.7);
}
#titolo {
box-shadow: 0 -5px 30px -8px rgba(0,0,0,.4);
position: fixed;
width: 100%;
top: 0;
left: 0;
margin: 0;
background: #fff;
padding: 0;
height: 56px;
z-index: 10;
}
#titolo > h1 {
position: absolute;
left: 50%;
transform: translate(calc(-50% - 0px), calc(-50% - 2px));
font-size: 25px;
top: 50%;
text-shadow: 1px 2px 4px rgba(0,0,0,.1);
}
#content {
margin-top: 80px;
}
#qr {
margin: 20px 0;
border: 8px solid #fff;
box-shadow: 0 0px 10px -5px rgba(0,0,0,.4);
border-radius: 12px;
}
.titleSection {
font-size: 22px;
font-weight: bold;
margin: 20px 0;
text-align: center;
}
h2.titleSection {
text-transform: uppercase;
font-size: 22px;
}
h4.titleSection {
font-size: 18px;
}
p.centered {
text-align: center;
}
/* BOOTSTRAP */
.btn.bigFontButton {
height: 38px;
padding: 0 0px;
width: 34px;
}
.btn.bigFontButton > span {
font-size: 40px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(calc(-50% - 1px),calc(-50% + 1px));
}
.input-padding {
margin-bottom: 40px;
}
\ No newline at end of file
This diff is collapsed.
<?php
echo "<!doctype html>
<!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>
<style>
body {
font-family: 'RalewayRegular';
font-weight: normal;
font-style: normal;
background: #eee;
margin: 0;
padding: 0;
left: 0;
top: 0;
}
#logo {
position: fixed;
top: 0px;
left: 10px;
z-index: 100;
border-radius: 100px;
border: 15px solid #fff;
box-shadow: 0 9px 30px -21px rgba(0,0,0,.7);
}
#titolo {
box-shadow: 0 -5px 30px -8px rgba(0,0,0,.4);
position: fixed;
width: 100%;
top: 0;
left: 0;
margin: 0;
background: #fff;
padding: 0;
height: 65px;
}
#titolo > h1 {
position: absolute;
left: 48%;
transform: translateX(-50%);
font-size: 25px;
top: 0;
text-shadow: 1px 2px 4px rgba(0,0,0,.1);
}
#content {
margin-top: 145px;
}
</style>
";
$output = shell_exec('./tornelo.py --update prova aaaa bbbb 0.5 --web 2>&1');
echo "<body><center>";
<link rel="stylesheet" href="css/main.css" />
</head>
echo "
<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>";
echo "<div id='content'><h2>CLASSIFICA</h2>", "<br/>";
$output2 = shell_exec('./tornelo.py --ranking prova --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));
// echo "<br/>== PARTITE ==", "<br/><br/>";
echo "<h2>PARTITE</h2>", "<br/>";
$output3 = shell_exec('./tornelo.py --match prova --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;', $output3));
echo "</div></center></body></html>";
<?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 class="container-fluid">
<center>
<img id='qr' src='img/torneloQR.gif' height='140px' width='140px' alt='http://flowin.space/tornelo/' />
</center>
<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-md-6">
<h4 class='titleSection'>Ranking</h4>
<p class="centered">
<?php
$output1 = shell_exec('./tornelo.py --ranking prova --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 prova --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 cippo --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 cippo --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
......@@ -142,4 +166,4 @@ echo "</div></center></body></html>";
// }
// echo build_table($data);
?>
?>
\ No newline at end of file
#!/usr/bin/env python3
import math, sys, json, os.path
import math, sys, json, os.path, time
# cartella dei tornei
tornei_dir = os.path.dirname('data/')
......@@ -190,9 +190,12 @@ def aggiornaTorneo(torneo, giocatoreX, giocatoreY, risultatoX, web=False):
torneo['GIOCATORI'][str(id)]['RANK'] = nuovoPunteggioY
torneo['GIOCATORI'][str(id)]['MATCH'] = torneo['GIOCATORI'][str(id)]['MATCH'] + 1
now = time.localtime()
dataora = str(now[3]) + ':' + str(now[4]) + ' - ' + str(now[2]) + '/' + str(now[1])
# aggiorna classifica
aggiornaRanking(torneo)
torneo['MATCHES'].append((giocatoreX, giocatoreY, risultatoX))
torneo['MATCHES'].append((giocatoreX, giocatoreY, risultatoX, '(' + dataora + ')'))
return scriviTorneo(torneo, web)
......@@ -216,9 +219,16 @@ def aggiornaRanking(torneo, web=False):
if(torneo['GIOCATORI'][i]['RANK'] > 0): # rank non negativi
nome = torneo['GIOCATORI'][i]['NOME']
rank = torneo['GIOCATORI'][i]['RANK']
partite = torneo['GIOCATORI'][i]['MATCH']
if(torneo['GIOCATORI'][i]['MATCH'] > 5):
stabile = True
else:
stabile = False
classifica.append((nome, rank))
classifica = sorted(classifica, key=lambda giocatore: giocatore[1], reverse=True)
classifica.append((nome, rank, partite, stabile))
classifica = sorted(classifica, key=lambda giocatore: (giocatore[1], giocatore[2]), reverse=True) #sort su due criteri (punteggio, partite)
torneo['RANKING'] = classifica
......@@ -239,7 +249,7 @@ def aggiornaRanking(torneo, web=False):
# Stampa, quindi, la classifica aggiornata.
######################################################################################################################################################
HELP = 'Benvenuto in torneo-web (interfaccia CLI), le opzioni sono le seguenti:\n\n -n TORNEO\t\t\t(--new) per creare un torneo con il nome indicato\n -i TORNEO\t\t\t(--import) per caricare il file json del torneo con il nome indicato (data/NOMETORNEO/NOMETORNEO.json)\n -a TORNEO GIOCATORE \t\t(--add) aggiunge GIOCATORE a TORNEO\n -d TORNEO GIOCATORE\t\t(--delete) cancella (azzera i valori di) GIOCATORE in TORNEO\n -u TORNEO G1 G2 RIS\t\t(--update) aggiorna TORNEO con il RIS (risultato) (0, 0.5, 1) del match tra G1 e G2\n -m TORNEO\t\t\t(--match) mostra la lista dei match di TORNEO\n -p TORNEO\t\t\t(--print) mostra tutto il contenuto di TORNEO\n -r TORNEO\t\t\t(--ranking) mostra la classifica di TORNEO\n -m TORNEO\t\t\t(--matches) mostra le partite di TORNEO\n\n --web\t\t\t\tda aggiungere come ULTIMO parametro, serve a non causare problemi di permessi di scrittura (USARE SOLO IN PHP!)\n --help\t\t\tmostra questo messaggio\n --test\t\t\tusa dei tornei di test\n'
HELP = 'Benvenuto in torneo-web (interfaccia CLI), le opzioni sono le seguenti:\n\n -n TORNEO\t\t\t(--new) per creare un torneo con il nome indicato\n -i TORNEO\t\t\t(--import) per caricare il file json del torneo con il nome indicato (data/NOMETORNEO/NOMETORNEO.json)\n -a TORNEO GIOCATORE \t\t(--add) aggiunge GIOCATORE a TORNEO\n -d TORNEO GIOCATORE\t\t(--delete) cancella (azzera i valori di) GIOCATORE in TORNEO\n -u TORNEO G1 G2 RIS\t\t(--update) aggiorna TORNEO con il RIS (risultato) (0, 0.5, 1) del match tra G1 e G2\n -m TORNEO\t\t\t(--match) mostra la lista dei match di TORNEO\n -l \t\t\t\t(--list) mostra la lista dei tornei in \'data/\'\n -g TORNEO\t\t\t(--giocatori) mostra la lista dei giocatori in TORNEO\n\n -p TORNEO\t\t\t(--print) mostra tutto il contenuto di TORNEO\n -r TORNEO\t\t\t(--ranking) mostra la classifica di TORNEO\n\n --web\t\t\t\tda aggiungere come ULTIMO parametro, serve a non causare problemi di permessi di scrittura (USARE SOLO IN PHP!)\n --help\t\t\tmostra questo messaggio\n --test\t\t\tusa dei tornei di test\n'
## sezione opzioni script
......@@ -338,6 +348,55 @@ if(len(sys.argv) > 1): ## getting p
elif(options[1] == '-r' or options[1] == '--ranking'):
if(len(options) > 2):
torneo = options[2]
torneo = importaTorneo(torneo, web) # True come parametro opzionale x funzionare coi permessi da shell e non da web
instabili = False
caratteri_omessi = ",'[(]"
caratteri_sostituiti = ")"
ranking = {'stabili': [], 'instabili': []}
for giocatore in torneo['RANKING']:
if (giocatore[-1]):
ranking['stabili'].append(giocatore[0:3])
else:
ranking['instabili'].append(giocatore[0:3])
instabili = True
ranking_str = ' ' + str(ranking['stabili'])
if(instabili):
ranking_str += '\n== Match < 5 ==\n ' + str(ranking['instabili'])
for char in caratteri_omessi:
ranking_str = ranking_str.replace(char, '')
ranking_str = ranking_str.replace(caratteri_sostituiti, '\n')
print(ranking_str)
else:
print('Manca il nome del torneo!')
## lista dei tornei
elif(options[1] == '-l' or options[1] == '--list'):
caratteri_omessi = "'[]"
tornei = ' ' + str(os.listdir('data/'))
for char in caratteri_omessi:
tornei = tornei.replace(char, '')
tornei = tornei.replace(',', '\n')
print(tornei)
## lista dei giocatori
elif(options[1] == '-g' or options[1] == '--giocatori'):
if(len(options) > 2):
torneo = options[2]
torneo = importaTorneo(torneo, web) # True come parametro opzionale x funzionare coi permessi da shell e non da web
......@@ -345,14 +404,19 @@ if(len(sys.argv) > 1): ## getting p
caratteri_omessi = ",'[(]"
caratteri_sostituiti = ")"
ranking = ' ' + str(torneo['RANKING'])
giocatori = []
for gid in torneo['GIOCATORI']:
giocatori.append((torneo['GIOCATORI'][gid]['NOME'], torneo['GIOCATORI'][gid]['MATCH']))
giocatori = ' ' + str(giocatori)
for char in caratteri_omessi:
ranking = ranking.replace(char, '')
giocatori = giocatori.replace(char, '')
ranking = ranking.replace(caratteri_sostituiti, '\n')
giocatori = giocatori.replace(caratteri_sostituiti, '\n')
print(ranking)
print(giocatori)
else:
print('Manca il nome del torneo!')
......@@ -368,12 +432,16 @@ if(len(sys.argv) > 1): ## getting p
matches = matches.replace('[', '')
matches = matches.replace('],', '\n')
matches = matches.replace(', 0.0', ': 1')
matches = matches.replace(', 0.0', ': 2')
matches = matches.replace(', 0.5', ': X')
matches = matches.replace(', 1.0', ': 2')
matches = matches.replace(', 1.0', ': 1')
matches = matches.replace('1,', '1')
matches = matches.replace('X,', 'X')
matches = matches.replace('2,', '2')
matches = matches.replace(', ', ' - ')
# matches = matches.replace('- (', ' ')
caratteri_omessi = "[]'"
caratteri_omessi = "[]',"
for char in caratteri_omessi:
matches = matches.replace(char, '')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment