The big one

This commit is contained in:
FramaJosephK 2014-10-21 01:31:26 +02:00
parent 9e8231c62c
commit 051575fa64
27 changed files with 3071 additions and 3089 deletions

View File

@ -60,7 +60,9 @@ while($dsondage = $sondage->FetchNextObject(false)) {
$sondage=$connect->Execute("select * from sondage WHERE date_fin > DATE_SUB(now(), INTERVAL 3 MONTH) ORDER BY date_fin ASC");
$nbsondages=$sondage->RecordCount();
echo '<p>' . $nbsondages. ' ' . _("polls in the database at this time") .'</p>'."\n";
$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";
// tableau qui affiche tous les sondages de la base
echo '<table class="table table-bordered">
@ -101,9 +103,9 @@ while($dsondage = $sondage->FetchNextObject(false)) {
}
echo '
<td>'.$nbuser.'</td>
<td><a href="' . Utils::getUrlSondage($dsondage->id_sondage) . '" class="btn btn-link" title="'. _("See the poll") .'"><span class="glyphicon glyphicon-eye-open"></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></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></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";
$i++;
}

View File

@ -76,26 +76,36 @@ if (!$sondage || $sondage->RecordCount() != 1){
$dsujet=$sujets->FetchObject(false);
$dsondage=$sondage->FetchObject(false);
// Send email (only once during the session) to alert admin of the change he made
$email_admin = $dsondage->mail_admin;
function send_mail_admin() {
global $email_admin;
global $numsondageadmin;
if(!isset($_SESSION["mail_admin_sent"])) {
Utils::sendEmail( $email_admin,
_("[ADMINISTRATOR] New settings for your poll") . ' ' . stripslashes( $dsondage->titre ),
_("You have changed the settings of your poll. \nYou can modify this poll with this link") .
" :\n\n" . Utils::getUrlSondage($numsondageadmin, true) . "\n\n" .
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION
);
$_SESSION["mail_admin_sent"]=true;
}
}
//si la valeur du nouveau titre est valide et que le bouton est activé
$adresseadmin = $dsondage->mail_admin;
if (isset($_POST["boutonnouveautitre"])) {
if (Utils::issetAndNoEmpty('nouveautitre') === false) {
$err |= TITLE_EMPTY;
} else {
//modification de la base SQL avec le nouveau titre
//Update SQL database with new title
$nouveautitre = htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
$sql = 'UPDATE sondage SET titre = '.$connect->Param('nouveautitre').' WHERE id_sondage = '.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
//envoi du mail pour prevenir l'admin de sondage
//Email sent to the admin
if ($connect->Execute($sql, array($nouveautitre, $numsondage))) {
Utils::sendEmail( $adresseadmin,
_("[ADMINISTRATOR] New title for your poll") . ' ' . NOMAPPLICATION,
_("You have changed the title of your poll. \nYou can modify this poll with this link") .
" :\n\n" . Utils::getUrlSondage($numsondageadmin, true) . "\n\n" .
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION );
send_mail_admin();
}
}
}
@ -107,17 +117,13 @@ if (isset($_POST["boutonnouveauxcommentaires"])) {
} else {
$commentaires = htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
//modification de la base SQL avec les nouveaux commentaires
//Update SQL database with new description
$sql = 'UPDATE sondage SET commentaires = '.$connect->Param('commentaires').' WHERE id_sondage = '.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
//Email sent to the admin
if ($connect->Execute($sql, array($commentaires, $numsondage))) {
//envoi du mail pour prevenir l'admin de sondage
Utils::sendEmail( $adresseadmin,
_("[ADMINISTRATOR] New description of your poll") . ' ' . NOMAPPLICATION,
_("You have changed the description of your poll. \nYou can modify this poll with this link") .
" :\n\n" . Utils::getUrlSondage($numsondageadmin, true) . " \n\n" .
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION );
send_mail_admin();
}
}
}
@ -129,21 +135,38 @@ if (isset($_POST["boutonnouvelleadresse"])) {
} else {
$nouvelleadresse = htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
//modification de la base SQL avec la nouvelle adresse
//Update SQL database with new email
$sql = 'UPDATE sondage SET mail_admin = '.$connect->Param('nouvelleadresse').' WHERE id_sondage = '.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
//Email sent to the admin
if ($connect->Execute($sql, array($nouvelleadresse, $numsondage))) {
//envoi du mail pour prevenir l'admin de sondage
Utils::sendEmail( $_POST['nouvelleadresse'],
_("[ADMINISTRATOR] New email address for your poll") . ' ' . NOMAPPLICATION,
_("You have changed your email address in your poll. \nYou can modify this poll with this link") .
" :\n\n" . Utils::getUrlSondage($numsondageadmin, true) . "\n\n" .
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION );
send_mail_admin();
}
}
}
//New poll rules
if (isset($_POST["btn_poll_rules"])) {
echo '<!-- '; print_r($_POST); echo ' -->';
if($_POST['poll_rules'] == '+') {
$new_poll_rules = substr($dsondage->format, 0, 1).'+';
} elseif($_POST['poll_rules'] == '-') {
$new_poll_rules = substr($dsondage->format, 0, 1).'-';
} else {
$new_poll_rules = substr($dsondage->format, 0, 1);
}
//Update SQL database with new rules
$sql = 'UPDATE sondage SET format = '.$connect->Param('new_poll_rules').' WHERE id_sondage = '.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
//Email sent to the admin
if ($connect->Execute($sql, array($new_poll_rules, $numsondage))) {
send_mail_admin();
}
}
// reload
$dsujet=$sujets->FetchObject(false);
$dsondage=$sondage->FetchObject(false);
@ -161,7 +184,7 @@ if (isset($_POST["ajoutsujet"])) {
<form name="formulaire" class="form-horizontal" action="' . Utils::getUrlSondage($numsondageadmin, true) . '" method="POST">
<h2>' . _("Column's adding") . '</h2>'."\n";
if ($dsondage->format=="A"||$dsondage->format=="A+"){
if (substr($dsondage->format, 0, 1)=="A"){
echo '
<div class="form-group">
<label for="nouvellecolonne" class="col-md-6">' . _("Add a column") .' :</label>
@ -224,6 +247,20 @@ if (isset($_POST["suppressionsondage"])) {
die();
}
// Remove all the comments
if (isset($_POST["removecomments"])) {
$sql = 'DELETE FROM comments WHERE id_sondage='.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
$cleaning = $connect->Execute($sql, array($numsondage));
}
// Remove all the votes
if (isset($_POST["removevotes"])) {
$sql = 'DELETE FROM user_studs WHERE id_sondage='.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
$cleaning = $connect->Execute($sql, array($numsondage));
}
//action si bouton confirmation de suppression est activé
if (isset($_POST["confirmesuppression"])) {
$nbuser=$user_studs->RecordCount();
@ -233,13 +270,8 @@ if (isset($_POST["confirmesuppression"])) {
// on ecrit dans le fichier de logs la suppression du sondage
error_log($date . " SUPPRESSION: $dsondage->id_sondage\t$dsondage->format\t$dsondage->nom_admin\t$dsondage->mail_admin\n", 3, 'admin/logs_studs.txt');
//envoi du mail a l'administrateur du sondage
Utils::sendEmail( $adresseadmin,
_("[ADMINISTRATOR] Removing of your poll") . ' ' . NOMAPPLICATION,
_("You have removed your poll. \nYou can make new polls with this link") .
" :\n\n" . Utils::get_server_name() . "index.php \n\n" .
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION );
// Email sent
send_mail_admin();
//affichage de l'ecran de confirmation de suppression de sondage
Utils::print_header(_("Your poll has been removed!"));
@ -347,7 +379,7 @@ if (isset($_POST["boutonp"])) {
//action quand on ajoute une colonne au format AUTRE
if (isset($_POST["ajoutercolonne"]) && Utils::issetAndNoEmpty('nouvellecolonne') && ($dsondage->format == "A" || $dsondage->format == "A+")) {
if (isset($_POST["ajoutercolonne"]) && Utils::issetAndNoEmpty('nouvellecolonne') && (substr($dsondage->format, 0, 1) == "A" )) {
$nouveauxsujets=$dsujet->sujet;
//on rajoute la valeur a la fin de tous les sujets deja entrés
@ -359,16 +391,13 @@ if (isset($_POST["ajoutercolonne"]) && Utils::issetAndNoEmpty('nouvellecolonne')
$sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage');
$sql = $connect->Prepare($sql);
if ($connect->Execute($sql, array($nouveauxsujets, $numsondage))) {
//envoi d'un mail pour prévenir l'administrateur du changement
Utils::sendEmail( "$adresseadmin", "" . _("[ADMINISTRATOR] New column for your poll").NOMAPPLICATION, "" .
_("You have added a new column in your poll. \nYou can inform the voters of this change with this link") .
" : \n\n" . Utils::getUrlSondage($numsondage) . " \n\n " . _("Thanks for your confidence.") . "\n".NOMAPPLICATION );
send_mail_admin();
}
}
//action quand on ajoute une colonne au format DATE
if (isset($_POST["ajoutercolonne"]) && ($dsondage->format == "D" || $dsondage->format == "D+")) {
if (isset($_POST["ajoutercolonne"]) && (substr($dsondage->format, 0, 1) == "D")) {
$nouveauxsujets=$dsujet->sujet;
if (isset($_POST["newdate"]) && $_POST["newdate"] != "vide") {
@ -446,13 +475,8 @@ if (isset($_POST["ajoutercolonne"]) && ($dsondage->format == "D" || $dsondage->f
}
}
//envoi d'un mail pour prévenir l'administrateur du changement
$adresseadmin = $dsondage->mail_admin;
Utils::sendEmail( $adresseadmin,
_("[ADMINISTRATOR] New column for your poll"),
_("You have added a new column in your poll. \nYou can inform the voters of this change with this link").
" : \n\n" . Utils::getUrlSondage($numsondage) . " \n\n " . _("Thanks for your confidence.") . "\n".NOMAPPLICATION );
//Email sent to the admin
send_mail_admin();
} else {
$erreur_ajout_date="yes";
@ -644,6 +668,20 @@ $title = (isset($_POST["boutonnouveautitre"]) && Utils::issetAndNoEmpty('nouveau
$description = (isset($_POST["nouveauxcommentaires"])) ? stripslashes(htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8')) : stripslashes( $dsondage->commentaires );
$email_admin = (isset($_POST["boutonnouvelleadresse"]) && Utils::issetAndNoEmpty('nouvelleadresse')) ? htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $dsondage->mail_admin );
//Poll format (locked A-/D-, open A/D, editable A+/D+)
$poll_rules = (isset($_POST["poll_rules"]) && Utils::issetAndNoEmpty('btn_poll_rules')) ? $_POST["poll_rules"] : substr($dsondage->format, 1, 1);
$poll_rules_opt1 = '';$poll_rules_opt2 = '';$poll_rules_opt3 = '';
if($poll_rules == '+') {
$poll_rules_text = '<span class="glyphicon glyphicon-edit"></span> '. _("Votes are editable");
$poll_rules_opt3 = 'selected';
} elseif($poll_rules == '-') {
$poll_rules_text = '<span class="glyphicon glyphicon-lock"></span> '. _("Votes and comments are locked");
$poll_rules_opt1 = 'selected';
} else {
$poll_rules_text = '<span class="glyphicon glyphicon-check"></span> '. _("Votes and comments are open");
$poll_rules_opt2 = 'selected';
}
if ($errors!='') {
Utils::print_header(_("Error!"));
bandeau_titre(_("Error!"));
@ -668,8 +706,8 @@ echo '
<div class="input-group">
<input type="text" class="form-control" id="newtitle" name="nouveautitre" size="40" value="'.$title.'" />
<span class="input-group-btn">
<button type="submit" class="btn btn-success" name="boutonnouveautitre" value="1" title="'. _('Save the new title') .'"><span class="glyphicon glyphicon-ok"></span></button>
<button class="btn btn-link btn-cancel" title="'. _('Cancel the title edit') .'"><span class="glyphicon glyphicon-remove"></span></button>
<button type="submit" class="btn btn-success" name="boutonnouveautitre" value="1" title="'. _('Save the new title') .'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only">' . _('Save') . '</span></button>
<button class="btn btn-link btn-cancel" title="'. _('Cancel the title edit') .'"><span class="glyphicon glyphicon-remove"></span><span class="sr-only">' . _('Cancel') . '</span></button>
</span>
</div>
</div>
@ -678,7 +716,15 @@ echo '
<div class="btn-group pull-right">
<button onclick="javascript:print(); return false;" class="btn btn-default"><span class="glyphicon glyphicon-print"></span> ' . _('Print') . '</button>
<button onclick="window.location.href=\'' . Utils::get_server_name() . 'exportcsv.php?numsondage=' . $numsondage . '\';return false;" class="btn btn-default"><span class="glyphicon glyphicon-download-alt"></span> ' . _('Export to CSV') . '</button>
<button type="submit" id="suppressionsondage" name="suppressionsondage" value="" class="btn btn-danger" title="'. _("Remove the poll") .'"><span class="glyphicon glyphicon-trash"></span></button>
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-trash"></span> <span class="sr-only">' . _("Remove") . '</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><button class="btn btn-link" type="submit" name="removevotes">' . _('Remove all the votes') . '</button></li>
<li><button class="btn btn-link" type="submit" name="removecomments">' . _('Remove all the comments') . '</button></li>
<li class="divider" role="presentation"></li>
<li><button class="btn btn-link" type="submit" id="suppressionsondage" name="suppressionsondage" value="" >'. _("Remove the poll") .'</button></li>
</ul>
</div>
</div>
</div>
@ -696,8 +742,8 @@ echo '
<div class="input-group">
<input type="text" class="form-control" id="newemail" name="nouvelleadresse" size="40" value="'.$email_admin.'" />
<span class="input-group-btn">
<button type="submit" name="boutonnouvelleadresse" value="1" class="btn btn-success" title="'. _('Save the adress email') .'"><span class="glyphicon glyphicon-ok"></span></button>
<button class="btn btn-link btn-cancel" title="'. _('Cancel the adress email edit') .'"><span class="glyphicon glyphicon-remove"></span></button>
<button type="submit" name="boutonnouvelleadresse" value="1" class="btn btn-success" title="'. _('Save the adress email') .'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only">' . _('Save') . '</span></button>
<button class="btn btn-link btn-cancel" title="'. _('Cancel the adress email edit') .'"><span class="glyphicon glyphicon-remove"></span><span class="sr-only">' . _('Cancel') . '</span></button>
</span>
</div>
</div>
@ -724,10 +770,31 @@ echo '
<input class="form-control" id="admin-link" type="text" readonly="readonly" value="' . Utils::getUrlSondage($numsondageadmin, true) . '" />
</div>
<div class="form-group col-md-2">
<label>'. _("Expiration's date") .'</label>
<h3 class="control-label">'. _("Expiration's date") .'</h3>
<p>'.date("d/m/Y",strtotime($dsondage->date_fin)).'</p>
</div>
</div>
<div class="row">
<div class="col-md-5 col-md-offset-7" >
<div id="poll-rules-form">
<p class="pull-right">'.$poll_rules_text.'<button class="btn btn-link btn-sm btn-edit" title="'. _('Edit the poll rules') .'"><span class="glyphicon glyphicon-pencil"></span><span class="sr-only">' . _('Edit') . '</span></button></p>
<div class="hidden js-poll-rules">
<label class="sr-only" for="newrules">'. _("Poll rules") .'</label>
<div class="input-group">
<select class="form-control" id="newrules" name="poll_rules">
<option value="-" '.$poll_rules_opt1.'>'. _("Votes and comments are locked") .'</option>
<option value="0" '.$poll_rules_opt2.'>'. _("Votes and comments are open") .'</option>
<option value="+" '.$poll_rules_opt3.'>'. _("Votes are editable") .'</option>
</select>
<span class="input-group-btn">
<button type="submit" name="btn_poll_rules" value="1" class="btn btn-success" title="'. _('Save the new rules') .'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only">' . _('Save') . '</span></button>
<button class="btn btn-link btn-cancel" title="'. _('Cancel the rules edit') .'"><span class="glyphicon glyphicon-remove"></span><span class="sr-only">' . _('Cancel') . '</span></button>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</form>'."\n"; // .jumbotron
@ -751,7 +818,7 @@ $td_headers = array(); // for a11y, headers="M1 D4 H5" on each td
$radio_title = array(); // date for
// Dates poll
if ($dsondage->format=="D"||$dsondage->format=="D+") {
if (substr($dsondage->format, 0, 1)=="D") {
$tr_months = '<tr><th role="presentation"></th>';
$tr_days = '<tr><th role="presentation"></th>';
@ -797,7 +864,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
$hour = substr($current, strpos($current, '@')-count($current)+2);
if ($hour != "") {
$tr_hours .= '<th class="bg-info'.$rbd.'" id="H'.$i.'">'.$hour.'</th>';
$tr_hours .= '<th class="bg-info'.$rbd.'" id="H'.$i.'" title="'.$hour.'">'.$hour.'</th>';
$radio_title[$i] .= ' - '.$hour;
$td_headers[$i] .= ' H'.$i;
} else {
@ -808,7 +875,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
}
// Remove col
$tr_add_remove_col .= (count($toutsujet) > 2 ) ? '<td headers="'.$td_headers[$i].'"><button type="submit" name="effacecolonne'.$i.'" class="btn btn-link btn-sm" title="' . _('Remove the column') . ' ' .$radio_title[$i]. '"><span class="glyphicon glyphicon-remove text-danger"></span></button></td>' : '<td role="presentation"></td>';
$tr_add_remove_col .= (count($toutsujet) > 2 ) ? '<td headers="'.$td_headers[$i].'"><button type="submit" name="effacecolonne'.$i.'" class="btn btn-link btn-sm" title="' . _('Remove the column') . ' ' .$radio_title[$i]. '"><span class="glyphicon glyphicon-remove text-danger"></span><span class="sr-only">'. _("Remove") .'</span></button></td>' : '<td role="presentation"></td>';
}
@ -819,7 +886,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
$tr_hours .= '<th></th></tr>';
// Add col
$tr_add_remove_col .= '<td><button type="submit" name="ajoutsujet" class="btn btn-link btn-sm" title="'. _('Add a column') . '"><span class="glyphicon glyphicon-plus text-success"></span></button></td></tr>';
$tr_add_remove_col .= '<td><button type="submit" name="ajoutsujet" class="btn btn-link btn-sm" title="'. _('Add a column') . '"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add a column") .'</span></button></td></tr>';
$thead = "\n".$tr_add_remove_col."\n".$tr_months."\n".$tr_days."\n".$tr_hours."\n";
@ -834,18 +901,42 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
$td_headers[$i]='';$radio_title[$i]=''; // init before concatenate
// Subjects
$tr_subjects .= '<th class="bg-info" id="S'.preg_replace("/[^a-zA-Z0-9]_+/", "", stripslashes($toutsujet[$i])).'">'.stripslashes($toutsujet[$i]).'</th>';
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$toutsujet[$i],$md_a_img); // Markdown [![alt](src)](href)
preg_match_all('/!\[(.*?)\]\((.*?)\)/',$toutsujet[$i],$md_img); // Markdown ![alt](src)
preg_match_all('/\[(.*?)\]\((.*?)\)/',$toutsujet[$i],$md_a); // Markdown [text](href)
if (isset($md_a_img[2][0]) && $md_a_img[2][0]!='' && isset($md_a_img[3][0]) && $md_a_img[3][0]!='') { // [![alt](src)](href)
$th_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<a href="'.$md_a_img[3][0].'"><img src="'.$md_a_img[2][0].'" class="img-responsive" alt="'.$th_subject_text.'" /></a>';
} elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src)
$th_subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<img src="'.$md_img[2][0].'" class="img-responsive" alt="'.$th_subject_text.'" />';
} elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href)
$th_subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<a href="'.$md_a[2][0].'">'.$th_subject_text.'</a>';
} else { // text only
$th_subject_text = stripslashes($toutsujet[$i]);
$th_subject_html = $th_subject_text;
}
$tr_subjects .= '<th class="bg-info" id="S'.$i.'" title="'.$th_subject_text.'">'.$th_subject_html.'</th>';
$border[$i] = false;
$td_headers[$i] .= stripslashes($toutsujet[$i]);
$radio_title[$i] .= stripslashes($toutsujet[$i]);
$td_headers[$i] .= 'S'.$i;
$radio_title[$i] .= $th_subject_text;
// Remove col
$tr_add_remove_col .= '<td headers="'.$td_headers[$i].'"><button type="submit" name="effacecolonne'.$i.'" class="btn btn-link btn-sm" title="' . _('Remove the column') . ' '. $radio_title[$i] .'"><span class="glyphicon glyphicon-remove text-danger"></span></button></td>';
$tr_add_remove_col .= '<td headers="'.$td_headers[$i].'"><button type="submit" name="effacecolonne'.$i.'" class="btn btn-link btn-sm" title="' . _('Remove the column') . ' '. $radio_title[$i] .'"><span class="glyphicon glyphicon-remove text-danger"></span><span class="sr-only">' . _('Remove') .'</span></button></td>';
}
// Add col
$tr_add_remove_col .= '<td><button type="submit" name="ajoutsujet" class="btn btn-link btn-sm" title="'. _('Add a column') . '"><span class="glyphicon glyphicon-plus text-success"></span></button></td></tr>';
$tr_add_remove_col .= '<td><button type="submit" name="ajoutsujet" class="btn btn-link btn-sm" title="'. _('Add a column') . '"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add a column") .'</span></button></td></tr>';
$thead = $tr_add_remove_col.$tr_subjects.'<th></th></tr>';
}
@ -859,10 +950,23 @@ echo '
' . _(' remove a column or a line with ') . '<span class="glyphicon glyphicon-remove text-danger"></span><span class="sr-only">' . _('Remove') . '</span>
' . _('and add a new column with '). '<span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _('Add a column') . '</span></p>
<p>' . _('Finally, you can change the informations of this poll like the title, the comments or your email address.') . '</p>
<p><b>' . _('Legend:'). '</b> <span class="glyphicon glyphicon-ok"></span> =' . _('Yes') . ', <b>(<span class="glyphicon glyphicon-ok"></span>)</b> = ' . _('Ifneedbe') . ', <span class="glyphicon glyphicon-ban-circle"></span> = ' . _('No') . '</span></p>
</div>
<div class="hidden row scroll-buttons" aria-hidden="true">
<div class="btn-group pull-right">
<button class="btn btn-sm btn-link scroll-left" title="' . _('Scroll to the left') . '">
<span class="glyphicon glyphicon-chevron-left"></span>
</button>
<button class="btn btn-sm btn-link scroll-right" title="' . _('Scroll to the right') . '">
<span class="glyphicon glyphicon-chevron-right"></span>
</button>
</div>
</div>
<div id="tableContainer" class="tableContainer">
<table class="results">
<caption>'._('Votes of the poll ').$title.'</caption>
<caption class="sr-only">'._('Votes of the poll ').$title.'</caption>
<thead>'. $thead . '</thead>
<tbody>';
@ -953,8 +1057,15 @@ while ($data = $user_studs->FetchNextObject(false)) {
//a la fin de chaque ligne se trouve les boutons modifier
if (!$testligneamodifier=="true") {
echo '<td><button type="submit" class="btn btn-link btn-sm" name="modifierligne'.$compteur.'" title="'. _('Edit the line:') .' '.stripslashes($nombase).'">
<span class="glyphicon glyphicon-pencil"></span></button><button type="submit" name="effaceligne'.$compteur.'" title="'. _('Remove the line:') .' '.stripslashes($nombase).'" class="btn btn-link btn-sm"><span class="glyphicon glyphicon-remove text-danger"></span></button></td>'."\n";
echo '
<td>
<button type="submit" class="btn btn-link btn-sm" name="modifierligne'.$compteur.'" title="'. _('Edit the line:') .' '.stripslashes($nombase).'">
<span class="glyphicon glyphicon-pencil"></span><span class="sr-only">' . _('Edit') . '</span>
</button>
<button type="submit" name="effaceligne'.$compteur.'" title="'. _('Remove the line:') .' '.stripslashes($nombase).'" class="btn btn-link btn-sm">
<span class="glyphicon glyphicon-remove text-danger"></span><span class="sr-only">' . _('Remove') . '</span>
</button>
</td>'."\n";
}
//demande de confirmation pour modification de ligne
@ -1015,16 +1126,22 @@ if (!$testligneamodifier=="true") {
// Addition and Best choice
//affichage de la ligne contenant les sommes de chaque colonne
$tr_addition = '<tr><td>'. _("Addition") .'</td>';
$tr_bestchoice = '<tr><td></td>';
$meilleurecolonne = 0;
$tr_addition = '<tr id="addition"><td>'. _("Addition") .'</td>';
$meilleurecolonne = max($somme);
$compteursujet = 0;
$meilleursujet = '<ul style="list-style:none">';
for ($i = 0; $i < $nbcolonnes; $i++) {
if (isset($somme[$i]) && $somme[$i] > 0 ) {
if (isset($somme[$i]) && $somme[$i] > $meilleurecolonne){
$meilleurecolonne = $somme[$i];
if (in_array($i, array_keys($somme, max($somme)))){
$tr_addition .= '<td><span class="glyphicon glyphicon-star text-warning"></span><span>'.$somme[$i].'</span></td>';
$meilleursujet.= '<li><b>'.$radio_title[$i].'</b></li>';
$compteursujet++;
} else {
$tr_addition .= '<td>'.$somme[$i].'</td>';
}
$tr_addition .= '<td>'.$somme[$i].'</td>';
} else {
$tr_addition .= '<td></td>';
}
@ -1034,67 +1151,49 @@ $tr_addition .= '<td></td></tr>';
//recuperation des valeurs des sujets et adaptation pour affichage
$toutsujet = explode(",", $dsujet->sujet);
$compteursujet = 0;
$meilleursujet = '<ul style="list-style:none">';
for ($i = 0; $i < $nbcolonnes; $i++) {
if (isset($somme[$i]) && $somme[$i] > 0 && $somme[$i] == $meilleurecolonne){
$tr_bestchoice .= '<td><span class="glyphicon glyphicon-star text-warning"></span></td>';
if ($dsondage->format == "D" || $dsondage->format == "D+") {
$meilleursujetexport = $toutsujet[$i];
if (strpos($toutsujet[$i], '@') !== false) {
$toutsujetdate = explode("@", $toutsujet[$i]);
$meilleursujet .= '<li><b>'.strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1].'</b></li>';
} else {
$meilleursujet .= '<li><b>'.strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]).'</b></li>';
}
} else {
$meilleursujet.= '<li><b>'.$toutsujet[$i].'</b></li>';
}
$compteursujet++;
} else {
$tr_bestchoice .= '<td></td>';
}
}
$tr_bestchoice .= '<td></td></tr>';
$meilleursujet = str_replace("°", "'", $meilleursujet).'</ul>';
$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote');
// Print Addition and Best choice
echo $tr_addition."\n".$tr_bestchoice.'
echo $tr_addition.'
</tbody>
</table>
<div class="col-sm-4 col-sm-offset-4"><p>'."\n";
</div>
<div class="row">'."\n";
if ($compteursujet == 1) {
echo '<span class="glyphicon glyphicon-star text-warning"></span> ' . _("The best choice at this time is:") . '</p>' . $meilleursujet . '<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . ".\n";
echo '
<div class="col-sm-6 col-sm-offset-3 alert alert-success">
<p><span class="glyphicon glyphicon-star text-warning"></span> ' . _("The best choice at this time is:") . '</p>
' . $meilleursujet . '
<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . '.</p>
</div>'."\n";
} elseif ($compteursujet > 1) {
echo '<span class="glyphicon glyphicon-star text-warning"></span> ' . _("The bests choices at this time are:") . '</p>' . $meilleursujet . '<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . ".\n";
echo '
<div class="col-sm-6 col-sm-offset-3 alert alert-success">
<p><span class="glyphicon glyphicon-star text-warning"></span> ' . _("The bests choices at this time are:") . '</p>
' . $meilleursujet . '
<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . '.</p>
</div>'."\n";
}
echo '
</p></div>
</div>
<hr />
<form name="formulaire4" action="#bas" method="POST">'."\n";
<form name="formulaire4" action="#" method="POST">'."\n";
// Commments
$sql = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment';
$sql = $connect->Prepare($sql);
$comment_user = $connect->Execute($sql, array($numsondage));
if ($comment_user->RecordCount() != 0) {
echo '<div class="row"><h3>' . _("Comments of polled people") . '</h3>'."\n";
echo '<div><h3>' . _("Comments of polled people") . '</h3>'."\n";
$i = 0;
while ( $dcomment=$comment_user->FetchNextObject(false)) {
echo '
<div class="comment">
<button type="submit" name="suppressioncomment'.$i.'" class="btn btn-link" title="' . _('Remove the comment') . '"><span class="glyphicon glyphicon-remove text-danger"></span></button>
<button type="submit" name="suppressioncomment'.$i.'" class="btn btn-link" title="' . _('Remove the comment') . '"><span class="glyphicon glyphicon-remove text-danger"></span><span class="sr-only">' . _('Remove') . '</span></button>
<b>'.stripslashes($dcomment->usercomment). ' :</b>
<span class="comment">' . stripslashes(nl2br($dcomment->comment)) . '</span>
</div>';
@ -1103,7 +1202,7 @@ if ($comment_user->RecordCount() != 0) {
echo '</div>';
}
echo '
<div class="row hidden-print alert alert-info">
<div class="hidden-print alert alert-info">
<div class="col-md-6 col-md-offset-3">
<fieldset id="add-comment"><legend>' . _("Add a comment in the poll") . '</legend>
<div class="form-group">
@ -1116,9 +1215,8 @@ echo '
<p class="text-center"><input type="submit" name="ajoutcomment" value="'. _("Send the comment") .'" class="btn btn-success"></p>
</fieldset>
</div>
<div class="clearfix"></div>
</div>
</form>
<a id="bas"></a>';
</form>';
bandeau_pied();

View File

@ -90,6 +90,7 @@ class Utils
<link rel="stylesheet" href="' . self::get_server_name() . 'css/bootstrap-accessibility.css">
<link rel="stylesheet" href="' . self::get_server_name() . 'css/datepicker3.css">
<link rel="stylesheet" href="' . self::get_server_name() . 'css/style.css">
<link rel="stylesheet" href="' . self::get_server_name() . 'css/frama.css">
<link rel="stylesheet" href="' . self::get_server_name() . 'css/print.css" media="print">
<script type="text/javascript" src="' . self::get_server_name() . 'js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="' . self::get_server_name() . 'js/bootstrap.min.js"></script>
@ -104,7 +105,7 @@ class Utils
echo '
</head>
<body>
<div class="container">';
<div class="container ombre">';
}
@ -161,7 +162,7 @@ class Utils
$replyTo = $headers;
$headers = ''; // on reinitialise $headers
} else {
$replyTo = ADRESSEEMAILREPONSEAUTO;
$replyTo = ADRESSEMAILREPONSEAUTO;
}
$from = sprintf( "From: %s%s <%s>\n", $encoded_app, $folding, ADRESSEMAILADMIN);
@ -176,7 +177,7 @@ class Utils
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
$headers .= "Content-Transfer-Encoding: 8bit";
$body = html_entity_decode($body, ENT_QUOTES, 'UTF-8');
$body = html_entity_decode($body, ENT_QUOTES, 'UTF-8')._("\n--\n\n« La route est longue, mais la voie est libre… »\nFramasoft ne vit que par vos dons (déductibles des impôts).\nMerci d'avance pour votre soutien http://soutenir.framasoft.org.");
mail($to, $subject, $body, $headers, $param);
}

View File

@ -23,7 +23,15 @@ if (isset($_POST['lang']) && is_string($_POST['lang']) && in_array($_POST['lang'
} elseif ( isset($_COOKIE['lang']) && is_string($_COOKIE['lang']) && in_array($_COOKIE['lang'], array_keys($ALLOWED_LANGUAGES)) ) {
$mlocale = $_COOKIE['lang'] ;
} else {
$mlocale = LANGUE ;
$mlocale = LANGUE;
// Replace config language by browser language if possible
foreach ($ALLOWED_LANGUAGES as $k => $v ) {
if (substr($k,0,2)==substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) {
$mlocale = $k;
}
}
}
$locale = $mlocale . '.utf8';

View File

@ -1,279 +0,0 @@
<?php
/**
* 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)
*
* =============================
*
* 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
*
* 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;
session_start();
include_once __DIR__ . '/app/inc/init.php';
if (file_exists('bandeaux_local.php')) {
include_once('bandeaux_local.php');
} else {
include_once('bandeaux.php');
}
//affichage de la page
Utils::print_header( _("About") );
bandeau_titre(_("About"));
echo <<<mentions
<ul>
<li><a href="#faq">Questions fréquentes</a></li>
<ul>
<li><a href="#framadate">Qu'est-ce que Framadate
?</a></li>
<li><a href="#studs">Quelles différences entre
Framadate et STUdS ?</a></li>
<li><a href="#doodle">Quelles différences entre
Framadate et Doodle ?</a></li>
<li><a href="#longevite">Mon sondage
restera-t-il longtemps en ligne ?</a></li>
</ul>
<li><a href="#mentions">Mentions légales</a></li>
<li><a href="#credits">Crédits</a></li>
<li><a href="#licence">Licence</a></li>
</ul>
<hr style="width: 100%; height: 2px;">
<h1><a name="faq"></a>Questions fréquentes</h1>
<h3><a name="framadate"></a>Qu'est-ce que
Framadate ?</h3>
Framadate est un service en ligne permettant de planifier un
rendez-vous rapidement et simplement. Aucune inscription préalable
n'est nécessaire.<br />
Framadate est un service du<a href="http://framasoft.org">
réseau Framasoft</a>, mis en place par<a
href="http://fr.wikipedia.org/wiki/Framasoft"> l'association
Framasoft</a>.<br />
<h3><a name="studs"></a>Quelles différences
entre Framadate et STUdS ! ?</h3>
Framadate est un service basé sur le logiciel libre <a
href="https://github.com/leblanc-simon/OpenSondage">OpenSondage</a>.
OpenSondage est lui-même basé sur le logiciel <a
href="http://studs.u-strasbg.fr">STUdS !</a> développé
par l'Université de Strasbourg. <br />
Après avoir testé STUdS, nous avons décidé d'apporter de nombreuses
modifications, notamment ergonomiques, au code source existant.
L'ensemble de ces modifications ne pouvaient entrer dans le cadre
d'utilisation d'un logiciel déjà en production dans une université et
aurait été (fort logiquement) rejetté de la branche principale de
développement. C'est pourquoi nous avons préferer "<a
href="http://fr.wikipedia.org/wiki/Fork_%28d%C3%A9veloppement_logiciel%29">forker</a>"
STUdS pour créer OpenSondage.<br />
<h3><a name="doodle"></a>Quelles différences
entre Framadate et <a href="http://doodle.com">Doodle</a>
?</h3>
Aujourd'hui, le danger pour le logiciel libre
ne provient plus de Microsoft ou d'Adobe et de leurs logiciels qu'on
installe sans avoir le code source, mais des applications web "dans les
nuages" proposés comme services par des entreprises.<br />
<br />
Cela pour au moins 4 raisons :<br />
1- <span style="font-weight: bold;">sécurité</span>
: aucune garantie ne peut vous être apportée quand au fait les données
soient correctement sauvegardées et protégées, ni que le<br />
code source "officiel" soit réellement celui que vous utilisez en ligne.<br />
2- <span style="font-weight: bold;">fiabilité/perennité</span>
: le service peut tomber en panne, et rien&nbsp;ne garanti que la
société Doodle sera toujours demain et maintiendra le site<br />
3- <span style="font-weight: bold;">propriété des données</span>
: beaucoup d'entreprises s'autoproclament co-détentrices de vos
contenus "clouds" (ex: Facebook impose une clause de partage des droits
sur vos contenus, vos données, vos photos)<br />
4-<span style="font-weight: bold;"> vie privée</span>
: une entreprise - comme Doodle - doit gagner de l'argent (et il n'y a
aucun mal à cela). Mais si elle est en difficulté financière, elle peut
décider de changer ses conditions d'utilisation et vendre vos données à
des tiers (alors que Framasoft, asso loi 1901 d'intérêt général, n'aura
jamais d'intérêt à le faire).<br />
<br />
A cela s'ajoute le problème, plus éthique, de la publicité.<br />
<br />
Les problèmes 1 et 2 concernent aussi Framadate.org : rien ne garanti
la sécurité et la fiabilité du service (d'autant plus que les
administrateurs systèmes de Framasoft sont bénévoles).<br />
<br />
Par contre :<br />
- les problemes 3 et 4 ne sont pas d'actualité avec Framadate, exploité
par une association loi 1901<br />
- et surtout, Framadate fait partie d'un projet plus global
(Framatools) qui vise justement à sensibiliser le grand public à la
problématique du "cloud". Cela peut sembler paradoxal, mais bien que
proposant le service Framadate.org, nous allons surtout encourager les
organisations à installer leur propre instance du logiciel afin de
maitriser totalement leurs données.<br />
<br />
Bref, oui Framadate est inspiré de Doodle.com, et oui Doodle est un
excellent service. Mais Doodle reste une "boite noire" pour
l'utilisateur final qui va sur doodle.com. Framadate.org essaie de
répondre, modestement, à cette problématique en montrant que des
alternatives libres existent et qu'on peut les installer "chez soi".<br />
<h3><a name="longevite"></a>Mon sondage
restera-t-il longtemps en ligne ?</h3>
Le service Framadate est proposée gratuitement par l'association
Framasoft.<br />
Framasoft
s'engage à maintenir le service "aussi longtemps que possible", mais ne
peut fournir aucune garantie de date. Si cela ne vous convient pas,
nous vous
encourageons sincèrement à installer vous-même Framadate et à maintenir
vous-même votre propre service.
<hr style="width: 100%; height: 2px;">
<h1><a name="mentions"></a>Mentions légales<br />
</h1>
<h2>Éditeur et Responsable de la publication</h2>
<p>Editeur : Association Framasoft (cf "Hébergement")</p>
<p>Responsable de la publication : Christophe Masutti</p>
<p>Vous pouvez rentrer en contact avec l'Editeur et le
Responsable de la publication en passant par la page "<a
href="http://contact.framasoft.org">contact</a>".</p>
<p>Les propos tenus sur ce site ne représentent que et uniquement
lopinion de leur auteur, et nengagent pas l'association Framasoft,
les sociétés, entreprises ou collectifs auxquels il contribue ou dont
il peut être associé ou employé.</p>
<h2>Hébergement</h2>
<p>Ce site est hébergé par Framasoft, 10 bis rue Jangot 69007 Lyon, France.
Cet hébergeur possède à ce jour les éléments didentification
personnelle concernant l'Éditeur (voir <a
href="http://www.framasoft.net/article4736.html">http://www.framasoft.net/article4736.html</a>).</p>
<h2>Données personnelles</h2>
<p>Les données personnelles collectées par Framadate sont
uniquement destinées à un usage interne. En aucun cas ces données ne
seront cédées ou vendues à des tiers.
Conformément à larticle 39 de la loi du 6 janvier 1978 relative à
linformatique, aux fichiers et aux libertés, vous avez un droit
daccès, de modification et dopposition sur vos données personnelles
enregistrées par le blog.
Dans ce cas, utilisez le formulaire de contact.</p>
<h2>Conditions de modération/suppression de sondages</h2>
<p>Les sondages de Framadate bénéficient d'une URL aléatoire,
mais publique. Si vous souhaitez supprimer un sondage, utilisez
l'adresse d'aministration fournie à la création. Vous pouvez
exceptionnellement demander la suppression d'un sondage en utilisant la
page de contact.</p>
<h2>Notification des contenus litigieux</h2>
<p>Conformément à larticle 6 I 5° LCEN, la connaissance des
contenus litigieux est présumée acquise par LÉditeur lorsquil lui est
notifié, par lettre recommandée avec accusé de réception adressée au
siège social de LÉditeur, la totalité des éléments suivants (i) la
date de la notification&nbsp;; (ii) si le notifiant est une
personne physique&nbsp;: ses nom, prénoms, profession, domicile,
nationalité, date et lieu de naissance&nbsp;; si le notifiant est
une personne morale&nbsp;: sa forme, sa dénomination, son siège
social et lorgane qui la représente légalement&nbsp;; (iii) les
nom et domicile du destinataire ou, sil sagit dune personne morale,
sa dénomination et son siège social&nbsp;; (iv) la description des
faits litigieux et leur localisation précise&nbsp;; (v) les motifs
pour lesquels le contenu doit être retiré, comprenant la mention des
dispositions légales et des justifications de faits&nbsp;; (vi) la
copie de la correspondance adressée à lauteur ou à léditeur des
informations ou activités litigieuses demandant leur interruption, leur
retrait ou leur modification, ou la justification de ce que lauteur ou
léditeur na pu être contacté.</p>
<p>A défaut denvoi de la totalité de ces éléments, la
notification ne sera pas prise en compte par LÉditeur et ce dernier ne
pourra en conséquence être présumé informé dun contenu litigieux.</p>
<p>LÉditeur se réserve le droit dengager des poursuites à
lencontre de toute personne ayant usé abusivement du droit réservé par
larticle 6 I 4° LCEN. LÉditeur vous rappelle que toute personne qui
aurait présenté un contenu ou une activité comme étant illicite dans le
but den obtenir le retrait ou den faire cesser la diffusion alors
quelle a connaissance du caractère inexact de cette information, est
susceptible dencourir une peine dun an demprisonnement et de 15.000
€uros damende.</p>
<h2>Licences, droits de reproduction</h2>
<p>L'application Framadate, basé sur le logiciel OpenSondage,
lui-même basé sur STUdS, est publiée sous licence libre <a
href="http://www.cecill.info/licences.fr.html">CeCILL-B</a>.
Les contenus (sondages) sont publiés sous licence Creative Commons
BY-SA. Cela signifie que si l'adresse de votre sondage est connue d'un
individu, vous autorisez cette personne à utiliser, partager, modifier
votre sondage. Si vous souhaitez des sondages 100% privés et avec votre
propre licence, installez votre propre logiciel de sondage et
n'utilisez pas Framadate.org.</p>
<hr style="width: 100%; height: 2px;">
<h2><a name="credits"></a>Crédits</h2>
<b>Application d'origine</b><br />
<br />
L'application Framadate est une instance du logiciel <b><a
href="http://studs.u-strasbg.fr">STUdS !</a></b>
développé à l'Université de Strasbourg depuis 2008.<br />
<br />
Pour les besoins de Framadate, STUdS a fait l'objet d'un fork par
l'équipe Framasoft. Les sources sont disponibles sur le Github <a
href="https://github.com/leblanc-simon/OpenSondage">OpenSondage</a>.<br />
<br />
<b>Technologies utilisées</b><br />
<br />
- <a href="http://www.php.net/">PHP</a><br />
- <a href="http://www.postgresql.org/">MySQL</a><br />
- <a href="http://www.apache.org/">Apache</a><br />
- <a href="http://subversion.tigris.org/">Subversion</a><br />
- <a href="http://www.kigkonsult.se/iCalcreator/">iCalcreator</a><br />
- <a href="http://www.fpdf.org/">FPDF</a><br />
- Icônes : <a href="http://deleket.deviantart.com/">Deleket</a>,
<a href="http://pixel-mixer.com">PixelMixer</a> et <a
href="http://dryicons.com">DryIcons</a><br />
<br />
<b>Compatibilités des navigateurs</b><br />
<br />
- <a href="http://www.mozilla.com/firefox/">Firefox</a><br />
- <a href="http://www.opera.com/">Opéra</a><br />
- <a href="http://www.konqueror.org/">Konqueror</a><br />
- <a href="http://www.jikos.cz/%7Emikulas/links/">Links</a><br />
- <a href="http://www.apple.com/fr/safari/">Safari</a><br />
- <a href="http://www.mozilla.com/firefox/">IE</a><br />
<br />
<b>Validations des pages</b><br />
<br />
- Toutes les pages disposent de la validation HTML 4.01 Strict du W3C. <br />
- La CSS dispose de la validation CSS 2.1 du W3C.
<p><img src="http://www.w3.org/Icons/valid-html401-blue"
alt="Valid HTML 4.01 Strict" height="31" width="88"><img
style="border: 0pt none ; width: 88px; height: 31px;"
src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
alt="CSS Valide !">
</p>
<b>Propositions améliorations de Framadate</b><br />
<br />
Si quelque chose venait à vous manquer, vous pouvez nous en faire part
via le <a href="http://contact.framasoft.org">formulaire en ligne</a>.
<br />
Les dernières améliorations de Framadate sont visibles dans le fichier <a
href="CHANGELOG">CHANGELOG</a>.<br />
<br />
<b>Remerciements</b><br />
<br />
<b><a href="http://studs.u-strasbg.fr">STUdS !</a></b>&nbsp;:
Pour leurs contributions techniques ou ergonomiques : Guy, Christophe,
Julien, Pierre, Romaric, Matthieu, Catherine, Christine, Olivier,
Emmanuel et Florence <br />
<a style="font-weight: bold;"
href="https://github.com/leblanc-simon/OpenSondage">Framadate</a>
: &nbsp;Simon Leblanc (développement principal), Pierre-Yves Gosset
(développement, graphisme), la communauté Framasoft.<br />
<br />
<h2><b><a name="licence"></a>Licence</b></h2>
Framadate est placé, comme <b><a
href="http://studs.u-strasbg.fr">STUdS !</a>,</b>
sous la licence logicielle libre <a
href="http://www.cecill.info/licences.fr.html">CeCILL-B</a>.<br />
<br />
mentions;
bandeau_pied();

View File

@ -26,8 +26,8 @@ function bandeau_titre($titre)
$img = ( IMAGE_TITRE ) ? '<img src="'. Utils::get_server_name(). IMAGE_TITRE. '" title="'._("Home").' - '.NOMAPPLICATION.'" alt="'.NOMAPPLICATION.'">' : '';
echo '
<header role="banner">
<form method="post" action="">
<div class="input-group input-group-sm pull-right col-md-2">
<form method="post" action="#">
<div class="input-group input-group-sm pull-right col-md-2 col-xs-4">
<select name="lang" class="form-control" title="'. _("Select the language") .'" >' . liste_lang() . '</select>
<span class="input-group-btn">
<button type="submit" class="btn btn-default btn-sm" title="'. _("Change the language") .'">OK</button>
@ -36,8 +36,9 @@ function bandeau_titre($titre)
</form>
<h1><a href="'.str_replace('/admin','', Utils::get_server_name()).'" title="'._("Home").' - '.NOMAPPLICATION.'">'.$img.'</a></h1>
<p class="lead"><i>'. $titre .'</i></p>
<hr class="trait" />
</header>
<main>';
<main role="main">';
}
function liste_lang()
@ -61,25 +62,6 @@ function bandeau_pied($admin=false)
{
echo '
</main>
<footer>
<hr />
<ul class="list-inline">';
if($admin) {
echo '
<li><a class="btn btn-default btn-xs" href="'.str_replace('/admin','', Utils::get_server_name()).'">'. _("Home") .'</a></li>';
if (is_readable('logs_studs.txt')) {
echo '
<li><a role="button" class="btn btn-default btn-xs" href="'.str_replace('/admin','', Utils::get_server_name()).'admin/logs_studs.txt">'. _("Logs") .'</a></li>';
}
} else {
echo '
<li><a class="btn btn-default btn-xs" href="'. Utils::get_server_name().'">'. _("Home") .'</a></li>
<li><a class="btn btn-default btn-xs" href="http://contact.framasoft.org">'. _("Contact") .'</a></li>
<li><a class="btn btn-default btn-xs" href="'. Utils::get_server_name().'apropos.php">'. _("About") .'</a></li>';
}
echo '
</ul>
</footer>
</div> <!-- .container -->
</body>
</html>'."\n";

View File

@ -64,8 +64,8 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
$registredate = explode("/",$_POST["champdatefin"]);
if (is_array($registredate) == true && count($registredate) == 3) {
$time = mktime(0,0,0,$registredate[1],$registredate[0],$registredate[2]);
if ($time > time() + 250000) {
$_SESSION["champdatefin"]=mktime(0,0,0,$registredate[1],$registredate[0],$registredate[2]);
if ($time > time() + (24*60*60)) {
$_SESSION["champdatefin"]=$time;
}
}
}
@ -93,12 +93,51 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
Utils::print_header ( _("Removal date and confirmation (3 on 3)") );
bandeau_titre(_("Removal date and confirmation (3 on 3)"));
$removal_date=strftime(_("%A, den %e. %B %Y"), time()+15552000);
// Sumary
$summary = '<ol>';
for ($i=0;$i<count($_SESSION['choices']);$i++) {
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_a_img); // Markdown [![alt](src)](href)
preg_match_all('/!\[(.*?)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_img); // Markdown ![alt](src)
preg_match_all('/\[(.*?)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_a); // Markdown [text](href)
if (isset($md_a_img[2][0]) && $md_a_img[2][0]!='' && isset($md_a_img[3][0]) && $md_a_img[3][0]!='') { // [![alt](src)](href)
$li_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1);
$li_subject_html = '<a href="'.$md_a_img[3][0].'"><img src="'.$md_a_img[2][0].'" class="img-responsive" alt="'.$li_subject_text.'" /></a>';
} elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src)
$li_subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1);
$li_subject_html = '<img src="'.$md_img[2][0].'" class="img-responsive" alt="'.$li_subject_text.'" />';
} elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href)
$li_subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1);
$li_subject_html = '<a href="'.$md_a[2][0].'">'.$li_subject_text.'</a>';
} else { // text only
$li_subject_text = stripslashes($toutsujet[$i]);
$li_subject_html = $li_subject_text;
}
$summary .= '<li>'.$li_subject_html.'</li>'."\n";
}
$summary .= '</ol>';
echo '
<form name="formulaire" action="' . Utils::get_server_name() . 'choix_autre.php" method="POST" class="form-horizontal" role="form">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="col-md-8 col-md-offset-2">
<div class="well summary">
<h3>'. _("List of your choices").'</h3>
'. $summary .'
</div>
<div class="alert alert-info">
<p>' . _("Your poll will be automatically removed after 6 months.") . '<br />' . _("You can fix another removal date for it.") .'</p>
<p>' . _("Your poll will be automatically removed after 6 months:") . ' <strong>'.$removal_date.'</strong>.<br />' . _("You can fix another removal date for it.") .'</p>
<div class="form-group">
<label for="champdatefin" class="col-sm-5 control-label">'. _("Removal date (optional)") .'</label>
<div class="col-sm-6">
@ -114,7 +153,10 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
<p>'. _("Once you have confirmed the creation of your poll, you will be automatically redirected on the administration page of your poll."). '</p>
<p>' . _("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>
</div>
<p class="text-right"><button name="confirmecreation" value="confirmecreation" type="submit" class="btn btn-success">'. _('Create the poll') . '</button></p>
<p class="text-right">
<button class="btn btn-default" onclick="javascript:window.history.back();" title="'. _('Back to step 2') . '">'. _('Back') . '</button>
<button name="confirmecreation" value="confirmecreation" type="submit" class="btn btn-success">'. _('Create the poll') . '</button>
</p>
</div>
</div>
</form>'."\n";
@ -129,11 +171,12 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
echo '
<form name="formulaire" action="' . Utils::get_server_name() . 'choix_autre.php" method="POST" class="form-horizontal" role="form">
<div class="row">
<div class="col-md-6 col-md-offset-3">';
<div class="col-md-8 col-md-offset-2">';
echo '
<div class="alert alert-info">
<p>'. _("To make a generic poll you need to propose at least two choices between differents subjects.") . '</p>
<p>'. _("You can add or remove additional choices with the buttons") .' <span class="glyphicon glyphicon-minus text-info"></span> <span class="glyphicon glyphicon-plus text-success"></span></p>
<p>'. _("To make a generic poll you need to propose at least two choices between differents subjects.") .'</p>
<p>'. _("You can add or remove additional choices with the buttons") .' <span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span> <span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></p>
<p>'. _("It's possible to propose links or images by using "). '<a href="http://'.$lang.'.wikipedia.org/wiki/Markdown">'. _("the Markdown syntax") .'</a>.</p>
</div>'."\n";
// Fields choices : 5 by default
@ -143,21 +186,52 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
echo '
<div class="form-group choice-field">
<label for="choice'.$i.'" class="col-sm-2 control-label">'. _("Choice") .' '.($i+1).'</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="choices[]" size="40" maxlength="40" value="'.$choice_value.'" id="choice'.$i.'" />
<div class="col-sm-10 input-group">
<input type="text" class="form-control" name="choices[]" size="40" value="'.$choice_value.'" id="choice'.$i.'" />
<span class="input-group-addon btn-link md-a-img" title="'. _("Add a link or an image") .'" ><span class="glyphicon glyphicon-picture"></span> <span class="glyphicon glyphicon-link"></span></span>
</div>
</div>'."\n";
}
echo '
<div class="col-md-6">
<div class="col-md-4">
<div class="btn-group btn-group">
<button type="button" id="remove-a-choice" class="btn btn-default" title="'. _("Remove a choice") .'"><span class="glyphicon glyphicon-minus text-info"></span></button>
<button type="button" id="add-a-choice" class="btn btn-default" title="'. _("Add a choice") .'"><span class="glyphicon glyphicon-plus text-success"></span></button>
<button type="button" id="remove-a-choice" class="btn btn-default" title="'. _("Remove a choice") .'"><span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span></button>
<button type="button" id="add-a-choice" class="btn btn-default" title="'. _("Add a choice") .'"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></button>
</div>
</div>
<div class="col-md-6 text-right">
<button name="fin_sondage_autre" value="'._('Next').'" type="submit" class="btn btn-success disabled">'. _('Next') . '</button>
<div class="col-md-8 text-right">
<a class="btn btn-default" href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=autre" title="'. _('Back to step 1') . '">'. _('Back') . '</a>
<button name="fin_sondage_autre" value="'._('Next').'" type="submit" class="btn btn-success disabled" title="'. _('Go to step 3') . '">'. _('Next') . '</button>
</div>
</div>
</div>
<div class="modal fade" id="md-a-imgModal" tabindex="-1" role="dialog" aria-labelledby="md-a-imgModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">'. _('Close') . '</span></button>
<h4 class="modal-title" id="md-a-imgModalLabel">'. _("Add a link or an image") .'</h4>
</div>
<div class="modal-body">
<p class="alert alert-info">'. _("These fields are optional. You can add a link, an image or both.") .'</p>
<div class="form-group">
<label for="md-img"><span class="glyphicon glyphicon-picture"></span> '. _('URL of the image') . '</label>
<input id="md-img" type="text" placeholder="http://…" class="form-control" size="40" />
</div>
<div class="form-group">
<label for="md-a"><span class="glyphicon glyphicon-link"></span> '. _('Link') . '</label>
<input id="md-a" type="text" placeholder="http://…" class="form-control" size="40" />
</div>
<div class="form-group">
<label for="md-text">'. _('Alternative text') . '</label>
<input id="md-text" type="text" class="form-control" size="40" />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">'. _('Cancel') . '</button>
<button type="button" class="btn btn-primary">'. _('Add') . '</button>
</div>
</div>
</div>
</div>

View File

@ -75,6 +75,19 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
$_SESSION["toutchoix"]=substr($choixdate,1);
// Expiration date → 6 months after last day if not filled or in bad format
$_SESSION["champdatefin"]=end($temp_results)+15552000;
if (Utils::issetAndNoEmpty('champdatefin')) {
$registredate = explode("/",$_POST["champdatefin"]);
if (is_array($registredate) == true && count($registredate) == 3) {
$time = mktime(0,0,0,$registredate[1],$registredate[0],$registredate[2]);
if ($time > time() + (24*60*60)) {
$_SESSION["champdatefin"]=$time;
}
}
}
ajouter_sondage();
} else {
@ -111,22 +124,50 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
$temp_array = array_unique($_SESSION["totalchoixjour"]);
sort($temp_array);
$removal_date=strftime(_("%A, den %e. %B %Y"), end($temp_array)+2592000);
$removal_date=strftime(_("%A, den %e. %B %Y"), end($temp_array)+15552000);
// Sumary
$summary = '<ul>';
for ($i=0;$i<count($_SESSION["totalchoixjour"]);$i++) {
$summary .= '<li>'.strftime(_("%A, den %e. %B %Y"), $_SESSION["totalchoixjour"][$i]);
for ($j=0;$j<count($_SESSION['horaires'.$i]);$j++) {
if (isset($_SESSION['horaires'.$i][$j])) {
$summary .= ($j==0) ? ' : ' : ', ';
$summary .= $_SESSION['horaires'.$i][$j];
}
}
$summary .= '</li>'."\n";
}
$summary .= '</ul>';
echo '
<form name="formulaire" action="' . Utils::get_server_name() . 'choix_date.php" method="POST" class="form-horizontal" role="form">
<div class="row" id="selected-days">
<div class="col-md-8 col-md-offset-2">
<h2>'. _("Confirm the creation of your poll") .'</h2>
<div class="alert alert-info">
<p>'. _("Your poll will expire automatically 2 days after the last date of your poll.") .'</p>
<p>'. _("Removal date:") .' <b> '.$removal_date.'</b></p>
<div class="well summary">
<h3>'. _("List of your choices").'</h3>
'. $summary .'
</div>
<div class="alert alert-info clearfix">
<p>' . _("Your poll will be automatically removed 6 months after the last date of your poll:") . ' <strong>'.$removal_date.'</strong>.<br />' . _("You can fix another removal date for it.") .'</p>
<div class="form-group">
<label for="champdatefin" class="col-sm-5 control-label">'. _("Removal date (optional)") .'</label>
<div class="col-sm-6">
<div class="input-group date">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar text-info"></i></span>
<input type="text" class="form-control" id="champdatefin" data-date-format="'. _("dd/mm/yyyy") .'" aria-describedby="dateformat" name="champdatefin" value="" size="10" maxlength="10" placeholder="'. _("dd/mm/yyyy") .'" />
</div>
</div>
<span id="dateformat" class="sr-only">'. _("(dd/mm/yyyy)") .'</span>
</div>
</div>
<div class="alert alert-warning">
<p>'. _("Once you have confirmed the creation of your poll, you will be automatically redirected on the administration page of your poll."). '</p>
<p>' . _("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>
</div>
<p class="text-right">
<button class="btn btn-default" onclick="javascript:window.history.back();" title="'. _('Back to step 2') . '">'. _('Back') . '</button>
<button name="confirmation" value="confirmation" type="submit" class="btn btn-success">'. _('Create the poll') . '</button>
</p>
</div>
@ -143,16 +184,16 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
echo '
<form name="formulaire" action="' . Utils::get_server_name() . 'choix_date.php" method="POST" class="form-horizontal" role="form">
<div class="row" id="selected-days">
<div class="col-md-8 col-md-offset-2">
<div class="col-md-10 col-md-offset-1">
<h2>'. _("Choose the dates of your poll") .'</h2>
<div class="alert alert-info">
<p>'. _("To schedule an event you need to propose at least two choices (two hours for one day or two days).").'</p>
<p>'. _("You can add or remove additionnal days and hours with the buttons") .' <span class="glyphicon glyphicon-minus text-info"></span> <span class="glyphicon glyphicon-plus text-success"></span></p>
<p>'. _("You can add or remove additionnal days and hours with the buttons") .' <span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span> <span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></p>
<p>'. _("For each selected day, you can choose, or not, meeting hours (e.g.: \"8h\", \"8:30\", \"8h-10h\", \"evening\", etc.)").'</p>
</div>';
// Fields days : 1 by default
$nb_days = (isset($_SESSION["totalchoixjour"])) ? count($_SESSION["totalchoixjour"]) : 1;
// Fields days : 3 by default
$nb_days = (isset($_SESSION["totalchoixjour"])) ? count($_SESSION["totalchoixjour"]) : 3;
for ($i=0;$i<$nb_days;$i++) {
$day_value = isset($_SESSION["totalchoixjour"][$i]) ? strftime( "%d/%m/%Y", $_SESSION["totalchoixjour"][$i]) : '';
echo '
@ -161,8 +202,9 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
<legend>
<div class="input-group date col-xs-7">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar text-info"></i></span>
<input type="text" class="form-control" id="day'.$i.'" title="'. _("Day") .' '. ($i+1) .'" data-date-format="'. _("dd/mm/yyyy") .'" name="days[]" value="'.$day_value.'" size="10" maxlength="10" placeholder="'. _("dd/mm/yyyy") .'" />
<input type="text" class="form-control" id="day'.$i.'" title="'. _("Day") .' '. ($i+1) .'" data-date-format="'. _("dd/mm/yyyy") .'" aria-describedby="dateformat'.$i.'" name="days[]" value="'.$day_value.'" size="10" maxlength="10" placeholder="'. _("dd/mm/yyyy") .'" />
</div>
<span id="dateformat'.$i.'" class="sr-only">'. _("(dd/mm/yyyy)") .'</span>
</legend>'."\n";
// Fields hours : 3 by default
@ -171,26 +213,26 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
echo '
<div class="col-sm-2">
<label for="d'.$i.'-h'.$j.'" class="sr-only control-label">'. _("Time") .' '. ($j+1) .'</label>
<input type="text" class="form-control hours" title="'.$day_value.' - '. _("Time") .' '. ($j+1) .'" placeholder="'. _("Time") .' '. ($j+1) .'" maxlength="11" id="d'.$i.'-h'.$j.'" name="horaires'.$i.'[]" value="'.$hour_value.'" />
<input type="text" class="form-control hours" title="'.$day_value.' - '. _("Time") .' '. ($j+1) .'" placeholder="'. _("Time") .' '. ($j+1) .'" id="d'.$i.'-h'.$j.'" name="horaires'.$i.'[]" value="'.$hour_value.'" />
</div>'."\n";
}
echo '
<div class="col-sm-2"><div class="btn-group btn-group-xs" style="margin-top: 5px;">
<button type="button" title="'. _("Remove an hour") .'" class="remove-an-hour btn btn-default"><span class="glyphicon glyphicon-minus text-info"></span></button>
<button type="button" title="'. _("Add an hour") .'" class="add-an-hour btn btn-default"><span class="glyphicon glyphicon-plus text-success"></span></button>
<button type="button" title="'. _("Remove an hour") .'" class="remove-an-hour btn btn-default"><span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span></button>
<button type="button" title="'. _("Add an hour") .'" class="add-an-hour btn btn-default"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></button>
</div></div>
</div>
</fieldset>';
}
echo '
<div class="col-md-6">
<button type="button" id="copyhours" class="btn btn-default disabled" title="'. _("Copy hours of the first day") .'"><span class="glyphicon glyphicon-sort-by-attributes-alt text-info"></span></button>
<div class="col-md-4">
<button type="button" id="copyhours" class="btn btn-default disabled" title="'. _("Copy hours of the first day") .'"><span class="glyphicon glyphicon-sort-by-attributes-alt text-info"></span><span class="sr-only">'. _("Copy hours of the first day") .'</span></button>
<div class="btn-group btn-group">
<button type="button" id="remove-a-day" class="btn btn-default disabled" title="'. _("Remove a day") .'"><span class="glyphicon glyphicon-minus text-info"></span></button>
<button type="button" id="add-a-day" class="btn btn-default" title="'. _("Add a day") .'"><span class="glyphicon glyphicon-plus text-success"></span></button>
<button type="button" id="remove-a-day" class="btn btn-default disabled" title="'. _("Remove a day") .'"><span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span></button>
<button type="button" id="add-a-day" class="btn btn-default" title="'. _("Add a day") .'"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></button>
</div>
</div>
<div class="col-md-6 text-right">
<div class="col-md-8 text-right">
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-remove text-danger"></span> '. _("Remove") . ' <span class="caret"></span>
@ -200,7 +242,8 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress
<li><a id="resethours" href="javascript:void(0)">'. _("Remove all hours") .'</a></li>
</ul>
</div>
<button name="choixheures" value="'. _("Next") .'" type="submit" class="btn btn-success disabled">'. _('Next') . '</button>
<a class="btn btn-default" href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=date" title="'. _('Back to step 1') . '">'. _('Back') . '</a>
<button name="choixheures" value="'. _("Next") .'" type="submit" class="btn btn-success disabled" title="'. _('Go to step 3') . '">'. _("Next") .'</button>
</div>
</div>
</div>

View File

@ -1,144 +0,0 @@
<?php
/**
* 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)
*
* =============================
*
* 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
*
* 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;
include_once __DIR__ . '/app/inc/init.php';
session_start();
if (file_exists('bandeaux_local.php')) {
include_once('bandeaux_local.php');
} else {
include_once('bandeaux.php');
}
// action du bouton annuler
if ((isset($_POST['envoiquestion'])) &&
isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['adresse_mail']) && !empty($_POST['adresse_mail']) && Utils::isValidEmail($_POST['adresse_mail']) &&
isset($_POST['question']) && !empty($_POST['question'])) {
$message=str_replace("\\","",$_POST["question"]);
$headers = 'Reply-To: '.$_POST['adresse_mail'];
Utils::sendEmail( ADRESSEMAILADMIN, "" . _("[CONTACT] You have sent a question ") . "".NOMAPPLICATION, "" . _("You have a question from a user ") . " ".NOMAPPLICATION."\n\n" . _("User") . " : ".$_POST["nom"]."\n\n" . _("User's email address") . " : $_POST[adresse_mail]\n\n" . _("Message") . " :".$message,$headers );
Utils::sendEmail( "$_POST[adresse_mail]", "" . _("[COPY] Someone has sent a question ") . "".NOMAPPLICATION, "" . _("Here is a copy of your question") . " :\n\n".$message." \n\n" . _("We're going to answer your question shortly.") . "\n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION );
//affichage de la page de confirmation d'envoi
Utils::print_header(_("Make your polls"));
bandeau_titre(_("Make your polls"));
echo '
<div class="alert alert-success">
<h2>' . _("Your message has been sent!") . '</h2>
<p>' . _("Back to the homepage of ") . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a>.</p>
</div>'."\n";
bandeau_pied();
session_unset();
} else {
$post_var = array('question', 'nom', 'adresse_mail', );
foreach ($post_var as $var) {
if (isset($_POST[$var]) && !empty($_POST[$var])) {
$_SESSION[$var] = $_POST[$var];
} else {
$_SESSION[$var] = null;
}
}
/*
* Préparation des messages d'erreur
*/
$errors = array(
'name' => array (
'msg' => '',
'aria' => '',
'class' => ''
),
'email' => array (
'msg' => '',
'aria' => '',
'class' => ''
),
'question' => array (
'msg' => '',
'aria' => '',
'class' => ''
),
'state' => false
);
if (isset($_POST['envoiquestion']) && $_SESSION["nom"]=="") {
$errors['name']['aria'] = 'aria-describeby="#poll_name_error" '; $errors['name']['class'] = ' has-error';
$errors['name']['msg'] = '<div class="alert alert-danger" ><p id="contact_name_error">'. _("Enter a name") .'</p></div>';
$errors['state'] = true;
}
if (isset($_POST['envoiquestion']) && ($_SESSION["adresse_mail"] =="" || !Utils::isValidEmail($_SESSION["adresse_mail"]))) {
$errors['email']['aria'] = 'aria-describeby="#poll_email_error" '; $errors['email']['class'] = ' has-error';
$errors['email']['msg'] = '<div class="alert alert-danger" ><p id="contact_email_error">'. _("The address is not correct!") .'</p></div>';
$errors['state'] = true;
}
if (isset($_POST['envoiquestion']) && $_SESSION["question"]=="") {
$errors['question']['aria'] = 'aria-describeby="#poll_question_error" '; $errors['question']['class'] = ' has-error';
$errors['question']['msg'] = '<div class="alert alert-danger" ><p id="contact_question_error">'. _("You must ask a question!") .'</p></div>';
$errors['state'] = true;
}
//affichage de la page
if($errors['state']) {
Utils::print_header( _("Error!").' - '._("Contact us") );
} else {
Utils::print_header( _("Contact us") );
}
bandeau_titre(_("Contact us"));
echo '
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form name=formulaire action="' . Utils::get_server_name() . 'contacts.php" method="POST" class="form-horizontal" role="form">
<p>' . _("If you have questions, you can send a message here.") . '</p>
<div class="form-group'.$errors['name']['class'].'">
<label for="name" class="col-sm-5 control-label">' . _("Your name") .'</label>
<div class="col-sm-7">
<input type="text" maxlength="64" id="name" name="nom" class="form-control" '.$errors['name']['aria'].' value="'.$_SESSION["nom"].'" />
</div>
</div>
'.$errors['name']['msg'].'
<div class="form-group'.$errors['email']['class'].'">
<label for="email" class="col-sm-5 control-label">' . _("Your email address") . '</label>
<div class="col-sm-7">
<input type="text" maxlength="64" id="email" name="adresse_mail" class="form-control" '.$errors['email']['aria'].' value="'.$_SESSION["adresse_mail"].'" />
</div>
</div>
'.$errors['email']['msg'].'
<div class="form-group'.$errors['question']['class'].'">
<label for="question" class="col-sm-5 control-label">' . _("Question") . '</label>
<div class="col-sm-7">
<textarea name="question" id="question" rows="7" class="form-control" '.$errors['question']['aria'].'>'.$_SESSION["question"].'</textarea>
</div>
</div>
'.$errors['question']['msg'].'
<p class="text-right"><button type="submit" name="envoiquestion" value="'._("Send your question").'" class="btn btn-success">'._("Send your question").'</button></p>
</form>
</div>
</div>'."\n";
bandeau_pied();
}

View File

@ -45,27 +45,7 @@ function ajouter_sondage()
$sondage=random(16);
$sondage_admin=$sondage.random(8);
if ($_SESSION["formatsondage"]=="A"||$_SESSION["formatsondage"]=="A+") {
//extraction de la date de fin choisie
if ($_SESSION["champdatefin"]) {
if ($_SESSION["champdatefin"]>time()+250000) {
$date_fin=$_SESSION["champdatefin"];
}
} else {
$date_fin=time()+15552000;
}
}
if ($_SESSION["formatsondage"]=="D"||$_SESSION["formatsondage"]=="D+") {
//Calcul de la date de fin du sondage
$temp_array = array_unique($_SESSION["totalchoixjour"]);
sort($temp_array);
$date_fin= end($temp_array)+2592000;
}
if (is_numeric($date_fin) === false) {
$date_fin = time()+15552000;
}
$date_fin = ($_SESSION["champdatefin"]) ? $_SESSION["champdatefin"] : $date_fin=time()+15552000;
$sql = 'INSERT INTO sondage
(id_sondage, commentaires, mail_admin, nom_admin, titre, id_sondage_admin, date_fin, format, mailsonde)
@ -90,10 +70,10 @@ function ajouter_sondage()
$message = _("This is the message you have to send to the people you want to poll. \nNow, you have to send this message to everyone you want to poll.");
$message .= "\n\n";
$message .= stripslashes(html_entity_decode($_SESSION["nom"],ENT_QUOTES,"UTF-8"))." " . _("hast just created a poll called") . " : \"".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES))."\".\n";
$message .= _("Thanks for filling the poll at the link above") . " :\n\n%s\n\n" . _("Thanks for your confidence.") . ",\n".NOMAPPLICATION;
$message .= _("Thanks for filling the poll at the link above") . " :\n\n%s\n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION;
$message_admin = _("This message should NOT be sended to the polled people. It is private for the poll's creator.\n\nYou can now modify it at the link above");
$message_admin .= " :\n\n"."%s \n\n" . _("Thanks for your confidence.") . ",\n".NOMAPPLICATION;
$message_admin .= " :\n\n"."%s \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION;
$message = sprintf($message, Utils::getUrlSondage($sondage));
$message_admin = sprintf($message_admin, Utils::getUrlSondage($sondage_admin, true));

View File

@ -1,64 +0,0 @@
.btn:focus {
outline: dotted 2px black;
}
div.active:focus {
outline: dotted 1px black;
}
a:focus {
outline: dotted 1px black;
}
.close:hover, .close:focus {
outline: dotted 1px black;
}
.nav > li > a:hover, .nav > li > a:focus {
outline: dotted 1px black;
}
.carousel-inner > .item {
position: absolute;
top: -999999em;
display: block;
-webkit-transition: 0.6s ease-in-out left;
-moz-transition: 0.6s ease-in-out left;
-o-transition: 0.6s ease-in-out left;
transition: 0.6s ease-in-out left;
}
.carousel-inner > .active {
top: 0;
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
position: relative;
}
.carousel-inner > .next,
.carousel-inner > .prev {
position: absolute;
top: 0;
width: 100%;
}
.alert-success {
color: #2d4821;
}
.alert-info {
color: #214c62;
}
.alert-warning {
color: #6c4a00;
background-color: #f9f1c6;
}
.alert-danger {
color: #d2322d;
}
.alert-danger:hover {
color: #a82824;
}

View File

@ -12,8 +12,8 @@
border-radius: 4px;
direction: ltr;
/*.dow {
border-top: 1px solid #ddd !important;
}*/
border-top: 1px solid #ddd !important;
}*/
}
.datepicker-inline {
width: 220px;
@ -127,9 +127,10 @@
.datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:hover {
color: #000000;
background-color: #ffdb99;
border-color: #ffb733;
font-weight:bold;
/*color: #000000;
/*background-color: #ffdb99;
border-color: #ffb733;*/*/
}
.datepicker table tr td.today:hover,
.datepicker table tr td.today:hover:hover,
@ -151,9 +152,9 @@
.open .dropdown-toggle.datepicker table tr td.today:hover,
.open .dropdown-toggle.datepicker table tr td.today.disabled,
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
color: #000000;
/*color: #000000;
background-color: #ffcd70;
border-color: #f59e00;
border-color: #f59e00;*/
}
.datepicker table tr td.today:active,
.datepicker table tr td.today:hover:active,
@ -229,8 +230,8 @@ fieldset[disabled] .datepicker table tr td.today.active,
fieldset[disabled] .datepicker table tr td.today:hover.active,
fieldset[disabled] .datepicker table tr td.today.disabled.active,
fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
background-color: #ffdb99;
border-color: #ffb733;
/*background-color: #ffdb99;
border-color: #ffb733;*/
}
.datepicker table tr td.today:hover:hover {
color: #000;
@ -250,8 +251,8 @@ fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today.disabled:hover {
color: #000000;
background-color: #f7ca77;
border-color: #f1a417;
/*background-color: #f7ca77;
border-color: #f1a417;*/
border-radius: 0;
}
.datepicker table tr td.range.today:hover,
@ -274,9 +275,9 @@ fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
color: #000000;
/*color: #000000;
background-color: #f4bb51;
border-color: #bf800c;
border-color: #bf800c;*/
}
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today:hover:active,
@ -352,16 +353,16 @@ fieldset[disabled] .datepicker table tr td.range.today.active,
fieldset[disabled] .datepicker table tr td.range.today:hover.active,
fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
background-color: #f7ca77;
border-color: #f1a417;
/*background-color: #f7ca77;
border-color: #f1a417;*/
}
.datepicker table tr td.selected,
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected.disabled,
.datepicker table tr td.selected.disabled:hover {
color: #ffffff;
background-color: #999999;
border-color: #555555;
background-color: #9D74B5;
border-color: #8E65A6;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.selected:hover,
@ -385,8 +386,8 @@ fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
color: #ffffff;
background-color: #858585;
border-color: #373737;
background-color: #9D74B5;
border-color: #8E65A6;
}
.datepicker table tr td.selected:active,
.datepicker table tr td.selected:hover:active,
@ -462,16 +463,16 @@ fieldset[disabled] .datepicker table tr td.selected.active,
fieldset[disabled] .datepicker table tr td.selected:hover.active,
fieldset[disabled] .datepicker table tr td.selected.disabled.active,
fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
background-color: #999999;
border-color: #555555;
background-color: #9D74B5;
border-color: #8E65A6;
}
.datepicker table tr td.active,
.datepicker table tr td.active:hover,
.datepicker table tr td.active.disabled,
.datepicker table tr td.active.disabled:hover {
color: #ffffff;
background-color: #428bca;
border-color: #357ebd;
background-color: #6A5687;
border-color: #5C4978;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:hover,
@ -495,8 +496,8 @@ fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
.open .dropdown-toggle.datepicker table tr td.active.disabled,
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
color: #ffffff;
background-color: #3276b1;
border-color: #285e8e;
background-color: #6A5687;
border-color: #5C4978;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active:hover:active,
@ -572,8 +573,8 @@ fieldset[disabled] .datepicker table tr td.active.active,
fieldset[disabled] .datepicker table tr td.active:hover.active,
fieldset[disabled] .datepicker table tr td.active.disabled.active,
fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
background-color: #428bca;
border-color: #357ebd;
background-color: #6A5687;
border-color: #5C4978;
}
.datepicker table tr td span {
display: block;
@ -599,8 +600,8 @@ fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
color: #ffffff;
background-color: #428bca;
border-color: #357ebd;
background-color: #6A5687;
border-color: #5C4978;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:hover,
@ -624,8 +625,8 @@ fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
color: #ffffff;
background-color: #3276b1;
border-color: #285e8e;
background-color: #6A5687;
border-color: #5C4978;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
@ -701,8 +702,8 @@ fieldset[disabled] .datepicker table tr td span.active.active,
fieldset[disabled] .datepicker table tr td span.active:hover.active,
fieldset[disabled] .datepicker table tr td span.active.disabled.active,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
background-color: #428bca;
border-color: #357ebd;
background-color: #6A5687;
border-color: #5C4978;
}
.datepicker table tr td span.old,
.datepicker table tr td span.new {

450
css/frama.css Normal file
View File

@ -0,0 +1,450 @@
/* Text */
.text-muted,
.text-muted a,
a.text-muted {
color: #767676;
border-color: #767676;
}
.text-muted a:hover,
.text-muted a:focus,
a.text-muted:hover,
a.text-muted:focus {
color: #5e5e5e;
border-color:#5e5e5e;
border-bottom-style:solid;
}
.text-primary,
.text-primary a,
a.text-primary {
color: #6A5687;
border-color: #6A5687;
}
.text-primary a:hover,
.text-primary a:focus,
a.text-primary:hover,
a.text-primary:focus {
color: #583C66;
border-color: #583C66;
border-bottom-style:solid;
}
.text-success,
.text-success a,
a.text-success {
color: #606E38;
border-color: #606E38;
}
.text-success a:hover,
.text-success a:focus,
a.text-success:hover,
a.text-success:focus {
color: #67753C;
border-color: #67753C;
border-bottom-style:solid;
}
.text-info,
.text-info a,
a.text-info {
color: #31748F;
border-color: #31748F;
}
.text-info a:hover,
.text-info a:focus,
a.text-info:hover,
a.text-info:focus {
color: #245569;
border-color: #31748F;
border-bottom-style:solid;
}
.text-warning,
.text-warning a,
a.text-warning {
color: #8A6E3B;
border-color: #8A6E3B;
}
.text-warning a:hover,
.text-warning a:focus,
a.text-warning:hover,
a.text-warning:focus {
color: #66522C;
border-color: #66522C;
border-bottom-style:solid;
}
.text-danger,
.text-danger a,
a.text-danger {
color: #A94E42;
border-color: #A94E42;
}
.text-danger a:hover,
.text-danger a:focus,
a.text-danger:hover,
a.text-danger:focus {
color: #843D34;
border-color: #843D34;
border-bottom-style:solid;
}
/* Background */
.bg-primary,
.bg-primary a,
a.bg-primary:focus,
a.bg-primary:hover {
color: #fff;
background-color: #6A5687;
border-color:#fff;
}
.bg-success, a.bg-success:hover {
background-color: #EAF0D8;
}
.bg-info, a.bg-info:hover {
background-color: #D9EFF7;
}
.bg-warning, a.bg-warning:hover {
background-color: #FCF3E3;
}
.bg-danger,a.bg-danger:hover {
background-color: #F2E7E5;
}
/* Alerts */
.alert-success a:not(.btn), .alert-info a:not(.btn),
.alert-warning a:not(.btn), .alert-danger a:not(.btn) {
text-decoration:none;
border-bottom-width: 1px;
border-bottom-style: dotted;
}
.alert-success a:not(.btn):hover, .alert-info a:not(.btn):hover,
.alert-warning a:not(.btn):hover, .alert-danger a:not(.btn):hover {
text-decoration:none;
border-bottom-style: solid;
}
.alert-success a:not(.btn),
.alert-success a:not(.btn):hover,
.alert-success {
color: #4A542C;
background:#EAF0D8;
border-color: #4A542C;
}
.alert-info a:not(.btn),
.alert-info a:not(.btn):hover,
.alert-info {
color: #245569;
background-color: #D9EFF7;
border-color: #245569;
}
.alert-warning a:not(.btn),
.alert-warning a:not(.btn):hover,
.alert-warning {
color: #66522C;
background-color: #FCF3E3;
border-color: #66522C;
}
.alert-danger a:not(.btn),
.alert-danger a:not(.btn):hover,
.alert-danger {
color: #843D34;
background-color: #F2E7E5;
border-color: #843D34;
}
/* Buttons */
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #fff;
border-color: #ccc;
}
.btn-default .badge {
color: #fff;
background-color: #767676;
}
.btn-primary {
color: #fff;
background-color: #6A5687;
border-color: #5C4978;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #fff;
background-color: #5E4A7A;
border-color: #513F69;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #6A5687;
border-color: #5C4978;
}
.btn-primary .badge {
color: #6A5687;
background-color: #fff;
}
.btn-success {
color: #fff;
background-color: #849551;
border-color: #748544;
}
.btn-success:hover,
.btn-success:focus,
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
color: #fff;
background-color: #768745;
border-color: #67753C;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
background-color: #849551;
border-color: #748544;
}
.btn-success .badge {
color: #849551;
background-color: #fff;
}
.btn-info {
color: #fff;
background-color: #366F86;
border-color: #2C6278;
}
.btn-info:hover,
.btn-info:focus,
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
color: #fff;
background-color: #2D647A;
border-color: #275669;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
background-color: #366F86;
border-color: #2C6278;
}
.btn-info .badge {
color: #366F86;
background-color: #fff;
}
.btn-warning {
color: #fff;
background-color: #DBA306;
border-color: #CC9600;
}
.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
color: #fff;
background-color: #CF9800;
border-color: #BD8A00;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
background-color: #DBA306;
border-color: #CC9600;
}
.btn-warning .badge {
color: #DBA306;
background-color: #fff;
}
.btn-danger {
color: #fff;
background-color: #CC2D18;
border-color: #BD2511;
}
.btn-danger:hover,
.btn-danger:focus,
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
color: #fff;
background-color: #BF2511;
border-color: #AD220F;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
background-color: #CC2D18;
border-color: #BD2511;
}
.btn-danger .badge {
color: #CC2D18;
background-color: #fff;
}
.btn-orange {
color: #fff;
background-color: #D2703A;
border-color: #C26430;
}
.btn-orange:hover,
.btn-orange:focus,
.btn-orange:active,
.btn-orange.active,
.open > .dropdown-toggle.btn-orange {
color: #fff;
background-color: #C46531;
border-color: #B35C2D;
}
.btn-orange.disabled,
.btn-orange[disabled],
fieldset[disabled] .btn-orange,
.btn-orange.disabled:hover,
.btn-orange[disabled]:hover,
fieldset[disabled] .btn-orange:hover,
.btn-orange.disabled:focus,
.btn-orange[disabled]:focus,
fieldset[disabled] .btn-orange:focus,
.btn-orange.disabled:active,
.btn-orange[disabled]:active,
fieldset[disabled] .btn-orange:active,
.btn-orange.disabled.active,
.btn-orange[disabled].active,
fieldset[disabled] .btn-orange.active {
background-color: #D2703A;
border-color: #C26430;
}
.btn-orange .badge {
color: #D2703A;
background-color: #fff;
}
.btn-link {
font-weight: normal;
color: #366F86;
cursor: pointer;
border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
color: #134C63;
text-decoration: underline;
background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
color: #767676;
text-decoration: none;
}
.btn-link .badge {
color: #fff;
background-color: #767676;
}

