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
2014-11-26 23:47:40 +01:00
* Authors of Framadate / OpenSondate : Framasoft ( https :// github . com / framasoft https :// git . framasoft . org / framasoft / framadate / )
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-11-26 23:47:40 +01:00
* Auteurs de Framadate / OpenSondage : Framasoft ( https :// github . com / framasoft https :// git . framasoft . org / framasoft / framadate / )
2014-07-04 11:21:31 +02:00
*/
2015-01-05 23:30:47 +01:00
use Framadate\Services\InputService ;
2014-12-25 00:55:52 +01:00
use Framadate\Services\LogService ;
use Framadate\Services\PollService ;
use Framadate\Services\MailService ;
2014-12-29 21:54:07 +01:00
use Framadate\Services\PurgeService ;
2014-12-25 00:55:52 +01:00
use Framadate\Utils ;
use Framadate\Choice ;
2014-09-04 17:52:18 +02:00
2014-12-03 21:08:08 +01:00
include_once __DIR__ . '/app/inc/init.php' ;
2011-05-15 01:32:47 +02:00
2014-12-25 00:55:52 +01:00
/* Service */
/*---------*/
2015-01-06 23:52:52 +01:00
$logService = new LogService ();
2014-12-25 00:55:52 +01:00
$pollService = new PollService ( $connect , $logService );
$mailService = new MailService ( $config [ 'use_smtp' ]);
2014-12-29 21:54:07 +01:00
$purgeService = new PurgeService ( $connect , $logService );
2015-01-05 23:30:47 +01:00
$inputService = new InputService ();
2011-05-15 01:32:47 +02:00
2013-03-13 18:29:48 +01:00
if ( is_readable ( 'bandeaux_local.php' )) {
2014-09-04 17:52:18 +02:00
include_once ( 'bandeaux_local.php' );
2011-05-15 03:56:54 +02:00
} else {
2014-09-04 17:52:18 +02:00
include_once ( 'bandeaux.php' );
2011-05-15 01:32:47 +02:00
}
2014-12-06 19:42:01 +01:00
// Step 1/4 : error if $_SESSION from info_sondage are not valid
2014-12-25 00:55:52 +01:00
if ( ! isset ( $_SESSION [ 'form' ] -> title ) || ! isset ( $_SESSION [ 'form' ] -> admin_name ) || ( $config [ 'use_smtp' ] && ! isset ( $_SESSION [ 'form' ] -> admin_mail ))) {
2014-09-04 17:52:18 +02:00
2015-04-16 13:19:27 +02:00
$smarty -> assign ( 'title' , __ ( 'Error' , 'Error!' ));
$smarty -> assign ( 'error' , __ ( 'Error' , 'You haven\'t filled the first section of the poll creation.' ));
$smarty -> display ( 'error.tpl' );
2014-09-04 17:52:18 +02:00
} else {
2015-01-04 18:49:57 +01:00
$min_time = time () + 86400 ;
2015-04-22 00:19:12 +02:00
// The poll format is DATE
if ( $_SESSION [ 'form' ] -> format !== 'D' ) {
$_SESSION [ 'form' ] -> format = 'D' ;
$_SESSION [ 'form' ] -> clearChoices ();
}
2014-09-04 17:52:18 +02:00
// Step 4 : Data prepare before insert in DB
2014-12-12 13:43:43 +01:00
if ( ! empty ( $_POST [ 'confirmation' ])) {
2014-10-21 01:31:26 +02:00
2014-12-05 01:08:38 +01:00
// Define expiration date
2015-01-04 01:36:55 +01:00
$enddate = filter_input ( INPUT_POST , 'enddate' , FILTER_VALIDATE_REGEXP , [ 'options' => [ 'regexp' => '#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#' ]]);
2015-04-22 00:11:13 +02:00
// Max archive date
$_SESSION [ 'form' ] -> sortChoices ();
$last_date = $_SESSION [ 'form' ] -> lastChoice () -> getName ();
$max_archiving_date = $last_date + ( 86400 * $config [ 'default_poll_duration' ]);
2015-01-04 01:36:55 +01:00
if ( ! empty ( $enddate )) {
$registredate = explode ( '/' , $enddate );
if ( is_array ( $registredate ) && count ( $registredate ) == 3 ) {
$time = mktime ( 0 , 0 , 0 , $registredate [ 1 ], $registredate [ 0 ], $registredate [ 2 ]);
if ( $time < $min_time ) {
$_SESSION [ 'form' ] -> end_date = $min_time ;
2015-04-22 00:11:13 +02:00
} elseif ( $max_archiving_date < $time ) {
$_SESSION [ 'form' ] -> end_date = $max_archiving_date ;
2015-01-04 01:36:55 +01:00
} else {
$_SESSION [ 'form' ] -> end_date = $time ;
2014-10-21 01:31:26 +02:00
}
}
2014-12-12 13:43:43 +01:00
}
2015-01-04 01:36:55 +01:00
if ( empty ( $_SESSION [ 'form' ] -> end_date )) {
2014-12-05 01:08:38 +01:00
// By default, expiration date is 6 months after last day
2015-04-22 00:11:13 +02:00
$_SESSION [ 'form' ] -> end_date = $max_archiving_date ;
2014-10-21 01:31:26 +02:00
}
2014-12-12 13:43:43 +01:00
2014-12-06 19:42:01 +01:00
// Insert poll in database
2014-12-25 00:55:52 +01:00
$ids = $pollService -> createPoll ( $_SESSION [ 'form' ]);
$poll_id = $ids [ 0 ];
$admin_poll_id = $ids [ 1 ];
// Send confirmation by mail if enabled
if ( $config [ 'use_smtp' ] === true ) {
2015-03-30 15:19:56 +02:00
$message = __ ( 'Mail' , " This is the message you have to send to the people you want to poll. \n Now, you have to send this message to everyone you want to poll. " );
2015-04-08 22:25:14 +02:00
$message .= '<br/><br/>' ;
$message .= Utils :: htmlEscape ( $_SESSION [ 'form' ] -> admin_name ) . ' ' . __ ( 'Mail' , 'hast just created a poll called' ) . ' : "' . Utils :: htmlEscape ( $_SESSION [ 'form' ] -> title ) . '".<br/>' ;
2015-08-13 10:40:16 +02:00
$message .= __ ( 'Mail' , 'Thanks for filling the poll at the link above' ) . ' :<br/><br/><a href="%1$s">%1$s</a>' ;
2014-12-25 00:55:52 +01:00
2015-03-30 15:19:56 +02:00
$message_admin = __ ( 'Mail' , " This message should NOT be sent to the polled people. It is private for the poll's creator. \n \n You can now modify it at the link above " );
2015-08-13 10:40:16 +02:00
$message_admin .= ' :<br/><br/><a href="%1$s">%1$s</a>' ;
2014-12-25 00:55:52 +01:00
$message = sprintf ( $message , Utils :: getUrlSondage ( $poll_id ));
$message_admin = sprintf ( $message_admin , Utils :: getUrlSondage ( $admin_poll_id , true ));
if ( $mailService -> isValidEmail ( $_SESSION [ 'form' ] -> admin_mail )) {
2015-09-15 18:20:13 +02:00
$mailService -> send ( $_SESSION [ 'form' ] -> admin_mail , '[' . NOMAPPLICATION . '][' . __ ( 'Mail' , 'Author\'s message' ) . '] ' . __ ( 'Generic' , 'Poll' ) . ': ' . Utils :: htmlEscape ( $_SESSION [ 'form' ] -> title ), $message_admin );
$mailService -> send ( $_SESSION [ 'form' ] -> admin_mail , '[' . NOMAPPLICATION . '][' . __ ( 'Mail' , 'For sending to the polled users' ) . '] ' . __ ( 'Generic' , 'Poll' ) . ': ' . Utils :: htmlEscape ( $_SESSION [ 'form' ] -> title ), $message );
2014-12-25 00:55:52 +01:00
}
}
2014-12-12 13:43:43 +01:00
2014-12-04 20:53:16 +01:00
// Clean Form data in $_SESSION
2014-12-03 21:08:08 +01:00
unset ( $_SESSION [ 'form' ]);
2014-12-04 20:53:16 +01:00
// Delete old polls
2014-12-29 21:54:07 +01:00
$purgeService -> purgeOldPolls ();
2014-12-12 13:43:43 +01:00
2014-12-04 20:53:16 +01:00
// Redirect to poll administration
header ( 'Location:' . Utils :: getUrlSondage ( $admin_poll_id , true ));
2014-12-03 21:08:08 +01:00
exit ;
2013-03-13 18:29:48 +01:00
2011-05-15 03:56:54 +02:00
} else {
2014-12-12 13:43:43 +01:00
if ( ! empty ( $_POST [ 'days' ])) {
2014-12-03 21:08:08 +01:00
// Clear previous choices
$_SESSION [ 'form' ] -> clearChoices ();
for ( $i = 0 ; $i < count ( $_POST [ 'days' ]); $i ++ ) {
$day = $_POST [ 'days' ][ $i ];
2014-12-12 13:43:43 +01:00
2014-12-03 21:08:08 +01:00
if ( ! empty ( $day )) {
// Add choice to Form data
$time = mktime ( 0 , 0 , 0 , substr ( $_POST [ " days " ][ $i ], 3 , 2 ), substr ( $_POST [ " days " ][ $i ], 0 , 2 ), substr ( $_POST [ " days " ][ $i ], 6 , 4 ));
$choice = new Choice ( $time );
$_SESSION [ 'form' ] -> addChoice ( $choice );
2015-01-05 23:30:47 +01:00
$schedules = $inputService -> filterArray ( $_POST [ 'horaires' . $i ], FILTER_DEFAULT );
2014-12-03 21:08:08 +01:00
for ( $j = 0 ; $j < count ( $schedules ); $j ++ ) {
if ( ! empty ( $schedules [ $j ])) {
2015-01-07 23:16:42 +01:00
$choice -> addSlot ( strip_tags ( $schedules [ $j ]));
2014-09-04 17:52:18 +02:00
}
}
}
2011-05-15 05:56:11 +02:00
}
2011-05-15 03:56:54 +02:00
}
}
2011-05-15 01:32:47 +02:00
2014-12-05 01:08:38 +01:00
// Step 3/4 : Confirm poll creation
2014-12-12 13:43:43 +01:00
if ( ! empty ( $_POST [ 'choixheures' ]) && ! isset ( $_SESSION [ 'form' ] -> totalchoixjour )) {
2014-09-04 17:52:18 +02:00
2015-03-30 15:19:56 +02:00
Utils :: print_header ( __ ( 'Step 3' , 'Removal date and confirmation (3 on 3)' ) );
bandeau_titre ( __ ( 'Step 3' , 'Removal date and confirmation (3 on 3)' ));
2014-09-04 17:52:18 +02:00
2014-12-03 21:08:08 +01:00
$_SESSION [ 'form' ] -> sortChoices ();
$last_date = $_SESSION [ 'form' ] -> lastChoice () -> getName ();
2015-04-22 00:11:13 +02:00
$max_archiving_date = $last_date + ( 86400 * $config [ 'default_poll_duration' ]);
$end_date_str = utf8_encode ( strftime ( '%d/%m/%Y' , $max_archiving_date )); // textual date
2014-10-21 01:31:26 +02:00
2014-12-03 21:08:08 +01:00
// Summary
2014-10-21 01:31:26 +02:00
$summary = '<ul>' ;
2015-04-22 00:11:13 +02:00
$choices = $_SESSION [ 'form' ] -> getChoices ();
foreach ( $choices as $choice ) {
2014-12-03 21:08:08 +01:00
$summary .= '<li>' . strftime ( $date_format [ 'txt_full' ], $choice -> getName ());
$first = true ;
foreach ( $choice -> getSlots () as $slots ) {
2015-09-15 18:20:13 +02:00
$summary .= $first ? ': ' : ', ' ;
2014-12-03 21:08:08 +01:00
$summary .= $slots ;
$first = false ;
2014-10-21 01:31:26 +02:00
}
2014-12-03 21:08:08 +01:00
$summary .= '</li>' ;
2014-10-21 01:31:26 +02:00
}
$summary .= '</ul>' ;
2014-09-04 17:52:18 +02:00
2015-01-04 01:36:55 +01:00
2014-09-04 17:52:18 +02:00
echo '
2015-03-29 22:13:22 +02:00
< form name = " formulaire " action = " ' . Utils::get_server_name() . 'create_date_poll.php " method = " POST " class = " form-horizontal " role = " form " >
2014-09-04 17:52:18 +02:00
< div class = " row " id = " selected-days " >
< div class = " col-md-8 col-md-offset-2 " >
2015-03-30 15:19:56 +02:00
< h3 > '. __(' Step 3 ', ' Confirm the creation of your poll ') .' </ h3 >
2014-10-21 01:31:26 +02:00
< div class = " well summary " >
2015-03-30 15:19:56 +02:00
< h4 > '. __(' Step 3 ', ' List of your choices ').' </ h4 >
2014-10-21 01:31:26 +02:00
'. $summary .'
</ div >
< div class = " alert alert-info clearfix " >
2015-04-21 23:58:25 +02:00
< p > ' . __(' Step 3 ', ' Your poll will automatically be archived ') . ' ' . $config[' default_poll_duration '] . ' ' . __(' Generic ', ' days ') . ' ' .__(' Step 3 ', ' after the last date of your poll . ') . '
< br /> ' . __(' Step 3 ', ' You can set a closer archiving date for it . ') .' </ p >
2014-10-21 01:31:26 +02:00
< div class = " form-group " >
2015-04-21 23:58:25 +02:00
< label for = " enddate " class = " col-sm-5 control-label " > '. __(' Step 3 ', ' Archiving date : ') .' </ label >
2014-10-21 01:31:26 +02:00
< div class = " col-sm-6 " >
< div class = " input-group date " >
< span class = " input-group-addon " >< i class = " glyphicon glyphicon-calendar text-info " ></ i ></ span >
2015-05-29 18:11:12 +02:00
< input type = " text " class = " form-control " id = " enddate " data - date - format = " '. __('Date', 'dd/mm/yyyy') .' " aria - describedby = " dateformat " name = " enddate " value = " '. $end_date_str .' " size = " 10 " maxlength = " 10 " placeholder = " '. __('Date', 'dd/mm/yyyy') .' " />
2014-10-21 01:31:26 +02:00
</ div >
</ div >
2015-03-30 15:19:56 +02:00
< span id = " dateformat " class = " sr-only " > ( '. __(' Date ', ' dd / mm / yyyy ') .' ) </ span >
2014-10-21 01:31:26 +02:00
</ div >
2014-09-04 17:52:18 +02:00
</ div >
< div class = " alert alert-warning " >
2015-03-30 15:19:56 +02:00
< p > '. __(' Step 3 ', ' Once you have confirmed the creation of your poll , you will be automatically redirected on the administration page of your poll . '). ' </ p > ' ;
2014-11-26 23:47:40 +01:00
if ( $config [ 'use_smtp' ] == true ) {
2015-03-30 15:19:56 +02:00
echo '<p>' . __ ( 'Step 3' , 'Then, you will receive quickly two emails: one contening the link of your poll for sending it to the voters, the other contening the link to the administration page of your poll.' ) . '</p>' ;
2014-11-14 17:35:22 +01:00
}
echo '
2014-09-04 17:52:18 +02:00
</ div >
< p class = " text-right " >
2015-03-30 15:19:56 +02:00
< button class = " btn btn-default " onclick = " javascript:window.history.back(); " title = " '. __('Step 3', 'Back to step 2') . ' " > '. __(' Generic ', ' Back ') . ' </ button >
< button name = " confirmation " value = " confirmation " type = " submit " class = " btn btn-success " > '. __(' Step 3 ', ' Create the poll ') . ' </ button >
2014-09-04 17:52:18 +02:00
</ p >
</ div >
</ div >
</ form > ' . " \n " ;
bandeau_pied ();
2014-12-05 01:08:38 +01:00
// Step 2/4 : Select dates of the poll
2011-05-15 03:56:54 +02:00
} else {
2014-09-04 17:52:18 +02:00
2015-04-16 13:10:28 +02:00
// Prefill form->choices
2015-05-31 15:57:44 +02:00
foreach ( $_SESSION [ 'form' ] -> getChoices () as $c ) {
$count = 3 - count ( $c -> getSlots ());
for ( $i = 0 ; $i < $count ; $i ++ ) {
$c -> addSlot ( '' );
}
}
$count = 3 - count ( $_SESSION [ 'form' ] -> getChoices ());
for ( $i = 0 ; $i < $count ; $i ++ ) {
2015-04-16 13:10:28 +02:00
$c = new Choice ( '' );
$c -> addSlot ( '' );
$c -> addSlot ( '' );
$c -> addSlot ( '' );
$_SESSION [ 'form' ] -> addChoice ( $c );
}
2015-03-05 14:53:42 +01:00
2015-04-16 13:10:28 +02:00
// Display step 2
$smarty -> assign ( 'title' , __ ( 'Step 2 date' , 'Poll dates (2 on 3)' ));
2015-04-16 13:32:45 +02:00
$smarty -> assign ( 'choices' , $_SESSION [ 'form' ] -> getChoices ());
2014-09-04 17:52:18 +02:00
2015-04-16 13:10:28 +02:00
$smarty -> display ( 'create_date_poll_step_2.tpl' );
2011-06-23 01:21:56 +02:00
2011-05-15 03:56:54 +02:00
}
2014-06-11 19:19:17 +02:00
}