Added online stats editor

This commit is contained in:
Keplyx 2018-06-15 09:33:29 +02:00
parent 00b67002b9
commit c67af067b3
17 changed files with 463 additions and 78 deletions

View file

@ -76,3 +76,115 @@
width: 100%; width: 100%;
} }
} }
.edit-button-container {
border: none;
}
.edit-button {
width: auto;
background: #fafafa;
color: #000;
border-radius: 5px;
padding: 5px;
box-shadow: 0 0 5px #000000;
}
.edit-button:hover {
color: #fafafa;
}
#button-urss:hover {
background: #ee293d;
}
#button-usa:hover {
background: #1a5dad;
}
.stats-button-container {
display: inline-flex;
}
.stats-button {
width: auto;
background: #fafafa;
color: #000;
border-radius: 5px;
padding: 15px;
box-shadow: 0 0 5px #000000;
}
.stats-button:hover {
color: #fafafa;
background: #1a1a1a;
}
.edit-stats {
width: 100%;
}
input {
text-align: center;
background: #1a1a1a;
color: #fafafa;
width: 100%;
border: none;
font-family: inherit;
font-size: inherit;
}
.remove-line {
color: #ff1200;
cursor: pointer;
transition: 0.3s;
}
.remove-line svg {
pointer-events: none;
}
.remove-line:hover {
color: #ff4000;
}
.add-line{
font-size: 30px;
color: #fafafa;
cursor: pointer;
transition: 0.3s;
margin: 1% 1% 1% 1%;
width: 100%;
border-radius: 5px;
}
#add-line-usa {
background: #3a7eaa;
}
.add-line#add-line-usa:hover {
background: #53bbfc;
}
#add-line-urss {
background: #d72229;
}
.add-line#add-line-urss:hover {
background: #ee293d;
}
.save-score {
background: #21aa08;
font-size: 30px;
color: #fafafa;
cursor: pointer;
transition: 0.3s;
margin: 30px 1% 1% 1%;
width: 100%;
border-radius: 5px;
}
.save-score:hover {
background: #2ce20b;
}

53
classes/dao.php Normal file
View file

