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
* Authors of Framadate / OpenSondate : Framasoft ( https :// github . com / framasoft )
*
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
*/
2014-12-25 00:55:52 +01:00
use Framadate\Services\LogService ;
2014-12-16 00:02:01 +01:00
use Framadate\Services\PollService ;
2014-12-17 13:17:08 +01:00
use Framadate\Services\InputService ;
2014-12-23 00:58:00 +01:00
use Framadate\Services\MailService ;
2014-12-17 13:17:08 +01:00
use Framadate\Message ;
2014-12-17 13:47:14 +01:00
use Framadate\Utils ;
2015-04-05 17:44:29 +02:00
use Framadate\Editable ;
2014-09-04 17:52:18 +02:00
include_once __DIR__ . '/app/inc/init.php' ;
2015-01-17 01:22:03 +01:00
/* Constants */
/* --------- */
const UPDATE_VOTE = 1 ;
const ADD_VOTE = 2 ;
const ADD_COMMENT = 3 ;
2014-12-17 13:17:08 +01:00
/* Variables */
2014-12-12 13:43:43 +01:00
/* --------- */
2014-12-23 00:58:00 +01:00
2014-12-17 13:47:14 +01:00
$poll_id = null ;
2014-12-17 23:20:12 +01:00
$poll = null ;
2014-12-17 13:17:08 +01:00
$message = null ;
2014-12-17 23:43:06 +01:00
$editingVoteId = 0 ;
2014-12-14 00:16:49 +01:00
2014-12-16 00:02:01 +01:00
/* Services */
/*----------*/
2015-01-03 17:24:39 +01: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-17 13:17:08 +01:00
$inputService = new InputService ();
2014-12-23 00:58:00 +01:00
$mailService = new MailService ( $config [ 'use_smtp' ]);
/* Functions */
/*-----------*/
/**
* Send a notification to the poll admin to notify him about an update .
*
2015-01-07 23:29:46 +01:00
* @ param $poll stdClass The poll
2014-12-23 00:58:00 +01:00
* @ param $mailService MailService The mail service
2015-01-17 01:22:03 +01:00
* @ param $name string The name user who triggered the notification
* @ param $type int cf : Constants on the top of this page
2014-12-23 00:58:00 +01:00
*/
2015-01-17 01:22:03 +01:00
function sendUpdateNotification ( $poll , $mailService , $name , $type ) {
if ( ! isset ( $_SESSION [ 'mail_sent' ])) {
$_SESSION [ 'mail_sent' ] = [];
}
if ( $poll -> receiveNewVotes && ( ! isset ( $_SESSION [ 'mail_sent' ][ $poll -> id ]) || $_SESSION [ 'mail_sent' ][ $poll -> id ] !== true )) {
2014-12-23 00:58:00 +01:00
2015-04-07 20:06:24 +02:00
$subject = '[' . NOMAPPLICATION . '] ' . __ ( 'Mail' , 'Poll\'s participation' ) . ' : ' . $poll -> title ;
2015-01-17 01:22:03 +01:00
$message = $name . ' ' ;
switch ( $type ) {
case UPDATE_VOTE :
2015-04-07 20:06:24 +02:00
$message .= __ ( 'Mail' , " updated a vote. \n You can find your poll at the link " ) . " : \n \n " ;
2015-01-17 01:22:03 +01:00
break ;
case ADD_VOTE :
2015-04-07 20:06:24 +02:00
$message .= __ ( 'Mail' , " filled a vote. \n You can find your poll at the link " ) . " : \n \n " ;
2015-01-17 01:22:03 +01:00
break ;
case ADD_COMMENT :
2015-04-07 20:06:24 +02:00
$message .= __ ( 'Mail' , " wrote a comment. \n You can find your poll at the link " ) . " : \n \n " ;
2015-01-17 01:22:03 +01:00
break ;
}
$message .= Utils :: getUrlSondage ( $poll -> admin_id , true ) . " \n \n " ;
2014-12-23 00:58:00 +01:00
$mailService -> send ( $poll -> admin_mail , $subject , $message );
2015-01-17 01:22:03 +01:00
$_SESSION [ 'mail_sent' ][ $poll -> id ] = true ;
2014-12-23 00:58:00 +01:00
}
}
2014-12-16 00:02:01 +01:00
2014-12-12 13:43:43 +01:00
/* PAGE */
/* ---- */
2011-05-15 03:56:54 +02:00
2015-04-07 17:09:18 +02:00
if ( ! empty ( $_GET [ 'poll' ])) {
$poll_id = filter_input ( INPUT_GET , 'poll' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => POLL_REGEX ]]);
if ( strlen ( $poll_id ) === 16 ) {
$poll = $pollService -> findById ( $poll_id );
}
2014-09-04 17:52:18 +02:00
}
2014-12-12 13:43:43 +01:00
if ( ! $poll ) {
2015-04-07 20:06:24 +02:00
$smarty -> assign ( 'error' , __ ( 'Error' , 'This poll doesn\'t exist !' ));
2014-12-12 13:43:43 +01:00
$smarty -> display ( 'error.tpl' );
exit ;
2011-05-15 03:56:54 +02:00
}
2014-12-17 13:39:12 +01:00
// -------------------------------
2014-12-16 00:45:16 +01:00
// A vote is going to be edited
2014-12-17 13:39:12 +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-16 00:45:16 +01:00
}
2014-12-17 13:39:12 +01:00
// -------------------------------
2014-12-17 13:17:08 +01:00
// Something to save (edit or add)
2014-12-17 13:39:12 +01:00
// -------------------------------
2014-12-16 00:45:16 +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' ]);
2014-12-16 00:45:16 +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 ]]);
2014-12-17 13:17:08 +01:00
2014-12-17 13:23:32 +01:00
if ( empty ( $editedVote )) {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Something is going wrong...' ));
2014-12-17 13:17:08 +01:00
}
if ( count ( $choices ) != count ( $_POST [ 'choices' ])) {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'There is a problem with your choices' ));
2014-12-17 13:17:08 +01:00
}
2014-12-16 00:45:16 +01:00
2014-12-17 13:17:08 +01:00
if ( $message == null ) {
// Update vote
2015-01-07 23:29:46 +01:00
$result = $pollService -> updateVote ( $poll_id , $editedVote , $name , $choices );
2014-12-17 13:17:08 +01:00
if ( $result ) {
2015-04-07 17:58:45 +02:00
if ( $poll -> editable == Editable :: EDITABLE_BY_OWN ) {
$editedVoteUniqId = filter_input ( INPUT_POST , 'edited_vote' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => POLL_REGEX ]]);
$urlEditVote = Utils :: getUrlSondage ( $poll_id , false , $editedVoteUniqId );
2015-04-07 22:00:48 +02:00
$message = new Message ( 'success' , __ ( 'studs' , 'Your vote has been registered successfully, but be careful: regarding this poll options, you need to keep this personal link to edit your own vote:' ), $urlEditVote );
2015-04-07 17:58:45 +02:00
} else {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'success' , __ ( 'studs' , 'Update vote succeeded' ));
2015-04-07 17:58:45 +02:00
}
2015-01-17 01:22:03 +01:00
sendUpdateNotification ( $poll , $mailService , $name , UPDATE_VOTE );
2014-12-17 13:17:08 +01:00
} else {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Update vote failed' ));
2014-12-16 00:45:16 +01:00
}
}
2014-12-17 13:17:08 +01:00
} elseif ( isset ( $_POST [ 'save' ])) { // Add a new vote
2015-04-11 16:02:07 +02:00
$name = $inputService -> filterName ( $_POST [ 'name' ]);
2015-01-07 23:16:42 +01:00
$choices = $inputService -> filterArray ( $_POST [ 'choices' ], FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => CHOICE_REGEX ]]);
2014-12-17 13:17:08 +01:00
2015-04-11 17:13:16 +02:00
if ( $name == null ) {
$message = new Message ( 'danger' , __ ( 'Error' , 'The name is invalid.' ));
2014-12-17 13:17:08 +01:00
}
if ( count ( $choices ) != count ( $_POST [ 'choices' ])) {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'danger' , __ ( 'There is a problem with your choices' ));
2014-12-17 13:17:08 +01:00
}
2014-12-16 00:45:16 +01:00
2014-12-17 13:17:08 +01:00
if ( $message == null ) {
// Add vote
$result = $pollService -> addVote ( $poll_id , $name , $choices );
2014-12-16 00:45:16 +01:00
if ( $result ) {
2015-04-05 17:44:29 +02:00
if ( $poll -> editable == Editable :: EDITABLE_BY_OWN ) {
$urlEditVote = Utils :: getUrlSondage ( $poll_id , false , $result -> uniqId );
2015-04-07 22:00:48 +02:00
$message = new Message ( 'success' , __ ( 'studs' , 'Your vote has been registered successfully, but be careful: regarding this poll options, you need to keep this personal link to edit your own vote:' ), $urlEditVote );
2015-04-05 17:44:29 +02:00
} else {
2015-04-24 00:29:10 +02:00
$message = new Message ( 'success' , __ ( 'studs' , 'Adding the vote succeeded' ));
2015-04-05 17:44:29 +02:00
}
2015-01-17 01:22:03 +01:00
sendUpdateNotification ( $poll , $mailService , $name , ADD_VOTE );
2014-12-16 00:45:16 +01:00
} else {
2015-04-24 00:29:10 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Adding vote failed' ));
2014-12-16 00:45:16 +01:00
}
}
}
2014-12-17 13:47:14 +01:00
// -------------------------------
// Add a comment
// -------------------------------
if ( isset ( $_POST [ 'add_comment' ])) {
2015-04-11 16:02:07 +02:00
$name = $inputService -> filterName ( $_POST [ 'name' ]);
$comment = $inputService -> filterComment ( $_POST [ 'comment' ]);
2014-12-17 13:47:14 +01:00
2015-04-11 17:13:16 +02:00
if ( $name == null ) {
$message = new Message ( 'danger' , __ ( 'Error' , 'The name is invalid.' ));
2014-12-17 13:47:14 +01:00
}
if ( $message == null ) {
// Add comment
$result = $pollService -> addComment ( $poll_id , $name , $comment );
if ( $result ) {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'success' , __ ( 'Comments' , 'Comment added' ));
2015-01-17 01:22:03 +01:00
sendUpdateNotification ( $poll , $mailService , $name , ADD_COMMENT );
2014-12-17 13:47:14 +01:00
} else {
2015-04-07 20:06:24 +02:00
$message = new Message ( 'danger' , __ ( 'Error' , 'Comment failed' ));
2014-12-17 13:47:14 +01:00
}
}
}
2014-12-12 13:43:43 +01:00
// Retrieve data
2014-12-16 00:02:01 +01:00
$slots = $pollService -> allSlotsByPollId ( $poll_id );
2015-01-03 17:24:39 +01:00
$votes = $pollService -> allVotesByPollId ( $poll_id );
2014-12-16 00:02:01 +01:00
$comments = $pollService -> allCommentsByPollId ( $poll_id );
2014-10-21 01:31:26 +02:00
2014-12-12 13:43:43 +01:00
// Assign data to template
$smarty -> assign ( 'poll_id' , $poll_id );
$smarty -> assign ( 'poll' , $poll );
2015-04-07 20:06:24 +02:00
$smarty -> assign ( 'title' , __ ( 'Generic' , 'Poll' ) . ' - ' . $poll -> title );
2015-03-13 12:56:45 +01:00
$smarty -> assign ( 'expired' , strtotime ( $poll -> end_date ) < time ());
2015-05-29 17:46:29 +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 );
2014-12-17 13:17:08 +01:00
$smarty -> assign ( 'votes' , $pollService -> splitVotes ( $votes ));
2014-12-27 00:19:48 +01:00
$smarty -> assign ( 'best_choices' , $pollService -> computeBestChoices ( $votes ));
2014-12-15 13:49:25 +01:00
$smarty -> assign ( 'comments' , $comments );
2014-12-16 00:45:16 +01:00
$smarty -> assign ( 'editingVoteId' , $editingVoteId );
2014-12-17 13:17:08 +01:00
$smarty -> assign ( 'message' , $message );
2014-12-17 23:43:06 +01:00
$smarty -> assign ( 'admin' , false );
2015-04-06 12:39:58 +02:00
$smarty -> assign ( 'hidden' , $poll -> hidden );
2015-03-26 16:33:11 +01:00
$smarty -> assign ( 'parameter_name_regex' , NAME_REGEX );
2014-09-04 17:52:18 +02:00
2014-12-12 13:43:43 +01:00
$smarty -> display ( 'studs.tpl' );