2011-05-15 01:32:47 +02:00
< ? php
2014-09-04 17:52:18 +02:00
/**
* This software is governed by the CeCILL - B license . If a copy of this license
* is not distributed with this file , you can obtain one at
* http :// www . cecill . info / licences / Licence_CeCILL - B_V1 - en . txt
*
* Authors of STUdS ( initial project ) : Guilhem BORGHESI ( borghesi @ unistra . fr ) and Raphaël DROZ
2016-08-04 22:26:37 +02:00
* Authors of Framadate / OpenSondage : Framasoft ( https :// github . com / framasoft )
2014-09-04 17:52:18 +02:00
*
2014-07-04 11:21:31 +02:00
* =============================
2014-09-04 17:52:18 +02:00
*
* Ce logiciel est régi par la licence CeCILL - B . Si une copie de cette licence
* ne se trouve pas avec ce fichier vous pouvez l ' obtenir sur
* http :// www . cecill . info / licences / Licence_CeCILL - B_V1 - fr . txt
*
2014-07-04 11:21:31 +02:00
* Auteurs de STUdS ( projet initial ) : Guilhem BORGHESI ( borghesi @ unistra . fr ) et Raphaël DROZ
2014-09-04 17:52:18 +02:00
* Auteurs de Framadate / OpenSondage : Framasoft ( https :// github . com / framasoft )
2014-07-04 11:21:31 +02:00
*/
2015-05-29 19:03:29 +02:00
use Framadate\Editable ;
2015-12-08 22:53:51 +01:00
use Framadate\Exception\AlreadyExistsException ;
use Framadate\Exception\ConcurrentEditionException ;
2018-02-20 16:47:10 +01:00
use Framadate\Exception\ConcurrentVoteException ;
2015-11-03 21:15:47 +01:00
use Framadate\Exception\MomentAlreadyExistsException ;
2015-05-29 19:03:29 +02:00
use Framadate\Message ;
2018-02-19 00:18:43 +01:00
use Framadate\Security\PasswordHasher ;
2014-12-20 23:59:44 +01:00
use Framadate\Services\AdminPollService ;
2014-12-17 23:20:12 +01:00
use Framadate\Services\InputService ;
2014-12-24 09:40:41 +01:00
use Framadate\Services\LogService ;
2015-05-29 19:03:29 +02:00
use Framadate\Services\MailService ;
2015-10-13 01:03:41 +02:00
use Framadate\Services\NotificationService ;
2018-02-19 00:18:43 +01:00
use Framadate\Services\PollService ;
2018-04-08 11:21:11 +02:00
use Framadate\Services\SessionService ;
2015-12-05 14:00:55 +01:00
use Framadate\Utils ;
2014-09-04 17:52:18 +02:00
include_once __DIR__ . '/app/inc/init.php' ;
2014-12-17 23:20:12 +01:00
/* Variables */
/* --------- */
2015-01-07 22:47:34 +01:00
2014-12-17 23:20:12 +01:00
$admin_poll_id = null ;
$poll_id = null ;
$poll = null ;
$message = null ;
2014-12-17 23:43:06 +01:00
$editingVoteId = 0 ;
2014-09-04 17:52:18 +02:00
2014-12-17 23:20:12 +01:00
/* Services */
/*----------*/
2014-09-04 17:52:18 +02:00
2015-01-06 23:52:52 +01:00
$logService = new LogService ();
2014-12-25 00:55:52 +01:00
$pollService = new PollService ( $connect , $logService );
2014-12-24 09:40:41 +01:00
$adminPollService = new AdminPollService ( $connect , $pollService , $logService );
2014-12-17 23:20:12 +01:00
$inputService = new InputService ();
2018-05-25 15:50:35 +02:00
$mailService = new MailService ( $config [ 'use_smtp' ], $config [ 'smtp_options' ], $config [ 'use_sendmail' ]);
2015-10-13 01:03:41 +02:00
$notificationService = new NotificationService ( $mailService );
2018-04-08 11:21:11 +02:00
$sessionService = new SessionService ();
2014-09-04 17:52:18 +02:00
2014-12-17 23:20:12 +01:00
/* PAGE */
/* ---- */
2014-09-04 17:52:18 +02:00
2015-04-07 17:09:18 +02:00
if ( ! empty ( $_GET [ 'poll' ])) {
$admin_poll_id = filter_input ( INPUT_GET , 'poll' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => POLL_REGEX ]]);
2015-04-02 16:52:46 +02:00
if ( strlen ( $admin_poll_id ) === 24 ) {
2015-10-28 22:11:00 +01:00
$poll = $pollService -> findByAdminId ( $admin_poll_id );
2015-04-02 16:52:46 +02:00
}
2011-05-15 03:56:54 +02:00
}
2014-09-04 17:52:18 +02:00
2015-10-28 22:53:56 +01:00
if ( $poll ) {
$poll_id = $poll -> id ;
} else {
2018-07-06 18:06:35 +02:00
$smarty -> assign ( 'error' , __ ( 'Error' , " This poll doesn't exist! " ));
2014-12-17 23:20:12 +01:00
$smarty -> display ( 'error.tpl' );
exit ;
2011-05-15 03:56:54 +02:00
}
2018-04-07 22:24:55 +02:00
// -------------------------------
// creation message
// -------------------------------
2018-04-08 11:21:11 +02:00
$messagePollCreated = $sessionService -> get ( " Framadate " , " messagePollCreated " , FALSE );
if ( $messagePollCreated ) {
$sessionService -> remove ( " Framadate " , " messagePollCreated " );
2018-04-19 16:53:54 +02:00
2018-07-06 18:06:35 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'The poll was created.' ));
2018-04-07 22:24:55 +02:00
}
2014-12-18 13:57:25 +01:00
// -------------------------------
// Update poll info
// -------------------------------
2014-12-19 00:13:21 +01:00
2014-12-18 13:57:25 +01:00
if ( isset ( $_POST [ 'update_poll_info' ])) {
$updated = false ;
2015-10-30 20:45:18 +01:00
$field = $inputService -> filterAllowedValues ( $_POST [ 'update_poll_info' ], [ 'title' , 'admin_mail' , 'description' ,
'rules' , 'expiration_date' , 'name' , 'hidden' , 'removePassword' , 'password' ]);
2014-12-18 13:57:25 +01:00
// Update the right poll field
2018-02-19 00:18:43 +01:00
if ( $field === 'title' ) {
2015-04-11 16:02:07 +02:00
$title = $inputService -> filterTitle ( $_POST [ 'title' ]);
2014-12-18 13:57:25 +01:00
if ( $title ) {
$poll -> title = $title ;
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'admin_mail' ) {
2015-04-11 16:02:07 +02:00
$admin_mail = $inputService -> filterMail ( $_POST [ 'admin_mail' ]);
2014-12-18 13:57:25 +01:00
if ( $admin_mail ) {
$poll -> admin_mail = $admin_mail ;
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'description' ) {
2015-04-11 16:02:07 +02:00
$description = $inputService -> filterDescription ( $_POST [ 'description' ]);
2015-03-18 00:46:19 +01:00
if ( $description ) {
$poll -> description = $description ;
2014-12-18 13:57:25 +01:00
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'rules' ) {
2015-01-07 23:16:42 +01:00
$rules = strip_tags ( $_POST [ 'rules' ]);
2014-12-18 13:57:25 +01:00
switch ( $rules ) {
case 0 :
$poll -> active = false ;
2015-04-05 17:44:29 +02:00
$poll -> editable = Editable :: NOT_EDITABLE ;
2014-12-18 13:57:25 +01:00
$updated = true ;
break ;
case 1 :
$poll -> active = true ;
2015-04-05 17:44:29 +02:00
$poll -> editable = Editable :: NOT_EDITABLE ;
2014-12-18 13:57:25 +01:00
$updated = true ;
break ;
case 2 :
$poll -> active = true ;
2015-04-05 17:44:29 +02:00
$poll -> editable = Editable :: EDITABLE_BY_ALL ;
$updated = true ;
break ;
case 3 :
$poll -> active = true ;
$poll -> editable = Editable :: EDITABLE_BY_OWN ;
2014-12-18 13:57:25 +01:00
$updated = true ;
break ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'expiration_date' ) {
2016-06-30 20:48:30 +02:00
$expiration_date = $inputService -> filterDate ( $_POST [ 'expiration_date' ]);
2015-01-08 00:27:40 +01:00
if ( $expiration_date ) {
$poll -> end_date = $expiration_date ;
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'name' ) {
2015-04-11 16:02:07 +02:00
$admin_name = $inputService -> filterName ( $_POST [ 'name' ]);
2015-01-08 22:03:44 +01:00
if ( $admin_name ) {
$poll -> admin_name = $admin_name ;
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'hidden' ) {
2015-04-11 16:02:07 +02:00
$hidden = isset ( $_POST [ 'hidden' ]) ? $inputService -> filterBoolean ( $_POST [ 'hidden' ]) : false ;
2018-02-19 00:18:43 +01:00
if ( $hidden !== $poll -> hidden ) {
2015-04-06 12:39:58 +02:00
$poll -> hidden = $hidden ;
2017-11-20 10:54:34 +01:00
$poll -> results_publicly_visible = false ;
2015-04-06 12:39:58 +02:00
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'removePassword' ) {
2015-10-30 20:45:18 +01:00
$removePassword = isset ( $_POST [ 'removePassword' ]) ? $inputService -> filterBoolean ( $_POST [ 'removePassword' ]) : false ;
if ( $removePassword ) {
$poll -> results_publicly_visible = false ;
$poll -> password_hash = null ;
$updated = true ;
}
2018-02-19 00:18:43 +01:00
} elseif ( $field === 'password' ) {
2015-10-30 20:45:18 +01:00
$password = isset ( $_POST [ 'password' ]) ? $_POST [ 'password' ] : null ;
2018-02-20 11:55:14 +01:00
/**
* Did the user choose results to be publicly visible ?
*/
2015-10-30 20:45:18 +01:00
$resultsPubliclyVisible = isset ( $_POST [ 'resultsPubliclyVisible' ]) ? $inputService -> filterBoolean ( $_POST [ 'resultsPubliclyVisible' ]) : false ;
2018-02-20 11:55:14 +01:00
/**
* If there ' s one , save the password
*/
2015-10-30 20:45:18 +01:00
if ( ! empty ( $password )) {
$poll -> password_hash = PasswordHasher :: hash ( $password );
$updated = true ;
}
2018-02-20 11:55:14 +01:00
/**
* If not pasword was set and the poll should be hidden , hide the results
*/
if ( $poll -> password_hash === null || $poll -> hidden === true ) {
$poll -> results_publicly_visible = false ;
}
/**
* We don ' t have a password , the poll is hidden and we change the results public visibility
*/
2018-02-20 10:58:50 +01:00
if ( $resultsPubliclyVisible !== $poll -> results_publicly_visible && $poll -> password_hash !== null && $poll -> hidden === false ) {
2015-10-30 20:45:18 +01:00
$poll -> results_publicly_visible = $resultsPubliclyVisible ;
$updated = true ;
}
2014-12-18 13:57:25 +01:00
}
// Update poll in database
2014-12-20 23:59:44 +01:00
if ( $updated && $adminPollService -> updatePoll ( $poll )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Poll saved' ));
2015-10-26 16:26:22 +01:00
$notificationService -> sendUpdateNotification ( $poll , NotificationService :: UPDATE_POLL );
2014-12-18 13:57:25 +01:00
} else {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to save poll' ));
2015-01-08 00:27:40 +01:00
$poll = $pollService -> findById ( $poll_id );
2014-12-18 13:57:25 +01:00
}
}
2014-12-21 00:29:51 +01:00
// -------------------------------
// A vote is going to be edited
// -------------------------------
2014-12-21 00:14:56 +01:00
2015-04-02 16:52:46 +02:00
if ( ! empty ( $_GET [ 'vote' ])) {
$editingVoteId = filter_input ( INPUT_GET , 'vote' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => POLL_REGEX ]]);
2014-12-21 00:29:51 +01:00
}
// -------------------------------
// Something to save (edit or add)
// -------------------------------
2018-04-08 10:46:46 +02:00
$selectedNewVotes = [];
2014-12-21 00:29:51 +01:00
if ( ! empty ( $_POST [ 'save' ])) { // Save edition of an old vote
2015-04-11 16:02:07 +02:00
$name = $inputService -> filterName ( $_POST [ 'name' ]);
2018-03-18 10:40:38 +01:00
if ( empty ( $_POST [ 'mail' ]) || $inputService -> filterMail ( $_POST [ 'mail' ]) === false ) {
$mail = null ;
} else {
$mail = $inputService -> filterMail ( $_POST [ 'mail' ]);
}
2014-12-21 00:29:51 +01:00
$editedVote = filter_input ( INPUT_POST , 'save' , FILTER_VALIDATE_INT );
2015-01-07 23:16:42 +01:00
$choices = $inputService -> filterArray ( $_POST [ 'choices' ], FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => CHOICE_REGEX ]]);
2015-12-08 22:53:51 +01:00
$slots_hash = $inputService -> filterMD5 ( $_POST [ 'control' ]);
2014-12-21 00:29:51 +01:00
if ( empty ( $editedVote )) {
2018-07-06 18:06:35 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Something has gone wrong...' ));
2014-12-21 00:29:51 +01:00
}
2018-02-19 00:18:43 +01:00
if ( count ( $choices ) !== count ( $_POST [ 'choices' ])) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'There is a problem with your choices' ));
2014-12-21 00:29:51 +01:00
}
2018-02-19 00:18:43 +01:00
if ( $message === null ) {
2014-12-21 00:29:51 +01:00
// Update vote
2015-12-08 22:53:51 +01:00
try {
2018-03-18 10:40:38 +01:00
$result = $pollService -> updateVote ( $poll_id , $editedVote , $name , $choices , $slots_hash , $mail );
2015-12-08 22:53:51 +01:00
if ( $result ) {
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Vote updated' ));
} else {
$message = new Message ( 'danger' , __ ( 'Error' , 'Update vote failed' ));
}
2018-04-06 14:00:20 +02:00
} catch ( AlreadyExistsException $aee ) {
2018-07-06 18:06:35 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , " The name you've chosen already exists in this poll! " ));
2015-12-08 22:53:51 +01:00
} catch ( ConcurrentEditionException $cee ) {
$message = new Message ( 'danger' , __ ( 'Error' , 'Poll has been updated before you vote' ));
2018-02-20 16:47:10 +01:00
} catch ( ConcurrentVoteException $cve ) {
$message = new Message ( 'danger' , __ ( 'Error' , " Your vote wasn't counted, because someone voted in the meantime and it conflicted with your choices and the poll conditions. Please retry. " ));
2014-12-21 00:29:51 +01:00
}
}
} elseif ( isset ( $_POST [ 'save' ])) { // Add a new vote
2015-04-11 16:02:07 +02:00
$name = $inputService -> filterName ( $_POST [ 'name' ]);
2018-03-18 10:40:38 +01:00
if ( empty ( $_POST [ 'mail' ]) || $inputService -> filterMail ( $_POST [ 'mail' ]) === false ) {
$mail = null ;
} else {
$mail = $inputService -> filterMail ( $_POST [ 'mail' ]);
}
2015-01-07 23:16:42 +01:00
$choices = $inputService -> filterArray ( $_POST [ 'choices' ], FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => CHOICE_REGEX ]]);
2015-12-08 22:53:51 +01:00
$slots_hash = $inputService -> filterMD5 ( $_POST [ 'control' ]);
2014-12-21 00:29:51 +01:00
2018-02-19 00:18:43 +01:00
if ( $name === null ) {
2015-04-11 17:13:16 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'The name is invalid.' ));
2014-12-21 00:29:51 +01:00
}
2018-02-19 00:18:43 +01:00
if ( count ( $choices ) !== count ( $_POST [ 'choices' ])) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'There is a problem with your choices' ));
2014-12-21 00:29:51 +01:00
}
2018-02-19 00:18:43 +01:00
if ( $message === null ) {
2014-12-21 00:29:51 +01:00
// Add vote
2015-12-08 22:53:51 +01:00
try {
2018-03-18 10:40:38 +01:00
$result = $pollService -> addVote ( $poll_id , $name , $choices , $slots_hash , $mail );
2015-12-08 22:53:51 +01:00
if ( $result ) {
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Vote added' ));
} else {
$message = new Message ( 'danger' , __ ( 'Error' , 'Adding vote failed' ));
}
} catch ( AlreadyExistsException $aee ) {
$message = new Message ( 'danger' , __ ( 'Error' , 'You already voted' ));
2018-04-08 10:46:46 +02:00
$selectedNewVotes = $choices ;
2015-12-08 22:53:51 +01:00
} catch ( ConcurrentEditionException $cee ) {
$message = new Message ( 'danger' , __ ( 'Error' , 'Poll has been updated before you vote' ));
2018-02-20 16:47:10 +01:00
} catch ( ConcurrentVoteException $cve ) {
$message = new Message ( 'danger' , __ ( 'Error' , " Your vote wasn't counted, because someone voted in the meantime and it conflicted with your choices and the poll conditions. Please retry. " ));
2014-12-21 00:29:51 +01:00
}
}
}
2014-12-21 00:14:56 +01:00
2014-12-19 00:13:21 +01:00
// -------------------------------
2014-12-21 00:25:00 +01:00
// Delete a votes
2014-12-19 00:13:21 +01:00
// -------------------------------
2014-12-21 23:48:22 +01:00
2015-04-13 12:33:43 +02:00
if ( ! empty ( $_GET [ 'delete_vote' ])) {
2015-12-08 00:12:20 +01:00
$vote_id = filter_input ( INPUT_GET , 'delete_vote' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => BASE64_REGEX ]]);
2015-11-30 20:26:23 +01:00
$vote_id = Utils :: base64url_decode ( $vote_id );
2015-12-08 00:12:20 +01:00
if ( $vote_id && $adminPollService -> deleteVote ( $poll_id , $vote_id )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Vote deleted' ));
2014-12-19 00:13:21 +01:00
} else {
2015-12-08 00:19:17 +01:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete the vote!' ));
2014-12-19 00:13:21 +01:00
}
}
2014-12-19 00:59:27 +01:00
// -------------------------------
// Remove all votes
// -------------------------------
2014-12-21 23:48:22 +01:00
2014-12-19 00:59:27 +01:00
if ( isset ( $_POST [ 'remove_all_votes' ])) {
2014-12-21 00:04:23 +01:00
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2014-12-21 00:04:23 +01:00
$smarty -> display ( 'confirm/delete_votes.tpl' );
exit ;
}
if ( isset ( $_POST [ 'confirm_remove_all_votes' ])) {
2014-12-23 09:48:58 +01:00
if ( $adminPollService -> cleanVotes ( $poll_id )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'All votes deleted' ));
2014-12-23 09:48:58 +01:00
} else {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete all votes' ));
2014-12-23 09:48:58 +01:00
}
2014-12-19 00:59:27 +01:00
}
2014-12-21 00:25:00 +01:00
// -------------------------------
// Delete a comment
// -------------------------------
if ( ! empty ( $_POST [ 'delete_comment' ])) {
$comment_id = filter_input ( INPUT_POST , 'delete_comment' , FILTER_VALIDATE_INT );
if ( $adminPollService -> deleteComment ( $poll_id , $comment_id )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Comment deleted' ));
2014-12-21 00:25:00 +01:00
} else {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete the comment' ));
2014-12-21 00:25:00 +01:00
}
}
2014-12-19 00:59:27 +01:00
// -------------------------------
// Remove all comments
// -------------------------------
2014-12-21 23:48:22 +01:00
2014-12-19 00:59:27 +01:00
if ( isset ( $_POST [ 'remove_all_comments' ])) {
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2014-12-21 00:05:52 +01:00
$smarty -> display ( 'confirm/delete_comments.tpl' );
2014-12-19 00:59:27 +01:00
exit ;
}
if ( isset ( $_POST [ 'confirm_remove_all_comments' ])) {
2014-12-20 23:59:44 +01:00
if ( $adminPollService -> cleanComments ( $poll_id )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'All comments deleted' ));
2014-12-19 00:59:27 +01:00
} else {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete all comments' ));
2014-12-19 00:59:27 +01:00
}
}
2014-12-19 00:47:56 +01:00
// -------------------------------
// Delete the entire poll
// -------------------------------
if ( isset ( $_POST [ 'delete_poll' ])) {
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2014-12-19 00:47:56 +01:00
$smarty -> display ( 'confirm/delete_poll.tpl' );
exit ;
}
if ( isset ( $_POST [ 'confirm_delete_poll' ])) {
2014-12-23 09:48:58 +01:00
if ( $adminPollService -> deleteEntirePoll ( $poll_id )) {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Poll fully deleted' ));
2015-10-26 16:26:22 +01:00
$notificationService -> sendUpdateNotification ( $poll , NotificationService :: DELETED_POLL );
2014-12-23 09:48:58 +01:00
} else {
2015-03-30 15:19:56 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete the poll' ));
2014-12-23 09:48:58 +01:00
}
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2014-12-23 09:48:58 +01:00
$smarty -> assign ( 'message' , $message );
$smarty -> display ( 'poll_deleted.tpl' );
exit ;
2014-12-19 00:47:56 +01:00
}
2014-12-21 23:48:22 +01:00
// -------------------------------
// Delete a slot
// -------------------------------
2016-05-09 14:49:09 +02:00
if ( isset ( $_GET [ 'delete_column' ])) {
2015-04-13 12:33:43 +02:00
$column = filter_input ( INPUT_GET , 'delete_column' , FILTER_DEFAULT );
2015-11-30 20:26:23 +01:00
$column = Utils :: base64url_decode ( $column );
2014-12-21 23:48:22 +01:00
2014-12-30 17:03:43 +01:00
if ( $poll -> format === 'D' ) {
$ex = explode ( '@' , $column );
$slot = new stdClass ();
$slot -> title = $ex [ 0 ];
$slot -> moment = $ex [ 1 ];
2015-05-30 23:36:04 +02:00
$result = $adminPollService -> deleteDateSlot ( $poll , $slot );
2014-12-30 17:03:43 +01:00
} else {
2015-05-30 23:36:04 +02:00
$result = $adminPollService -> deleteClassicSlot ( $poll , $column );
2014-12-30 17:03:43 +01:00
}
if ( $result ) {
2018-07-06 18:06:35 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Column deleted' ));
2014-12-21 23:48:22 +01:00
} else {
2015-05-29 18:53:09 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Failed to delete column' ));
2014-12-21 23:48:22 +01:00
}
}
2018-03-18 10:40:38 +01:00
// -------------------------------
// Collect the mails of a column
// -------------------------------
if ( isset ( $_GET [ 'collect_mail' ])) {
$column_str = strval ( filter_input ( INPUT_GET , 'collect_mail' , FILTER_DEFAULT ));
$column_str = strval ( Utils :: base64url_decode ( $column_str ));
$column = intval ( $column_str );
$votes = $pollService -> splitVotes ( $pollService -> allVotesByPollId ( $poll_id ));
2018-04-19 16:53:54 +02:00
$mails_yes = $mails_ifneedbe = $mails_no = [];
foreach ( $votes as $vote ) {
if ( intval ( $vote -> choices [ $column ]) === 2 && $vote -> mail !== NULL ) {
$mails_yes [] = $vote -> mail ;
} elseif ( intval ( $vote -> choices [ $column ]) === 1 && $vote -> mail !== NULL ) {
$mails_ifneedbe [] = $vote -> mail ;
} elseif ( $vote -> mail !== NULL ) {
$mails_no [] = $vote -> mail ;
2018-03-18 10:40:38 +01:00
}
2018-04-19 16:53:54 +02:00
}
2018-03-18 10:40:38 +01:00
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
$smarty -> assign ( 'admin' , true );
2018-04-19 16:53:54 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title . ' - ' . __ ( 'adminstuds' , 'Collect the emails of the polled users for the choice' ));
2018-03-18 10:40:38 +01:00
$smarty -> assign ( 'mails_yes' , $mails_yes );
$smarty -> assign ( 'mails_ifneedbe' , $mails_ifneedbe );
$smarty -> assign ( 'mails_no' , $mails_no );
$smarty -> display ( 'display_mails.tpl' );
exit ;
}
2014-12-22 09:53:18 +01:00
// -------------------------------
2015-01-07 23:16:42 +01:00
// Add a slot
2014-12-22 09:53:18 +01:00
// -------------------------------
2016-05-09 15:52:03 +02:00
2016-05-09 15:01:39 +02:00
function exit_displaying_add_column ( $message = null ) {
global $smarty , $poll_id , $admin_poll_id , $poll ;
2014-12-22 09:53:18 +01:00
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2014-12-30 01:41:25 +01:00
$smarty -> assign ( 'format' , $poll -> format );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2016-05-09 15:01:39 +02:00
$smarty -> assign ( 'message' , $message );
2015-11-30 20:38:53 +01:00
$smarty -> display ( 'add_column.tpl' );
2014-12-22 09:53:18 +01:00
exit ;
}
2016-05-09 15:01:39 +02:00
if ( isset ( $_GET [ 'add_column' ])) {
exit_displaying_add_column ();
}
2015-11-30 20:38:53 +01:00
if ( isset ( $_POST [ 'confirm_add_column' ])) {
2015-11-03 21:15:47 +01:00
try {
2016-05-09 15:01:39 +02:00
if (( $poll -> format === 'D' && empty ( $_POST [ 'newdate' ]))
|| ( $poll -> format === 'A' && empty ( $_POST [ 'choice' ]))) {
exit_displaying_add_column ( new Message ( 'danger' , __ ( 'Error' , " Can't create an empty column. " )));
}
2015-11-03 21:15:47 +01:00
if ( $poll -> format === 'D' ) {
2018-07-06 18:06:35 +02:00
$date = DateTime :: createFromFormat ( __ ( 'Date' , 'Y-m-d' ), $_POST [ 'newdate' ]) -> setTime ( 0 , 0 , 0 );
2016-05-09 15:52:03 +02:00
$time = $date -> getTimestamp ();
2019-04-15 15:00:00 +02:00
$newmoment = strip_tags ( $_POST [ 'newmoment' ]);
2016-05-09 15:52:03 +02:00
$adminPollService -> addDateSlot ( $poll_id , $time , $newmoment );
2015-11-03 21:15:47 +01:00
} else {
2019-04-15 15:00:00 +02:00
$newslot = strip_tags ( $_POST [ 'choice' ]);
2015-11-03 21:15:47 +01:00
$adminPollService -> addClassicSlot ( $poll_id , $newslot );
}
2014-12-30 01:41:25 +01:00
2015-03-30 15:19:56 +02:00
$message = new Message ( 'success' , __ ( 'adminstuds' , 'Choice added' ));
2015-11-03 21:15:47 +01:00
} catch ( MomentAlreadyExistsException $e ) {
2016-05-09 15:01:39 +02:00
exit_displaying_add_column ( new Message ( 'danger' , __ ( 'Error' , 'The column already exists' )));
2014-12-22 14:18:33 +01:00
}
}
2014-12-22 09:53:18 +01:00
2014-12-17 23:20:12 +01:00
// Retrieve data
2015-05-30 23:36:04 +02:00
$slots = $pollService -> allSlotsByPoll ( $poll );
2015-01-03 17:24:39 +01:00
$votes = $pollService -> allVotesByPollId ( $poll_id );
2014-12-17 23:20:12 +01:00
$comments = $pollService -> allCommentsByPollId ( $poll_id );
2011-05-15 03:56:54 +02:00
2014-12-17 23:20:12 +01:00
// Assign data to template
2014-12-17 23:43:06 +01:00
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'admin_poll_id' , $admin_poll_id );
2014-12-17 23:20:12 +01:00
$smarty -> assign ( 'poll' , $poll );
2015-03-30 15:19:56 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2015-02-28 19:18:59 +01:00
$smarty -> assign ( 'expired' , strtotime ( $poll -> end_date ) < time ());
2015-05-29 19:10:39 +02:00
$smarty -> assign ( 'deletion_date' , strtotime ( $poll -> end_date ) + PURGE_DELAY * 86400 );
2014-12-27 00:00:14 +01:00
$smarty -> assign ( 'slots' , $poll -> format === 'D' ? $pollService -> splitSlots ( $slots ) : $slots );
2015-12-08 22:53:51 +01:00
$smarty -> assign ( 'slots_hash' , $pollService -> hashSlots ( $slots ));
2014-12-17 23:20:12 +01:00
$smarty -> assign ( 'votes' , $pollService -> splitVotes ( $votes ));
2018-04-05 17:34:43 +02:00
$smarty -> assign ( 'best_choices' , $pollService -> computeBestChoices ( $votes , $poll ));
2014-12-17 23:20:12 +01:00
$smarty -> assign ( 'comments' , $comments );
$smarty -> assign ( 'editingVoteId' , $editingVoteId );
$smarty -> assign ( 'message' , $message );
2014-12-17 23:43:06 +01:00
$smarty -> assign ( 'admin' , true );
2015-04-07 21:55:34 +02:00
$smarty -> assign ( 'hidden' , false );
2015-10-28 17:30:42 +01:00
$smarty -> assign ( 'accessGranted' , true );
$smarty -> assign ( 'resultPubliclyVisible' , true );
2015-12-05 14:00:55 +01:00
$smarty -> assign ( 'editedVoteUniqueId' , '' );
2016-06-27 12:24:12 +02:00
$smarty -> assign ( 'default_to_marldown_editor' , $config [ 'markdown_editor_by_default' ]);
2018-04-08 10:46:46 +02:00
$smarty -> assign ( 'selectedNewVotes' , $selectedNewVotes );
2014-09-04 17:52:18 +02:00
2015-09-15 18:20:13 +02:00
$smarty -> display ( 'studs.tpl' );