@ -0,0 +1,53 @@
<?php
class Dao {
private $conn;
public function __construct($path_to_password)
{
$username = 'accueil_insa';
$password = $this->read_password($path_to_password);
$dsn = 'mysql:dbname=accueil_insa;host=127.0.0.1';
try {
$this->conn = new PDO($dsn, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']);
}
catch (PDOException $e){
die($e->getMessage());
}
}
private function read_password($path_to_password){
$file = fopen($path_to_password."includes/.htpassdb", "r") or die("Unable to open file!");;
$password = fgets($file);
fclose($file);
return $password;
}
public function get_score_team($team){
$sql = 'SELECT text, points FROM scores WHERE team = ?';
$cursor = $this->conn->prepare($sql);
$cursor->execute([$team]);
return $cursor->fetchAll(PDO::FETCH_ASSOC);
}
public function save_scores($scores_json, $team){
// var_dump($scores_json);
// var_dump($team);
$sql = 'DELETE FROM scores WHERE team = ?';
$cursor = $this->conn->prepare($sql);
$cursor->execute([$team]);
$array = json_decode($scores_json)->array;
foreach ($array as $value){
$sql = 'INSERT INTO scores (text, points, team) VALUES (?, ?, ?)';
$cursor = $this->conn->prepare($sql);
$cursor->execute([$value->text, $value->points, $team]);
}
}
}

1
edit_score/.htaccess Normal file
View file

@ -0,0 +1 @@
Options -Indexes

View file

@ -0,0 +1,114 @@
<?php
require_once '../../classes/dao.php';
if (!isset($team))
$team = 'usa';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width,maximum-scale=2">
<script defer src="https://use.fontawesome.com/releases/v5.0.13/js/all.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="../../assets/css/style.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../assets/css/sidenav.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../assets/css/score.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../assets/css/hamburger.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../assets/css/stats.css"/>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js"></script>
<script src="../statsManager.js"></script>
<link href="https://fonts.googleapis.com/css?family=Montserrat|Raleway|Russo+One" rel="stylesheet">
<link rel="shortcut icon" href="../favicon.ico">
<title>Score <?= strtoupper($team) ?> | ADMIN | INSAT Accueil 2018</title>
<?= $pageMeta // Additional metadata ?>
<!-- Matomo -->
<script type="text/javascript">
var _paq = _paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//etud.insa-toulouse.fr/~accueil_insa/analytics/";
_paq.push(['setTrackerUrl', u + 'piwik.php']);
_paq.push(['setSiteId', '1']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.async = true;
g.defer = true;
g.src = u + 'piwik.js';
s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body id="main">
<div class="background"></div>
<div id="header-wrap" class="outer">
<header class="inner">
<h1 id="title">Administration</h1>
</header>
</div>
<div class="stats-button-container">
<a href="../../stats.php" class="stats-button">
Retour sur le site
</a>
</div>
<div id="main-fading-top-edge"></div>
<div id="main-content-wrap" class="outer">
<section id="main-content" class="inner">
<h1>Editer Score <?= strtoupper($team) ?></h1>
<p>
<?= $description ?>
</p>
<table class="stats-table edit-stats" id="stats-<?= $team ?>">
<tr>
<th colspan="3"><?= strtoupper($team) ?></th>
</tr>
<tr>
<td class="stat-log">Log</td>
<td class="stat-points">Points</td>
<td class="stat-points"><i class='fas fa-trash'></i></td>
</tr>
<?php get_stats($team) ?>
</table>
<div class="add-line" id="add-line-<?= $team ?>">
<i class="fas fa-plus"></i>
</div>
<div class="save-score">
<i class="fas fa-save"></i> Enregistrer
</div>
<br>
<div class="stats-button-container">
<a href="../../stats.php" class="stats-button">
Retour sur le site
</a>
</div>
</section>
</div>
<div id="main-fading-bottom-edge"></div>
</body>
</html>
<?php
function get_stats($team)
{
$dao = new Dao('../../');
foreach ($dao->get_score_team($team) as $row) {
$text = $row['text'];
$points = $row['points'];
?>
<tr class="entry">
<td class><input type='text' value="<?= $text ?>"/></td>
<td><input type='number' value="<?= $points ?>"/></td>
<td class='remove-line'><i class="fas fa-trash"></td>
</tr>
<?php
}
}

View file

@ -0,0 +1,45 @@
$(document).ready(function () {
$(".add-line").click(function () {
$(".stats-table")
.append("<tr class='entry'>" +
"<td>" +
"<input type='text' value='text''></td>" +
"<td><input type='number' value='0'></td>" +
"<td class='remove-line'>" +
"<i class='fas fa-trash'></i>" +
"</td>" +
"</tr>");
});
$(".stats-table").on("click", ".remove-line", function (elem) {
$(elem.target).parent().remove();
console.log("clicked")
});
$(".save-score").click(function () {
let lines = get_lines();
let object = {"array": lines};
let ajaxurl = 'post_scores.php';
let data = {'data': JSON.stringify(object)};
$.post(ajaxurl, data, function (data, status) {
alert("\nStatus: " + status);
});
});
});
function get_lines() {
let elements = $(".entry").map(function () {
return this;
}).get();
let array = [];
for (let i = 0; i < elements.length; i++) {
let fields = $(elements[i]).find('input');
let values = {"text": "", "points": 0};
for (let j = 0; j < fields.length; j++) {
if ($(fields[j]).attr("type") === "text")
values.text = $(fields[j]).prop("value");
if ($(fields[j]).attr("type") === "number")
values.points = parseInt($(fields[j]).prop("value"));
}
array.push(values);
}
return array;
}

View file

@ -0,0 +1,4 @@
AuthName "Generals Only"
AuthType Basic
AuthUserFile /home_clubs/accueil_insa/public_html/includes/.htpassurss
require valid-user

7
edit_score/urss/edit.php Normal file
View file

@ -0,0 +1,7 @@
<?php
$description = 'Whoa t\'es admin ! Ici tu peux éditer le score pour les rouges, mais essaie de pas abuser sur les points stp.';
$team = 'urss';
include '../edit_template.php'; // Display template with variable content

View file

@ -0,0 +1,6 @@
<?php
require_once '../../classes/dao.php';
$dao = new Dao('../../');
$dao->save_scores($_POST['data'], 'urss');

4
edit_score/usa/.htaccess Normal file
View file

@ -0,0 +1,4 @@
AuthName "Generals Only"
AuthType Basic
AuthUserFile /home_clubs/accueil_insa/public_html/includes/.htpassusa
require valid-user

7
edit_score/usa/edit.php Normal file
View file

@ -0,0 +1,7 @@
<?php
$description = 'Whoa t\'es admin ! Ici tu peux éditer le score pour les riquains, mais essaie de pas abuser sur les points stp.';
$team = 'usa';
include '../edit_template.php'; // Display template with variable content

View file

@ -0,0 +1,6 @@
<?php
require_once '../../classes/dao.php';
$dao = new Dao('../../');
$dao->save_scores($_POST['data'], 'usa');

1
includes/.htpassurss Normal file
View file

@ -0,0 +1 @@
urss:$apr1$be3lzprv$6ML9yz0HALe/oI9DRKEaw0

1
includes/.htpassusa Normal file
View file

@ -0,0 +1 @@
usa:$apr1$53morzy0$GxlXNPAdPtiin1/7/xQo4/

View file

@ -1,15 +1,11 @@
<?php <?php
require_once 'classes/dao.php';
function get_total_points($is_urss) function get_total_points($team)
{ {
$json_source = file_get_contents('https://raw.githubusercontent.com/Keplyx/site-accueil-insa/master/historique.json'); $dao = new Dao('');
$json_data = json_decode($json_source, true);
$root = "usa";
if ($is_urss)
$root = "urss";
$points = 0; $points = 0;
foreach ($json_data[$root] as $v) { foreach ($dao->get_score_team($team) as $row) {
$points += $v['points']; $points += $row['points'];
} }
return $points; return $points;
} }
@ -23,9 +19,9 @@ function get_total_points($is_urss)
<img class="score-logo" src="assets/images/usa_logo.png"> <img class="score-logo" src="assets/images/usa_logo.png">
</a> </a>
<a href="stats.php"> <a href="stats.php">
<div id="score-usa"><?php echo get_total_points(false) ?></div> <div id="score-usa"><?= get_total_points('usa') ?></div>
<div id="score-separator">/</div> <div id="score-separator">/</div>
<div id="score-urss"><?php echo get_total_points(true) ?></div> <div id="score-urss"><?= get_total_points('urss') ?></div>
</a> </a>
<a href="urss.php"> <a href="urss.php">
<img class="score-logo" src="assets/images/urss_logo.png"> <img class="score-logo" src="assets/images/urss_logo.png">

9
schema.sql Normal file
View file

@ -0,0 +1,9 @@
drop table if exists scores;
create table scores(
`ID` bigint primary key auto_increment,
`text` text not null,
`points` int not null,
`team` varchar(4) not null
)
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;

View file

@ -1,32 +1,45 @@
<?php <?php
require_once 'classes/dao.php';
ob_start(); // Start reading html ob_start(); // Start reading html
function get_stats($is_urss){
$json_source = file_get_contents('https://raw.githubusercontent.com/Keplyx/site-accueil-insa/master/historique.json'); function get_stats($team)
$json_data = json_decode($json_source, true); {
$root = "usa"; $dao = new Dao('');
if ($is_urss) foreach ($dao->get_score_team($team) as $row) {
$root = "urss"; $text = $row['text'];
foreach($json_data[$root] as $v){ $points = $row['points'];
if ($v['points'] > 0) if ($points > 0)
echo "<tr id='positive'>"; $id = "positive";
else else
echo "<tr id='negative'>"; $id = "negative";
echo "<td>".$v['text']."</td>"; ?>
echo "<td>".$v['points']."</td>"; <tr id="<?= $id ?>">
echo "</tr>"; <td><?= $text ?></td>
<td><?= $points ?></td>
</tr>
<?php
} }
} }
?> ?>
<h1>Stats</h1> <h1>Stats</h1>
<p> <p>
Les stats de la semaine. Les stats de la semaine.
<br> <br>
Remporte le plus de points possible pour faire gagner ton équipe, mais attention à ne pas lui en faire perdre ! Remporte le plus de points possible pour faire gagner ton équipe, mais attention à ne pas lui en faire perdre !
</p> </p>
<div id="stats-container">
<div id="stats-container">
<table class="stats-table" id="stats-usa"> <table class="stats-table" id="stats-usa">
<tr>
<td colspan="2" class="edit-button-container">
<a href="edit_score/usa/edit.php" class="edit-button" id="button-usa">
Éditer les scores
</a>
</td>
</tr>
<tr> <tr>
<th colspan="2">USA</th> <th colspan="2">USA</th>
</tr> </tr>
@ -34,9 +47,16 @@ function get_stats($is_urss){
<td class="stat-log">Log</td> <td class="stat-log">Log</td>
<td class="stat-points">Points</td> <td class="stat-points">Points</td>
</tr> </tr>
<?php get_stats(false) ?> <?php get_stats('usa') ?>
</table> </table>
<table class="stats-table" id="stats-urss"> <table class="stats-table" id="stats-urss">
<tr>
<td colspan="2" class="edit-button-container">
<a href="edit_score/urss/edit.php" class="edit-button" id="button-urss">
Éditer les scores
</a>
</td>
</tr>
<tr> <tr>
<th colspan="2">URSS</th> <th colspan="2">URSS</th>
</tr> </tr>
@ -44,9 +64,9 @@ function get_stats($is_urss){
<td class="stat-log">Log</td> <td class="stat-log">Log</td>
<td class="stat-points">Points</td> <td class="stat-points">Points</td>
</tr> </tr>
<?php get_stats(true) ?> <?php get_stats('urss') ?>
</table> </table>
</div> </div>
<?php <?php
$pageContent = ob_get_clean(); // Store html content in variable $pageContent = ob_get_clean(); // Store html content in variable
$pageTitle = "Stats"; $pageTitle = "Stats";
@ -56,4 +76,3 @@ ob_start(); // Start reading html
<?php <?php
$pageMeta = ob_get_clean(); // Store html content in variable $pageMeta = ob_get_clean(); // Store html content in variable
include("template.php"); // Display template with variable content include("template.php"); // Display template with variable content
?>

30
usa.php
View file

@ -1,35 +1,35 @@
<?php <?php
ob_start(); // Start reading html ob_start(); // Start reading html
?> ?>
<p id="title"> <p id="title">
Make INSA great again! Make INSA great again!
</p> </p>
<p> <p>
You have joined the greatest nation on the surface of the earth, and you will help us conquer outer space! As a You have joined the greatest nation on the surface of the earth, and you will help us conquer outer space! As a
young patriot, your mission, if you choose to accept it, is to crush the Reds under the command of the most young patriot, your mission, if you choose to accept it, is to crush the Reds under the command of the most
competent General of the US! competent General of the US!
</p> </p>
<p> <p>
Join the fight at <a href="https://www.facebook.com/groups/2040151589559931/">Facebook</a>, and ask to join the Join the fight at <a href="https://www.facebook.com/groups/2040151589559931/">Facebook</a>, and ask to join the
special forces. special forces.
</p> </p>
<p> <p>
Here is your General Here is your General
</p> </p>
<img style="max-width: 300px" src="assets/images/general_usa.jpg"> <img style="max-width: 300px" src="assets/images/general_usa.jpg">
<br> <br>
<a href="https://www.youtube.com/watch?v=zqAZZmgv63Y"> <a href="https://www.youtube.com/watch?v=zqAZZmgv63Y">
Music Music
</a> </a>
<audio controls autoplay hidden> <audio controls autoplay hidden>
<source src="assets/audio/USA.mp3" type="audio/mpeg"> <source src="assets/audio/USA.mp3" type="audio/mpeg">
Your browser does not support the audio element. Your browser does not support the audio element.
</audio> </audio>
<?php <?php
$pageContent = ob_get_clean(); // Store html content in variable $pageContent = ob_get_clean(); // Store html content in variable
ob_start(); // Start reading html ob_start(); // Start reading html
?> ?>
<title>Team USA | Semaine d'Accueil 2018</title> <title>Team USA | Semaine d'Accueil 2018</title>
<?php <?php
$pageMeta = ob_get_clean(); // Store html content in variable $pageMeta = ob_get_clean(); // Store html content in variable
$customBackgroundId = "bg_usa"; $customBackgroundId = "bg_usa";