68d5b64180
Modification de la BDD : ajout de la colonne mail dans la table vote Modification de la BDD : ajout de la colonne mail dans la table vote (bis) MAJ de VoteRepository : méthode insert et update MAJ de PollService : méthodes updateVote, addVote et splitVotes Modification studs.php, adminstuds.php et vote_table_date.tpl : OK pour l'ajout d'un vote avec nom + mail Modification de vote_table_classic.tpl : OK pour l'ajout d'un vote avec nom + mail Ajout d'un bouton enveloppe pour chaque colonne avec méthode de traitement pour test Le numéro de la colonne est enfin récupéré correctement Implémentation récupération des adresses mails des sondés intéressants dans adminstuds.php et appel d'un fichier display_mails.tpl qui affichent ces adresses mails. Extension du traitement pour les sondages classic Ajout récupération des adresses des non aussi, et ajouts de tests pour l'affichage Changement des input type=text en type=email Corrections automatiques pour passage pipelines Corrections suite aux remarques sur la merge request Corrections 2 suite aux remarques sur la merge request Corrections 3 suite aux remarques sur la merge request Modif BDD : ajout colonne collect_mail dans poll Modif classes Form, PollRepository Passage de la collecte des mails des sondés en fonctionalité optionnelle Si la collecte de mail est activée, la saisie du mail est obligatoire Ajout avertissements collect_mail + editableByAll dans création de sondage et tableaux de vote Update create poll string and put a danger background on warning Signed-off-by: Thomas Citharel <tcit@tcit.fr> Translation strings updated and better position for the email public warning message Also, a CSS tweak and cleanup Signed-off-by: Thomas Citharel <tcit@tcit.fr> CS Signed-off-by: Thomas Citharel <tcit@tcit.fr>
185 lines
6.6 KiB
PHP
185 lines
6.6 KiB
PHP
<?php
|
|
namespace Framadate\Repositories;
|
|
|
|
use Framadate\FramaDB;
|
|
use Framadate\Utils;
|
|
use PDO;
|
|
|
|
class PollRepository extends AbstractRepository {
|
|
function __construct(FramaDB $connect) {
|
|
parent::__construct($connect);
|
|
}
|
|
|
|
public function insertPoll($poll_id, $admin_poll_id, $form) {
|
|
$sql = 'INSERT INTO `' . Utils::table('poll') . '`
|
|
(id, admin_id, title, description, admin_name, admin_mail, end_date, format, editable, receiveNewVotes, receiveNewComments, hidden, password_hash, results_publicly_visible, ValueMax, collect_users_mail)
|
|
VALUES (?,?,?,?,?,?,FROM_UNIXTIME(?),?,?,?,?,?,?,?,?,?)';
|
|
$prepared = $this->prepare($sql);
|
|
$prepared->execute([$poll_id, $admin_poll_id, $form->title, $form->description, $form->admin_name, $form->admin_mail, $form->end_date, $form->format, ($form->editable>=0 && $form->editable<=2) ? $form->editable : 0, $form->receiveNewVotes ? 1 : 0, $form->receiveNewComments ? 1 : 0, $form->hidden ? 1 : 0, $form->password_hash, $form->results_publicly_visible ? 1 : 0, $form->ValueMax, $form->collect_users_mail? 1 : 0]);
|
|
}
|
|
|
|
function findById($poll_id) {
|
|
$prepared = $this->prepare('SELECT * FROM `' . Utils::table('poll') . '` WHERE id = ?');
|
|
|
|
$prepared->execute([$poll_id]);
|
|
$poll = $prepared->fetch();
|
|
$prepared->closeCursor();
|
|
|
|
return $poll;
|
|
}
|
|
|
|
public function findByAdminId($admin_poll_id) {
|
|
$prepared = $this->prepare('SELECT * FROM `' . Utils::table('poll') . '` WHERE admin_id = ?');
|
|
|
|
$prepared->execute([$admin_poll_id]);
|
|
$poll = $prepared->fetch();
|
|
$prepared->closeCursor();
|
|
|
|
return $poll;
|
|
}
|
|
|
|
public function existsById($poll_id) {
|
|
$prepared = $this->prepare('SELECT 1 FROM `' . Utils::table('poll') . '` WHERE id = ?');
|
|
|
|
$prepared->execute([$poll_id]);
|
|
|
|
return $prepared->rowCount() > 0;
|
|
}
|
|
|
|
public function existsByAdminId($admin_poll_id) {
|
|
$prepared = $this->prepare('SELECT 1 FROM `' . Utils::table('poll') . '` WHERE admin_id = ?');
|
|
|
|
$prepared->execute([$admin_poll_id]);
|
|
|
|
return $prepared->rowCount() > 0;
|
|
}
|
|
|
|
function update($poll) {
|
|
$prepared = $this->prepare('UPDATE `' . Utils::table('poll') . '` SET title=?, admin_name=?, admin_mail=?, description=?, end_date=?, active=?, editable=?, hidden=?, password_hash=?, results_publicly_visible=? WHERE id = ?');
|
|
|
|
return $prepared->execute([$poll->title, $poll->admin_name, $poll->admin_mail, $poll->description, $poll->end_date, $poll->active, ($poll->editable>=0 && $poll->editable<=2) ? $poll->editable : 0, $poll->hidden ? 1 : 0, $poll->password_hash, $poll->results_publicly_visible ? 1 : 0, $poll->id]);
|
|
}
|
|
|
|
function deleteById($poll_id) {
|
|
$prepared = $this->prepare('DELETE FROM `' . Utils::table('poll') . '` WHERE id = ?');
|
|
|
|
return $prepared->execute([$poll_id]);
|
|
}
|
|
|
|
/**
|
|
* Find old polls. Limit: 20.
|
|
*
|
|
* @return array Array of old polls
|
|
*/
|
|
public function findOldPolls() {
|
|
$prepared = $this->prepare('SELECT * FROM `' . Utils::table('poll') . '` WHERE DATE_ADD(`end_date`, INTERVAL ' . PURGE_DELAY . ' DAY) < NOW() AND `end_date` != 0 LIMIT 20');
|
|
$prepared->execute([]);
|
|
|
|
return $prepared->fetchAll();
|
|
}
|
|
|
|
/**
|
|
* Search polls in database.
|
|
*
|
|
* @param array $search Array of search : ['id'=>..., 'title'=>..., 'name'=>..., 'mail'=>...]
|
|
* @param int $start The number of first entry to select
|
|
* @param int $limit The number of entries to find
|
|
* @return array The found polls
|
|
*/
|
|
public function findAll($search, $start, $limit) {
|
|
// Polls
|
|
|
|
$request = "";
|
|
$request .= "SELECT p.*,";
|
|
$request .= " (SELECT count(1) FROM `" . Utils::table('vote') . "` v WHERE p.id=v.poll_id) votes";
|
|
$request .= " FROM `" . Utils::table('poll') . "` p";
|
|
$request .= " WHERE 1";
|
|
|
|
$values = [];
|
|
|
|
if (!empty($search["poll"])) {
|
|
$request .= " AND p.id LIKE :poll";
|
|
$values["poll"] = "{$search["poll"]}%";
|
|
}
|
|
|
|
$fields = [
|
|
// key of $search => column name
|
|
"title" => "title",
|
|
"name" => "admin_name",
|
|
"mail" => "admin_mail",
|
|
];
|
|
|
|
foreach ($fields as $searchKey => $columnName) {
|
|
if (empty($search[$searchKey])) {
|
|
continue;
|
|
}
|
|
|
|
$request .= " AND p.$columnName LIKE :$searchKey";
|
|
$values[$searchKey] = "%{$search[$searchKey]}%";
|
|
}
|
|
|
|
$request .= " ORDER BY p.title ASC";
|
|
$request .= " LIMIT :start, :limit";
|
|
|
|
$prepared = $this->prepare($request);
|
|
|
|
foreach ($values as $searchKey => $value) {
|
|
$prepared->bindParam(":$searchKey", $value, PDO::PARAM_STR);
|
|
}
|
|
|
|
$prepared->bindParam(':start', $start, PDO::PARAM_INT);
|
|
$prepared->bindParam(':limit', $limit, PDO::PARAM_INT);
|
|
|
|
$prepared->execute();
|
|
|
|
return $prepared->fetchAll();
|
|
}
|
|
|
|
/**
|
|
* Find all polls that are created with the given admin mail.
|
|
*
|
|
* @param string $mail Email address of the poll admin
|
|
* @return array The list of matching polls
|
|
*/
|
|
public function findAllByAdminMail($mail) {
|
|
$prepared = $this->prepare('SELECT * FROM `' . Utils::table('poll') . '` WHERE admin_mail = :admin_mail');
|
|
$prepared->execute(['admin_mail' => $mail]);
|
|
|
|
return $prepared->fetchAll();
|
|
}
|
|
|
|
/**
|
|
* Get the total number of polls in databse.
|
|
*
|
|
* @param array $search Array of search : ['id'=>..., 'title'=>..., 'name'=>...]
|
|
* @return int The number of polls
|
|
*/
|
|
public function count($search = null) {
|
|
// Total count
|
|
$prepared = $this->prepare('
|
|
SELECT count(1) nb
|
|
FROM `' . Utils::table('poll') . '` p
|
|
WHERE (:id = "" OR p.id LIKE :id)
|
|
AND (:title = "" OR p.title LIKE :title)
|
|
AND (:name = "" OR p.admin_name LIKE :name)
|
|
ORDER BY p.title ASC');
|
|
|
|
$poll = $search === null ? '' : $search['poll'] . '%';
|
|
$title = $search === null ? '' : '%' . $search['title'] . '%';
|
|
$name = $search === null ? '' : '%' . $search['name'] . '%';
|
|
$prepared->bindParam(':id', $poll, PDO::PARAM_STR);
|
|
$prepared->bindParam(':title', $title, PDO::PARAM_STR);
|
|
$prepared->bindParam(':name', $name, PDO::PARAM_STR);
|
|
|
|
$prepared->execute();
|
|
$count = $prepared->fetch();
|
|
|
|
/*echo '---';
|
|
print_r($count);
|
|
echo '---';
|
|
exit;*/
|
|
|
|
return $count->nb;
|
|
}
|
|
}
|