diff --git a/README.md b/README.md index e7df137..798b3de 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ +[![](https://git.framasoft.org/assets/logo-black-f52905a40830b30aa287f784b537c823.png)](https://git.framasoft.org) + +![English:](http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/20px-Flag_of_the_United_Kingdom.svg.png) **Framasoft uses GitLab** for the development of its free softwares. Our Github repositories are only mirrors. +If you want to work with us, **fork us on [git.framasoft.org](https://git.framasoft.org)**. (no registration needed, you can sign in with your Github account) + +![Français :](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/20px-Flag_of_France.svg.png) **Framasoft utilise GitLab** pour le développement de ses logiciels libres. Nos dépôts Github ne sont que des mirroirs. +Si vous souhaitez travailler avec nous, **forkez-nous sur [git.framasoft.org](https://git.framasoft.org)**. (l'inscription n'est pas nécessaire, vous pouvez vous connecter avec votre compte Github) +* * * + Framadate est un fork du projet STUdS : https://sourcesup.cru.fr/projects/studs/ Framadate est le projet qui motorise framadate.org pour framasoft.org @@ -54,89 +63,89 @@ Fichiers de l'application ============================================================================= index.php - La page d'accueil de STUdS + La page d'accueil de STUdS studs.php - La page de présentation de sondage + La page de présentation de sondage adminstuds.php - La page d'administration réservée à l'auteur du sondage + La page d'administration réservée à l'auteur du sondage infos_sondage.php - La page (1/2) de création de sondage récupérant les informations générales + La page (1/2) de création de sondage récupérant les informations générales choix_date.php - La page de création (2/2) pour un sondage pour déterminer une date + La page de création (2/2) pour un sondage pour déterminer une date choix_autre.php - La page de création (2/2) pour un sondage sur un sujet quelconque + La page de création (2/2) pour un sondage sur un sujet quelconque creation_sondage.php - Le fichier qui récupérent les informations des pages précédentes pour procéder à l'insertion du nouveau sondage dans la base PostgreSQL + Le fichier qui récupérent les informations des pages précédentes pour procéder à l'insertion du nouveau sondage dans la base PostgreSQL style.css - Le fichier CSS de style pour toute l'application + Le fichier CSS de style pour toute l'application app/inc/constants.php - Le fichier contenant les constantes à changer en fonction de la machine locale + Le fichier contenant les constantes à changer en fonction de la machine locale app/inc/functions.php - Le fichier contenant quelques fonctions récurrentes de l'application + Le fichier contenant quelques fonctions récurrentes de l'application app/inc/i18n.php - Le fichier contenant quelques fonctions récurrentes de l'application relatives à l'internationalisation + Le fichier contenant quelques fonctions récurrentes de l'application relatives à l'internationalisation README - Ce fichier + Ce fichier INSTALL - Le fichier contenant les informations d'installation sur l'application + Le fichier contenant les informations d'installation sur l'application CHANGELOG - Le fichier contenant toutes les modifications de l'application entre les différentes versions + Le fichier contenant toutes les modifications de l'application entre les différentes versions contacts.php - La page permettant aux usagers de poser une question à l'administrateur de l'application + La page permettant aux usagers de poser une question à l'administrateur de l'application apropos.php - La page expliquant les détails techniques relatifs à l'application et les dernieres modifications et celles à venir sur l'application + La page expliquant les détails techniques relatifs à l'application et les dernieres modifications et celles à venir sur l'application bandeaux.php - Le fichier contenant tous les bandeaux des pages PHP de l'application + Le fichier contenant tous les bandeaux des pages PHP de l'application favicon.ico - L'icone de favoris de l'application + L'icone de favoris de l'application sources.php - La page qui propose les sources de l'application + La page qui propose les sources de l'application exportics.php - Le fichier d'export de la meilleure date au format iCAL (fichier .ICS) + Le fichier d'export de la meilleure date au format iCAL (fichier .ICS) exportcsv.php - Le fichier d'export de tous le tableau des participants avec leurs réponses dans un tableur (format .CSV) + Le fichier d'export de tous le tableau des participants avec leurs réponses dans un tableur (format .CSV) exportpdf.php - Le fichier d'export de la lettre de convocation que le créateur du sondage pourra envoyer aux participants (format .PDF) + Le fichier d'export de la lettre de convocation que le créateur du sondage pourra envoyer aux participants (format .PDF) admin/ - Le répertoire réservé à l'administrateur de l'application + Le répertoire réservé à l'administrateur de l'application admin/.htaccess - Le fichier gérant les droits restreints du répertoire ADMIN + Le fichier gérant les droits restreints du répertoire ADMIN admin/.htpasswd - Le fichier contenant les passwd des logins ayant accès au répertoire ADMIN + Le fichier contenant les passwd des logins ayant accès au répertoire ADMIN admin/index.php - La page présentant tous les sondages actuellement dans la base à l'administrateur + La page présentant tous les sondages actuellement dans la base à l'administrateur admin/log_studs.txt - Le fichier contenant un historique de toutes les creations/suppressions de sondage dans la base + Le fichier contenant un historique de toutes les creations/suppressions de sondage dans la base errors/ - Le répertoire contenant toutes les pages d'erreurs + Le répertoire contenant toutes les pages d'erreurs errors/error-forbidden.php - La page qui indique dans la charte graphique de l'application l'erreur "501 forbidden" + La page qui indique dans la charte graphique de l'application l'erreur "501 forbidden" errors/maintenance.php - La page qui indique que l'application est en maintenance temporaire + La page qui indique que l'application est en maintenance temporaire export/ - Le répertoire qui contient tous les exports ICS + Le répertoire qui contient tous les exports ICS iCalcreator/ - Le répertoire qui contient les librairies d'export en iCal + Le répertoire qui contient les librairies d'export en iCal php2pdf/ - Le répertoire qui contient les librairies d'export en PDF + Le répertoire qui contient les librairies d'export en PDF scripts/ - Le répertoire qui contient tous les scripts de l'application + Le répertoire qui contient tous les scripts de l'application sources/ - Le répertoire qui contient les sources de l'application disponible sur la page sources.php + Le répertoire qui contient les sources de l'application disponible sur la page sources.php locale/ - Le répertoire qui contient les fichiers de traduction modifiables (.po) et compilés (.mo) - au format gettext + Le répertoire qui contient les fichiers de traduction modifiables (.po) et compilés (.mo) + au format gettext ============================================================================= - Validations des pages + Validations des pages ============================================================================= Toutes les pages de STUdS sont validées HTML 4.01 Strict. diff --git a/adminstuds.php b/adminstuds.php index 0ed3d8a..fc2ffeb 100644 --- a/adminstuds.php +++ b/adminstuds.php @@ -149,7 +149,7 @@ $dsujet=$sujets->FetchObject(false); $dsondage=$sondage->FetchObject(false); if (isset($_POST["ajoutsujet"])) { - Utils::print_header(''); + Utils::print_header( _("Add a column") .' - ' . stripslashes( $dsondage->titre )); bandeau_titre(_("Make your polls")); @@ -206,7 +206,7 @@ if (isset($_POST["ajoutsujet"])) { } if (isset($_POST["suppressionsondage"])) { - Utils::print_header(''); + Utils::print_header( _("Confirm removal of your poll") .' - ' . stripslashes( $dsondage->titre )); bandeau_titre(_("Confirm removal of your poll")); @@ -241,7 +241,7 @@ if (isset($_POST["confirmesuppression"])) { _("Thanks for your confidence.") . "\n" . NOMAPPLICATION ); //affichage de l'ecran de confirmation de suppression de sondage - Utils::print_header(''); + Utils::print_header(_("Your poll has been removed!")); bandeau_titre(_("Make your polls")); @@ -639,6 +639,11 @@ if (isset($erreur_ajout_date) && $erreur_ajout_date) { $errors .= '
  • ' . _("The date is not correct !") . '
  • '; } +//Poll title, description and email values +$title = (isset($_POST["boutonnouveautitre"]) && Utils::issetAndNoEmpty('nouveautitre')) ? htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $dsondage->titre ); +$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 ); + if ($errors!='') { Utils::print_header(_("Error!")); bandeau_titre(_("Error!")); @@ -646,17 +651,12 @@ if ($errors!='') { echo '
    '."\n"; } else { - Utils::print_header(''); + Utils::print_header(_('Poll administration').' - '.$title); bandeau_titre(_("Make your polls")); // session_unset(); } -//Poll title, description and email values -$title = (isset($_POST["boutonnouveautitre"]) && Utils::issetAndNoEmpty('nouveautitre')) ? htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $dsondage->titre ); -$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 ); - echo '
    @@ -686,7 +686,7 @@ echo '
    - +

    '. _("Initiator of the poll") .'

    '.stripslashes($dsondage->nom_admin).'

    @@ -716,11 +716,11 @@ echo '
    - +
    - +
    @@ -763,12 +763,12 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { for ($i = 0; $i < count($toutsujet); $i++) { - $border[$i] = false; - $radio_title[$i] = strftime("%A %e %B %Y",$current); - // Current date $current = $toutsujet[$i]; + $border[$i] = false; + $radio_title[$i] = strftime("%A %e %B %Y",$current); + // Months $td_headers[$i] = 'M'.($i+1-$colspan_month); @@ -792,9 +792,9 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { } // Hours - if (strpos($dsujet->sujet,'@') !== false) { - $rbd = ($border[$i]) ? ' rbd' : ''; - $hour = substr($toutsujet[$i], strpos($toutsujet[$i], '@')-count($toutsujet[$i])+2); + $rbd = ($border[$i]) ? ' rbd' : ''; + if (strpos($current,'@') !== false) { + $hour = substr($current, strpos($current, '@')-count($current)+2); if ($hour != "") { $tr_hours .= ''.$hour.''; @@ -803,10 +803,12 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { } else { $tr_hours .= ''; } + } else { + $tr_hours .= ''; } // Remove col - $tr_add_remove_col .= ''; + $tr_add_remove_col .= (count($toutsujet) > 2 ) ? '' : ''; } @@ -860,6 +862,7 @@ echo '
    + '. $thead . ''; @@ -1012,7 +1015,7 @@ if (!$testligneamodifier=="true") { // Addition and Best choice //affichage de la ligne contenant les sommes de chaque colonne -$tr_addition = ''; +$tr_addition = ''; $tr_bestchoice = ''; $meilleurecolonne = 0; @@ -1032,25 +1035,23 @@ $tr_addition .= ''; $toutsujet = explode(",", $dsujet->sujet); $compteursujet = 0; -$meilleursujet = ''; +$meilleursujet = '
      '; for ($i = 0; $i < $nbcolonnes; $i++) { if (isset($somme[$i]) && $somme[$i] > 0 && $somme[$i] == $meilleurecolonne){ $tr_bestchoice .= '
    '; - $meilleursujet .= ', '; - if ($dsondage->format == "D" || $dsondage->format == "D+") { $meilleursujetexport = $toutsujet[$i]; if (strpos($toutsujet[$i], '@') !== false) { $toutsujetdate = explode("@", $toutsujet[$i]); - $meilleursujet .= strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1]; + $meilleursujet .= '
  • '.strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1].'
  • '; } else { - $meilleursujet .= strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]); + $meilleursujet .= '
  • '.strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]).'
  • '; } } else { - $meilleursujet.=$toutsujet[$i]; + $meilleursujet.= '
  • '.$toutsujet[$i].'
  • '; } $compteursujet++; @@ -1060,25 +1061,26 @@ for ($i = 0; $i < $nbcolonnes; $i++) { } $tr_bestchoice .= ''; -$meilleursujet = str_replace("°", "'", substr("$meilleursujet", 1)); +$meilleursujet = str_replace("°", "'", $meilleursujet).''; $vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote'); // Print Addition and Best choice echo $tr_addition."\n".$tr_bestchoice.'
    '._('Votes of the poll ').$title.'
    '. _("Addition") .'
    '. _("Addition") .'
    -
    -

    '."\n"; +

    '."\n"; if ($compteursujet == 1) { - echo ' ' . _("The best choice at this time is:") . ' ' . $meilleursujet . ' ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; + echo ' ' . _("The best choice at this time is:") . '

    ' . $meilleursujet . '

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; } elseif ($compteursujet > 1) { - echo ' ' . _("The bests choices at this time are:") . ' ' . $meilleursujet . ' ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; + echo ' ' . _("The bests choices at this time are:") . '

    ' . $meilleursujet . '

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; } -echo '

    - -
    +echo ' +

    +
    + +
    '."\n"; // Commments $sql = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment'; diff --git a/choix_date.php b/choix_date.php index 0700fc3..aefafbe 100644 --- a/choix_date.php +++ b/choix_date.php @@ -49,14 +49,19 @@ if (!Utils::issetAndNoEmpty('nom', $_SESSION) && !Utils::issetAndNoEmpty('adress $choixdate=''; if (Utils::issetAndNoEmpty('totalchoixjour', $_SESSION) === true) { for ($i = 0; $i < count($_SESSION["totalchoixjour"]); $i++) { - for ($j=0;$j< min(count($_SESSION['horaires'.$i]),12);$j++) { - if ($_SESSION['horaires'.$i][$j]!="") { - array_push($temp_results, $_SESSION["totalchoixjour"][$i].'@'.$_SESSION['horaires'.$i][$j]); - } else { - array_push($temp_results, $_SESSION["totalchoixjour"][$i]); + if(count($_SESSION['horaires'.$i])!=0) { + for ($j=0;$j< min(count($_SESSION['horaires'.$i]),12);$j++) { + if ($_SESSION['horaires'.$i][$j]!="") { + array_push($temp_results, $_SESSION["totalchoixjour"][$i].'@'.$_SESSION['horaires'.$i][$j]); + } else { + array_push($temp_results, $_SESSION["totalchoixjour"][$i]); + } } + } else { + array_push($temp_results, $_SESSION["totalchoixjour"][$i]); } } + } // Sort and remove doublons diff --git a/css/style.css b/css/style.css index d550347..7ab6f74 100644 --- a/css/style.css +++ b/css/style.css @@ -86,13 +86,6 @@ div.calendrier td.choisi { } /* */ -/* Paragraphe sous le sondage */ -p.affichageresultats{ - text-align: center; - font-family:arial; - font-size:13px; -} - /* Commentaires */ div.comment{ margin-top: 10px; @@ -134,12 +127,32 @@ header .lead { #admin-link, #public-link { cursor:text; } +.admin-link, .public-link, +.admin-link:hover, .public-link:hover { + color:#333; + text-decoration:none; + border:none; +} .jumbotron h2, .jumbotron .js-title { margin-bottom:20px; margin-top:0px; } +h3.control-label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700; + font-size: 14px; + line-height: 1.42857; +} + +caption { + padding: 0 10px 10px; + font-weight:bold; +} + /* adminstuds.php */ #title-form h2 .btn-edit, #email-form .btn-edit, diff --git a/studs.php b/studs.php index 1f62bb2..425ec85 100644 --- a/studs.php +++ b/studs.php @@ -211,16 +211,16 @@ if($err != 0) { die(); } } else { - Utils::print_header($dsondage->titre); + Utils::print_header(_('Poll').' - '.$dsondage->titre); bandeau_titre(_("Make your polls")); } -$titre=str_replace("\\","",$dsondage->titre); +$title=stripslashes(str_replace("\\","",$dsondage->titre)); echo '
    -

    '.stripslashes($titre).'

    +

    '.$title.'

    @@ -232,11 +232,11 @@ echo '
    - +

    '. _("Initiator of the poll") .'

    '.stripslashes($dsondage->nom_admin).'

    - +
    '."\n"; @@ -332,12 +332,12 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { for ($i = 0; $i < count($toutsujet); $i++) { - $border[$i] = false; - $radio_title[$i] = strftime("%A %e %B %Y",$current); - // Current date $current = $toutsujet[$i]; + $border[$i] = false; + $radio_title[$i] = strftime("%A %e %B %Y",$current); + // Months $td_headers[$i] = 'M'.($i+1-$colspan_month); @@ -361,9 +361,9 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { } // Hours - if (strpos($dsondage->sujet,'@') !== false) { - $rbd = ($border[$i]) ? ' rbd' : ''; - $hour = substr($toutsujet[$i], strpos($toutsujet[$i], '@')-count($toutsujet[$i])+2); + $rbd = ($border[$i]) ? ' rbd' : ''; + if (strpos($current,'@') !== false) { + $hour = substr($current, strpos($current, '@')-count($current)+2); if ($hour != "") { $tr_hours .= ''.$hour.''; @@ -372,6 +372,8 @@ if ($dsondage->format=="D"||$dsondage->format=="D+") { } else { $tr_hours .= ''; } + } else { + $tr_hours .= ''; } } @@ -415,6 +417,7 @@ echo '
    + '. $thead . ''; @@ -559,7 +562,7 @@ 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_addition = ''; $tr_bestchoice = ''; $meilleurecolonne = 0; @@ -579,25 +582,23 @@ $tr_addition .= ''; $toutsujet = explode(",", $dsondage->sujet); $compteursujet = 0; -$meilleursujet = ''; +$meilleursujet = '
      '; for ($i = 0; $i < $nbcolonnes; $i++) { if (isset($somme[$i]) && $somme[$i] > 0 && $somme[$i] == $meilleurecolonne){ $tr_bestchoice .= '
    '; - $meilleursujet .= ', '; - if ($dsondage->format == "D" || $dsondage->format == "D+") { $meilleursujetexport = $toutsujet[$i]; if (strpos($toutsujet[$i], '@') !== false) { $toutsujetdate = explode("@", $toutsujet[$i]); - $meilleursujet .= strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1]; + $meilleursujet .= '
  • '.strftime(_("%A, den %e. %B %Y"),$toutsujetdate[0]). ' - ' . $toutsujetdate[1].'
  • '; } else { - $meilleursujet .= strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]); + $meilleursujet .= '
  • '.strftime(_("%A, den %e. %B %Y"),$toutsujet[$i]).'
  • '; } } else { - $meilleursujet.=$toutsujet[$i]; + $meilleursujet.= '
  • '.$toutsujet[$i].'
  • '; } $compteursujet++; @@ -607,24 +608,26 @@ for ($i = 0; $i < $nbcolonnes; $i++) { } $tr_bestchoice .= ''; -$meilleursujet = str_replace("°", "'", substr("$meilleursujet", 1)); +$meilleursujet = str_replace("°", "'", $meilleursujet).''; $vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote'); // Print Addition and Best choice echo $tr_addition."\n".$tr_bestchoice.'
    '._('Votes of the poll ').$title.'
    '. _("Addition") .'
    '. _("Addition") .'
    -
    -

    '."\n"; +

    '."\n"; if ($compteursujet == 1) { - echo ' ' . _("The best choice at this time is:") . ' ' . $meilleursujet . ' ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; + echo ' ' . _("The best choice at this time is:") . '

    ' . $meilleursujet . '

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; } elseif ($compteursujet > 1) { - echo ' ' . _("The bests choices at this time are:") . ' ' . $meilleursujet . ' ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; + echo ' ' . _("The bests choices at this time are:") . '

    ' . $meilleursujet . '

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . ".\n"; } -echo '

    -
    '; +echo ' +

    +
    + +
    '; // Comments $sql = 'select * from comments where id_sondage='.$connect->Param('numsondage').' order by id_comment';