View File

@ -15,77 +15,25 @@
* Auteurs d'OpenSondage : Framasoft (https://github.com/framasoft)
*/
/* Calendrier dans choix_date.php */
div.calendrier table {
border:2px solid #ccf;
background-color: #CCF;
margin-left: auto;
margin-right: auto;
body {
font-family: "DejaVu Sans", Verdana, Geneva, sans-serif;
color:#333;
background:#eee;
}
div.calendrier td {
height: 40px;
.trait { /* hr */
background-color: #EEE;
height: 11px;
margin:15px 0px;
border:none;
}
div.calendrier td.libre:hover,
div.calendrier td.choisi:hover {
opacity: 0.8;
.ombre {
background-color: #FFF;
box-shadow: -4px 6px 9px rgba(50, 50, 50, 0.5);
margin:30px auto;
}
/*entête calendrier */
.choix_date_mois {
font-weight: bold;
font-size: larger;
}
/*jour de la semaine dans calendrier*/
div.calendrier td.joursemaine {
width:14%;
text-align: center;
border: 2px;
background-color: white;
height: 40px;
}
/*jour avant le premier jour du mois dans calendrier*/
div.calendrier td.avant {
text-align: center;
border: 2px;
font-family:arial;
font-size:13px;
background-color: #EEEEEE;
}
/*jour libre dans calendrier*/
div.calendrier td.libre {
text-align: center;
border: 2px;
background-color: #66FF99;
}
/*jour deja selectionné dans calendrier*/
div.calendrier td.choisi {
text-align: center;
border: 2px;
background-color: #54ADF7;
}
.bouton {
border:0px;
padding: 12px 30px 6px;
margin:0px;
cursor:pointer;
font-family:arial;
font-size:13px;
}
/*les boutons pour choisir un jour non selectionné*/
.ON {
background-color: #66FF99;
}
/*les boutons pour deselectionner un jour deja choisi*/
.OFF {
background-color: #54ADF7;
}
/* </calendrier> */
/* Commentaires */
div.comment{
margin-top: 10px;
@ -108,12 +56,24 @@ main, header, footer, .container .jumbotron {
padding:24px 30px;
}
/* Effet sur les images en page d'accueil */
.opacity {
opacity: 0.6;
.summary h3 {
margin-top:0;
}
.opacity:hover {
.summary {
font-weight:bold;
}
.summary img {
max-width:100px;
}
/* Effet sur les images en page d'accueil */
.opacity img {
opacity: 0.8;
}
.opacity:hover img {
opacity: 1;
}
@ -146,6 +106,7 @@ h3.control-label {
font-weight: 700;
font-size: 14px;
line-height: 1.42857;
margin-top:0;
}
caption {
@ -156,7 +117,8 @@ caption {
/* adminstuds.php */
#title-form h2 .btn-edit,
#email-form .btn-edit,
#description-form .btn-edit {
#description-form .btn-edit,
#poll-rules-form .btn-edit {
position:absolute;
left:-2000px;
}
@ -166,7 +128,9 @@ caption {
#email-form .btn-edit:focus,
#email-form:hover .btn-edit,
#description-form .btn-edit:focus,
#description-form:hover .btn-edit {
#description-form:hover .btn-edit,
#poll-rules-form .btn-edit:focus,
#poll-rules-form:hover .btn-edit {
position:relative !important;
left:0;
padding: 0px 10px;
@ -180,10 +144,18 @@ caption {
margin-bottom:0;
}
#poll-rules-form p,
.jumbotron p.well {
font-size:16px;
}
.jumbotron p {
font-weight: normal;
}
/* Tableau du sondage */
#tableContainer {
overflow-x:auto;
margin:0 auto;
margin:20px auto;
}
table.results {
@ -210,8 +182,12 @@ table.results tbody td {
table.results thead th {
text-align:center;
border:2px solid white;
padding:1px 5px;
padding:5px;
min-width:40px;
font-size:12px;
max-width:100px;
overflow:hidden;
text-overflow:ellipsis;
}
table.results thead .btn {
@ -308,23 +284,23 @@ table.results .btn-link.btn-sm {
}
.yes input[type="radio"]:checked + label { /* =.btn-success.active */
color: #FFF;
background-color: #449D44;
border-color: #398439;
color: #fff;
background-color: #768745;
border-color: #67753C;
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset;
}
.ifneedbe input[type="radio"]:checked + label { /* =.btn-warning.active */
color: #FFF;
background-color: #EC971F;
border-color: #D58512;
color: #fff;
background-color: #CF9800;
border-color: #BD8A00;
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset;
}
.no input[type="radio"]:checked + label { /* =.btn-danger.active */
color: #FFF;
background-color: #C9302C;
border-color: #AC2925;
color: #fff;
background-color: #BF2511;
border-color: #AD220F;
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset;
}
@ -354,4 +330,11 @@ table.results .btn-link.btn-sm {
border:none;
background:transparent;
}
/* choix_autre.php */
.md-a-img {
text-decoration:none !important;
}
#md-a-imgModal .form-group {
margin:10px 0px;
}

View File

@ -34,44 +34,57 @@ $nbcolonnes=substr_count($dsondage->sujet,',')+1;
$toutsujet=explode(",",$dsondage->sujet);
//affichage des sujets du sondage
$input =";";
$input =",";
foreach ($toutsujet as $value) {
if ($dsondage->format=="D"||$dsondage->format=="D+") {
if (strpos($dsondage->sujet,'@') !== false) {
$days=explode("@",$value);
$input.= date("j/n/Y",$days[0]).';';
} else {
$input.= date("j/n/Y",$values).';';
}
if (strpos($dsondage->sujet,'@') !== false) {
$days=explode("@",$value);
$input.= '"'.date("j/n/Y",$days[0]).'",';
} else {
$input.= '"'.date("j/n/Y",$values).'",';
}
} else {
$input.= $value.';';
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$value,$md_a_img); // Markdown [![alt](src)](href)
preg_match_all('/!\[(.*?)\]\((.*?)\)/',$value,$md_img); // Markdown ![alt](src)
preg_match_all('/\[(.*?)\]\((.*?)\)/',$value,$md_a); // Markdown [text](href)
if (isset($md_a_img[2][0]) && $md_a_img[2][0]!='' && isset($md_a_img[3][0]) && $md_a_img[3][0]!='') { // [![alt](src)](href)
$subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1);
} elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src)
$subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1);
} elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href)
$subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1);
} else { // text only
$subject_text = stripslashes($value);
}
$input.= '"'.html_entity_decode($subject_text).'",';
}
}
$input.="\r\n";
if (strpos($dsondage->sujet,'@') !== false) {
$input.=";";
$input.=",";
foreach ($toutsujet as $value) {
$heures=explode("@",$value);
$input.= $heures[1].';';
$input.= '"'.$heures[1].'",';
}
$input.="\r\n";
}
while ( $data=$user_studs->FetchNextObject(false)) {
while ( $data=$user_studs->FetchNextObject(false)) {
// Le nom de l'utilisateur
$nombase=html_entity_decode(str_replace("°","'",$data->nom));
$input.=$nombase.';';
$input.= '"'.$nombase.'",';
//affichage des resultats
$ensemblereponses=$data->reponses;
for ($k=0;$k<$nbcolonnes;$k++) {
$car=substr($ensemblereponses,$k,1);
switch ($car) {
case "1": $input .= _('Yes').';'; $somme[$k]++; break;
case "2": $input .= _('Ifneedbe').';'; break;
default: $input .= _('No').';'; break;
case "1": $input .= '"'._('Yes').'",'; $somme[$k]++; break;
case "2": $input .= '"'._('Ifneedbe').'",'; break;
default: $input .= '"'._('No').'",'; break;
}
}
@ -86,6 +99,6 @@ header( 'Content-Length: '.$filesize );
header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
header( 'Cache-Control: max-age=10' );
echo $input;
echo str_replace('&quot;','""',$input);
die();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -32,26 +32,61 @@ session_start();
// affichage de la page
Utils::print_header( _("Home") );
bandeau_titre(_("Organiser des rendez-vous simplement, librement."));
bandeau_titre(_("Make your polls"));
echo '
<div class="row text-center">
<div class="col-md-6">
<p><a href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=date" role="button">
<img class="opacity" src="'.Utils::get_server_name().'images/date.png" alt="" />
<br /><span class="btn btn-warning btn-lg"><span class="glyphicon glyphicon-calendar"></span>
<div class="row">
<div class="col-md-6 text-center">
<p><a href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=date" class="opacity" role="button">
<img class="img-responsive center-block" src="'.Utils::get_server_name().'images/date.png" alt="" />
<br /><span class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-calendar"></span>
'. _('Schedule an event') . '</span>
</a></p>
</div>
<div class="col-md-6">
<p><a href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=autre" role="button">
<img alt="" class="opacity" src="'.Utils::get_server_name().'images/classic.png" />
<br /><span class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-stats"></span>
'. _('Make a poll') . '</span>
<div class="col-md-6 text-center">
<p><a href="'.Utils::get_server_name().'infos_sondage.php?choix_sondage=autre" class="opacity" role="button">
<img alt="" class="img-responsive center-block" src="'.Utils::get_server_name().'images/classic.png" />
<br /><span class="btn btn-info btn-lg"><span class="glyphicon glyphicon-stats"></span>
'. _('Make a classic poll') . '</span>
</a></p>
</div>
</div>
<div class="row text-center">
<p>'. _("or") .' <a href="' . Utils::getUrlSondage('aqg259dth55iuhwm').'">'. _("view an example") .'</a></p>
<hr />
<div class="row">
<div class="col-md-4">
<h2>'. _('What is that?') . '</h2>
<p class="text-center"><span class="glyphicon glyphicon-question-sign" style="font-size:50px"></span></p>
<p>'. _('Framadate is an online service for planning an appointment or make a decision quickly and easily. No registration is required.') .'</p>
<p>'. _('Here is how it works:') . '</p>
<ol>
<li>'. _('Make a poll') . '</li>
<li>'. _('Define dates or subjects to choose') . '</li>
<li>'. _('Send the poll link to your friends or colleagues') . '</li>
<li>'. _('Discuss and make a decision') . '</li>
</ol>
<p>'. _('Do you want to ') . '<a href="' . Utils::getUrlSondage('aqg259dth55iuhwm').'">'. _("view an example?") .'</a></p>
</div>
<div class="col-md-4">
<h2>'. _('The software') .'</h2>
<p class="text-center"><span class="glyphicon glyphicon-cloud" style="font-size:50px"></span></p>
<p>'. _('Framadate was initially based on '). '<a href="https://sourcesup.cru.fr/projects/studs/">Studs</a>'. _(' a software developed by the University of Strasbourg. Today, it is devevoped by the association Framasoft') .'.</p>
<p>'. _('This software needs javascript and cookies enabled. It is compatible with the following web browsers:') .'</p>
<ul>
<li>Microsoft Internet Explorer 9+</li>
<li>Google Chrome 19+</li>
<li>Firefox 12+</li>
<li>Safari 5+</li>
<li>Opera 11+</li>
</ul>
<p>'. _('It is governed by the ').'<a href="http://www.cecill.info">'. _('CeCILL-B license').'</a>.</p>
</div>
<div class="col-md-4">
<h2>'. _('Cultivate your garden') .'</h2>
<p class="text-center"><span class="glyphicon glyphicon-tree-deciduous" style="font-size:50px"></span></p>
<p>'. _('To participate in the software development, suggest improvements or simply download it, please visit ') .'<a href="https://git.framasoft.org/framasoft/framadate">'._('the development site').'</a>.</p>
<br />
<p>'. _('If you want to install the software for your own use and thus increase your independence, we help you on:') .'</p>
<p class="text-center"><a href="http://framacloud.org/cultiver-son-jardin/installation-de-framadate/" class="btn btn-success"><span class="glyphicon glyphicon-tree-deciduous"></span> framacloud.org</a></p>
</div>
</div>'."\n";
bandeau_pied();

View File

@ -154,31 +154,31 @@ $errors = array(
);
if (!$_SESSION["titre"] && Utils::issetAndNoEmpty("poursuivre") ) {
$errors['title']['aria'] = 'aria-describeby="#poll_title_error" '; $errors['title']['class'] = ' has-error';
$errors['title']['aria'] = 'aria-describeby="poll_title_error" '; $errors['title']['class'] = ' has-error';
$errors['title']['msg'] = '<div class="alert alert-danger" ><p id="poll_title_error">' . _("Enter a title") . '</p></div>';
} elseif ($erreur_injection_titre) {
$errors['title']['aria'] = 'aria-describeby="#poll_title_error" '; $errors['title']['class'] = ' has-error';
$errors['title']['aria'] = 'aria-describeby="poll_title_error" '; $errors['title']['class'] = ' has-error';
$errors['title']['inject'] = '<div class="alert alert-danger"><p id="poll_title_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
}
if ($erreur_injection_commentaires) {
$errors['description']['aria'] = 'aria-describeby="#poll_comment_error" '; $errors['description']['class'] = ' has-error';
$errors['description']['aria'] = 'aria-describeby="poll_comment_error" '; $errors['description']['class'] = ' has-error';
$errors['description']['msg'] = '<div class="alert alert-danger"><p id="poll_comment_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
}
if (!$_SESSION["nom"] && Utils::issetAndNoEmpty("poursuivre")) {
$errors['name']['aria'] = 'aria-describeby="#poll_name_error" '; $errors['name']['class'] = ' has-error';
$errors['name']['aria'] = 'aria-describeby="poll_name_error" '; $errors['name']['class'] = ' has-error';
$errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Enter a name") . '</p></div>';
} elseif ($erreur_injection_nom) {
$errors['name']['aria'] = 'aria-describeby="#poll_name_error" '; $errors['name']['class'] = ' has-error';
$errors['name']['aria'] = 'aria-describeby="poll_name_error" '; $errors['name']['class'] = ' has-error';
$errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
}
if (!$_SESSION["adresse"] && Utils::issetAndNoEmpty("poursuivre")) {
$errors['email']['aria'] = 'aria-describeby="#poll_name_error" '; $errors['email']['class'] = ' has-error';
$errors['email']['aria'] = 'aria-describeby="poll_name_error" '; $errors['email']['class'] = ' has-error';
$errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _("Enter an email address") . '</p></div>';
} elseif ($erreur_adresse && Utils::issetAndNoEmpty("poursuivre")) {
$errors['email']['aria'] = 'aria-describeby="#poll_email_error" '; $errors['email']['class'] = ' has-error';
$errors['email']['aria'] = 'aria-describeby="poll_email_error" '; $errors['email']['class'] = ' has-error';
$errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _("The address is not correct! (You should enter a valid email address in order to receive the link to your poll)") . '</p></div>';
}
@ -272,7 +272,7 @@ echo '
<p class="text-right">
<input type="hidden" name="choix_sondage" value="'. $choix_sondage .'"/>
<button name="poursuivre" value="'. $choix_sondage .'" type="submit" class="btn btn-success">'. _('Next') . '</button>
<button name="poursuivre" value="'. $choix_sondage .'" type="submit" class="btn btn-success" title="'. _('Go to step 2') . '">'. _('Next') . '</button>
</p>
<script type="text/javascript"> document.formulaire.titre.focus(); </script>

View File

@ -1,406 +0,0 @@
/* ========================================================================
* Extends Bootstrap v3.1.1
* Copyright (c) <2014> eBay Software Foundation
* All rights reserved.
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of eBay or any of its subsidiaries or affiliates nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ======================================================================== */
(function($) {
"use strict";
var uniqueId = function(prefix) {
return (prefix || 'ui-id') + '-' + Math.floor((Math.random()*1000)+1)
}
// Alert Extension
// ===============================
$('.alert').attr('role', 'alert')
$('.close').removeAttr('aria-hidden').wrapInner('<span aria-hidden="true"></span>').append('<span class="sr-only">Close</span>')
// TOOLTIP Extension
// ===============================
var showTooltip = $.fn.tooltip.Constructor.prototype.show
, hideTooltip = $.fn.tooltip.Constructor.prototype.hide
$.fn.tooltip.Constructor.prototype.show = function () {
showTooltip.apply(this, arguments)
var $tip = this.tip()
, tooltipID = $tip.attr('id') || uniqueId('ui-tooltip')
$tip.attr({'role':'tooltip','id' : tooltipID})
this.$element.attr('aria-describedby', tooltipID)
}
$.fn.tooltip.Constructor.prototype.hide = function () {
hideTooltip.apply(this, arguments)
removeMultiValAttributes(this.$element, 'aria-describedby', this.tip().attr('id'))
return this
}
// Popover Extension
// ===============================
var showPopover = $.fn.popover.Constructor.prototype.setContent
, hideTPopover = $.fn.popover.Constructor.prototype.hide
$.fn.popover.Constructor.prototype.setContent = function(){
showPopover.apply(this, arguments)
var $tip = this.tip()
, tooltipID = $tip.attr('id') || uniqueId('ui-tooltip')
$tip.attr({'role':'alert','id' : tooltipID})
this.$element.attr('aria-describedby', tooltipID)
this.$element.focus()
}
$.fn.popover.Constructor.prototype.hide = function(){
hideTooltip.apply(this, arguments)
removeMultiValAttributes(this.$element, 'aria-describedby', this.tip().attr('id'))
}
//Modal Extension
$('.modal-dialog').attr( {'role' : 'document'})
var modalhide = $.fn.modal.Constructor.prototype.hide
$.fn.modal.Constructor.prototype.hide = function(){
var modalOpener = this.$element.parent().find('[data-target="#' + this.$element.attr('id') + '"]')
modalhide.apply(this, arguments)
modalOpener.focus()
}
// DROPDOWN Extension
// ===============================
var toggle = '[data-toggle=dropdown]'
, $par
, firstItem
, focusDelay = 200
, menus = $(toggle).parent().find('ul').attr('role','menu')
, lis = menus.find('li').attr('role','presentation')
lis.find('a').attr({'role':'menuitem', 'tabIndex':'-1'})
$(toggle).attr({ 'aria-haspopup':'true', 'aria-expanded': 'false'})
$(toggle).parent().on('shown.bs.dropdown',function(e){
$par = $(this)
var $toggle = $par.find(toggle)
$toggle.attr('aria-expanded','true')
setTimeout(function(){
firstItem = $('.dropdown-menu [role=menuitem]:visible', $par)[0]
try{ firstItem.focus()} catch(ex) {}
}, focusDelay)
})
$(toggle).parent().on('hidden.bs.dropdown',function(e){
$par = $(this)
var $toggle = $par.find(toggle)
$toggle.attr('aria-expanded','false')
})
//Adding Space Key Behaviour, opens on spacebar
$.fn.dropdown.Constructor.prototype.keydown = function (e) {
var $par
, firstItem
if (!/(32)/.test(e.keyCode)) return
$par = $(this).parent()
$(this).trigger ("click")
e.preventDefault() && e.stopPropagation()
}
$(document)
.on('focusout.dropdown.data-api', '.dropdown-menu', function(e){
var $this = $(this)
, that = this
setTimeout(function() {
if(!$.contains(that, document.activeElement)){
$this.parent().removeClass('open')
$this.parent().find('[data-toggle=dropdown]').attr('aria-expanded','false')
}
}, 150)
})
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , $.fn.dropdown.Constructor.prototype.keydown)
// Tab Extension
// ===============================
var $tablist = $('.nav-tabs')
, $lis = $tablist.children('li')
, $tabs = $tablist.find('[data-toggle="tab"], [data-toggle="pill"]')
$tablist.attr('role', 'tablist')
$lis.attr('role', 'presentation')
$tabs.attr('role', 'tab')
$tabs.each(function( index ) {
var tabpanel = $($(this).attr('href'))
, tab = $(this)
, tabid = tab.attr('id') || uniqueId('ui-tab')
tab.attr('id', tabid)
if(tab.parent().hasClass('active')){
tab.attr( { 'tabIndex' : '0', 'aria-selected' : 'true', 'aria-controls': tab.attr('href').substr(1) } )
tabpanel.attr({ 'role' : 'tabpanel', 'tabIndex' : '0', 'aria-hidden' : 'false', 'aria-labelledby':tabid })
}else{
tab.attr( { 'tabIndex' : '-1', 'aria-selected' : 'false', 'aria-controls': tab.attr('href').substr(1) } )
tabpanel.attr( { 'role' : 'tabpanel', 'tabIndex' : '-1', 'aria-hidden' : 'true', 'aria-labelledby':tabid } )
}
})
$.fn.tab.Constructor.prototype.keydown = function (e) {
var $this = $(this)
, $items
, $ul = $this.closest('ul[role=tablist] ')
, index
, k = e.which || e.keyCode
$this = $(this)
if (!/(37|38|39|40)/.test(k)) return
$items = $ul.find('[role=tab]:visible')
index = $items.index($items.filter(':focus'))
if (k == 38 || k == 37) index-- // up & left
if (k == 39 || k == 40) index++ // down & right
if(index < 0) index = $items.length -1
if(index == $items.length) index = 0
var nextTab = $items.eq(index)
if(nextTab.attr('role') ==='tab'){
nextTab.tab('show') //Comment this line for dynamically loaded tabPabels, to save Ajax requests on arrow key navigation
.focus()
}
// nextTab.focus()
e.preventDefault()
e.stopPropagation()
}
$(document).on('keydown.tab.data-api','[data-toggle="tab"], [data-toggle="pill"]' , $.fn.tab.Constructor.prototype.keydown)
var tabactivate = $.fn.tab.Constructor.prototype.activate;
$.fn.tab.Constructor.prototype.activate = function (element, container, callback) {
var $active = container.find('> .active')
$active.find('[data-toggle=tab]').attr({ 'tabIndex' : '-1','aria-selected' : false })
$active.filter('.tab-pane').attr({ 'aria-hidden' : true,'tabIndex' : '-1' })
tabactivate.apply(this, arguments)
element.addClass('active')
element.find('[data-toggle=tab]').attr({ 'tabIndex' : '0','aria-selected' : true })
element.filter('.tab-pane').attr({ 'aria-hidden' : false,'tabIndex' : '0' })
}
// Collapse Extension
// ===============================
var $colltabs = $('[data-toggle="collapse"]')
$colltabs.attr({ 'role':'tab', 'aria-selected':'false', 'aria-expanded':'false' })
$colltabs.each(function( index ) {
var colltab = $(this)
, collpanel = (colltab.attr('data-target')) ? $(colltab.attr('data-target')) : $(colltab.attr('href'))
, parent = colltab.attr('data-parent')
, collparent = parent && $(parent)
, collid = colltab.attr('id') || uniqueId('ui-collapse')
$(collparent).find('div:not(.collapse,.panel-body), h4').attr('role','presentation')
colltab.attr('id', collid)
if(collparent){
collparent.attr({ 'role' : 'tablist', 'aria-multiselectable' : 'true' })
if(collpanel.hasClass('in')){
colltab.attr({ 'aria-controls': colltab.attr('href').substr(1), 'aria-selected':'true', 'aria-expanded':'true', 'tabindex':'0' })
collpanel.attr({ 'role':'tabpanel', 'tabindex':'0', 'aria-labelledby':collid, 'aria-hidden':'false' })
}else{
colltab.attr({'aria-controls' : colltab.attr('href').substr(1), 'tabindex':'-1' })
collpanel.attr({ 'role':'tabpanel', 'tabindex':'-1', 'aria-labelledby':collid, 'aria-hidden':'true' })
}
}
})
var collToggle = $.fn.collapse.Constructor.prototype.toggle
$.fn.collapse.Constructor.prototype.toggle = function(){
var prevTab = this.$parent && this.$parent.find('[aria-expanded="true"]') , href
if(prevTab){
var prevPanel = prevTab.attr('data-target') || (href = prevTab.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')
, $prevPanel = $(prevPanel)
, $curPanel = this.$element
, par = this.$parent
, curTab
if (this.$parent) curTab = this.$parent.find('[data-toggle=collapse][href="#' + this.$element.attr('id') + '"]')
collToggle.apply(this, arguments)
if ($.support.transition) {
this.$element.one($.support.transition.end, function(){
prevTab.attr({ 'aria-selected':'false','aria-expanded':'false', 'tabIndex':'-1' })
$prevPanel.attr({ 'aria-hidden' : 'true','tabIndex' : '-1'})
curTab.attr({ 'aria-selected':'true','aria-expanded':'true', 'tabIndex':'0' })
if($curPanel.hasClass('in')){
$curPanel.attr({ 'aria-hidden' : 'false','tabIndex' : '0' })
}else{
curTab.attr({ 'aria-selected':'false','aria-expanded':'false'})
$curPanel.attr({ 'aria-hidden' : 'true','tabIndex' : '-1' })
}
})
}
}else{
collToggle.apply(this, arguments)
}
}
$.fn.collapse.Constructor.prototype.keydown = function (e) {
var $this = $(this)
, $items
, $tablist = $this.closest('div[role=tablist] ')
, index
, k = e.which || e.keyCode
$this = $(this)
if (!/(32|37|38|39|40)/.test(k)) return
if(k==32) $this.click()
$items = $tablist.find('[role=tab]')
index = $items.index($items.filter(':focus'))
if (k == 38 || k == 37) index-- // up & left
if (k == 39 || k == 40) index++ // down & right
if(index < 0) index = $items.length -1
if(index == $items.length) index = 0
$items.eq(index).focus()
e.preventDefault()
e.stopPropagation()
}
$(document).on('keydown.collapse.data-api','[data-toggle="collapse"]' , $.fn.collapse.Constructor.prototype.keydown)
// Carousel Extension
// ===============================
$('.carousel').each(function (index) {
var $this = $(this)
, prev = $this.find('[data-slide="prev"]')
, next = $this.find('[data-slide="next"]')
, $options = $this.find('.item')
, $listbox = $options.parent()
$this.attr( { 'data-interval' : 'false', 'data-wrap' : 'false' } )
$listbox.attr('role', 'listbox')
$options.attr('role', 'option')
var spanPrev = document.createElement('span')
spanPrev.setAttribute('class', 'sr-only')
spanPrev.innerHTML='Previous'
var spanNext = document.createElement('span')
spanNext.setAttribute('class', 'sr-only')
spanNext.innerHTML='Next'
prev.attr('role', 'button')
next.attr('role', 'button')
prev.append(spanPrev)
next.append(spanNext)
$options.each(function () {
var item = $(this)
if(item.hasClass('active')){
item.attr({ 'aria-selected': 'true', 'tabindex' : '0' })
}else{
item.attr({ 'aria-selected': 'false', 'tabindex' : '-1' })
}
})
})
var slideCarousel = $.fn.carousel.Constructor.prototype.slide
$.fn.carousel.Constructor.prototype.slide = function (type, next) {
var $active = this.$element.find('.item.active')
, $next = next || $active[type]()
slideCarousel.apply(this, arguments)
$active
.one($.support.transition.end, function () {
$active.attr({'aria-selected':false, 'tabIndex': '-1'})
$next.attr({'aria-selected':true, 'tabIndex': '0'})
//.focus()
})
}
$.fn.carousel.Constructor.prototype.keydown = function (e) {
var $this = $(this)
, $ul = $this.closest('div[role=listbox]')
, $items = $ul.find('[role=option]')
, $parent = $ul.parent()
, k = e.which || e.keyCode
, index
, i
if (!/(37|38|39|40)/.test(k)) return
index = $items.index($items.filter('.active'))
if (k == 37 || k == 38) { // Up
$parent.carousel('prev')
index--
if(index < 0) index = $items.length -1
else $this.prev().focus()
}
if (k == 39 || k == 40) { // Down
$parent.carousel('next')
index++
if(index == $items.length) index = 0
else {
$this.one($.support.transition.end, function () {
$this.next().focus()
})
}
}
e.preventDefault()
e.stopPropagation()
}
$(document).on('keydown.carousel.data-api', 'div[role=option]', $.fn.carousel.Constructor.prototype.keydown)
// GENERAL UTILITY FUNCTIONS
// ===============================
var removeMultiValAttributes = function (el, attr, val) {
var describedby = (el.attr( attr ) || "").split( /\s+/ )
, index = $.inArray(val, describedby)
if ( index !== -1 ) {
describedby.splice( index, 1 )
}
describedby = $.trim( describedby.join( " " ) )
if (describedby ) {
el.attr( attr, describedby )
} else {
el.removeAttr( attr )
}
}
})(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -2,14 +2,56 @@ $(document).ready(function() {
var lang = $('html').attr('lang');
// Datepicker
$('.input-group.date').datepicker({
format: "dd/mm/yyyy",
todayBtn: "linked",
orientation: "top left",
autoclose: true,
language: lang
var framadatepicker = function() {
$('.input-group.date').datepicker({
format: "dd/mm/yyyy",
todayBtn: "linked",
orientation: "top left",
autoclose: true,
language: lang,
todayHighlight: true,
beforeShowDay: function (date){
var $selected_days = new Array();
$('#selected-days input[id^="day"]').each(function() {
if($(this).val()!='') {
$selected_days.push($(this).val());
}
});
for(i = 0; i < $selected_days.length; i++){
var $selected_date = $selected_days[i].split('/');
if (date.getFullYear() == $selected_date[2] && (date.getMonth()+1) == $selected_date[1] && date.getDate() == $selected_date[0]){
return {
classes: 'disabled selected'
};
}
}
}
});
};
var datepickerfocus = false; // a11y : datepicker not display on focus until there is one click on the button
$(document).on('click','.input-group.date .input-group-addon', function() {
datepickerfocus = true;
// Re-init datepicker config before displaying
$(this).parent().datepicker(framadatepicker());
$(this).parent().datepicker('show');
// Trick to refresh calendar
$('.datepicker-days .prev').trigger('click');
$('.datepicker-days .next').trigger('click');
// .active must be clicable in order to unfill the form
$('.datepicker-days .active').removeClass('disabled');
});
$(document).on('focus','.input-group.date input', function() {
if(datepickerfocus) {
$(this).parent('.input-group.date').datepicker(framadatepicker());
$(this).parent('.input-group.date').datepicker('show');
}
});
/**
* choix_date.php
**/
@ -95,6 +137,7 @@ $(document).ready(function() {
$(this).addClass('disabled');
}
};
SubmitDaysAvalaible();
});
// Button "Add a day"
@ -116,28 +159,17 @@ $(document).ready(function() {
last_day.after('<fieldset>'+new_day_html+'</fieldset>');
$('#day'+(nb_days)).focus();
$('#remove-a-day, #copyhours').removeClass('disabled');
// Repeat datepicker init (junk code but it works for added days)
$('.input-group.date').datepicker({
format: "dd/mm/yyyy",
todayBtn: "linked",
orientation: "top left",
autoclose: true,
language: lang
});
});
// Button "Remove a day"
$('#remove-a-day').on('click', function() {
var nb_days = $('#selected-days fieldset').length;
$('#selected-days fieldset:last').remove();
var nb_days = $('#selected-days fieldset').length;
$('#day'+(nb_days-1)).focus();
if ( nb_days == 1) {
$('#remove-a-day, #copyhours').addClass('disabled');
};
SubmitDaysAvalaible();
});
// Title update on hours and buttons -/+ hours
@ -180,8 +212,8 @@ $(document).ready(function() {
}
}
$(document).on('change','.hours, #selected-days fieldset legend input', function() {
SubmitDaysAvalaible()
$(document).on('keyup, change','.hours, #selected-days fieldset legend input', function() {
SubmitDaysAvalaible();
});
SubmitDaysAvalaible();
@ -220,14 +252,13 @@ $(document).ready(function() {
// Button "Remove a choice"
$('#remove-a-choice').on('click', function() {
var nb_choices = $('.choice-field').length;
$('.choice-field:last').remove();
$('#choice'+(nb_choices-2)).focus();
if (nb_choices == 3) {
$('#remove-a-choice, button[name="fin_sondage_autre"]').addClass('disabled');
var nb_choices = $('.choice-field').length;
$('#choice'+(nb_choices-1)).focus();
if (nb_choices == 2) {
$('#remove-a-choice').addClass('disabled');
};
SubmitChoicesAvalaible();
});
// 2 choices filled and you can submit
@ -245,11 +276,31 @@ $(document).ready(function() {
}
}
$(document).on('change','.choice-field input', function() {
SubmitChoicesAvalaible()
$(document).on('keyup, change','.choice-field input', function() {
SubmitChoicesAvalaible();
});
SubmitChoicesAvalaible();
$(document).on('click', '.md-a-img', function() {
$('#md-a-imgModal').modal('show');
$('#md-a-imgModal .btn-primary').attr('value',$(this).prev().attr('id'));
});
$('#md-a-imgModal .btn-primary').on('click', function() {
if($('#md-img').val()!='' && $('#md-a').val()!='') {
$('#'+$(this).val()).val('[!['+$('#md-text').val()+']('+$('#md-img').val()+')]('+$('#md-a').val()+')');
} else if ($('#md-img').val()!='') {
$('#'+$(this).val()).val('!['+$('#md-text').val()+']('+$('#md-img').val()+')');
} else if ($('#md-a').val()!='') {
$('#'+$(this).val()).val('['+$('#md-text').val()+']('+$('#md-a').val()+')');
} else {
$('#'+$(this).val()).val($('#md-text').val());
}
$('#md-a-imgModal').modal('hide');
$('#md-img').val(''); $('#md-a').val('');$('#md-text').val('');
});
/**
* adminstuds.php
**/
@ -296,4 +347,67 @@ $(document).ready(function() {
return false;
});
$('#poll-rules-form .btn-edit').on('click', function() {
$('#poll-rules-form p').hide();
$('#poll-rules-form .js-poll-rules').removeClass("hidden");
$('.js-poll-rules select').focus();
return false;
});
$('#poll-rules-form .btn-cancel').on('click', function() {
$('#poll-rules-form p').show();
$('#poll-rules-form .js-poll-rules').addClass("hidden");
$('.js-poll-rules .btn-edit').focus();
return false;
});
// Horizontal scroll buttons
if($('.results').width() > $('.container').width()) {
$('.scroll-buttons').removeClass('hidden');
}
var $scroll_page = 1;
var $scroll_scale = $('#tableContainer').width()*2/3;
$('.scroll-left').addClass('disabled');
$('.scroll-left').click(function(){
$('.scroll-right').removeClass('disabled');
$( "#tableContainer" ).animate({
scrollLeft: $scroll_scale*($scroll_page-1)
}, 1000);
if($scroll_page == 1) {
$(this).addClass('disabled');
} else {
$scroll_page = $scroll_page-1;
}
return false;
});
$('.scroll-right').click(function(){
$('.scroll-left').removeClass('disabled');
$( "#tableContainer" ).animate({
scrollLeft: $scroll_scale*($scroll_page)
}, 1000);
if($scroll_scale*($scroll_page+1) > $( ".results" ).width()) {
$(this).addClass('disabled');
} else {
$scroll_page++;
}
return false;
});
});
// Vote form moving to the top or to the bottom
$(window).scroll(function() {
var $table_offset = $('.results thead').offset();
if($table_offset != undefined && $(window).scrollTop() < $table_offset.top) {
$('.results tbody').prepend($('#vote-form'));
$('#tableContainer').before($('.scroll-buttons'));
} else {
$('#addition').before($('#vote-form'));
$('#tableContainer').after($('.scroll-buttons'));
}
});

Binary file not shown.

View File

@ -21,6 +21,9 @@ msgstr ""
msgid "Make your polls"
msgstr "Organiser des rendez-vous simplement, librement."
msgid "Home"
msgstr "Accueil"
msgid "Poll"
msgstr "Sondage"
@ -45,6 +48,12 @@ msgstr "Modifier"
msgid "Next"
msgstr "Continuer"
msgid "Back"
msgstr "Précédent"
msgid "Close"
msgstr "Fermer"
msgid "Your name"
msgstr "Votre nom"
@ -55,7 +64,7 @@ msgid "Description"
msgstr "Description"
msgid "Back to the homepage of "
msgstr "Retournez à la page d'accueil de"
msgstr "Retourner à la page d'accueil de"
msgid "Error!"
msgstr "Erreur !"
@ -79,30 +88,80 @@ msgstr "Changer la langue"
msgid "Select the language"
msgstr "Choisir la langue"
########### Footer ###########
msgid "Home"
msgstr "Accueil"
msgid "About"
msgstr "Informations générales"
msgid "Contact"
msgstr "Contact"
############ Homepage ############
msgid "Schedule an event"
msgstr "Créer un sondage spécial dates"
msgid "Make a poll"
msgid "Make a classic poll"
msgstr "Créer un sondage classique"
msgid "or"
msgstr "ou"
# 1st section
msgid "What is that?"
msgstr "Prise en main"
msgid "view an example"
msgstr "voir un exemple"
msgid "Framadate is an online service for planning an appointment or make a decision quickly and easily. No registration is required."
msgstr "Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement. Aucune inscription préalable nest nécessaire."
msgid "Here is how it works:"
msgstr "Voici comment ça fonctionne :"
msgid "Make a poll"
msgstr "Créez un sondage"
msgid "Define dates or subjects to choose"
msgstr "Déterminez les dates ou les sujets à choisir"
msgid "Send the poll link to your friends or colleagues"
msgstr "Envoyez le lien du sondage à vos amis ou collègues"
msgid "Discuss and make a decision"
msgstr "Discutez et prennez votre décision"
msgid "Do you want to "
msgstr "Voulez-vous "
msgid "view an example?"
msgstr "voir un exemple ?"
# 2nd section
msgid "The software"
msgstr "Le logiciel"
msgid "Framadate was initially based on "
msgstr "Framadate est initialement basé sur "
msgid " a software developed by the University of Strasbourg. Today, it is devevoped by the association Framasoft"
msgstr " un logiciel développé par l'Université de Strasbourg. Aujourd'hui, son développement est assuré par lassociation Framasoft"
msgid "This software needs javascript and cookies enabled. It is compatible with the following web browsers:"
msgstr "Ce logiciel requiert lactivation du javascript et des cookies. Il est compatible avec les navigateurs web suivant :"
msgid "It is governed by the "
msgstr "Il est régi par la "
msgid "CeCILL-B license"
msgstr "licence CeCILL-B"
# 3rd section
msgid "Cultivate your garden"
msgstr "Cultivez votre jardin"
msgid "To participate in the software development, suggest improvements or simply download it, please visit "
msgstr "Pour participer au développement du logiciel, proposer des améliorations ou simplement le télécharger, rendez-vous sur "
msgid "the development site"
msgstr "le site de développement"
msgid "If you want to install the software for your own use and thus increase your independence, we help you on:"
msgstr "Si vous souhaitez installer ce logiciel pour votre propre usage et ainsi gagner en autonomie, nous vous aidons sur :"
############## Poll ##############
msgid "Poll administration"
msgstr "Administration du sondage"
msgid "Legend:"
msgstr "Légende :"
# Jumbotron adminstuds.php (+ studs.php)
msgid "Back to the poll"
msgstr "Retour au sondage"
@ -158,6 +217,27 @@ msgstr "Lien public du sondage"
msgid "Admin link of the pool"
msgstr "Lien d'administration du sondage"
msgid "Poll rules"
msgstr "Permissions du sondage"
msgid "Edit the poll rules"
msgstr "Modifier les permissions du sondage"
msgid "Votes and comments are locked"
msgstr "Les votes et commentaires sont verrouillés"
msgid "Votes and comments are open"
msgstr "Les votes et commentaires sont ouverts"
msgid "Votes are editable"
msgstr "Les votes sont modifiables"
msgid "Save the new rules"
msgstr "Enregistrer les nouvelles permissions"
msgid "Cancel the rules edit"
msgstr "Annuler le changement de permissions"
# Help text adminstuds.php
msgid "As poll administrator, you can change all the lines of this poll with this button "
msgstr "En tant qu'administrateur, vous pouvez modifier toutes les lignes de ce sondage avec ce bouton "
@ -176,6 +256,9 @@ msgid "If you want to vote in this poll, you have to give your name, choose the
msgstr "Pour participer à ce sondage, veuillez entrer votre nom, choisir toutes les valeurs qui vous conviennent et valider votre choix avec le bouton en bout de ligne."
# Poll results
msgid "Votes of the poll "
msgstr "Votes du sondage "
msgid "Remove the column"
msgstr "Effacer la colonne"
@ -233,6 +316,15 @@ msgstr "votes"
msgid "for"
msgstr "à"
msgid "Remove all the votes"
msgstr "Supprimer tous les votes"
msgid "Scroll to the left"
msgstr "Faire défiler à gauche"
msgid "Scroll to the right"
msgstr "Faire défiler à droite"
# Comments
msgid "Comments of polled people"
msgstr "Commentaires de sondés"
@ -252,6 +344,9 @@ msgstr "Envoyer le commentaire"
msgid "anonyme"
msgstr "anonyme"
msgid "Remove all the comments"
msgstr "Supprimer tous les commentaires"
# Add a colum adminstuds.php
msgid "Column's adding"
msgstr "Ajout de colonne"
@ -320,6 +415,9 @@ msgstr "Vous souhaitez que les sondés puissent modifier leur ligne eux-mêmes."
msgid "To receive an email for each new vote."
msgstr "Vous souhaitez recevoir un mail à chaque participation d'un sondé."
msgid "Go to step 2"
msgstr "Aller à l'étape 2"
# Errors info_sondage.php
msgid "Enter a title"
msgstr "Il faut saisir un titre !"
@ -337,6 +435,9 @@ msgstr "L'adresse saisie n'est pas correcte ! (Il faut une adresse valide pour r
msgid "You haven't filled the first section of the poll creation."
msgstr "Vous n'avez pas renseigné la première page du sondage"
msgid "Back to step 1"
msgstr "Revenir à létape 1"
########### Step 2 ###########
# Step 2 choix_date.php
msgid "Poll dates (2 on 3)"
@ -391,15 +492,42 @@ msgstr "Pour créer un sondage classique, vous devez proposer au moins deux choi
msgid "You can add or remove additional choices with the buttons"
msgstr "Vous pouvez ajouter ou supprimer des choix supplémentaires avec les boutons"
msgid "It's possible to propose links or images by using "
msgstr "Il est possible dinsérer des liens ou des images en utilisant "
msgid "the Markdown syntax"
msgstr "la syntaxe Markdown"
msgid "Choice"
msgstr "Choix"
msgid "Add a link or an image"
msgstr "Ajouter un lien ou une image"
msgid "These fields are optional. You can add a link, an image or both."
msgstr "Ces champs sont optionnels. Vous pouvez ajouter un lien, une image ou les deux."
msgid "URL of the image"
msgstr "URL de l'image"
msgid "Link"
msgstr "Lien"
msgid "Alternative text"
msgstr "Texte alternatif"
msgid "Remove a choice"
msgstr "Supprimer un choix"
msgid "Add a choice"
msgstr "Ajouter un choix"
msgid "Back to step 2"
msgstr "Revenir à létape 2"
msgid "Go to step 3"
msgstr "Aller à létape 3"
########### Step 3 ###########
msgid "Removal date and confirmation (3 on 3)"
msgstr "Date d'expiration et confirmation (3 sur 3)"
@ -407,6 +535,9 @@ msgstr "Date d'expiration et confirmation (3 sur 3)"
msgid "Confirm the creation of your poll"
msgstr "Confirmez la création de votre sondage"
msgid "List of your choices"
msgstr "Liste de vos choix"
msgid "Once you have confirmed the creation of your poll, you will be automatically redirected on the administration page of your poll."
msgstr "Une fois que vous aurez confirmé la création du sondage, vous serez redirigé automatiquement vers la page d'administration de votre sondage."
@ -417,15 +548,15 @@ msgid "Create the poll"
msgstr "Créer le sondage"
# Step 3 choix_date.php
msgid "Your poll will expire automatically 2 days after the last date of your poll."
msgstr "Votre sondage sera automatiquement effacé après la date la plus tardive."
msgid "Your poll will be automatically removed 6 months after the last date of your poll:"
msgstr "Votre sondage sera automatiquement effacé 6 mois après la date la plus tardive :"
msgid "Removal date:"
msgstr "Date de suppression :"
# Step 3 choix_autre.php
msgid "Your poll will be automatically removed after 6 months."
msgstr "Votre sondage sera automatiquement effacé dans 6 mois."
msgid "Your poll will be automatically removed after 6 months:"
msgstr "Votre sondage sera automatiquement effacé dans 6 mois :"
msgid "You can fix another removal date for it."
msgstr "Néanmoins vous pouvez décider ci-dessous d'une date plus rapprochée pour la suppression de votre sondage."
@ -433,29 +564,6 @@ msgstr "Néanmoins vous pouvez décider ci-dessous d'une date plus rapprochée p
msgid "Removal date (optional)"
msgstr "Date de fin (facultative)"
########### Contact #########
msgid "Contact us"
msgstr "Nous contacter"
msgid "If you have questions, you can send a message here."
msgstr "Pour toutes questions ou suggestions vous pouvez laisser un message via ce formulaire."
msgid "Question"
msgstr "Question"
msgid "Send your question"
msgstr "Envoyer votre question"
msgid "Your message has been sent!"
msgstr "Votre message a bien été envoyé !"
# Errors contact.php
msgid "The address is not correct!"
msgstr "L'adresse saisie n'est pas correcte !"
msgid "You must ask a question!"
msgstr "Vous devez poser au moins une question !"
############# Admin #############
msgid "Polls administrator"
msgstr "Administrateur de la base"
@ -512,57 +620,28 @@ msgstr ""
msgid "Thanks for your confidence."
msgstr "Merci de votre confiance."
msgid "\n"
"--\n\n"
 La route est longue, mais la voie est libre… »\n"
"Framasoft ne vit que par vos dons (déductibles des impôts).\n"
"Merci d'avance pour votre soutien http://soutenir.framasoft.org."
msgstr "\n"
"--\n\n"
 La route est longue, mais la voie est libre… »\n"
"Framasoft ne vit que par vos dons (déductibles des impôts).\n"
"Merci d'avance pour votre soutien http://soutenir.framasoft.org."
# Mails adminstuds.php
msgid "[ADMINISTRATOR] New title for your poll"
msgstr "[ADMINISTRATEUR] Changement du titre du sondage avec "
msgid "[ADMINISTRATOR] New settings for your poll"
msgstr "[ADMINISTRATEUR] Changement de configuration du sondage"
msgid ""
"You have changed the title of your poll. \n"
"You have changed the settings of your poll. \n"
"You can modify this poll with this link"
msgstr ""
"Vous avez modifié le titre de votre sondage. \n"
"Vous avez modifié la configuration de votre sondage. \n"
"Vous pouvez modifier ce sondage au lien suivant"
msgid "[ADMINISTRATOR] New description for your poll"
msgstr "[ADMINISTRATEUR] Changement de description de votre sondage "
msgid ""
"You have changed the description of your poll. \n"
"You can modify this poll with this link"
msgstr ""
"Vous avez modifié la description de votre sondage. \n"
"Vous pouvez modifier ce sondage au lien suivant"
msgid "[ADMINISTRATOR] New email address for your poll"
msgstr "[ADMINISTRATEUR] Changement d'adresse électronique de l'administrateur avec "
msgid ""
"You have changed your email address in your poll. \n"
"You can modify this poll with this link"
msgstr ""
"Vous avez modifié l'adresse mail associé à votre sondage. \n"
"Vous pouvez modifier ce sondage au lien suivant"
msgid "[ADMINISTRATOR] Removing of your poll"
msgstr "[ADMINISTRATEUR] Suppression de sondage"
msgid ""
"You have removed your poll. \n"
"You can make new polls with this link"
msgstr ""
"Vous supprimé un sondage. \n"
"Vous pouvez faire de nouveaux sondages au lien suivant"
msgid "[ADMINISTRATOR] New column for your poll"
msgstr "[ADMINISTRATEUR] Ajout d'une nouvelle colonne au sondage "
msgid ""
"You have added a new column in your poll. \n"
"You can inform the voters of this change with this link"
msgstr ""
"Vous avez ajouté une colonne à votre sondage. \n"
"Vous pouvez informer vos utilisateurs de ce changement en leur envoyant l'adresse suivante"
# Mails creation_sondage.php
msgid ""
"This is the message you have to send to the people you want to poll. \n"
@ -591,28 +670,3 @@ msgstr "Réservé à l'auteur"
msgid "For sending to the polled users"
msgstr "Pour diffusion aux sondés"
# Mails contact.php
msgid "[CONTACT] You have sent a question "
msgstr "[CONTACT] Envoi de question "
msgid "You have a question from a user "
msgstr "Vous avez une question d'utilisateur de "
msgid "User"
msgstr "Utilisateur"
msgid "User's email address"
msgstr "Adresse utilisateur"
msgid "Message"
msgstr "Message"
msgid "[COPY] Someone has sent a question "
msgstr "[COPIE] Envoi de question "
msgid "Here is a copy of your question"
msgstr "Voici une copie de votre question"
msgid "We're going to answer your question shortly."
msgstr "Nous allons prendre en compte votre message rapidement."

157
studs.php
View File

@ -320,7 +320,7 @@ $td_headers = array(); // for a11y, headers="M1 D4 H5" on each td
$radio_title = array(); // date for
// Dates poll
if ($dsondage->format=="D"||$dsondage->format=="D+") {
if ($dsondage->format=="D"||$dsondage->format=="D+"||$dsondage->format=="D-") {
$tr_months = '<tr><th role="presentation"></th>';
$tr_days = '<tr><th role="presentation"></th>';
@ -366,7 +366,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
$hour = substr($current, strpos($current, '@')-count($current)+2);
if ($hour != "") {
$tr_hours .= '<th class="bg-info'.$rbd.'" id="H'.$i.'">'.$hour.'</th>';
$tr_hours .= '<th class="bg-info'.$rbd.'" id="H'.$i.'" title="'.$hour.'">'.$hour.'</th>';
$radio_title[$i] .= ' - '.$hour;
$td_headers[$i] .= ' H'.$i;
} else {
@ -396,11 +396,35 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
$td_headers[$i]='';$radio_title[$i]=''; // init before concatenate
// Subjects
$tr_subjects .= '<th class="bg-info" id="S'.preg_replace("/[^a-zA-Z0-9]_+/", "", stripslashes($toutsujet[$i])).'">'.stripslashes($toutsujet[$i]).'</th>';
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$toutsujet[$i],$md_a_img); // Markdown [![alt](src)](href)
preg_match_all('/!\[(.*?)\]\((.*?)\)/',$toutsujet[$i],$md_img); // Markdown ![alt](src)
preg_match_all('/\[(.*?)\]\((.*?)\)/',$toutsujet[$i],$md_a); // Markdown [text](href)
if (isset($md_a_img[2][0]) && $md_a_img[2][0]!='' && isset($md_a_img[3][0]) && $md_a_img[3][0]!='') { // [![alt](src)](href)
$th_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<a href="'.$md_a_img[3][0].'"><img src="'.$md_a_img[2][0].'" class="img-responsive" alt="'.$th_subject_text.'" /></a>';
} elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src)
$th_subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<img src="'.$md_img[2][0].'" class="img-responsive" alt="'.$th_subject_text.'" />';
} elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href)
$th_subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1);
$th_subject_html = '<a href="'.$md_a[2][0].'">'.$th_subject_text.'</a>';
} else { // text only
$th_subject_text = stripslashes($toutsujet[$i]);
$th_subject_html = $th_subject_text;
}
$tr_subjects .= '<th class="bg-info" id="S'.$i.'" title="'.$th_subject_text.'">'.$th_subject_html.'</th>';
$border[$i] = false;
$td_headers[$i] .= stripslashes($toutsujet[$i]);
$radio_title[$i] .= stripslashes($toutsujet[$i]);
$td_headers[$i] .= 'S'.$i;
$radio_title[$i] .= $th_subject_text;
}
@ -411,13 +435,35 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") {
echo '
<form name="formulaire" action="' . Utils::getUrlSondage($dsondage->id_sondage) . '" method="POST">
<input type="hidden" name="sondage" value="' . $numsondage . '"/>
';
if ($dsondage->format=="A-" || $dsondage->format=="D-") {
echo '
<div class="alert alert-danger">
<p>' . _("The administrator locked this poll, votes and comments are frozen, it's not possible to participate anymore.") . '</p>
<p><b>' . _('Legend:'). '</b> <span class="glyphicon glyphicon-ok"></span> =' . _('Yes') . ', <b>(<span class="glyphicon glyphicon-ok"></span>)</b> = ' . _('Ifneedbe') . ', <span class="glyphicon glyphicon-ban-circle"></span> = ' . _('No') . '</span></p>
</div>';
} else {
echo '
<div class="alert alert-info">
<p>' . _("If you want to vote in this poll, you have to give your name, choose the values that fit best for you and validate with the plus button at the end of the line.") . '</p>
<p><b>' . _('Legend:'). '</b> <span class="glyphicon glyphicon-ok"></span> =' . _('Yes') . ', <b>(<span class="glyphicon glyphicon-ok"></span>)</b> = ' . _('Ifneedbe') . ', <span class="glyphicon glyphicon-ban-circle"></span> = ' . _('No') . '</span></p>
</div>';
}
echo'
<div class="hidden row scroll-buttons" aria-hidden="true">
<div class="btn-group pull-right">
<button class="btn btn-sm btn-link scroll-left" title="' . _('Scroll to the left') . '">
<span class="glyphicon glyphicon-chevron-left"></span>
</button>
<button class="btn btn-sm btn-link scroll-right" title="' . _('Scroll to the right') . '">
<span class="glyphicon glyphicon-chevron-right"></span>
</button>
</div>
</div>
<div id="tableContainer" class="tableContainer">
<table class="results">
<caption>'._('Votes of the poll ').$title.'</caption>
<caption class="sr-only">'._('Votes of the poll ').$title.'</caption>
<thead>'. $thead . '</thead>
<tbody>';
@ -499,8 +545,12 @@ while ($data = $user_studs->FetchNextObject(false)) {
//a la fin de chaque ligne se trouve les boutons modifier
if ($compteur != $ligneamodifier && ($dsondage->format=="A+"||$dsondage->format=="D+") && $mod_ok) {
echo '<td><button type="submit" class="btn btn-link btn-sm" name="modifierligne'.$compteur.'" title="'. _('Edit the line:') .' '.stripslashes($nombase).'">
<span class="glyphicon glyphicon-pencil"></span></button></td>'."\n";
echo '
<td>
<button type="submit" class="btn btn-link btn-sm" name="modifierligne'.$compteur.'" title="'. _('Edit the line:') .' '.stripslashes($nombase).'">
<span class="glyphicon glyphicon-pencil"></span><span class="sr-only">' . _('Edit') . '</span>
</button>
</td>'."\n";
}
//demande de confirmation pour modification de ligne
@ -517,7 +567,7 @@ while ($data = $user_studs->FetchNextObject(false)) {
}
// affichage de la ligne pour un nouvel utilisateur
if (( !(USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) || !$user_mod) && $ligneamodifier==-1) {
if (( !(USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) || !$user_mod) && $ligneamodifier==-1 && ($dsondage->format!="A-" && $dsondage->format!="D-")) {
//affichage de la case vide de texte pour un nouvel utilisateur
echo '<tr id="vote-form">
<td class="bg-info" style="padding:5px">
@ -562,71 +612,56 @@ if (( !(USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) || !$user_mod) && $li
// Addition and Best choice
//affichage de la ligne contenant les sommes de chaque colonne
$tr_addition = '<tr><td>'. _("Addition") .'</td>';
$tr_bestchoice = '<tr><td></td>';
$meilleurecolonne = 0;
$tr_addition = '<tr id="addition"><td>'. _("Addition") .'</td>';
$meilleurecolonne = max($somme);
$compteursujet = 0;
$meilleursujet = '<ul style="list-style:none">';
for ($i = 0; $i < $nbcolonnes; $i++) {
if (isset($somme[$i]) && $somme[$i] > 0 ) {
if (isset($somme[$i]) && $somme[$i] > $meilleurecolonne){
$meilleurecolonne = $somme[$i];
if (in_array($i, array_keys($somme, max($somme)))){
$tr_addition .= '<td><span class="glyphicon glyphicon-star text-warning"></span><span>'.$somme[$i].'</span></td>';
$meilleursujet.= '<li><b>'.$radio_title[$i].'</b></li>';
$compteursujet++;
} else {
$tr_addition .= '<td>'.$somme[$i].'</td>';
}
$tr_addition .= '<td>'.$somme[$i].'</td>';
} else {
$tr_addition .= '<td></td>';
}
}
$tr_addition .= '<td></td></tr>';
//recuperation des valeurs des sujets et adaptation pour affichage
$toutsujet = explode(",", $dsondage->sujet);
$compteursujet = 0;
$meilleursujet = '<ul style="list-style:none">';
for ($i = 0; $i < $nbcolonnes; $i++) {
if (isset($somme[$i]) && $somme[$i] > 0 && $somme[$i] == $meilleurecolonne){
$tr_bestchoice .= '<td><span class="glyphicon glyphicon-star text-warning"></span></td>';
if ($dsondage->format == "D" || $dsondage->format == "D+") {
$meilleursujetexport = $toutsujet[$i];
if (strpos($toutsujet[$i], '@') !== false) {
$toutsujetdate = explode("@", $toutsujet[$i]);
$meilleursujet .= '<li><b>'.strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1].'</b></li>';
} else {
$meilleursujet .= '<li><b>'.strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]).'</b></li>';
}
} else {
$meilleursujet.= '<li><b>'.$toutsujet[$i].'</b></li>';
}
$compteursujet++;
} else {
$tr_bestchoice .= '<td></td>';
}
}
$tr_bestchoice .= '<td></td></tr>';
$meilleursujet = str_replace("°", "'", $meilleursujet).'</ul>';
$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote');
// Print Addition and Best choice
echo $tr_addition."\n".$tr_bestchoice.'
echo $tr_addition.'
</tbody>
</table>
<div class="col-sm-4 col-sm-offset-4"><p>'."\n";
</div>
<div class="row">'."\n";
if ($compteursujet == 1) {
echo '<span class="glyphicon glyphicon-star text-warning"></span> ' . _("The best choice at this time is:") . '</p>' . $meilleursujet . '<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . ".\n";
echo '
<div class="col-sm-6 col-sm-offset-3 alert alert-success">
<p><span class="glyphicon glyphicon-star text-warning"></span> ' . _("The best choice at this time is:") . '</p>
' . $meilleursujet . '
<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . '.</p>
</div>'."\n";
} elseif ($compteursujet > 1) {
echo '<span class="glyphicon glyphicon-star text-warning"></span> ' . _("The bests choices at this time are:") . '</p>' . $meilleursujet . '<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . ".\n";
echo '
<div class="col-sm-6 col-sm-offset-3 alert alert-success">
<p><span class="glyphicon glyphicon-star text-warning"></span> ' . _("The bests choices at this time are:") . '</p>
' . $meilleursujet . '
<p>' . _("with") . ' <b>' . $meilleurecolonne . '</b> ' . $vote_str . '.</p>
</div>'."\n";
}
echo '
</p></div>
</div>
<hr />';
// Comments
@ -635,7 +670,7 @@ $sql = $connect->Prepare($sql);
$comment_user=$connect->Execute($sql, array($numsondage));
if ($comment_user->RecordCount() != 0) {
echo '<div class="row"><h3>' . _("Comments of polled people") . '</h3>'."\n";
echo '<div><h3>' . _("Comments of polled people") . '</h3>'."\n";
while($dcomment = $comment_user->FetchNextObject(false)) {
echo '
@ -647,8 +682,10 @@ if ($comment_user->RecordCount() != 0) {
echo '</div>';
}
if ($dsondage->format!="A-" && $dsondage->format!="D-") {
echo '
<div class="row hidden-print alert alert-info">
<div class="hidden-print alert alert-info">
<div class="col-md-6 col-md-offset-3">
<fieldset id="add-comment"><legend>' . _("Add a comment in the poll") . '</legend>
<div class="form-group">
@ -661,10 +698,12 @@ echo '
<p class="text-center"><input type="submit" name="ajoutcomment" value="'. _("Send the comment") .'" class="btn btn-success"></p>
</fieldset>
</div>
</div>
</div>
</form>
<div class="clearfix"></div>
</div>';
}
<a id="bas"></a>';
echo '
</div>
</form>';
bandeau_pied();