Admin: Fix the admin page
This commit is contained in:
parent
a4f3041a73
commit
073bc9048d
119
admin/index.php
119
admin/index.php
@ -16,104 +16,103 @@
|
||||
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
|
||||
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
|
||||
*/
|
||||
namespace Framadate;
|
||||
|
||||
use Framadate\Services\AdminPollService;
|
||||
use Framadate\Services\LogService;
|
||||
use Framadate\Services\PollService;
|
||||
use Framadate\Services\SuperAdminService;
|
||||
use Framadate\Utils;
|
||||
|
||||
include_once __DIR__ . '/../app/inc/init.php';
|
||||
include_once __DIR__ . '/../bandeaux.php';
|
||||
|
||||
/* Services */
|
||||
/*----------*/
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
$adminPollService = new AdminPollService($connect, $pollService, $logService);
|
||||
$superAdminService = new SuperAdminService($connect);
|
||||
|
||||
// Ce fichier index.php se trouve dans le sous-repertoire ADMIN de Studs. Il sert à afficher l'intranet de studs
|
||||
// pour modifier les sondages directement sans avoir reçu les mails. C'est l'interface d'aministration
|
||||
// de l'application.
|
||||
|
||||
// Affichage des balises standards
|
||||
Utils::print_header( _('Polls administrator') );
|
||||
Utils::print_header(_('Polls administrator'));
|
||||
bandeau_titre(_('Polls administrator'));
|
||||
|
||||
$sondage=$connect->Execute('SELECT * FROM sondage');
|
||||
$polls = $superAdminService->findAllPolls();
|
||||
|
||||
echo '<form action="' . Utils::get_server_name() . 'admin/index.php" method="POST">' . "\n";
|
||||
|
||||
echo'
|
||||
<form action="' . Utils::get_server_name() . 'admin/index.php" method="POST">'."\n";
|
||||
// Test et affichage du bouton de confirmation en cas de suppression de sondage
|
||||
while($dsondage = $sondage->FetchNextObject(false)) {
|
||||
if (Utils::issetAndNoEmpty('supprimersondage'.$dsondage->id_sondage) === true) {
|
||||
foreach ($polls as $poll) {
|
||||
if (!empty($_POST['supprimersondage' . $poll->id])) {
|
||||
echo '
|
||||
<div class="alert alert-warning text-center">
|
||||
<h3>'. _("Confirm removal of the poll ") .'"'.$dsondage->id_sondage.'</h3>
|
||||
<p><button class="btn btn-default" type="submit" value="1" name="annullesuppression">'._('Keep this poll!').'</button>
|
||||
<button type="submit" name="confirmesuppression'.$dsondage->id_sondage.'" value="1" class="btn btn-danger">'._('Remove this poll!').'</button></p>
|
||||
<h3>' . _("Confirm removal of the poll ") . '"' . $poll->id . '</h3>
|
||||
<p><button class="btn btn-default" type="submit" value="1" name="annullesuppression">' . _('Keep this poll!') . '</button>
|
||||
<button type="submit" name="confirmesuppression' . $poll->id . '" value="1" class="btn btn-danger">' . _('Remove this poll!') . '</button></p>
|
||||
</div>';
|
||||
}
|
||||
|
||||
// Traitement de la confirmation de suppression
|
||||
if (Utils::issetAndNoEmpty('confirmesuppression'.$dsondage->id_sondage) === true) {
|
||||
if (!empty($_POST['confirmesuppression' . $poll->id])) {
|
||||
// On inclut la routine de suppression
|
||||
$date = date('H:i:s d/m/Y');
|
||||
|
||||
if (Utils::remove_sondage($connect, $dsondage->id_sondage)) {
|
||||
// ecriture des traces dans le fichier de logs
|
||||
error_log($date . " SUPPRESSION: $dsondage->id_sondage\t$dsondage->format\t$dsondage->nom_admin\t$dsondage->mail_admin\n", 3, 'logs_studs.txt');
|
||||
}
|
||||
$adminPollService->deleteEntirePoll($poll->id);
|
||||
}
|
||||
}
|
||||
|
||||
$sondage=$connect->Execute('SELECT * FROM sondage WHERE date_fin > DATE_SUB(now(), INTERVAL 3 MONTH) ORDER BY date_fin ASC');
|
||||
$nbsondages=$sondage->RecordCount();
|
||||
$btn_logs = (is_readable('../' . LOG_FILE)) ? '<a role="button" class="btn btn-default btn-xs pull-right" href="' . Utils::get_server_name() . LOG_FILE . '">' . _("Logs") . '</a>' : '';
|
||||
|
||||
$btn_logs = (is_readable('logs_studs.txt')) ? '<a role="button" class="btn btn-default btn-xs pull-right" href="'.str_replace('/admin','', Utils::get_server_name()).'admin/logs_studs.txt">'. _("Logs") .'</a>' : '';
|
||||
|
||||
echo '<p>' . $nbsondages. ' ' . _("polls in the database at this time") . $btn_logs .'</p>'."\n";
|
||||
echo '<p>' . count($polls) . ' ' . _("polls in the database at this time") . $btn_logs . '</p>' . "\n";
|
||||
|
||||
// tableau qui affiche tous les sondages de la base
|
||||
echo '<table class="table table-bordered">
|
||||
<tr align="center">
|
||||
<th scope="col">'. _('Poll ID') .'</th>
|
||||
<th scope="col">'. _('Format') .'</th>
|
||||
<th scope="col">'. _('Title') .'</th>
|
||||
<th scope="col">'. _('Author') .'</th>
|
||||
<th scope="col">'. _('Email') .'</th>
|
||||
<th scope="col">'. _('Expiration\'s date') .'</th>
|
||||
<th scope="col">'. _('Users') .'</th>
|
||||
<th scope="col" colspan="3">'. _('Actions') .'</th>
|
||||
</tr>'."\n";
|
||||
<th scope="col">' . _('Poll ID') . '</th>
|
||||
<th scope="col">' . _('Format') . '</th>
|
||||
<th scope="col">' . _('Title') . '</th>
|
||||
<th scope="col">' . _('Author') . '</th>
|
||||
<th scope="col">' . _('Email') . '</th>
|
||||
<th scope="col">' . _('Expiration\'s date') . '</th>
|
||||
<th scope="col">' . _('Users') . '</th>
|
||||
<th scope="col" colspan="3">' . _('Actions') . '</th>
|
||||
</tr>' . "\n";
|
||||
|
||||
$i = 0;
|
||||
while($dsondage = $sondage->FetchNextObject(false)) {
|
||||
/* possible en 1 bonne requête dans $sondage */
|
||||
$subjects = $connect->Execute("SELECT * FROM sujet_studs WHERE id_sondage='$dsondage->id_sondage'");
|
||||
$dsujets = $subjects->FetchObject(false);
|
||||
foreach ($polls as $poll) {
|
||||
$nb_users = $pollService->countVotesByPollId($poll->id);
|
||||
|
||||
$user_studs = $connect->Execute("SELECT * from user_studs WHERE id_sondage='$dsondage->id_sondage'");
|
||||
$nb_users = $user_studs->RecordCount();
|
||||
|
||||
echo '
|
||||
<tr align="center">
|
||||
<td>'.$dsondage->id_sondage.'</td>
|
||||
<td>'.$dsondage->format.'</td>
|
||||
<td>'. stripslashes($dsondage->titre).'</td>
|
||||
<td>'.stripslashes($dsondage->nom_admin).'</td>
|
||||
<td>'.stripslashes($dsondage->mail_admin).'</td>';
|
||||
|
||||
if (strtotime($dsondage->date_fin) > time()) {
|
||||
echo '<td>'.date('d/m/y', strtotime($dsondage->date_fin)).'</td>';
|
||||
if ($poll->format === 'D') {
|
||||
$format_html = '<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span><span class="sr-only">'. _('Date').'</span>';
|
||||
} else {
|
||||
echo '<td><span class="text-danger">'
|
||||
. date('d/m/y', strtotime($dsondage->date_fin))
|
||||
. '</span></td>';
|
||||
$format_html = '<span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span><span class="sr-only">'. _('Classic').'</span>';
|
||||
}
|
||||
echo '
|
||||
<td>'.$nb_users.'</td>
|
||||
<td><a href="' . Utils::getUrlSondage($dsondage->id_sondage) . '" class="btn btn-link" title="'. _('See the poll') .'"><span class="glyphicon glyphicon-eye-open"></span><span class="sr-only">' . _('See the poll') . '</span></a></td>
|
||||
<td><a href="' . Utils::getUrlSondage($dsondage->id_sondage_admin, true) . '" class="btn btn-link" title="'. _('Change the poll') .'"><span class="glyphicon glyphicon-pencil"></span><span class="sr-only">' . _("Change the poll") . '</span></a></td>
|
||||
<td><button type="submit" name="supprimersondage'.$dsondage->id_sondage.'" value="'. _('Remove the poll') .'" class="btn btn-link" title="'. _("Remove the poll") .'"><span class="glyphicon glyphicon-trash text-danger"></span><span class="sr-only">' . _('Remove the poll') . '</span></td>
|
||||
</tr>'."\n";
|
||||
<tr align="center">
|
||||
<td>' . $poll->id . '</td>
|
||||
<td>' . $format_html . '</td>
|
||||
<td>' . htmlentities($poll->title) . '</td>
|
||||
<td>' . htmlentities($poll->admin_name) . '</td>
|
||||
<td>' . htmlentities($poll->admin_mail) . '</td>';
|
||||
|
||||
if (strtotime($poll->end_date) > time()) {
|
||||
echo '<td>' . date('d/m/y', strtotime($poll->end_date)) . '</td>';
|
||||
} else {
|
||||
echo '<td><span class="text-danger">' . date('d/m/y', strtotime($poll->end_date)) . '</span></td>';
|
||||
}
|
||||
echo '
|
||||
<td>' . $nb_users . '</td>
|
||||
<td><a href="' . Utils::getUrlSondage($poll->id) . '" class="btn btn-link" title="' . _('See the poll') . '"><span class="glyphicon glyphicon-eye-open"></span><span class="sr-only">' . _('See the poll') . '</span></a></td>
|
||||
<td><a href="' . Utils::getUrlSondage($poll->admin_id, true) . '" class="btn btn-link" title="' . _('Change the poll') . '"><span class="glyphicon glyphicon-pencil"></span><span class="sr-only">' . _("Change the poll") . '</span></a></td>
|
||||
<td><button type="submit" name="supprimersondage' . $poll->id . '" value="' . _('Remove the poll') . '" class="btn btn-link" title="' . _("Remove the poll") . '"><span class="glyphicon glyphicon-trash text-danger"></span><span class="sr-only">' . _('Remove the poll') . '</span></td>
|
||||
</tr>' . "\n";
|
||||
++$i;
|
||||
}
|
||||
|
||||
echo '</table></form>'."\n";
|
||||
echo '</table></form>' . "\n";
|
||||
|
||||
bandeau_pied(true);
|
||||
|
||||
// si on annule la suppression, rafraichissement de la page
|
||||
/*if (Utils::issetAndNoEmpty('annulesuppression') === true) {
|
||||
// TODO
|
||||
}*/
|
||||
|
@ -36,7 +36,7 @@ $editingVoteId = 0;
|
||||
/* Services */
|
||||
/*----------*/
|
||||
|
||||
$logService = new LogService(LOG_FILE);
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
$adminPollService = new AdminPollService($connect, $pollService, $logService);
|
||||
$inputService = new InputService();
|
||||
|
@ -274,4 +274,21 @@ class FramaDB {
|
||||
return $prepared->fetchAll();
|
||||
}
|
||||
|
||||
public function findAllPolls() {
|
||||
$prepared = $this->prepare('SELECT * FROM ' . Utils::table('poll') . ' ORDER BY end_date ASC');
|
||||
$prepared->execute([]);
|
||||
|
||||
return $prepared->fetchAll();
|
||||
}
|
||||
|
||||
public function countVotesByPollId($poll_id) {
|
||||
$prepared = $this->prepare('SELECT count(1) nb FROM ' . Utils::table('vote') . ' WHERE poll_id = ?');
|
||||
|
||||
$prepared->execute([$poll_id]);
|
||||
$result = $prepared->fetch();
|
||||
$prepared->closeCursor();
|
||||
|
||||
return $result->nb;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,10 +8,7 @@ namespace Framadate\Services;
|
||||
*/
|
||||
class LogService {
|
||||
|
||||
private $output;
|
||||
|
||||
function __construct($output) {
|
||||
$this->output = $output;
|
||||
function __construct() {
|
||||
}
|
||||
|
||||
/**
|
||||
@ -21,7 +18,7 @@ class LogService {
|
||||
* @param $message string some message
|
||||
*/
|
||||
function log($tag, $message) {
|
||||
error_log(date('Ymd His') . ' [' . $tag . '] ' . $message . "\n", 3, $this->output);
|
||||
error_log(date('Ymd His') . ' [' . $tag . '] ' . $message . "\n", 3, LOG_FILE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -75,6 +75,10 @@ class PollService {
|
||||
return $this->connect->insertComment($poll_id, $name, $comment);
|
||||
}
|
||||
|
||||
public function countVotesByPollId($poll_id) {
|
||||
return $this->connect->countVotesByPollId($poll_id);
|
||||
}
|
||||
|
||||
function computeBestChoices($votes) {
|
||||
$result = [];
|
||||
foreach ($votes as $vote) {
|
||||
|
29
app/classes/Framadate/Services/SuperAdminService.php
Normal file
29
app/classes/Framadate/Services/SuperAdminService.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
namespace Framadate\Services;
|
||||
|
||||
use Framadate\FramaDB;
|
||||
|
||||
/**
|
||||
* The class provides action for application administrators.
|
||||
*
|
||||
* @package Framadate\Services
|
||||
*/
|
||||
class SuperAdminService {
|
||||
|
||||
private $connect;
|
||||
|
||||
function __construct(FramaDB $connect) {
|
||||
$this->connect = $connect;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of all polls.
|
||||
*
|
||||
* @return array All the polls
|
||||
*/
|
||||
public function findAllPolls() {
|
||||
return $this->connect->findAllPolls();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ include_once __DIR__ . '/app/inc/init.php';
|
||||
|
||||
/* Service */
|
||||
/*---------*/
|
||||
$logService = new LogService(LOG_FILE);
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
$mailService = new MailService($config['use_smtp']);
|
||||
$purgeService = new PurgeService($connect, $logService);
|
||||
|
@ -28,7 +28,7 @@ include_once __DIR__ . '/app/inc/init.php';
|
||||
|
||||
/* Service */
|
||||
/*---------*/
|
||||
$logService = new LogService(LOG_FILE);
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
$mailService = new MailService($config['use_smtp']);
|
||||
$purgeService = new PurgeService($connect, $logService);
|
||||
|
@ -36,7 +36,7 @@ $poll = null;
|
||||
/* Services */
|
||||
/*----------*/
|
||||
|
||||
$logService = new LogService(LOG_FILE);
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
|
||||
/* PAGE */
|
||||
|
@ -36,7 +36,7 @@ $editingVoteId = 0;
|
||||
/* Services */
|
||||
/*----------*/
|
||||
|
||||
$logService = new LogService(LOG_FILE);
|
||||
$logService = new LogService();
|
||||
$pollService = new PollService($connect, $logService);
|
||||
$inputService = new InputService();
|
||||
$mailService = new MailService($config['use_smtp']);
|
||||
|
Loading…
Reference in New Issue
Block a user