Merge pull request #44 from FramaJosephK/import-prod
Bugfix et reprises à partir de la version en prod
This commit is contained in:
commit
91a9af07bd
186
INSTALL
186
INSTALL
@ -1,186 +0,0 @@
|
||||
==========================================================================
|
||||
|
||||
Université de Strasbourg - Direction Informatique
|
||||
Auteur : Guilhem BORGHESI
|
||||
Création : Février 2008
|
||||
|
||||
borghesi@unistra.fr
|
||||
|
||||
Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
|
||||
respectant les principes de diffusion des logiciels libres. Vous pouvez
|
||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions
|
||||
de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA
|
||||
sur le site "http://www.cecill.info".
|
||||
|
||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
|
||||
pris connaissance de la licence CeCILL-B, et que vous en avez accepté les
|
||||
termes. Vous pouvez trouver une copie de la licence dans le fichier LICENCE.
|
||||
|
||||
==========================================================================
|
||||
|
||||
Université de Strasbourg - Direction Informatique
|
||||
Author : Guilhem BORGHESI
|
||||
Creation : Feb 2008
|
||||
|
||||
borghesi@unistra.fr
|
||||
|
||||
This software is governed by the CeCILL-B license under French law and
|
||||
abiding by the rules of distribution of free software. You can use,
|
||||
modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||
license as circulated by CEA, CNRS and INRIA at the following URL
|
||||
"http://www.cecill.info".
|
||||
|
||||
The fact that you are presently reading this means that you have had
|
||||
knowledge of the CeCILL-B license and that you accept its terms. You can
|
||||
find a copy of this license in the file LICENSE.
|
||||
|
||||
==========================================================================
|
||||
|
||||
|
||||
Paramètres
|
||||
==========
|
||||
|
||||
Le fichier app/inc/constants.php.template contient le paramétrage par défaut de
|
||||
l'application Framadate. Pour personnaliser votre installation, copiez
|
||||
ce fichier sous le nom app/inc/constants.php et modifiez ce dernier.
|
||||
|
||||
Configuration du fichier php.ini
|
||||
================================
|
||||
|
||||
Pour que les quotes simples soient acceptées dans la partie "Création de sondage", il faut que la variable magic_quotes_gpc soit activée ("On") dans le fichier php.ini.
|
||||
|
||||
|
||||
Base de données
|
||||
===============
|
||||
|
||||
STUdS fonctionne indépendemment de la base SQL utilisée, sous réserve que
|
||||
le serveur dispose de l'extension ADOdb (http://sourceforge.net/projects/adodb)
|
||||
|
||||
Cependant la base de donnée doit être créée au préalable.
|
||||
Deux scripts le faisant sont fournis :
|
||||
install.sql: pour postgresql
|
||||
install.mysql.sql: pour mysql
|
||||
|
||||
Pour postgresql :
|
||||
Après avoir renseigné les paramètres de la base de données, créez la
|
||||
base et pré-chargez les données par défaut. Ceci ressemble à :
|
||||
|
||||
% su - pgsql
|
||||
% createdb studs
|
||||
% psql -d studs -f install.sql
|
||||
|
||||
Attention : Si vous créez la base de données avec l'utilisateur "pgsql", il vous faudra faire un "grant all on <chaque table> to studs" pour donner les droits à l'utilisateur studs de lire et modifier la base. Les tables de l'applications sont décrites plus loin dans ce fichier dans la partie "Tables de la base de données".
|
||||
|
||||
|
||||
Accès à la page administrateur
|
||||
==============================
|
||||
|
||||
Le répertoire admin/ contient un fichier .htaccess pour Apache, qui restreint l'accès
|
||||
à la page d'administration de l'application.
|
||||
Modifiez le contenu de ce fichier .htaccess pour l'adapter au chemin du fichier .htpasswd
|
||||
sur votre serveur.
|
||||
Le fichier .htpasswd à besoin d'être créé par vos soins en utilisant par exemple la commande
|
||||
suivante :
|
||||
htpasswd -mnb <admin_username> <admin_password>
|
||||
|
||||
Un fichier admin/logs_studs.txt doit être créé et accessible en écriture
|
||||
par votre serveur Web. Quelque chose comme :
|
||||
|
||||
% touch admin/logs_studs.txt
|
||||
% chmod 700 admin/logs_studs.txt
|
||||
% chown www-data admin/logs_studs.txt
|
||||
|
||||
devrait convenir.
|
||||
|
||||
Maintenance
|
||||
===========
|
||||
Studs dispose d'une possibilité de mise en maintenance par le biais
|
||||
d'un fichier .htaccess.
|
||||
La section <Directory> relative à Studs, dans la configuration d'Apache
|
||||
doit au moins contenir :
|
||||
AllowOverride AuthConfig Options
|
||||
Le fichier .htaccess correspondant doit être modifier pour y configurer
|
||||
l'adresse IP depuis laquelle s'effectue la maintenance.
|
||||
N'oubliez pas de le recommenter en intégralité une fois la maintenance effectuée.
|
||||
|
||||
Tables de la base de données
|
||||
============================
|
||||
|
||||
Voici la structure des tables de l'application. La base se compose de trois tables :
|
||||
|
||||
- sondage : Le contenu de chacun des sondages,
|
||||
- sujet_studs : les sujets ou dates de tous les sondages,
|
||||
- user_studs : les identifiants des sondés de tous les sondages.
|
||||
|
||||
Chacune des tables contient les champs suivants :
|
||||
|
||||
SONDAGE
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
commentaires text commentaires liés au sondage
|
||||
mail_admin text adresse de l'auteur du sondage
|
||||
nom_admin text nom de l'auteur du sondage
|
||||
titre text titre du sondage
|
||||
id_sondage_admin alpha-numérique numéro du sondage pour le lien d'administration
|
||||
date_fin alpha-numérique date de fin su sondage au format SQL
|
||||
format text format du sondage : D/D+ pour Date, A/A+ pour Autre
|
||||
mailsonde text envoi de mail a l'auteur du sondage a chaque participation ("yes" ou vide)
|
||||
|
||||
SUJET_STUDS
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
sujet text tous les sujets du sondage
|
||||
|
||||
USER_STUDS
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
user text nom du participant
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
reponses text reponses a chacun des sujets proposés au vote (0 pour non, 1 pour OK)
|
||||
id_users alpha-numérique numéro d'utilisateur par ordre croissant de participation pour garder l'ordre de participation
|
||||
|
||||
COMMENTS
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
comment text commentaires d'un participant
|
||||
usercomment text nom de l'utilisateur qui laisse le commentaire
|
||||
id_comment alpha-numérique numéro de commentaire par ordre croissant de participation pour garder l'ordre de remplissage
|
||||
|
||||
|
||||
Traductions
|
||||
===========
|
||||
|
||||
Pour pouvoir bénéficier de toutes les traductions en FR, EN, DE et ES
|
||||
il faut avoir installé les locales fr_FR, de_DE, en_US et es_ES sur le
|
||||
serveur qui héberge l'application ainsi que disposer de l'extension PHP Gettext.
|
||||
|
||||
Export
|
||||
======
|
||||
|
||||
Pour pouvoir bénéficier de l'export au format PDF, l'extension PHP PEAR
|
||||
FPDF (php-fpdf) doit être installée.
|
||||
|
||||
Synthèses des librairies utilisées
|
||||
==================================
|
||||
|
||||
ADOdb
|
||||
http://sourceforge.net/projects/adodb
|
||||
paquet: php5-adodb
|
||||
|
||||
fpdf
|
||||
http://www.fpdf.org
|
||||
paquet: php-fpdf
|
||||
|
||||
gettext
|
||||
https://launchpad.net/php-gettext
|
||||
paquet: php-gettext
|
||||
|
||||
Sous GNU/Linux,
|
||||
disposer des locales utf-8 suivantes pour la glibc:
|
||||
FR, EN, ES, DE (/etc/locales.gen)
|
163
INSTALL.md
Normal file
163
INSTALL.md
Normal file
@ -0,0 +1,163 @@
|
||||
[![](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)
|
||||
* * *
|
||||
|
||||
![English:](http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/20px-Flag_of_the_United_Kingdom.svg.png)
|
||||
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](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://git.framasoft.org/framasoft/framadate)
|
||||
|
||||
![Français :](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/20px-Flag_of_France.svg.png)
|
||||
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](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://git.framasoft.org/framasoft/framadate)
|
||||
|
||||
* * *
|
||||
|
||||
#Avertissement
|
||||
**Les instructions contenues ci-dessous dans ce fichier ne sont pas actualisées.**
|
||||
Vous trouverez là :
|
||||
=> **[le tutoriel d'installation complet](http://framacloud.org/cultiver-son-jardin/installation-de-framadate/)**
|
||||
(en Français uniquement pour le moment)
|
||||
|
||||
* * *
|
||||
|
||||
##Paramètres
|
||||
|
||||
Le fichier app/inc/constants.php.template contient le paramétrage par défaut de
|
||||
l'application Framadate. Pour personnaliser votre installation, copiez
|
||||
ce fichier sous le nom app/inc/constants.php et modifiez ce dernier.
|
||||
|
||||
##Configuration du fichier php.ini
|
||||
|
||||
Pour que les quotes simples soient acceptées dans la partie "Création de sondage", il faut que la variable magic_quotes_gpc soit activée ("On") dans le fichier php.ini.
|
||||
|
||||
##Base de données
|
||||
|
||||
STUdS fonctionne indépendemment de la base SQL utilisée, sous réserve que
|
||||
le serveur dispose de l'extension [ADOdb](http://sourceforge.net/projects/adodb)
|
||||
|
||||
Cependant la base de donnée doit être créée au préalable.
|
||||
Deux scripts le faisant sont fournis :
|
||||
install.sql: pour postgresql
|
||||
install.mysql.sql: pour mysql
|
||||
|
||||
Pour postgresql :
|
||||
Après avoir renseigné les paramètres de la base de données, créez la
|
||||
base et pré-chargez les données par défaut. Ceci ressemble à :
|
||||
|
||||
% su - pgsql
|
||||
% createdb studs
|
||||
% psql -d studs -f install.sql
|
||||
|
||||
Attention : Si vous créez la base de données avec l'utilisateur "pgsql", il vous faudra faire un "grant all on <chaque table> to studs" pour donner les droits à l'utilisateur studs de lire et modifier la base. Les tables de l'applications sont décrites plus loin dans ce fichier dans la partie "Tables de la base de données".
|
||||
|
||||
|
||||
##Accès à la page administrateur
|
||||
|
||||
Le répertoire admin/ contient un fichier .htaccess pour Apache, qui restreint l'accès
|
||||
à la page d'administration de l'application.
|
||||
Modifiez le contenu de ce fichier .htaccess pour l'adapter au chemin du fichier .htpasswd
|
||||
sur votre serveur.
|
||||
Le fichier .htpasswd à besoin d'être créé par vos soins en utilisant par exemple la commande
|
||||
suivante :
|
||||
`htpasswd -mnb <admin_username> <admin_password>`
|
||||
|
||||
Un fichier `admin/logs_studs.txt` doit être créé et accessible en écriture
|
||||
par votre serveur Web. Quelque chose comme :
|
||||
|
||||
% touch admin/logs_studs.txt
|
||||
% chmod 700 admin/logs_studs.txt
|
||||
% chown www-data admin/logs_studs.txt
|
||||
|
||||
devrait convenir.
|
||||
|
||||
##Maintenance
|
||||
|
||||
Studs dispose d'une possibilité de mise en maintenance par le biais
|
||||
d'un fichier .htaccess.
|
||||
La section `<Directory>` relative à Studs, dans la configuration d'Apache
|
||||
doit au moins contenir :
|
||||
`AllowOverride AuthConfig Options`
|
||||
Le fichier .htaccess correspondant doit être modifier pour y configurer
|
||||
l'adresse IP depuis laquelle s'effectue la maintenance.
|
||||
N'oubliez pas de le recommenter en intégralité une fois la maintenance effectuée.
|
||||
|
||||
##Tables de la base de données
|
||||
|
||||
Voici la structure des tables de l'application. La base se compose de trois tables :
|
||||
|
||||
- sondage : Le contenu de chacun des sondages,
|
||||
- sujet_studs : les sujets ou dates de tous les sondages,
|
||||
- user_studs : les identifiants des sondés de tous les sondages.
|
||||
|
||||
Chacune des tables contient les champs suivants :
|
||||
|
||||
SONDAGE
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
commentaires text commentaires liés au sondage
|
||||
mail_admin text adresse de l'auteur du sondage
|
||||
nom_admin text nom de l'auteur du sondage
|
||||
titre text titre du sondage
|
||||
id_sondage_admin alpha-numérique numéro du sondage pour le lien d'administration
|
||||
date_fin alpha-numérique date de fin su sondage au format SQL
|
||||
format text format du sondage : D/D+ pour Date, A/A+ pour Autre
|
||||
mailsonde text envoi de mail a l'auteur du sondage a chaque participation ("yes" ou vide)
|
||||
|
||||
SUJET_STUDS
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
sujet text tous les sujets du sondage
|
||||
|
||||
USER_STUDS
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
user text nom du participant
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
reponses text reponses a chacun des sujets proposés au vote (0 pour non, 1 pour OK)
|
||||
id_users alpha-numérique numéro d'utilisateur par ordre croissant de participation pour garder l'ordre de participation
|
||||
|
||||
COMMENTS
|
||||
|
||||
Nom du champ format description
|
||||
|
||||
id_sondage (clé primaire) alpha-numérique numéro du sondage aléatoire
|
||||
comment text commentaires d'un participant
|
||||
usercomment text nom de l'utilisateur qui laisse le commentaire
|
||||
id_comment alpha-numérique numéro de commentaire par ordre croissant de participation pour garder l'ordre de remplissage
|
||||
|
||||
|
||||
##Traductions
|
||||
|
||||
Pour pouvoir bénéficier de toutes les traductions en FR, EN, DE et ES
|
||||
il faut avoir installé les locales fr_FR, de_DE, en_US et es_ES sur le
|
||||
serveur qui héberge l'application ainsi que disposer de l'extension PHP Gettext.
|
||||
|
||||
##Synthèses des librairies utilisées
|
||||
|
||||
[ADOdb](http://sourceforge.net/projects/adodb),
|
||||
paquet: php5-adodb
|
||||
|
||||
[gettext](https://launchpad.net/php-gettext),
|
||||
paquet: php-gettext
|
||||
|
||||
Sous GNU/Linux,
|
||||
disposer des locales utf-8 suivantes pour la glibc:
|
||||
FR, EN, ES, DE (/etc/locales.gen)
|
242
README.md
242
README.md
@ -1,185 +1,109 @@
|
||||
[![](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)
|
||||
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](http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt)
|
||||
|
||||
![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)
|
||||
Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
|
||||
Authors of Framadate/OpenSondate: [Framasoft](https://git.framasoft.org/framasoft/framadate)
|
||||
|
||||
![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)
|
||||
* * *
|
||||
![Français :](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/20px-Flag_of_France.svg.png)
|
||||
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](http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt)
|
||||
|
||||
Framadate est un fork du projet STUdS : https://sourcesup.cru.fr/projects/studs/
|
||||
Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
|
||||
Auteurs de Framadate/OpenSondage : [Framasoft](https://git.framasoft.org/framasoft/framadate)
|
||||
|
||||
Framadate est le projet qui motorise framadate.org pour framasoft.org
|
||||
* * *
|
||||
|
||||
Les auteurs principaux de Framadate sont :
|
||||
- Simon LEBLANC
|
||||
- Pierre-Yves GOSSET
|
||||
#Framadate
|
||||
[Framadate](https://framadate.org) est un fork du projet [STUdS](https://sourcesup.cru.fr/projects/studs/).
|
||||
Il est développé par l'association [Framasoft](http://framasoft.org).
|
||||
|
||||
Les auteurs principaux du projet STUdS sont :
|
||||
- Guilhem BORGHESI
|
||||
- Raphaël DROZ
|
||||
##Fichiers de l'application
|
||||
|
||||
### Administration
|
||||
* `/admin`
|
||||
Le répertoire réservé à l'administrateur de l'application
|
||||
* `admin/index.php`
|
||||
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
|
||||
|
||||
==========================================================================
|
||||
* `install/` (pas utilisé - en développement)
|
||||
Le répertoire qui contient les scripts chargés de simplifier la procédure d'installation
|
||||
* `scripts/` (pas utilisé)
|
||||
Le répertoire qui contient quelques vieux scripts pour la maintenance de l'application
|
||||
|
||||
Université de Strasbourg - Direction Informatique
|
||||
Auteur : Guilhem BORGHESI
|
||||
Création : Février 2008
|
||||
### Application
|
||||
* `app/inc/constants.php.template`
|
||||
Le fichier contenant les constantes à changer en fonction de la machine locale
|
||||
* `app/classes/Framadate/Utils.php`
|
||||
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
|
||||
* `app/inc/init.php`
|
||||
Le fichier qui charge les dépendances et ouvre la connexion à la base de données
|
||||
|
||||
borghesi@unistra.fr
|
||||
* `css/`
|
||||
Les fichiers CSS de l'application (dont ceux de Bootstrap)
|
||||
* `fonts/`
|
||||
Les fichiers des icônes de Bootstrap
|
||||
* `images/`
|
||||
Logo et images de la page d'accueil
|
||||
* `js/`
|
||||
Les fichiers javascript de l'application (dont ceux de Bootstrap et de jQuery)
|
||||
|
||||
Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
|
||||
respectant les principes de diffusion des logiciels libres. Vous pouvez
|
||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions
|
||||
de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA
|
||||
sur le site "http://www.cecill.info".
|
||||
|
||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
|
||||
pris connaissance de la licence CeCILL-B, et que vous en avez accepté les
|
||||
termes. Vous pouvez trouver une copie de la licence dans le fichier LICENCE.
|
||||
|
||||
==========================================================================
|
||||
|
||||
Université de Strasbourg - Direction Informatique
|
||||
Author : Guilhem BORGHESI
|
||||
Creation : Feb 2008
|
||||
|
||||
borghesi@unistra.fr
|
||||
|
||||
This software is governed by the CeCILL-B license under French law and
|
||||
abiding by the rules of distribution of free software. You can use,
|
||||
modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||
license as circulated by CEA, CNRS and INRIA at the following URL
|
||||
"http://www.cecill.info".
|
||||
|
||||
The fact that you are presently reading this means that you have had
|
||||
knowledge of the CeCILL-B license and that you accept its terms. You can
|
||||
find a copy of this license in the file LICENSE.
|
||||
|
||||
==========================================================================
|
||||
|
||||
=============================================================================
|
||||
Fichiers de l'application
|
||||
=============================================================================
|
||||
|
||||
index.php
|
||||
La page d'accueil de STUdS
|
||||
studs.php
|
||||
La page de présentation de sondage
|
||||
adminstuds.php
|
||||
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
|
||||
choix_date.php
|
||||
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
|
||||
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
|
||||
style.css
|
||||
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
|
||||
app/inc/functions.php
|
||||
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
|
||||
README
|
||||
Ce fichier
|
||||
INSTALL
|
||||
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
|
||||
contacts.php
|
||||
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
|
||||
bandeaux.php
|
||||
Le fichier contenant tous les bandeaux des pages PHP de l'application
|
||||
favicon.ico
|
||||
L'icone de favoris de l'application
|
||||
sources.php
|
||||
La page qui propose les sources de l'application
|
||||
exportics.php
|
||||
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)
|
||||
exportpdf.php
|
||||
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
|
||||
admin/.htaccess
|
||||
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
|
||||
admin/index.php
|
||||
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
|
||||
|
||||
errors/
|
||||
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"
|
||||
errors/maintenance.php
|
||||
La page qui indique que l'application est en maintenance temporaire
|
||||
|
||||
export/
|
||||
Le répertoire qui contient tous les exports ICS
|
||||
|
||||
iCalcreator/
|
||||
Le répertoire qui contient les librairies d'export en iCal
|
||||
|
||||
php2pdf/
|
||||
Le répertoire qui contient les librairies d'export en PDF
|
||||
|
||||
scripts/
|
||||
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
|
||||
|
||||
locale/
|
||||
* `locale/`
|
||||
Le répertoire qui contient les fichiers de traduction modifiables (.po) et compilés (.mo)
|
||||
au format gettext
|
||||
|
||||
=============================================================================
|
||||
Validations des pages
|
||||
=============================================================================
|
||||
* `index.php`
|
||||
La page d'accueil de STUdS
|
||||
* `studs.php`
|
||||
La page de présentation de sondage
|
||||
* `adminstuds.php`
|
||||
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
|
||||
* `choix_date.php`
|
||||
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
|
||||
* `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
|
||||
|
||||
Toutes les pages de STUdS sont validées HTML 4.01 Strict.
|
||||
La CSS de STUdS est validée CSS 2.1.
|
||||
* `bandeaux.php`
|
||||
Le fichier contenant les éléments de l'entête et du pied de page de l'application
|
||||
* `exportcsv.php`
|
||||
Le fichier d'export de tous le tableau des participants avec leurs réponses dans un tableur (format .CSV)
|
||||
* `favicon.ico`
|
||||
L'icone de favoris de l'application
|
||||
|
||||
=============================================================================
|
||||
Technologies utilisées
|
||||
=============================================================================
|
||||
### Infos
|
||||
* `AUTHORS.md`
|
||||
Liste des principaux développeurs du logiciel
|
||||
* `README.md`
|
||||
Ce fichier
|
||||
* `INSTALL.md`
|
||||
Le fichier contenant les informations d'installation sur l'application
|
||||
* `CHANGELOG.md`
|
||||
Le fichier contenant la liste des principale modifications de l'application entre les différentes versions
|
||||
|
||||
##Technologies utilisées
|
||||
|
||||
- PHP 5.4.4, php-fpdf, php-adodb, php-gettext
|
||||
- PostgreSQL, mysql
|
||||
- Apache
|
||||
- iCalcreator
|
||||
- PHP 5.4.4, php-adodb, php-gettext, composer
|
||||
- Bootstrap, jQuery, Bootstrap Datepicker
|
||||
- MySQL
|
||||
- Nginx, Apache
|
||||
- POedit
|
||||
- Icônes : Deleket (http://deleket.deviantart.com/) et DryIcons (http://dryicons.com)
|
||||
|
||||
=============================================================================
|
||||
Compatibilités des navigateurs
|
||||
Dernière mise à jour le 21 avril 2014
|
||||
=============================================================================
|
||||
##Compatibilités des navigateurs
|
||||
(Dernière mise à jour le 21 avril 2014)
|
||||
|
||||
- Firefox : Ubuntu 13.10/FF28
|
||||
- Chrome : Ubuntu 13.10/Chromium33
|
||||
- Opera (non testé)
|
||||
- Konqueror
|
||||
- Links (non testé, inutile)
|
||||
- Safari (non testé)
|
||||
- IE : Win7/IE9
|
||||
|
||||
-----------------
|
||||
Janvier 2008
|
||||
Guilhem BORGHESI
|
||||
Université de Strasbourg
|
||||
|
||||
Mai 2010
|
||||
Raphaël DROZ, raphael.droz@gmail.com
|
||||
|
||||
|
@ -27,10 +27,10 @@ include_once __DIR__ . '/../bandeaux.php';
|
||||
// de l'application.
|
||||
|
||||
// Affichage des balises standards
|
||||
Utils::print_header( _('Polls administrator') );
|
||||
bandeau_titre(_('Polls administrator'));
|
||||
Utils::print_header( _("Polls administrator") );
|
||||
bandeau_titre(_("Polls administrator"));
|
||||
|
||||
$sondage=$connect->Execute('SELECT * FROM sondage');
|
||||
$sondage=$connect->Execute("select * from sondage");
|
||||
|
||||
echo'
|
||||
<form action="' . Utils::get_server_name() . 'admin/index.php" method="POST">'."\n";
|
||||
@ -40,15 +40,15 @@ while($dsondage = $sondage->FetchNextObject(false)) {
|
||||
echo '
|
||||
<div class="alert alert-warning text-center">
|
||||
<h3>'. _("Confirm removal of the poll ") .'"'.$dsondage->id_sondage.'</h3>
|
||||
<p><button class="btn btn-default" type="submit" value="1" name="annullesuppression">'._('Keep this poll!').'</button>
|
||||
<button type="submit" name="confirmesuppression'.$dsondage->id_sondage.'" value="1" class="btn btn-danger">'._('Remove this poll!').'</button></p>
|
||||
<p><button class="btn btn-default" type="submit" value="1" name="annullesuppression">'._("Keep this poll!").'</button>
|
||||
<button type="submit" name="confirmesuppression'.$dsondage->id_sondage.'" value="1" class="btn btn-danger">'._("Remove this poll!").'</button></p>
|
||||
</div>';
|
||||
}
|
||||
|
||||
// Traitement de la confirmation de suppression
|
||||
if (Utils::issetAndNoEmpty('confirmesuppression'.$dsondage->id_sondage) === true) {
|
||||
// On inclut la routine de suppression
|
||||
$date = date('H:i:s d/m/Y');
|
||||
$date=date('H:i:s d/m/Y');
|
||||
|
||||
if (Utils::remove_sondage($connect, $dsondage->id_sondage)) {
|
||||
// ecriture des traces dans le fichier de logs
|
||||
@ -57,7 +57,7 @@ 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');
|
||||
$sondage=$connect->Execute("select * from sondage WHERE date_fin > DATE_SUB(now(), INTERVAL 3 MONTH) ORDER BY date_fin ASC");
|
||||
$nbsondages=$sondage->RecordCount();
|
||||
|
||||
$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>' : '';
|
||||
@ -67,24 +67,24 @@ echo '<p>' . $nbsondages. ' ' . _("polls in the database at this time") . $btn_l
|
||||
// tableau qui affiche tous les sondages de la base
|
||||
echo '<table class="table table-bordered">
|
||||
<tr align="center">
|
||||
<th scope="col">'. _('Poll ID') .'</th>
|
||||
<th scope="col">'. _('Format') .'</th>
|
||||
<th scope="col">'. _('Title') .'</th>
|
||||
<th scope="col">'. _('Author') .'</th>
|
||||
<th scope="col">'. _('Email') .'</th>
|
||||
<th scope="col">'. _('Expiration\'s date') .'</th>
|
||||
<th scope="col">'. _('Users') .'</th>
|
||||
<th scope="col" colspan="3">'. _('Actions') .'</th>
|
||||
<th scope="col">'. _("Poll ID") .'</th>
|
||||
<th scope="col">'. _("Format") .'</th>
|
||||
<th scope="col">'. _("Title") .'</th>
|
||||
<th scope="col">'. _("Author") .'</th>
|
||||
<th scope="col">'. _("Email") .'</th>
|
||||
<th scope="col">'. _("Expiration's date") .'</th>
|
||||
<th scope="col">'. _("Users") .'</th>
|
||||
<th scope="col" colspan="3">'. _("Actions") .'</th>
|
||||
</tr>'."\n";
|
||||
|
||||
$i = 0;
|
||||
while($dsondage = $sondage->FetchNextObject(false)) {
|
||||
/* possible en 1 bonne requête dans $sondage */
|
||||
$subjects = $connect->Execute("SELECT * FROM sujet_studs WHERE id_sondage='$dsondage->id_sondage'");
|
||||
$dsujets = $subjects->FetchObject(false);
|
||||
$sujets=$connect->Execute( "select * from sujet_studs where id_sondage='$dsondage->id_sondage'");
|
||||
$dsujets=$sujets->FetchObject(false);
|
||||
|
||||
$user_studs = $connect->Execute("SELECT * from user_studs WHERE id_sondage='$dsondage->id_sondage'");
|
||||
$nb_users = $user_studs->RecordCount();
|
||||
$user_studs=$connect->Execute( "select * from user_studs where id_sondage='$dsondage->id_sondage'");
|
||||
$nbuser=$user_studs->RecordCount();
|
||||
|
||||
echo '
|
||||
<tr align="center">
|
||||
@ -95,26 +95,21 @@ while($dsondage = $sondage->FetchNextObject(false)) {
|
||||
<td>'.stripslashes($dsondage->mail_admin).'</td>';
|
||||
|
||||
if (strtotime($dsondage->date_fin) > time()) {
|
||||
echo '<td>'.date('d/m/y', strtotime($dsondage->date_fin)).'</td>';
|
||||
echo '
|
||||
<td>'.date("d/m/y",strtotime($dsondage->date_fin)).'</td>';
|
||||
} else {
|
||||
echo '<td><span class="text-danger">'
|
||||
. date('d/m/y', strtotime($dsondage->date_fin))
|
||||
. '</span></td>';
|
||||
echo '
|
||||
<td><span class="text-danger">'.date("d/m/y",strtotime($dsondage->date_fin)).'</span></td>';
|
||||
}
|
||||
echo '
|
||||
<td>'.$nb_users.'</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>
|
||||
<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><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;
|
||||
$i++;
|
||||
}
|
||||
|
||||
echo '</table></form>'."\n";
|
||||
|
||||
bandeau_pied(true);
|
||||
|
||||
// si on annule la suppression, rafraichissement de la page
|
||||
/*if (Utils::issetAndNoEmpty('annulesuppression') === true) {
|
||||
// TODO
|
||||
}*/
|
||||
|
385
adminstuds.php
385
adminstuds.php
@ -29,51 +29,15 @@ if (file_exists('bandeaux_local.php')) {
|
||||
include_once('bandeaux.php');
|
||||
}
|
||||
|
||||
function getChoicesFromPOST($nbColumns)
|
||||
{
|
||||
$choices = array();
|
||||
for ($i=0; $i < $nbColumns; ++$i) {
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
if (isset($_POST['choix'. $i])) {
|
||||
$choices[] = $_POST['choix'. $i];
|
||||
}
|
||||
}
|
||||
return $choices;
|
||||
}
|
||||
|
||||
function getNewChoiceFromChoices($choices)
|
||||
{
|
||||
if(!is_array($choice)) {
|
||||
/* throw new Exception('$choices must be a an array');
|
||||
PHP Fatal error: Class 'Framadate\Exception' not found */
|
||||
}
|
||||
|
||||
$newChoice = '';
|
||||
foreach ($choices as $choice) {
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
switch ($choice) {
|
||||
case 1: $newChoice .= '1'; break;
|
||||
case 2: $newChoice .= '2'; break;
|
||||
default: $newChoice .= '0';
|
||||
}
|
||||
}
|
||||
return $newChoice;
|
||||
}
|
||||
|
||||
function getNewChoiceFromPOST($nbColumns)
|
||||
{
|
||||
return getNewChoiceFromChoices(getChoicesFromPOST($nbColumns));
|
||||
}
|
||||
|
||||
// Initialisation des variables
|
||||
$numsondageadmin = false;
|
||||
$sondage = false;
|
||||
|
||||
// recuperation du numero de sondage admin (24 car.) dans l'URL
|
||||
if (Utils::issetAndNoEmpty('sondage', $_GET) && is_string($_GET['sondage']) && strlen($_GET['sondage']) === 24) {
|
||||
$numsondageadmin = $_GET['sondage'];
|
||||
$numsondageadmin=$_GET["sondage"];
|
||||
//on découpe le résultat pour avoir le numéro de sondage (16 car.)
|
||||
$numsondage = substr($numsondageadmin, 0, 16);
|
||||
$numsondage=substr($numsondageadmin, 0, 16);
|
||||
}
|
||||
|
||||
if (preg_match(";[\w\d]{24};i", $numsondageadmin)) {
|
||||
@ -86,7 +50,7 @@ if (preg_match(";[\w\d]{24};i", $numsondageadmin)) {
|
||||
$sql = $connect->Prepare($sql);
|
||||
$sujets = $connect->Execute($sql, array($numsondage));
|
||||
|
||||
$sql = 'SELECT * FROM user_studs WHERE id_sondage = '.$connect->Param('numsondage').' ORDER BY id_users';
|
||||
$sql = 'SELECT * FROM user_studs WHERE id_sondage = '.$connect->Param('numsondage').' order by id_users';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$user_studs = $connect->Execute($sql, array($numsondage));
|
||||
}
|
||||
@ -121,22 +85,22 @@ function send_mail_admin() {
|
||||
global $poll_title;
|
||||
global $numsondageadmin;
|
||||
global $smtp_allowed;
|
||||
if($smtp_allowed == true) {
|
||||
if(!isset($_SESSION['mail_admin_sent'])) {
|
||||
if($smtp_allowed==true){
|
||||
if(!isset($_SESSION["mail_admin_sent"])) {
|
||||
Utils::sendEmail( $email_admin,
|
||||
_("[ADMINISTRATOR] New settings for your poll") . ' ' . stripslashes( $poll_title ),
|
||||
_('You have changed the settings of your poll. \nYou can modify this poll with this link') .
|
||||
_("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
|
||||
_("Thanks for your confidence.") . "\n" . NOMAPPLICATION
|
||||
);
|
||||
$_SESSION['mail_admin_sent']=true;
|
||||
$_SESSION["mail_admin_sent"]=true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//si la valeur du nouveau titre est valide et que le bouton est activé
|
||||
if (isset($_POST['boutonnouveautitre'])) {
|
||||
if (isset($_POST["boutonnouveautitre"])) {
|
||||
if (Utils::issetAndNoEmpty('nouveautitre') === false) {
|
||||
$err |= TITLE_EMPTY;
|
||||
} else {
|
||||
@ -191,9 +155,12 @@ if (isset($_POST["boutonnouvelleadresse"])) {
|
||||
//New poll rules
|
||||
if (isset($_POST["btn_poll_rules"])) {
|
||||
echo '<!-- '; print_r($_POST); echo ' -->';
|
||||
$new_poll_rules = substr($dsondage->format, 0, 1);
|
||||
if($_POST['poll_rules'] == '+' || $_POST['poll_rules'] == '-') {
|
||||
$new_poll_rules .= $_POST['poll_rules'];
|
||||
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
|
||||
@ -210,10 +177,10 @@ if (isset($_POST["btn_poll_rules"])) {
|
||||
$dsujet=$sujets->FetchObject(false);
|
||||
$dsondage=$sondage->FetchObject(false);
|
||||
|
||||
if (isset($_POST['ajoutsujet'])) {
|
||||
Utils::print_header( _('Add a column') .' - ' . stripslashes( $dsondage->titre ));
|
||||
if (isset($_POST["ajoutsujet"])) {
|
||||
Utils::print_header( _("Add a column") .' - ' . stripslashes( $dsondage->titre ));
|
||||
|
||||
bandeau_titre(_('Make your polls'));
|
||||
bandeau_titre(_("Make your polls"));
|
||||
|
||||
//on recupere les données et les sujets du sondage
|
||||
|
||||
@ -234,14 +201,14 @@ if (isset($_POST['ajoutsujet'])) {
|
||||
} else {
|
||||
//ajout d'une date avec creneau horaire
|
||||
echo '
|
||||
<p>'. _('You can add a new scheduling date to your poll.').'<br />'._('If you just want to add a new hour to an existant date, put the same date and choose a new hour.') .'</p>
|
||||
<p>'. _("You can add a new scheduling date to your poll.").'<br />'._("If you just want to add a new hour to an existant date, put the same date and choose a new hour.") .'</p>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="newdate" class="col-md-4">'. _("Day") .'</label>
|
||||
<div class="col-md-8">
|
||||
<div class="input-group date">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
|
||||
<input type="text" id="newdate" data-date-format="'. _('dd/mm/yyyy') .'" aria-describedby="dateformat" name="newdate" class="form-control" placeholder="'. _("dd/mm/yyyy") .'" />
|
||||
<input type="text" id="newdate" data-date-format="'. _("dd/mm/yyyy") .'" aria-describedby="dateformat" name="newdate" class="form-control" placeholder="'. _("dd/mm/yyyy") .'" />
|
||||
</div>
|
||||
<span id="dateformat" class="sr-only">'. _("(dd/mm/yyyy)") .'</span>
|
||||
</div>
|
||||
@ -276,8 +243,8 @@ if (isset($_POST["suppressionsondage"])) {
|
||||
<form name="formulaire" action="' . Utils::getUrlSondage($numsondageadmin, true) . '" method="POST">
|
||||
<div class="alert alert-warning text-center">
|
||||
<h2>' . _("Confirm removal of your poll") . '</h2>
|
||||
<p><button class="btn btn-default" type="submit" value="" name="annullesuppression">'._('Keep this poll!').'</button>
|
||||
<button type="submit" name="confirmesuppression" value="" class="btn btn-danger">'._('Remove this poll!').'</button></p>
|
||||
<p><button class="btn btn-default" type="submit" value="" name="annullesuppression">'._("Keep this poll!").'</button>
|
||||
<button type="submit" name="confirmesuppression" value="" class="btn btn-danger">'._("Remove this poll!").'</button></p>
|
||||
</div>
|
||||
</form>';
|
||||
|
||||
@ -314,11 +281,11 @@ if (isset($_POST["confirmesuppression"])) {
|
||||
//affichage de l'ecran de confirmation de suppression de sondage
|
||||
Utils::print_header(_("Your poll has been removed!"));
|
||||
|
||||
bandeau_titre(_('Make your polls'));
|
||||
bandeau_titre(_("Make your polls"));
|
||||
|
||||
echo '
|
||||
<div class="alert alert-success text-center">
|
||||
<h2>' . _('Your poll has been removed!') . '</h2>
|
||||
<h2>' . _("Your poll has been removed!") . '</h2>
|
||||
<p>' . _('Back to the homepage of ') . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a></p>
|
||||
</div>
|
||||
</form>'."\n";
|
||||
@ -353,7 +320,7 @@ if (isset($_POST['ajoutcomment'])) {
|
||||
while ( $dcomment_user_doublon=$comment_user_doublon->FetchNextObject(false)) {
|
||||
if($dcomment_user_doublon->comment == $comment && $dcomment_user_doublon->usercomment == $comment_user) {
|
||||
$comment_doublon = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -375,20 +342,31 @@ if (isset($_POST['ajoutcomment'])) {
|
||||
$nbcolonnes = substr_count($dsujet->sujet, ',') + 1;
|
||||
$nblignes = $user_studs->RecordCount();
|
||||
|
||||
//s'il n'y a pas suppression alors on peut afficher normalement le tableau
|
||||
//si il n'y a pas suppression alors on peut afficher normalement le tableau
|
||||
|
||||
//action si le bouton participer est cliqué
|
||||
if (isset($_POST["boutonp"])) {
|
||||
//si on a un nom dans la case texte
|
||||
if (Utils::issetAndNoEmpty('nom')){
|
||||
$nouveauchoix = getNewChoiceFromPOST($nbcolonnes);
|
||||
$nouveauchoix = '';
|
||||
$erreur_prenom = false;
|
||||
|
||||
$nom = htmlentities(html_entity_decode($_POST['nom'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
|
||||
for ($i=0;$i<$nbcolonnes;$i++){
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
if (isset($_POST["choix$i"])) {
|
||||
switch ($_POST["choix$i"]) {
|
||||
case 1: $nouveauchoix .= "1";break;
|
||||
case 2: $nouveauchoix .= "2";break;
|
||||
default: $nouveauchoix .= "0";break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$nom = htmlentities(html_entity_decode($_POST["nom"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
|
||||
|
||||
while($user = $user_studs->FetchNextObject(false)) {
|
||||
if ($nom == $user->nom) {
|
||||
$erreur_prenom = 'yes';
|
||||
if ($nom == $user->nom){
|
||||
$erreur_prenom="yes";
|
||||
}
|
||||
}
|
||||
|
||||
@ -407,12 +385,12 @@ if (isset($_POST["boutonp"])) {
|
||||
|
||||
|
||||
//action quand on ajoute une colonne au format AUTRE
|
||||
if (isset($_POST['ajoutercolonne']) && Utils::issetAndNoEmpty('nouvellecolonne') && (substr($dsondage->format, 0, 1) == '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
|
||||
$nouveauxsujets .= ',';
|
||||
$nouveauxsujets .= str_replace(',', ' ', $_POST['nouvellecolonne']);
|
||||
$nouveauxsujets.=",";
|
||||
$nouveauxsujets.=str_replace(","," ",$_POST["nouvellecolonne"]);
|
||||
$nouveauxsujets = htmlentities(html_entity_decode($nouveauxsujets, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
|
||||
|
||||
//mise a jour avec les nouveaux sujets dans la base
|
||||
@ -423,20 +401,21 @@ if (isset($_POST['ajoutercolonne']) && Utils::issetAndNoEmpty('nouvellecolonne')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$erreur_ajout_date = false;
|
||||
//action quand on ajoute une colonne au format DATE
|
||||
if (isset($_POST['ajoutercolonne']) && (substr($dsondage->format, 0, 1) == 'D')) {
|
||||
if (isset($_POST["ajoutercolonne"]) && (substr($dsondage->format, 0, 1) == "D")) {
|
||||
$nouveauxsujets=$dsujet->sujet;
|
||||
|
||||
if (isset($_POST['newdate']) && $_POST['newdate'] != 'vide') {
|
||||
$nouvelledate = mktime(0, 0, 0, substr($_POST['newdate'],3,2), substr($_POST['newdate'],0,2), substr($_POST['newdate'],6,4));
|
||||
if (isset($_POST["newdate"]) && $_POST["newdate"] != "") {
|
||||
$nouvelledate=mktime(0, 0, 0, substr($_POST["newdate"],3,2), substr($_POST["newdate"],0,2), substr($_POST["newdate"],6,4));
|
||||
|
||||
if (isset($_POST['newhour']) && $_POST['newhour'] != 'vide') {
|
||||
$nouvelledate .= '@' . $_POST['newhour'];
|
||||
if (isset($_POST["newhour"]) && $_POST["newhour"]!=""){
|
||||
$nouvelledate.="@";
|
||||
$nouvelledate.=$_POST["newhour"];
|
||||
}
|
||||
|
||||
//on rajoute la valeur dans les valeurs
|
||||
$datesbase = explode(',', $dsujet->sujet);
|
||||
$datesbase = explode(",",$dsujet->sujet);
|
||||
$taillebase = sizeof($datesbase);
|
||||
|
||||
//recherche de l'endroit de l'insertion de la nouvelle date dans les dates deja entrées dans le tableau
|
||||
@ -445,7 +424,7 @@ if (isset($_POST['ajoutercolonne']) && (substr($dsondage->format, 0, 1) == 'D'))
|
||||
} elseif ($nouvelledate > $datesbase[$taillebase-1]) {
|
||||
$cleinsertion = count($datesbase);
|
||||
} else {
|
||||
for ($i = 0; $i < count($datesbase); ++$i) {
|
||||
for ($i = 0; $i < count($datesbase); $i++) {
|
||||
$j = $i + 1;
|
||||
if ($nouvelledate > $datesbase[$i] && $nouvelledate < $datesbase[$j]) {
|
||||
$cleinsertion = $j;
|
||||
@ -456,25 +435,26 @@ if (isset($_POST['ajoutercolonne']) && (substr($dsondage->format, 0, 1) == 'D'))
|
||||
array_splice($datesbase, $cleinsertion, 0, $nouvelledate);
|
||||
$cle = array_search($nouvelledate, $datesbase);
|
||||
$dateinsertion = '';
|
||||
for ($i = 0; $i < count($datesbase); ++$i) {
|
||||
$dateinsertion .= ',' . $datesbase[$i];
|
||||
for ($i = 0; $i < count($datesbase); $i++) {
|
||||
$dateinsertion.=",";
|
||||
$dateinsertion.=$datesbase[$i];
|
||||
}
|
||||
|
||||
$dateinsertion = substr($dateinsertion, 1);
|
||||
$dateinsertion = substr("$dateinsertion", 1);
|
||||
|
||||
//mise a jour avec les nouveaux sujets dans la base
|
||||
//if (isset($erreur_ajout_date) && !$erreur_ajout_date){
|
||||
$sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('dateinsertion').' WHERE id_sondage = '.$connect->Param('numsondage');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($dateinsertion, $numsondage));
|
||||
|
||||
$sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('dateinsertion').' WHERE id_sondage = '.$connect->Param('numsondage');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($dateinsertion, $numsondage));
|
||||
|
||||
if ($nouvelledate > strtotime($dsondage->date_fin)) {
|
||||
$date_fin=$nouvelledate+200000;
|
||||
$sql = 'UPDATE sondage SET date_fin = '.$connect->Param('date_fin').' WHERE id_sondage = '.$connect->Param('numsondage');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($date_fin, $numsondage));
|
||||
}
|
||||
//}
|
||||
/* Doesn't work → 30/11/-0001
|
||||
if ($nouvelledate > strtotime($dsondage->date_fin)) {
|
||||
$date_fin=$nouvelledate+200000;
|
||||
$sql = 'UPDATE sondage SET date_fin = '.$connect->Param('date_fin').' WHERE id_sondage = '.$connect->Param('numsondage');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($date_fin, $numsondage));
|
||||
}*/
|
||||
|
||||
//mise a jour des reponses actuelles correspondant au sujet ajouté
|
||||
$sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users='.$connect->Param('id_users');
|
||||
@ -484,19 +464,19 @@ if (isset($_POST['ajoutercolonne']) && (substr($dsondage->format, 0, 1) == 'D'))
|
||||
$newcar = '';
|
||||
|
||||
//parcours de toutes les réponses actuelles
|
||||
for ($j = 0; $j < $nbcolonnes; ++$j) {
|
||||
$car = substr($ensemblereponses,$j,1);
|
||||
for ($j = 0; $j < $nbcolonnes; $j++) {
|
||||
$car=substr($ensemblereponses,$j,1);
|
||||
|
||||
//si les reponses ne concerne pas la colonne ajoutée, on concatene
|
||||
if ($j == $cle) {
|
||||
$newcar.='0';
|
||||
if ($j==$cle) {
|
||||
$newcar.="0";
|
||||
}
|
||||
|
||||
$newcar .= $car;
|
||||
$newcar.=$car;
|
||||
}
|
||||
|
||||
//mise a jour des reponses utilisateurs dans la base
|
||||
if (isset($erreur_ajout_date) && !$erreur_ajout_date) {
|
||||
if (isset($erreur_ajout_date) && !$erreur_ajout_date){
|
||||
$connect->Execute($sql, array($newcar, $data->nom, $data->id_users));
|
||||
}
|
||||
}
|
||||
@ -505,24 +485,24 @@ if (isset($_POST['ajoutercolonne']) && (substr($dsondage->format, 0, 1) == 'D'))
|
||||
send_mail_admin();
|
||||
|
||||
} else {
|
||||
$erreur_ajout_date = 'yes';
|
||||
$erreur_ajout_date = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//suppression de ligne dans la base
|
||||
for ($i = 0; $i < $nblignes; ++$i) {
|
||||
if (isset($_POST['effaceligne'. $i])) {
|
||||
$compteur = 0;
|
||||
for ($i = 0; $i < $nblignes; $i++) {
|
||||
if (isset($_POST["effaceligne$i"])) {
|
||||
$compteur=0;
|
||||
$sql = 'DELETE FROM user_studs WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users');
|
||||
$sql = $connect->Prepare($sql);
|
||||
|
||||
while ($data=$user_studs->FetchNextObject(false)) {
|
||||
if ($compteur == $i) {
|
||||
if ($compteur==$i){
|
||||
$connect->Execute($sql, array($data->nom, $data->id_users));
|
||||
}
|
||||
|
||||
++$compteur;
|
||||
$compteur++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -540,7 +520,7 @@ while ($dcomment = $comment_user->FetchNextObject(false)) {
|
||||
$connect->Execute($sql, array($dcomment->id_comment));
|
||||
}
|
||||
|
||||
++$i;
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
||||
@ -548,43 +528,53 @@ while ($dcomment = $comment_user->FetchNextObject(false)) {
|
||||
$testmodifier = false;
|
||||
$testligneamodifier = false;
|
||||
|
||||
for ($i = 0; $i < $nblignes; ++$i) {
|
||||
if (isset($_POST['modifierligne'. $i])) {
|
||||
$ligneamodifier = $i;
|
||||
$testligneamodifier = 'true';
|
||||
for ($i = 0; $i < $nblignes; $i++) {
|
||||
if (isset($_POST["modifierligne$i"])) {
|
||||
$ligneamodifier=$i;
|
||||
$testligneamodifier="true";
|
||||
}
|
||||
|
||||
//test pour voir si une ligne est à modifier
|
||||
if (isset($_POST['validermodifier'. $i])) {
|
||||
$modifier = $i;
|
||||
$testmodifier = 'true';
|
||||
//test pour voir si une ligne est a modifier
|
||||
if (isset($_POST["validermodifier$i"])) {
|
||||
$modifier=$i;
|
||||
$testmodifier="true";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//si le test est valide alors on affiche des checkbox pour entrer de nouvelles valeurs
|
||||
if ($testmodifier) {
|
||||
$nouveauchoix = getNewChoiceFromPOST($nbcolonnes);
|
||||
$nouveauchoix = '';
|
||||
for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
if (isset($_POST["choix$i"])) {
|
||||
switch ($_POST["choix$i"]) {
|
||||
case 1: $nouveauchoix .= "1";break;
|
||||
case 2: $nouveauchoix .= "2";break;
|
||||
default: $nouveauchoix .= "0";break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$compteur = 0;
|
||||
$compteur=0;
|
||||
|
||||
while ($data = $user_studs->FetchNextObject(false)) {
|
||||
//mise à jour des données de l'utilisateur dans la base SQL
|
||||
while ($data=$user_studs->FetchNextObject(false)) {
|
||||
//mise a jour des données de l'utilisateur dans la base SQL
|
||||
if ($compteur==$modifier) {
|
||||
$sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($nouveauchoix, $data->nom, $data->id_users));
|
||||
}
|
||||
|
||||
++$compteur;
|
||||
$compteur++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//suppression de colonnes dans la base
|
||||
for ($i = 0; $i < $nbcolonnes; ++$i) {
|
||||
if ((isset($_POST['effacecolonne' .$i])) && $nbcolonnes > 1) {
|
||||
$toutsujet = explode(',', $dsujet->sujet);
|
||||
for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
if ((isset($_POST["effacecolonne$i"])) && $nbcolonnes > 1){
|
||||
$toutsujet = explode(",",$dsujet->sujet);
|
||||
//sort($toutsujet, SORT_NUMERIC);
|
||||
$j = 0;
|
||||
$nouveauxsujets = '';
|
||||
@ -593,16 +583,17 @@ for ($i = 0; $i < $nbcolonnes; ++$i) {
|
||||
while (isset($toutsujet[$j])) {
|
||||
//si le sujet n'est pas celui qui a été effacé alors on concatene
|
||||
if ($i != $j) {
|
||||
$nouveauxsujets .= ',' . $toutsujet[$j];
|
||||
$nouveauxsujets .= ',';
|
||||
$nouveauxsujets .= $toutsujet[$j];
|
||||
}
|
||||
|
||||
++$j;
|
||||
$j++;
|
||||
}
|
||||
|
||||
//on enlève la virgule au début
|
||||
$nouveauxsujets = substr($nouveauxsujets, 1);
|
||||
//on enleve la virgule au début
|
||||
$nouveauxsujets = substr("$nouveauxsujets", 1);
|
||||
|
||||
//nettoyage des réponses actuelles correspondant au sujet effacé
|
||||
//nettoyage des reponses actuelles correspondant au sujet effacé
|
||||
$compteur = 0;
|
||||
$sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users');
|
||||
$sql = $connect->Prepare($sql);
|
||||
@ -612,7 +603,7 @@ for ($i = 0; $i < $nbcolonnes; ++$i) {
|
||||
$ensemblereponses = $data->reponses;
|
||||
|
||||
//parcours de toutes les réponses actuelles
|
||||
for ($j = 0; $j < $nbcolonnes; ++$j) {
|
||||
for ($j = 0; $j < $nbcolonnes; $j++) {
|
||||
$car=substr($ensemblereponses, $j, 1);
|
||||
//si les reponses ne concerne pas la colonne effacée, on concatene
|
||||
if ($i != $j) {
|
||||
@ -620,13 +611,13 @@ for ($i = 0; $i < $nbcolonnes; ++$i) {
|
||||
}
|
||||
}
|
||||
|
||||
++$compteur;
|
||||
$compteur++;
|
||||
|
||||
//mise à jour des reponses utilisateurs dans la base
|
||||
//mise a jour des reponses utilisateurs dans la base
|
||||
$connect->Execute($sql, array($newcar, $data->nom, $data->id_users));
|
||||
}
|
||||
|
||||
//mise à jour des sujets dans la base
|
||||
//mise a jour des sujets dans la base
|
||||
$sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage');
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($nouveauxsujets, $numsondage));
|
||||
@ -648,12 +639,13 @@ if ($sondage !== false) {
|
||||
$sql = $connect->Prepare($sql);
|
||||
$user_studs = $connect->Execute($sql, array($numsondage));
|
||||
} else {
|
||||
|
||||
Utils::print_header(_("Error!"));
|
||||
bandeau_titre(_("Error!"));
|
||||
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<h2>' . _('This poll doesn\'t exist !') . '</h2>
|
||||
<h2>' . _("This poll doesn't exist !") . '</h2>
|
||||
<p>' . _('Back to the homepage of ') . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a></p>
|
||||
</div>'."\n";
|
||||
|
||||
@ -664,44 +656,35 @@ if ($sondage !== false) {
|
||||
|
||||
// Errors
|
||||
$errors = '';
|
||||
if ((isset($_POST['boutonp'])) && $_POST['nom'] == '') {
|
||||
$errors .= '<li>' . _('Enter a name') . '</li>';
|
||||
if ((isset($_POST["boutonp"])) && $_POST["nom"] == "") {
|
||||
$errors .= '<li>' . _("Enter a name") . '</li>';
|
||||
}
|
||||
if (isset($erreur_prenom) && $erreur_prenom) {
|
||||
$errors .= '<li>' . _('The name you\'ve chosen already exist in this poll!') . '</li>';
|
||||
$errors .= '<li>' . _("The name you've chosen already exist in this poll!") . '</li>';
|
||||
}
|
||||
if (isset($erreur_injection) && $erreur_injection) {
|
||||
$errors .= '<li>' . _("Characters \" ' < et > are not permitted") . '</li>';
|
||||
}
|
||||
if (isset($erreur_ajout_date) && $erreur_ajout_date) {
|
||||
$errors .= '<li>' . _('The date is not correct!') . '</li>';
|
||||
$errors .= '<li>' . _("The date is not correct !") . '</li>';
|
||||
}
|
||||
|
||||
//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 );
|
||||
$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 );
|
||||
|
||||
//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 = '';
|
||||
$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_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_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_text = '<span class="glyphicon glyphicon-check"></span> '. _("Votes and comments are open");
|
||||
$poll_rules_opt2 = 'selected';
|
||||
}
|
||||
|
||||
@ -710,6 +693,7 @@ if ($errors!='') {
|
||||
bandeau_titre(_("Error!"));
|
||||
|
||||
echo '<div class="alert alert-danger"><ul class="list-unstyled">'.$errors.'</ul></div>'."\n";
|
||||
|
||||
} else {
|
||||
Utils::print_header(_('Poll administration').' - '.$title);
|
||||
bandeau_titre(_('Poll administration').' - '.$title);
|
||||
@ -739,13 +723,13 @@ echo '
|
||||
<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="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>
|
||||
<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>
|
||||
<li><button class="btn btn-link" type="submit" id="suppressionsondage" name="suppressionsondage" value="" >'. _("Remove the poll") .'</button></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -826,9 +810,9 @@ $dsujet=$sujets->FetchObject(false);
|
||||
$dsondage=$sondage->FetchObject(false);
|
||||
|
||||
//reformatage des données des sujets du sondage
|
||||
$toutsujet = explode(',', $dsujet->sujet);
|
||||
$toutsujet = str_replace('°', '\'',$toutsujet);
|
||||
$nbcolonnes = substr_count($dsujet->sujet,',') +1;
|
||||
$toutsujet=explode(",",$dsujet->sujet);
|
||||
$toutsujet=str_replace("°","'",$toutsujet);
|
||||
$nbcolonnes=substr_count($dsujet->sujet,',')+1;
|
||||
|
||||
// Table headers
|
||||
$thead = '<thead>';
|
||||
@ -841,24 +825,24 @@ $td_headers = array(); // for a11y, headers="M1 D4 H5" on each td
|
||||
$radio_title = array(); // date for
|
||||
|
||||
// Dates poll
|
||||
if (substr($dsondage->format, 0, 1) == 'D') {
|
||||
if (substr($dsondage->format, 0, 1)=="D") {
|
||||
|
||||
$tr_months = '<tr><th role="presentation"></th>';
|
||||
$tr_days = '<tr><th role="presentation"></th>';
|
||||
$tr_hours = '<tr><th role="presentation"></th>';
|
||||
$tr_days = '<tr><th role="presentation"></th>';
|
||||
$tr_hours = '<tr><th role="presentation"></th>';
|
||||
|
||||
// Headers
|
||||
$colspan_month = 1;
|
||||
$colspan_day = 1;
|
||||
|
||||
for ($i = 0; $i < count($toutsujet); ++$i) {
|
||||
for ($i = 0; $i < count($toutsujet); $i++) {
|
||||
|
||||
// Current date
|
||||
$current = $toutsujet[$i];//format date@hour. ex : 2020292820@10:00
|
||||
$horoCur = explode("@",$current); //horoCur[0] = date, horoCur[1] = hour
|
||||
if (isset($toutsujet[$i+1])){
|
||||
$next = $toutsujet[$i+1];
|
||||
$horoNext = explode('@', $next);
|
||||
$horoNext = explode("@",$next);
|
||||
}
|
||||
$border[$i] = false;
|
||||
$radio_title[$i] = strftime($date_format['txt_short'],$horoCur[0]);
|
||||
@ -871,18 +855,18 @@ if (substr($dsondage->format, 0, 1) == 'D') {
|
||||
} else {
|
||||
$border[$i] = true;
|
||||
$tr_months .= '<th colspan="'.$colspan_month.'" class="bg-primary month" id="M'.($i+1-$colspan_month).'">'.strftime("%B",$horoCur[0]).' '.strftime("%Y", $horoCur[0]).'</th>';
|
||||
$colspan_month = 1;
|
||||
$colspan_month=1;
|
||||
}
|
||||
|
||||
// Days
|
||||
$td_headers[$i] .= ' D'.($i+1-$colspan_day);
|
||||
|
||||
if (isset($toutsujet[$i+1]) && strftime($date_format['txt_day'],$horoCur[0])==strftime($date_format['txt_day'],$horoNext[0]) && strftime("%B",$horoCur[0])==strftime("%B",$horoNext[0])){
|
||||
++$colspan_day;
|
||||
$colspan_day++;
|
||||
} else {
|
||||
$rbd = ($border[$i]) ? ' rbd' : '';
|
||||
$tr_days .= '<th colspan="'.$colspan_day.'" class="bg-primary day'.$rbd.'" id="D'.($i+1-$colspan_day).'">'.strftime($date_format['txt_day'],$horoCur[0]).'</th>';
|
||||
$colspan_day = 1;
|
||||
$colspan_day=1;
|
||||
}
|
||||
|
||||
// Hours
|
||||
@ -896,33 +880,30 @@ if (substr($dsondage->format, 0, 1) == '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><span class="sr-only">'. _("Remove") .'</span></button></td>'
|
||||
: '<td role="presentation"></td>';
|
||||
$tr_add_remove_col .= (count($toutsujet) > 1 ) ? '<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>';
|
||||
|
||||
}
|
||||
|
||||
$border[count($border)-1] = false; // suppression de la bordure droite du dernier mois
|
||||
|
||||
$tr_months .= '<th></th></tr>';
|
||||
$tr_days .= '<th></th></tr>';
|
||||
$tr_hours .= '<th></th></tr>';
|
||||
$tr_days .= '<th></th></tr>';
|
||||
$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><span class="sr-only">'. _('Add a column') .'</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";
|
||||
|
||||
// Subjects poll
|
||||
} else {
|
||||
$toutsujet=str_replace('@', '<br />', $toutsujet);
|
||||
$toutsujet=str_replace("@","<br />",$toutsujet);
|
||||
|
||||
$tr_subjects = '<tr><th role="presentation"></th>';
|
||||
|
||||
for ($i = 0; isset($toutsujet[$i]); ++$i) {
|
||||
for ($i = 0; isset($toutsujet[$i]); $i++) {
|
||||
|
||||
$td_headers[$i]='';
|
||||
$radio_title[$i]=''; // init before concatenate
|
||||
$td_headers[$i]='';$radio_title[$i]=''; // init before concatenate
|
||||
|
||||
// Subjects
|
||||
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$toutsujet[$i],$md_a_img); // Markdown [![alt](src)](href)
|
||||
@ -962,7 +943,7 @@ if (substr($dsondage->format, 0, 1) == 'D') {
|
||||
// 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><span class="sr-only">'. _("Add a column") .'</span></button></td></tr>';
|
||||
|
||||
$thead = $tr_add_remove_col . $tr_subjects . '<th></th></tr>';
|
||||
$thead = $tr_add_remove_col.$tr_subjects.'<th></th></tr>';
|
||||
}
|
||||
|
||||
// Print headers
|
||||
@ -1004,7 +985,7 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
$ensemblereponses = $data->reponses;
|
||||
|
||||
// Print name
|
||||
$nombase=str_replace('°', '\'',$data->nom);
|
||||
$nombase=str_replace("°","'",$data->nom);
|
||||
echo '<tr>
|
||||
<th class="bg-info">'.stripslashes($nombase).'</th>'."\n";
|
||||
|
||||
@ -1014,30 +995,28 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
$rbd = ($border[$k]) ? ' rbd' : '';
|
||||
$car = substr($ensemblereponses, $k, 1);
|
||||
switch ($car) {
|
||||
case '1': echo '<td class="bg-success text-success'.$rbd.'" headers="'.$td_headers[$k].'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only"> ' . _('Yes') . '</span></td>'."\n";
|
||||
case "1": echo '<td class="bg-success text-success'.$rbd.'" headers="'.$td_headers[$k].'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only"> ' . _('Yes') . '</span></td>'."\n";
|
||||
if (isset($somme[$k]) === false) {
|
||||
$somme[$k] = 0;
|
||||
}
|
||||
++$somme[$k]; break;
|
||||
case '2': echo '<td class="bg-warning text-warning'.$rbd.'" headers="'.$td_headers[$k].'">(<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only"> ' . _('Yes') . _(', ifneedbe') . '</span></td>'."\n"; break;
|
||||
$somme[$k]++; break;
|
||||
case "2": echo '<td class="bg-warning text-warning'.$rbd.'" headers="'.$td_headers[$k].'">(<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only"> ' . _('Yes') . _(', ifneedbe') . '</span></td>'."\n"; break;
|
||||
default: echo '<td class="bg-danger'.$rbd.'" headers="'.$td_headers[$k].'"><span class="sr-only">' . _('No') . '</span></td>'."\n";break;
|
||||
}
|
||||
}
|
||||
} else { // sinon on remplace les choix de l'utilisateur par une ligne de radio pour recuperer de nouvelles valeurs
|
||||
// si c'est bien la ligne a modifier on met les radios
|
||||
if ($compteur == $ligneamodifier) {
|
||||
for ($j = 0; $j < $nbcolonnes; ++$j) {
|
||||
if ($compteur == "$ligneamodifier") {
|
||||
for ($j = 0; $j < $nbcolonnes; $j++) {
|
||||
|
||||
$car = substr($ensemblereponses, $j, 1);
|
||||
|
||||
// variable pour afficher la valeur cochée
|
||||
$car_html[0] = 'value="0"';
|
||||
$car_html[1] = 'value="1"';
|
||||
$car_html[2] = 'value="2"';
|
||||
$car_html[0]='value="0"';$car_html[1]='value="1"';$car_html[2]='value="2"';
|
||||
switch ($car) {
|
||||
case '1': $car_html[1]='value="1" checked'; break;
|
||||
case '2': $car_html[2]='value="2" checked'; break;
|
||||
default: $car_html[0]='value="0" checked';
|
||||
case "1": $car_html[1]='value="1" checked';break;
|
||||
case "2": $car_html[2]='value="2" checked';break;
|
||||
default: $car_html[0]='value="0" checked';break;
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -1066,24 +1045,24 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
|
||||
}
|
||||
} else { //sinon on affiche les lignes normales
|
||||
for ($k = 0; $k < $nbcolonnes; ++$k) {
|
||||
for ($k = 0; $k < $nbcolonnes; $k++) {
|
||||
$rbd = ($border[$k]) ? ' rbd' : '';
|
||||
$car = substr($ensemblereponses, $k, 1);
|
||||
switch ($car) {
|
||||
case '1': echo '<td class="bg-success text-success'.$rbd.'" headers="'.$td_headers[$k].'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only"> ' . _('Yes') . '</span></td>'."\n";
|
||||
case "1": echo '<td class="bg-success text-success'.$rbd.'" headers="'.$td_headers[$k].'"><span class="glyphicon glyphicon-ok"></span><span class="sr-only"> ' . _('Yes') . '</span></td>'."\n";
|
||||
if (isset($somme[$k]) === false) {
|
||||
$somme[$k] = 0;
|
||||
}
|
||||
++$somme[$k]; break;
|
||||
case '2': echo '<td class="bg-warning text-warning'.$rbd.'" headers="'.$td_headers[$k].'">(<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only"> ' . _('Yes') . _(', ifneedbe') . '</span></td>'."\n"; break;
|
||||
default: echo '<td class="bg-danger'.$rbd.'" headers="'.$td_headers[$k].'"><span class="sr-only">' . _('No') . '</span></td>'."\n";
|
||||
$somme[$k]++; break;
|
||||
case "2": echo '<td class="bg-warning text-warning'.$rbd.'" headers="'.$td_headers[$k].'">(<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only"> ' . _('Yes') . _(', ifneedbe') . '</span></td>'."\n"; break;
|
||||
default: echo '<td class="bg-danger'.$rbd.'" headers="'.$td_headers[$k].'"><span class="sr-only">' . _('No') . '</span></td>'."\n";break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//a la fin de chaque ligne se trouve les boutons modifier
|
||||
if (!$testligneamodifier == 'true') {
|
||||
if (!$testligneamodifier=="true") {
|
||||
echo '
|
||||
<td>
|
||||
<button type="submit" class="btn btn-link btn-sm" name="modifierligne'.$compteur.'" title="'. _('Edit the line:') .' '.stripslashes($nombase).'">
|
||||
@ -1096,19 +1075,19 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
}
|
||||
|
||||
//demande de confirmation pour modification de ligne
|
||||
for ($i = 0; $i < $nblignes; ++$i) {
|
||||
if (isset($_POST['modifierligne'. $i])) {
|
||||
for ($i = 0; $i < $nblignes; $i++) {
|
||||
if (isset($_POST["modifierligne$i"])) {
|
||||
if ($compteur == $i) {
|
||||
echo '<td style="padding:5px"><button type="submit" class="btn btn-success btn-xs" name="validermodifier'.$compteur.'" title="'. _('Save the choices') .' '.stripslashes($nombase).'">'. _('Save') .'</button></td>'."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
++$compteur;
|
||||
$compteur++;
|
||||
echo '</tr>'."\n";
|
||||
}
|
||||
|
||||
if (!$testligneamodifier == 'true') {
|
||||
if (!$testligneamodifier=="true") {
|
||||
//affichage de la case vide de texte pour un nouvel utilisateur
|
||||
echo '<tr id="vote-form">
|
||||
<td class="bg-info" style="padding:5px">
|
||||
@ -1119,7 +1098,7 @@ if (!$testligneamodifier == 'true') {
|
||||
</td>'."\n";
|
||||
|
||||
//une ligne de checkbox pour le choix du nouvel utilisateur
|
||||
for ($i = 0; $i < $nbcolonnes; ++$i) {
|
||||
for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
echo '
|
||||
<td class="bg-info" headers="'.$td_headers[$i].'">
|
||||
<ul class="list-unstyled choice">
|
||||
@ -1164,7 +1143,7 @@ for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
$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;
|
||||
$compteursujet++;
|
||||
|
||||
} else {
|
||||
$tr_addition .= '<td>'.$somme[$i].'</td>';
|
||||
@ -1176,9 +1155,9 @@ for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
$tr_addition .= '<td></td></tr>';
|
||||
|
||||
//recuperation des valeurs des sujets et adaptation pour affichage
|
||||
$toutsujet = explode(',', $dsujet->sujet);
|
||||
$toutsujet = explode(",", $dsujet->sujet);
|
||||
|
||||
$meilleursujet = str_replace('°', '\'', $meilleursujet).'</ul>';
|
||||
$meilleursujet = str_replace("°", "'", $meilleursujet).'</ul>';
|
||||
$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote');
|
||||
|
||||
// Print Addition and Best choice
|
||||
@ -1215,7 +1194,7 @@ $sql = $connect->Prepare($sql);
|
||||
$comment_user = $connect->Execute($sql, array($numsondage));
|
||||
|
||||
if ($comment_user->RecordCount() != 0) {
|
||||
echo '<div><h3>' . _('Comments of polled people') . '</h3>'."\n";
|
||||
echo '<div><h3>' . _("Comments of polled people") . '</h3>'."\n";
|
||||
|
||||
$i = 0;
|
||||
while ( $dcomment=$comment_user->FetchNextObject(false)) {
|
||||
@ -1232,15 +1211,15 @@ if ($comment_user->RecordCount() != 0) {
|
||||
echo '
|
||||
<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>
|
||||
<fieldset id="add-comment"><legend>' . _("Add a comment in the poll") . '</legend>
|
||||
<div class="form-group">
|
||||
<p><label for="commentuser">'. _('Your name') .'</label><input type=text name="commentuser" class="form-control" id="commentuser" /></p>
|
||||
<p><label for="commentuser">'. _("Your name") .'</label><input type=text name="commentuser" class="form-control" id="commentuser" /></p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<p><label for="comment">'. _('Your comment') .'</label><br />
|
||||
<p><label for="comment">'. _("Your comment") .'</label><br />
|
||||
<textarea name="comment" id="comment" class="form-control" rows="2" cols="40"></textarea></p>
|
||||
</div>
|
||||
<p class="text-center"><input type="submit" name="ajoutcomment" value="'. _('Send the comment') .'" class="btn btn-success"></p>
|
||||
<p class="text-center"><input type="submit" name="ajoutcomment" value="'. _("Send the comment") .'" class="btn btn-success"></p>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
|
@ -20,22 +20,16 @@ namespace Framadate;
|
||||
|
||||
class Utils
|
||||
{
|
||||
/**
|
||||
* @return string Server name
|
||||
*/
|
||||
public static function get_server_name()
|
||||
{
|
||||
$scheme = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
|
||||
$scheme = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') ? 'https' : 'http';
|
||||
$port = in_array($_SERVER['SERVER_PORT'], [80, 443]) ? '/' : ':' . $_SERVER['SERVER_PORT'] . '/';
|
||||
$server_name = $_SERVER['SERVER_NAME'] . $port . dirname($_SERVER['SCRIPT_NAME']) . '/';
|
||||
|
||||
return $scheme . '://' . str_replace('/admin', '', str_replace('//', '/', str_replace('///', '/', $server_name)));
|
||||
return $scheme . '://' . str_replace('/admin','',str_replace('//','/',str_replace('///','/',$server_name)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a poll or false if it fails
|
||||
*/
|
||||
public static function get_poll_from_id($id)
|
||||
public static function get_sondage_from_id($id)
|
||||
{
|
||||
global $connect;
|
||||
|
||||
@ -46,13 +40,13 @@ class Utils
|
||||
WHERE sondage.id_sondage = ' . $connect->Param('id_sondage');
|
||||
|
||||
$sql = $connect->Prepare($sql);
|
||||
$poll = $connect->Execute($sql, [$id]);
|
||||
$sondage = $connect->Execute($sql, [$id]);
|
||||
|
||||
if ($poll === false) {
|
||||
if ($sondage === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$psondage = $poll->FetchObject(false);
|
||||
$psondage = $sondage->FetchObject(false);
|
||||
$psondage->date_fin = strtotime($psondage->date_fin);
|
||||
|
||||
return $psondage;
|
||||
@ -61,15 +55,6 @@ class Utils
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use get_poll_from_id that is fully english name
|
||||
* @deprecated
|
||||
*/
|
||||
public static function get_sondage_from_id($id)
|
||||
{
|
||||
return self::get_poll_from_id($id);
|
||||
}
|
||||
|
||||
public static function is_error($cerr)
|
||||
{
|
||||
global $err;
|
||||
@ -92,20 +77,20 @@ class Utils
|
||||
echo '<!DOCTYPE html>
|
||||
<html lang="'.$lang.'">
|
||||
<head>
|
||||
<meta charset="utf-8" />';
|
||||
<meta charset="utf-8">';
|
||||
|
||||
echo '<title>';
|
||||
if (! empty($title)) {
|
||||
echo stripslashes($title) . ' - ';
|
||||
echo '<title>' . stripslashes($title) . ' - ' . NOMAPPLICATION . '</title>';
|
||||
} else {
|
||||
echo '<title>' . NOMAPPLICATION . '</title>';
|
||||
}
|
||||
echo NOMAPPLICATION . '</title>';
|
||||
|
||||
echo '
|
||||
<link rel="stylesheet" href="' . self::get_server_name() . 'css/bootstrap.min.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" />
|
||||
<link rel="stylesheet" href="' . self::get_server_name() . 'css/bootstrap.min.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>
|
||||
<script type="text/javascript" src="' . self::get_server_name() . 'js/bootstrap-datepicker.js"></script>
|
||||
@ -119,12 +104,18 @@ class Utils
|
||||
</head>
|
||||
<body>
|
||||
<div class="container ombre">';
|
||||
|
||||
}
|
||||
|
||||
public static function check_table_sondage()
|
||||
{
|
||||
global $connect;
|
||||
return in_array('sondage', $connect->MetaTables('TABLES'));
|
||||
|
||||
if (in_array('sondage', $connect->MetaTables('TABLES'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -141,9 +132,11 @@ class Utils
|
||||
/**
|
||||
* Envoi un courrier avec un codage correct de To et Subject
|
||||
* Les en-têtes complémentaires ne sont pas gérés
|
||||
*
|
||||
*/
|
||||
public static function sendEmail( $to, $subject, $body, $headers='', $param='')
|
||||
{
|
||||
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
$subject = mb_encode_mimeheader(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'), 'UTF-8', 'B', "\n", 9);
|
||||
@ -182,9 +175,9 @@ class Utils
|
||||
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
|
||||
$headers .= "Content-Transfer-Encoding: 8bit\n";
|
||||
$headers .= "Auto-Submitted:auto-generated\n";
|
||||
$headers .= 'Return-Path: <>';
|
||||
$headers .= "Return-Path: <>";
|
||||
|
||||
$body = html_entity_decode($body, ENT_QUOTES, 'UTF-8'). "\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.');
|
||||
$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);
|
||||
}
|
||||
@ -192,16 +185,16 @@ class Utils
|
||||
/**
|
||||
* Fonction vérifiant l'existance et la valeur non vide d'une clé d'un tableau
|
||||
* @param string $name La clé à tester
|
||||
* @param array $table Le tableau où rechercher la clé ($_POST par défaut)
|
||||
* @param array $tableau Le tableau où rechercher la clé ($_POST par défaut)
|
||||
* @return bool Vrai si la clé existe et renvoie une valeur non vide
|
||||
*/
|
||||
public static function issetAndNoEmpty($name, $table = null)
|
||||
public static function issetAndNoEmpty($name, $tableau = null)
|
||||
{
|
||||
if (is_null($table)) {
|
||||
$table = $_POST;
|
||||
if (is_null($tableau)) {
|
||||
$tableau = $_POST;
|
||||
}
|
||||
|
||||
return isset($table[$name]) && ! empty($table[$name]);
|
||||
return isset($tableau[$name]) && ! empty($tableau[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,17 +207,19 @@ class Utils
|
||||
{
|
||||
if (URL_PROPRE) {
|
||||
if ($admin === true) {
|
||||
return str_replace('/admin', '', self::get_server_name()) . $id . '/admin';
|
||||
$url = str_replace('/admin', '', self::get_server_name()) . $id . '/admin';
|
||||
} else {
|
||||
return str_replace('/admin', '', self::get_server_name()) . $id;
|
||||
$url = str_replace('/admin', '', self::get_server_name()) . $id;
|
||||
}
|
||||
} else {
|
||||
if ($admin === true) {
|
||||
return str_replace('/admin', '', self::get_server_name()) . 'adminstuds.php?sondage=' . $id;
|
||||
$url = str_replace('/admin', '', self::get_server_name()) . 'adminstuds.php?sondage=' . $id;
|
||||
} else {
|
||||
return str_replace('/admin', '', self::get_server_name()) . 'studs.php?sondage=' . $id;
|
||||
$url = str_replace('/admin', '', self::get_server_name()) . 'studs.php?sondage=' . $id;
|
||||
}
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
public static function remove_sondage($connect, $numsondage)
|
||||
@ -253,11 +248,6 @@ class Utils
|
||||
return $suppression_OK ;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $connect
|
||||
* @param $log_txt
|
||||
* @return void
|
||||
*/
|
||||
public static function cleaning_polls($connect, $log_txt) {
|
||||
$connect->StartTrans();
|
||||
$req = 'SELECT * FROM sondage WHERE date_fin < NOW() AND date_fin != 0 LIMIT 20';
|
||||
|
@ -20,8 +20,11 @@
|
||||
// FRAMADATE version
|
||||
const VERSION = 0.8;
|
||||
|
||||
// Server name
|
||||
const STUDS_URL = '<www.mydomain.com>';
|
||||
|
||||
// Application name
|
||||
const NOMAPPLICATION = '<Application name>';
|
||||
const NOMAPPLICATION = "<Application name>";
|
||||
|
||||
// Database administrator email
|
||||
const ADRESSEMAILADMIN = '<email address>';
|
||||
@ -33,7 +36,7 @@ const ADRESSEMAILREPONSEAUTO = '<no-reply@mydomain.com>';
|
||||
const BASE = '<database name>';
|
||||
|
||||
// Database user
|
||||
const USERBASE = '<database user>';
|
||||
const USERBASE = "<database user>";
|
||||
|
||||
// Database password
|
||||
const USERPASSWD = '<database password>';
|
||||
|
@ -23,16 +23,9 @@ if (ini_get('date.timezone') == '') {
|
||||
// Autoloading of dependencies with Composer
|
||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||
|
||||
require_once __DIR__ . '/constants.php';
|
||||
require_once __DIR__ . '/i18n.php';
|
||||
include_once __DIR__ . '/constants.php';
|
||||
include_once __DIR__ . '/i18n.php';
|
||||
|
||||
$connect = NewADOConnection(BASE_TYPE);
|
||||
|
||||
if ('pdo' === BASE_TYPE) {
|
||||
$database_host = 'mysql:host='.SERVEURBASE;
|
||||
} else {
|
||||
$database_host = SERVEURBASE;
|
||||
}
|
||||
|
||||
$connect->Connect($database_host, USERBASE, USERPASSWD, BASE);
|
||||
$connect->Connect(SERVEURBASE, USERBASE, USERPASSWD, BASE);
|
||||
$err = 0;
|
||||
|
@ -179,7 +179,7 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
<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>'. _("To make a generic poll, it's better 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>';
|
||||
if($config['user_can_add_img_or_link']){
|
||||
echo ' <p>'. _("It's possible to propose links or images by using "). '<a href="http://'.$lang.'.wikipedia.org/wiki/Markdown">'. _("the Markdown syntax") .'</a>.</p>';
|
||||
|
@ -5,7 +5,7 @@
|
||||
* 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 https://git.framasoft.org/framasoft/framadate/)
|
||||
* Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
|
||||
*
|
||||
* =============================
|
||||
*
|
||||
@ -14,7 +14,7 @@
|
||||
* 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 https://git.framasoft.org/framasoft/framadate/)
|
||||
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
|
||||
*/
|
||||
namespace Framadate;
|
||||
|
||||
@ -31,13 +31,13 @@ if (is_readable('bandeaux_local.php')) {
|
||||
// Step 1/3 : error if $_SESSION from info_sondage are not valid
|
||||
if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmpty('nom', $_SESSION) === false || (($config['use_smtp']) ? Utils::issetAndNoEmpty('adresse', $_SESSION) === false : false)) {
|
||||
|
||||
Utils::print_header ( _('Error!') );
|
||||
bandeau_titre(_('Error!'));
|
||||
Utils::print_header ( _("Error!") );
|
||||
bandeau_titre(_("Error!"));
|
||||
|
||||
echo '
|
||||
<div class="alert alter-danger">
|
||||
<h3>' . _('You haven\'t filled the first section of the poll creation.') . ' !</h3>
|
||||
<p>' . _('Back to the homepage of ') . ' ' . '<a href="' . Utils::get_server_name() . '">' . NOMAPPLICATION . '</a>.</p>
|
||||
<h3>' . _("You haven't filled the first section of the poll creation.") . ' !</h3>
|
||||
<p>' . _("Back to the homepage of ") . ' ' . '<a href="' . Utils::get_server_name() . '">' . NOMAPPLICATION . '</a>.</p>
|
||||
</div>';
|
||||
|
||||
bandeau_pied();
|
||||
@ -46,19 +46,19 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
// Step 4 : Data prepare before insert in DB
|
||||
if (Utils::issetAndNoEmpty('confirmation')) {
|
||||
$temp_results = array();
|
||||
$choixdate = '';
|
||||
$choixdate='';
|
||||
if (Utils::issetAndNoEmpty('totalchoixjour', $_SESSION) === true) {
|
||||
for ($i = 0; $i < count($_SESSION["totalchoixjour"]); ++$i) {
|
||||
for ($i = 0; $i < count($_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] != '') {
|
||||
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]);
|
||||
array_push($temp_results, $_SESSION["totalchoixjour"][$i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -67,24 +67,23 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
// Sort and remove doublons
|
||||
$temp_results = array_unique($temp_results);
|
||||
sort($temp_results);
|
||||
for ($i=0; $i < count($temp_results); ++$i) {
|
||||
for ($i=0;$i<count($temp_results);$i++) {
|
||||
if (isset($temp_results[$i])) {
|
||||
$choixdate .= ','. $temp_results[$i];
|
||||
$choixdate.=','.$temp_results[$i];
|
||||
}
|
||||
}
|
||||
|
||||
$_SESSION['toutchoix'] = substr($choixdate, 1);
|
||||
$_SESSION["toutchoix"]=substr($choixdate,1);
|
||||
|
||||
// Expiration date → 6 months after last day if not filled or in bad format
|
||||
// 86400 = 60*60*24
|
||||
$_SESSION['champdatefin']=end($temp_results)+(86400 * $config['default_poll_duration']);
|
||||
$_SESSION["champdatefin"]=end($temp_results)+(86400 * $config['default_poll_duration']);
|
||||
|
||||
if (Utils::issetAndNoEmpty('champdatefin')) {
|
||||
$registredate = explode('/', $_POST['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() + 86400) {
|
||||
$_SESSION['champdatefin'] = $time;
|
||||
if ($time > time() + (24*60*60)) {
|
||||
$_SESSION["champdatefin"]=$time;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -93,20 +92,16 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
|
||||
} else {
|
||||
if (Utils::issetAndNoEmpty('days')) {
|
||||
if (!isset($_SESSION['totalchoixjour'])) {
|
||||
$_SESSION['totalchoixjour'] = array();
|
||||
if (!isset($_SESSION["totalchoixjour"])) {
|
||||
$_SESSION["totalchoixjour"]=array();
|
||||
}
|
||||
$k = 0;
|
||||
for ($i = 0; $i < count($_POST['days']); ++$i) {
|
||||
if (isset($_POST['days'][$i]) && $_POST['days'][$i] !='') {
|
||||
$_SESSION['totalchoixjour'][$k] = mktime(
|
||||
0, 0, 0,
|
||||
substr($_POST["days"][$i], 3, 2),
|
||||
substr($_POST['days'][$i], 0, 2),
|
||||
substr($_POST['days'][$i], 6, 4));
|
||||
for ($i = 0; $i < count($_POST["days"]); $i++) {
|
||||
if (isset($_POST["days"][$i]) && $_POST["days"][$i] !='') {
|
||||
$_SESSION['totalchoixjour'][$k] = mktime(0, 0, 0, substr($_POST["days"][$i],3,2),substr($_POST["days"][$i],0,2),substr($_POST["days"][$i],6,4));
|
||||
|
||||
$l = 0;
|
||||
for($j = 0; $j < count($_POST['horaires'.$i]); ++$j) {
|
||||
for($j = 0; $j < count($_POST['horaires'.$i]); $j++) {
|
||||
if (isset($_POST['horaires'.$i][$j]) && $_POST['horaires'.$i][$j] != '') {
|
||||
$_SESSION['horaires'.$k][$l] = $_POST['horaires'.$i][$j];
|
||||
$l++;
|
||||
@ -119,26 +114,23 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
}
|
||||
|
||||
//le format du sondage est DATE
|
||||
$_SESSION['formatsondage'] = 'D'. $_SESSION['studsplus'];
|
||||
$_SESSION["formatsondage"] = "D".$_SESSION["studsplus"];
|
||||
|
||||
// Step 3/3 : Confirm poll creation
|
||||
if (Utils::issetAndNoEmpty('choixheures') && Utils::issetAndNoEmpty('totalchoixjour', $_SESSION)) {
|
||||
|
||||
Utils::print_header ( _('Removal date and confirmation (3 on 3)') );
|
||||
bandeau_titre(_('Removal date and confirmation (3 on 3)'));
|
||||
Utils::print_header ( _("Removal date and confirmation (3 on 3)") );
|
||||
bandeau_titre(_("Removal date and confirmation (3 on 3)"));
|
||||
|
||||
$temp_array = array_unique($_SESSION['totalchoixjour']);
|
||||
$temp_array = array_unique($_SESSION["totalchoixjour"]);
|
||||
sort($temp_array);
|
||||
$removal_date = utf8_encode(
|
||||
strftime($date_format['txt_full'],
|
||||
end($temp_array) + (86400 * $config['default_poll_duration']))
|
||||
);
|
||||
$removal_date=utf8_encode(strftime($date_format['txt_full'], end($temp_array)+ (86400 * $config['default_poll_duration'])));
|
||||
|
||||
// Sumary
|
||||
$summary = '<ul>';
|
||||
for ($i=0; $i < count($_SESSION['totalchoixjour']); ++$i) {
|
||||
for ($i=0;$i<count($_SESSION["totalchoixjour"]);$i++) {
|
||||
$summary .= '<li>'.strftime($date_format['txt_full'], $_SESSION["totalchoixjour"][$i]);
|
||||
for ($j=0; $j < count($_SESSION['horaires'.$i]); ++$j) {
|
||||
for ($j=0;$j<count($_SESSION['horaires'.$i]);$j++) {
|
||||
if (isset($_SESSION['horaires'.$i][$j])) {
|
||||
$summary .= ($j==0) ? ' : ' : ', ';
|
||||
$summary .= $_SESSION['horaires'.$i][$j];
|
||||
@ -154,7 +146,7 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<h3>'. _("Confirm the creation of your poll") .'</h3>
|
||||
<div class="well summary">
|
||||
<h4>'. _('List of your choices').'</h4>
|
||||
<h4>'. _("List of your choices").'</h4>
|
||||
'. $summary .'
|
||||
</div>
|
||||
<div class="alert alert-info clearfix">
|
||||
@ -172,9 +164,9 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
</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>';
|
||||
if($config['use_smtp'] == true) {
|
||||
if($config['use_smtp']==true){
|
||||
echo '
|
||||
<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>';
|
||||
<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>';
|
||||
}
|
||||
echo '
|
||||
</div>
|
||||
@ -190,24 +182,24 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
|
||||
// Step 2/3 : Select dates of the poll
|
||||
} else {
|
||||
Utils::print_header ( _('Poll dates (2 on 3)') );
|
||||
bandeau_titre(_('Poll dates (2 on 3)'));
|
||||
Utils::print_header ( _("Poll dates (2 on 3)") );
|
||||
bandeau_titre(_("Poll dates (2 on 3)"));
|
||||
|
||||
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-10 col-md-offset-1">
|
||||
<h3>'. _('Choose the dates of your poll') .'</h3>
|
||||
<h3>'. _("Choose the dates of your poll") .'</h3>
|
||||
<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="sr-only">'. _('Remove') .'</span> <span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></p>
|
||||
<p>'. _("To schedule an event, it's better 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="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 : 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]) : '';
|
||||
for ($i=0;$i<$nb_days;$i++) {
|
||||
$day_value = isset($_SESSION["totalchoixjour"][$i]) ? strftime( "%d/%m/%Y", $_SESSION["totalchoixjour"][$i]) : '';
|
||||
echo '
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
@ -221,8 +213,8 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
</legend>'."\n";
|
||||
|
||||
// Fields hours : 3 by default
|
||||
for ($j=0; $j < max(count(isset($_SESSION['horaires'.$i]) ? $_SESSION['horaires'.$i] : 0),3); ++$j) {
|
||||
$hour_value = isset($_SESSION['horaires'.$i][$j]) ? $_SESSION['horaires'.$i][$j] : '';
|
||||
for ($j=0;$j<max(count(isset($_SESSION["horaires".$i]) ? $_SESSION["horaires".$i] : 0),3);$j++) {
|
||||
$hour_value = isset($_SESSION["horaires".$i][$j]) ? $_SESSION["horaires".$i][$j] : '';
|
||||
echo '
|
||||
<div class="col-sm-2">
|
||||
<label for="d'.$i.'-h'.$j.'" class="sr-only control-label">'. _("Time") .' '. ($j+1) .'</label>
|
||||
@ -263,5 +255,6 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp
|
||||
</form>'."\n";
|
||||
|
||||
bandeau_pied();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,14 @@
|
||||
{
|
||||
"name": "framasoft/framadate",
|
||||
"description": "Application to facilitate the schedule of events or classic polls",
|
||||
"keywords": "poll",
|
||||
"keywords": [
|
||||
"poll"
|
||||
],
|
||||
"version": "0.8.0",
|
||||
"license": "CeCILL-B",
|
||||
|
||||
|
||||
"type": "project",
|
||||
|
||||
|
||||
"require": {
|
||||
"adodb/adodb-php": "5.19"
|
||||
},
|
||||
|
22
composer.lock
generated
22
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "09409801c18d04caaf9f8a4f8c7a67b1",
|
||||
"hash": "3cdb051814926a50182b00bbf5297ed2",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adodb/adodb-php",
|
||||
@ -53,11 +53,21 @@
|
||||
"time": "2014-04-23 14:37:03"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"packages-dev": [
|
||||
|
||||
],
|
||||
"aliases": [
|
||||
|
||||
],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"stability-flags": [
|
||||
|
||||
],
|
||||
"prefer-stable": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
"platform": [
|
||||
|
||||
],
|
||||
"platform-dev": [
|
||||
|
||||
]
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
*/
|
||||
namespace Framadate;
|
||||
|
||||
if (session_id() == '') {
|
||||
if (session_id() == "") {
|
||||
session_start();
|
||||
}
|
||||
|
||||
@ -26,23 +26,16 @@ include_once __DIR__ . '/app/inc/init.php';
|
||||
|
||||
|
||||
//Generer une chaine de caractere unique et aleatoire
|
||||
function random_string($length)
|
||||
{
|
||||
$string = '';
|
||||
$chaine = 'abcdefghijklmnopqrstuvwxyz123456789';
|
||||
srand((double)microtime()*1000000);
|
||||
for($i=0; $i < $length; ++$i) {
|
||||
$string .= $chaine[rand()%strlen($chaine)];
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function random($car)
|
||||
{
|
||||
return random_string($car);
|
||||
$string = "";
|
||||
$chaine = "abcdefghijklmnopqrstuvwxyz123456789";
|
||||
srand((double)microtime()*1000000);
|
||||
for($i=0; $i<$car; $i++) {
|
||||
$string .= $chaine[rand()%strlen($chaine)];
|
||||
}
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
function ajouter_sondage()
|
||||
@ -50,11 +43,11 @@ function ajouter_sondage()
|
||||
global $connect;
|
||||
global $config;
|
||||
|
||||
$poll = random(16);
|
||||
$poll_admin = $poll . random(8);
|
||||
$sondage=random(16);
|
||||
$sondage_admin=$sondage.random(8);
|
||||
|
||||
$date_fin = $_SESSION['champdatefin']; // provided by choix_autre.php or choix_date.php
|
||||
$_SESSION['champdatefin'] = ''; //clean param cause 2 polls created by the same user in the same session can be affected by this param during the 2nd creation.
|
||||
$date_fin = $_SESSION["champdatefin"]; // provided by choix_autre.php or choix_date.php
|
||||
$_SESSION["champdatefin"]=""; //clean param cause 2 polls created by the same user in the same session can be affected by this param during the 2nd creation.
|
||||
$sql = 'INSERT INTO sondage
|
||||
(id_sondage, commentaires, mail_admin, nom_admin, titre, id_sondage_admin, date_fin, format, mailsonde)
|
||||
VALUES (
|
||||
@ -64,55 +57,45 @@ function ajouter_sondage()
|
||||
'.$connect->Param('nom_admin').',
|
||||
'.$connect->Param('titre').',
|
||||
'.$connect->Param('id_sondage_admin').',
|
||||
FROM_UNIXTIME('. $date_fin .'),
|
||||
FROM_UNIXTIME('.$date_fin.'),
|
||||
'.$connect->Param('format').',
|
||||
'.$connect->Param('mailsonde').'
|
||||
)';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$res = $connect->Execute($sql, array($poll, $_SESSION['commentaires'], $_SESSION['adresse'], $_SESSION['nom'], $_SESSION['titre'], $poll_admin, $_SESSION['formatsondage'], $_SESSION['mailsonde']));
|
||||
$res = $connect->Execute($sql, array($sondage, $_SESSION['commentaires'], $_SESSION['adresse'], $_SESSION['nom'], $_SESSION['titre'], $sondage_admin, $_SESSION['formatsondage'], $_SESSION['mailsonde']));
|
||||
|
||||
$sql = 'INSERT INTO sujet_studs VALUES ('.$connect->Param('sondage').', '.$connect->Param('choix').')';
|
||||
$sql = 'INSERT INTO sujet_studs values ('.$connect->Param('sondage').', '.$connect->Param('choix').')';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$connect->Execute($sql, array($poll, $_SESSION['toutchoix']));
|
||||
$connect->Execute($sql, array($sondage, $_SESSION['toutchoix']));
|
||||
|
||||
if($config['use_smtp']==true) {
|
||||
if($config['use_smtp']==true){
|
||||
$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 .= 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_admin = _("This message should NOT be sent 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($poll));
|
||||
$message_admin = sprintf($message_admin, Utils::getUrlSondage($poll_admin, true));
|
||||
$message = sprintf($message, Utils::getUrlSondage($sondage));
|
||||
$message_admin = sprintf($message_admin, Utils::getUrlSondage($sondage_admin, true));
|
||||
|
||||
if (Utils::isValidEmail($_SESSION['adresse'])) {
|
||||
Utils::sendEmail(
|
||||
"$_SESSION[adresse]",
|
||||
"[".NOMAPPLICATION."][" . _("Author's message") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"], ENT_QUOTES)),
|
||||
$message_admin,
|
||||
$_SESSION['adresse']
|
||||
);
|
||||
Utils::sendEmail(
|
||||
"$_SESSION[adresse]",
|
||||
"[".NOMAPPLICATION."][" . _("For sending to the polled users") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"], ENT_QUOTES)),
|
||||
$message,
|
||||
$_SESSION['adresse']
|
||||
);
|
||||
Utils::sendEmail( "$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("Author's message") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message_admin, $_SESSION['adresse'] );
|
||||
Utils::sendEmail( "$_SESSION[adresse]", "[".NOMAPPLICATION."][" . _("For sending to the polled users") . "] " . _("Poll") . " : ".stripslashes(htmlspecialchars_decode($_SESSION["titre"],ENT_QUOTES)), $message, $_SESSION['adresse'] );
|
||||
}
|
||||
}
|
||||
error_log(date('H:i:s d/m/Y:') . ' CREATION: '.$poll."\t".$_SESSION[formatsondage]."\t".$_SESSION[nom]."\t".$_SESSION[adresse]."\t \t".$_SESSION[toutchoix]."\n", 3, 'admin/logs_studs.txt');
|
||||
Utils::cleaning_polls($connect, 'admin/logs_studs.txt');
|
||||
error_log(date('H:i:s d/m/Y:') . ' CREATION: '.$sondage."\t".$_SESSION[formatsondage]."\t".$_SESSION[nom]."\t".$_SESSION[adresse]."\t \t".$_SESSION[toutchoix]."\n", 3, 'admin/logs_studs.txt');
|
||||
//Utils::cleaning_polls($connect, 'admin/logs_studs.txt');
|
||||
|
||||
// Don't keep days, hours and choices in memory (in order to make new polls)
|
||||
for ($i = 0; $i < count($_SESSION['totalchoixjour']); ++$i) {
|
||||
for ($i = 0; $i < count($_SESSION["totalchoixjour"]); $i++) {
|
||||
unset($_SESSION['horaires'.$i]);
|
||||
}
|
||||
unset($_SESSION['totalchoixjour']);
|
||||
unset($_SESSION["totalchoixjour"]);
|
||||
unset($_SESSION['choices']);
|
||||
|
||||
header('Location:'. Utils::getUrlSondage($poll_admin, true));
|
||||
header("Location:".Utils::getUrlSondage($sondage_admin, true));
|
||||
|
||||
exit();
|
||||
}
|
||||
|
@ -4,12 +4,16 @@ body {
|
||||
background:none;
|
||||
}
|
||||
|
||||
table {
|
||||
page-break-after:always}
|
||||
.jumbotron {
|
||||
page-break-after:always;
|
||||
}
|
||||
|
||||
table {
|
||||
page-break-inside:auto
|
||||
page-break-after:always;
|
||||
}
|
||||
|
||||
table {
|
||||
page-break-inside:auto;
|
||||
}
|
||||
|
||||
tr {
|
||||
@ -25,6 +29,26 @@ tfoot {
|
||||
display:table-footer-group;
|
||||
}
|
||||
|
||||
#tableContainer {
|
||||
overflow-x:visible !important;
|
||||
}
|
||||
|
||||
#vote-form, .scroll-buttons, form .alert.alert-info {
|
||||
display:none;
|
||||
}
|
||||
|
||||
table.results td {
|
||||
border:2px solid #333;
|
||||
}
|
||||
|
||||
table.results tr td:last-child {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.container {
|
||||
width:auto;
|
||||
}
|
||||
|
||||
@page {
|
||||
size:landscape;
|
||||
}
|
||||
|
@ -245,13 +245,18 @@ table.results .btn-link.btn-sm {
|
||||
|
||||
#vote-form td {
|
||||
border-top:2px solid white;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.yes input, .ifneedbe input,.no input {
|
||||
position:absolute;
|
||||
left:0;
|
||||
margin-left:-15px;
|
||||
margin-top:0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0px, 0px, 0px, 0px);
|
||||
border: 0px none;
|
||||
}
|
||||
|
||||
.choice input:focus + label {
|
||||
@ -269,45 +274,47 @@ table.results .btn-link.btn-sm {
|
||||
|
||||
.yes .btn, .ifneedbe .btn, .no .btn {
|
||||
width:32px;
|
||||
color:#555;
|
||||
}
|
||||
|
||||
.yes .btn {
|
||||
.yes .btn,.yes .btn:hover {
|
||||
border-bottom-right-radius:0px !important;
|
||||
border-bottom-left-radius:0px !important;
|
||||
margin-bottom:-1px !important;
|
||||
margin-top:4px !important;
|
||||
color:#677835;
|
||||
}
|
||||
|
||||
.ifneedbe .btn {
|
||||
.ifneedbe .btn,.ifneedbe .btn:hover {
|
||||
border-radius:0px;
|
||||
color:#C48A1B;
|
||||
}
|
||||
|
||||
.no .btn{
|
||||
.no .btn,.no .btn:hover{
|
||||
border-top-right-radius:0px !important;
|
||||
border-top-left-radius:0px !important;
|
||||
margin-bottom:4px !important;
|
||||
margin-top:-1px !important;
|
||||
color:#AD220F;
|
||||
}
|
||||
|
||||
.yes input[type="radio"]:checked + label { /* =.btn-success.active */
|
||||
color: #fff;
|
||||
background-color: #768745;
|
||||
border-color: #67753C;
|
||||
color: #FFF;
|
||||
background-color: #7D8C3F;
|
||||
border-color: #7D8C3F;
|
||||
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: #CF9800;
|
||||
border-color: #BD8A00;
|
||||
color: #FFF;
|
||||
background-color: #C48A1B;
|
||||
border-color: #C48A1B;
|
||||
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: #BF2511;
|
||||
border-color: #AD220F;
|
||||
color: #FFF;
|
||||
background-color: #B82E12;
|
||||
border-color: #B82E12;
|
||||
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset;
|
||||
}
|
||||
|
||||
|
45
js/core.js
45
js/core.js
@ -1,6 +1,6 @@
|
||||
$(document).ready(function() {
|
||||
var lang = $('html').attr('lang');
|
||||
|
||||
|
||||
// Datepicker
|
||||
var framadatepicker = function() {
|
||||
$('.input-group.date').datepicker({
|
||||
@ -32,13 +32,25 @@ $(document).ready(function() {
|
||||
|
||||
|
||||
var datepickerfocus = false; // a11y : datepicker not display on focus until there is one click on the button
|
||||
|
||||
var lastDate = new Date();
|
||||
|
||||
$(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 keep the last datepicker view
|
||||
if ($(this).parent().find('input').val() == '') {
|
||||
$('.input-group.date input').each(function(){
|
||||
if($(this).val()!='') {
|
||||
lastDate = $(this).val();
|
||||
}
|
||||
});
|
||||
$(this).parent().datepicker('setDate', lastDate);
|
||||
$(this).parent().datepicker('setDate', '');
|
||||
}
|
||||
|
||||
// Trick to refresh calendar
|
||||
$('.datepicker-days .prev').trigger('click');
|
||||
$('.datepicker-days .next').trigger('click');
|
||||
@ -48,8 +60,9 @@ $(document).ready(function() {
|
||||
|
||||
$(document).on('focus','.input-group.date input', function() {
|
||||
if(datepickerfocus) {
|
||||
$(this).parent('.input-group.date').datepicker(framadatepicker());
|
||||
$(this).parent('.input-group.date').datepicker('show');
|
||||
// unfocus and click instead (because we are not in a11y mode anymore)
|
||||
$(this).blur();
|
||||
$(this).parent().find('.input-group-addon').trigger('click');
|
||||
}
|
||||
});
|
||||
/**
|
||||
@ -188,25 +201,17 @@ $(document).ready(function() {
|
||||
});
|
||||
});
|
||||
|
||||
// 1 day and 2 hours or 2 days and you can submit
|
||||
// 1 day filled and you can submit
|
||||
function SubmitDaysAvalaible() {
|
||||
var nb_filled_days = 0;
|
||||
var nb_filled_hours = 0;
|
||||
|
||||
$('#selected-days fieldset legend input').each(function() {
|
||||
if($(this).val()!='') {
|
||||
nb_filled_days++;
|
||||
}
|
||||
});
|
||||
$('#selected-days .hours').each(function() {
|
||||
if($(this).val()!='') {
|
||||
nb_filled_hours++;
|
||||
}
|
||||
});
|
||||
|
||||
if (nb_filled_days>1) {
|
||||
$('button[name="choixheures"]').removeClass('disabled');
|
||||
} else if (nb_filled_hours>1 && nb_filled_days==1) {
|
||||
if (nb_filled_days>0) {
|
||||
$('button[name="choixheures"]').removeClass('disabled');
|
||||
} else {
|
||||
$('button[name="choixheures"]').addClass('disabled');
|
||||
@ -218,8 +223,8 @@ $(document).ready(function() {
|
||||
});
|
||||
SubmitDaysAvalaible();
|
||||
|
||||
// 2 days and you can remove a day or copy hours
|
||||
if($('#selected-days fieldset').length>1) {
|
||||
// 1 days and you can remove a day or copy hours
|
||||
if($('#selected-days fieldset').length>0) {
|
||||
$('#remove-a-day, #copyhours').removeClass('disabled');
|
||||
}
|
||||
|
||||
@ -256,13 +261,13 @@ $(document).ready(function() {
|
||||
$('.choice-field:last').remove();
|
||||
var nb_choices = $('.choice-field').length;
|
||||
$('#choice'+(nb_choices-1)).focus();
|
||||
if (nb_choices == 2) {
|
||||
if (nb_choices == 1) {
|
||||
$('#remove-a-choice').addClass('disabled');
|
||||
};
|
||||
SubmitChoicesAvalaible();
|
||||
});
|
||||
|
||||
// 2 choices filled and you can submit
|
||||
// 1 choice filled and you can submit
|
||||
function SubmitChoicesAvalaible() {
|
||||
var nb_filled_choices = 0;
|
||||
$('.choice-field input').each(function() {
|
||||
@ -270,7 +275,7 @@ $(document).ready(function() {
|
||||
nb_filled_choices++;
|
||||
}
|
||||
});
|
||||
if(nb_filled_choices>1) {
|
||||
if(nb_filled_choices>0) {
|
||||
$('button[name="fin_sondage_autre"]').removeClass('disabled');
|
||||
} else {
|
||||
$('button[name="fin_sondage_autre"]').addClass('disabled');
|
||||
|
Binary file not shown.
@ -455,7 +455,7 @@ msgstr "Umfragedaten (2 von 3)"
|
||||
msgid "Choose the dates of your poll"
|
||||
msgstr "Wählen Sie Terminmöglichkeiten für Ihre Umfrage"
|
||||
|
||||
msgid "To schedule an event you need to propose at least two choices (two hours for one day or two days)."
|
||||
msgid "To schedule an event, it's better to propose at least two choices (two hours for one day or two days)."
|
||||
msgstr "Um eine Umfrage für einen Termin zu erstellen, müssen Sie mindestens zwei Auswahlmöglichkeiten angeben (zwei verschiedene Zeiten an einem Tag oder zwei Tage)."
|
||||
|
||||
msgid "You can add or remove additionnal days and hours with the buttons"
|
||||
@ -495,7 +495,7 @@ msgstr "Alle Uhrzeiten entfernen"
|
||||
msgid "Poll subjects (2 on 3)"
|
||||
msgstr "Umfragethemen (2 von 3)"
|
||||
|
||||
msgid "To make a generic poll you need to propose at least two choices between differents subjects."
|
||||
msgid "To make a generic poll, it's better to propose at least two choices between differents subjects."
|
||||
msgstr "Um eine allgemeine Umfrage zu erstellen, benötigen Sie mindestens zwei Auswahlmöglichkeiten zwischen verschiedenen Themen."
|
||||
|
||||
msgid "You can add or remove additional choices with the buttons"
|
||||
|
Binary file not shown.
@ -461,8 +461,8 @@ msgstr "Poll dates (2 on 3)"
|
||||
msgid "Choose the dates of your poll"
|
||||
msgstr "Choose the dates of your poll"
|
||||
|
||||
msgid "To schedule an event you need to propose at least two choices (two hours for one day or two days)."
|
||||
msgstr "To schedule an event you need to propose at least two choices (two hours for one day or two days)."
|
||||
msgid "To schedule an event, it's better to propose at least two choices (two hours for one day or two days)."
|
||||
msgstr "To schedule an event, it's better to propose at least two choices (two hours for one day or two days)."
|
||||
|
||||
msgid "You can add or remove additionnal days and hours with the buttons"
|
||||
msgstr "You can add or remove additionnal days and hours with the buttons"
|
||||
@ -501,8 +501,8 @@ msgstr "Remove all hours"
|
||||
msgid "Poll subjects (2 on 3)"
|
||||
msgstr "Poll subjects (2 on 3)"
|
||||
|
||||
msgid "To make a generic poll you need to propose at least two choices between differents subjects."
|
||||
msgstr "To make a generic poll you need to propose at least two choices between differents subjects."
|
||||
msgid "To make a generic poll, it's better to propose at least two choices between differents subjects."
|
||||
msgstr "To make a generic poll, it's better to propose at least two choices between differents subjects."
|
||||
|
||||
msgid "You can add or remove additional choices with the buttons"
|
||||
msgstr "You can add or remove additional choices with the buttons"
|
||||
|
Binary file not shown.
@ -461,8 +461,8 @@ msgstr "Choix des dates (2 sur 3)"
|
||||
msgid "Choose the dates of your poll"
|
||||
msgstr "Choisissez les dates de votre sondage"
|
||||
|
||||
msgid "To schedule an event you need to propose at least two choices (two hours for one day or two days)."
|
||||
msgstr "Pour créer un sondage spécial dates vous devez proposer au moins deux choix (deux horaires pour une même journée ou deux jours)."
|
||||
msgid "To schedule an event, it's better to propose at least two choices (two hours for one day or two days)."
|
||||
msgstr "Pour créer un sondage spécial dates, il est préférable de proposer au moins deux choix (deux horaires pour une même journée ou deux jours)."
|
||||
|
||||
msgid "You can add or remove additionnal days and hours with the buttons"
|
||||
msgstr "Vous pouvez ajouter ou supprimer des jours et horaires supplémentaires avec les boutons"
|
||||
@ -501,8 +501,8 @@ msgstr "Effacer tous les horaires"
|
||||
msgid "Poll subjects (2 on 3)"
|
||||
msgstr "Choix des sujets (2 sur 3)"
|
||||
|
||||
msgid "To make a generic poll you need to propose at least two choices between differents subjects."
|
||||
msgstr "Pour créer un sondage classique, vous devez proposer au moins deux choix différents."
|
||||
msgid "To make a generic poll, it's better to propose at least two choices between differents subjects."
|
||||
msgstr "Pour créer un sondage classique, il est préférable de proposer au moins deux choix différents."
|
||||
|
||||
msgid "You can add or remove additional choices with the buttons"
|
||||
msgstr "Vous pouvez ajouter ou supprimer des choix supplémentaires avec les boutons"
|
||||
@ -580,7 +580,7 @@ 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."
|
||||
|
||||
msgid "Removal date (optional)"
|
||||
msgstr "Date de fin (facultative)"
|
||||
msgstr "Date de suppression (facultative)"
|
||||
|
||||
############# Admin #############
|
||||
msgid "Polls administrator"
|
||||
|
107
studs.php
107
studs.php
@ -34,28 +34,28 @@ $numsondage = false;
|
||||
|
||||
//On récupère le numéro de sondage par le lien web.
|
||||
if(Utils::issetAndNoEmpty('sondage', $_GET) === true) {
|
||||
$numsondage = $_GET['sondage'];
|
||||
$_SESSION['numsondage'] = $numsondage;
|
||||
$numsondage = $_GET["sondage"];
|
||||
$_SESSION["numsondage"] = $numsondage;
|
||||
}
|
||||
|
||||
if(Utils::issetAndNoEmpty('sondage') === true) {
|
||||
$numsondage = $_POST['sondage'];
|
||||
$_SESSION['numsondage'] = $numsondage;
|
||||
$numsondage = $_POST["sondage"];
|
||||
$_SESSION["numsondage"] = $numsondage;
|
||||
} elseif(Utils::issetAndNoEmpty('sondage', $_COOKIE) === true) {
|
||||
$numsondage = $_COOKIE['sondage'];
|
||||
$numsondage = $_COOKIE["sondage"];
|
||||
} elseif(Utils::issetAndNoEmpty('numsondage', $_SESSION) === true) {
|
||||
$numsondage = $_SESSION['numsondage'];
|
||||
$numsondage = $_SESSION["numsondage"];
|
||||
}
|
||||
|
||||
$dsondage = ($numsondage != false) ? Utils::get_sondage_from_id($numsondage) : false;
|
||||
if (!$dsondage || $dsondage->id_sondage == '') {
|
||||
Utils::print_header( _('Error!'));
|
||||
if (!$dsondage || $dsondage->id_sondage == ''){
|
||||
Utils::print_header( _("Error!"));
|
||||
|
||||
bandeau_titre(_('Error!'));
|
||||
bandeau_titre(_("Error!"));
|
||||
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<h2>' . _('This poll doesn\'t exist !') . '</h2>
|
||||
<h2>' . _("This poll doesn't exist !") . '</h2>
|
||||
<p>' . _('Back to the homepage of ') . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a></p>
|
||||
</div>'."\n";
|
||||
|
||||
@ -124,7 +124,7 @@ if(isset($_POST['ajoutcomment'])) {
|
||||
}
|
||||
|
||||
|
||||
// Action quand on clique sur le bouton participer
|
||||
// Action quand on clique le bouton participer
|
||||
$sql = 'SELECT * FROM user_studs WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_users';
|
||||
$sql = $connect->Prepare($sql);
|
||||
$user_studs = $connect->Execute($sql, array($numsondage));
|
||||
@ -136,21 +136,20 @@ if (!Utils::is_error(NO_POLL) && (isset($_POST["boutonp"]))) {
|
||||
$err |= NAME_EMPTY;
|
||||
}
|
||||
|
||||
if(!Utils::is_error(NAME_EMPTY) && (! ( USE_REMOTE_USER && isset($_SERVER['REMOTE_USER']) ) || $_POST['nom'] == $_SESSION['nom'])) {
|
||||
if(!Utils::is_error(NAME_EMPTY) && (! ( USE_REMOTE_USER && isset($_SERVER['REMOTE_USER']) ) || $_POST["nom"] == $_SESSION["nom"])) {
|
||||
$nouveauchoix = '';
|
||||
for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
// TODO reuse getNewChoiceFromPOST of adminstuds.php see 8272e0db84fb65210eddf5a370e0c5a2411fea79
|
||||
if (isset($_POST['choix'. $i])) {
|
||||
switch ($_POST['choix'. $i]) {
|
||||
case 1: $nouveauchoix .= '1'; break;
|
||||
case 2: $nouveauchoix .= '2'; break;
|
||||
default: $nouveauchoix .= '0';
|
||||
if (isset($_POST["choix$i"])) {
|
||||
switch ($_POST["choix$i"]) {
|
||||
case 1: $nouveauchoix .= "1";break;
|
||||
case 2: $nouveauchoix .= "2";break;
|
||||
default: $nouveauchoix .= "0";break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$nom = substr($_POST['nom'], 0, 64);
|
||||
$nom=substr($_POST["nom"],0,64);
|
||||
|
||||
// protection contre les XSS : htmlentities
|
||||
$nom = htmlentities($nom, ENT_QUOTES, 'UTF-8');
|
||||
@ -173,14 +172,14 @@ if (!Utils::is_error(NO_POLL) && (isset($_POST["boutonp"]))) {
|
||||
// Todo : Il faudrait lever une erreur en cas d'erreur d'insertion
|
||||
$connect->Execute($sql, array($nom, $numsondage, $nouveauchoix));
|
||||
|
||||
if ($dsondage->mailsonde || /* compatibility for non boolean DB */ $dsondage->mailsonde=='yes' || $dsondage->mailsonde=='true') {
|
||||
if ($dsondage->mailsonde || /* compatibility for non boolean DB */ $dsondage->mailsonde=="yes" || $dsondage->mailsonde=="true") {
|
||||
if($config['use_smtp']==true){
|
||||
Utils::sendEmail( $dsondage->mail_admin,
|
||||
'['.NOMAPPLICATION.'] '._('Poll\'s participation').' : '.html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8'),
|
||||
Utils::sendEmail( "$dsondage->mail_admin",
|
||||
"[".NOMAPPLICATION."] "._("Poll's participation")." : ".html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8')."",
|
||||
html_entity_decode("\"$nom\" ", ENT_QUOTES, 'UTF-8').
|
||||
_('has filled a line.\nYou can find your poll at the link') . " :\n\n".
|
||||
_("has filled a line.\nYou can find your poll at the link") . " :\n\n".
|
||||
Utils::getUrlSondage($numsondage) . " \n\n" .
|
||||
_('Thanks for your confidence.') . "\n". NOMAPPLICATION );
|
||||
_("Thanks for your confidence.") . "\n". NOMAPPLICATION );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -190,22 +189,22 @@ if (!Utils::is_error(NO_POLL) && (isset($_POST["boutonp"]))) {
|
||||
}
|
||||
|
||||
if($err != 0) {
|
||||
Utils::print_header(_('Error!').' - '.$dsondage->titre);
|
||||
bandeau_titre(_('Error!'));
|
||||
Utils::print_header(_("Error!").' - '.$dsondage->titre);
|
||||
bandeau_titre(_("Error!"));
|
||||
|
||||
echo '<div class="alert alert-danger"><ul class="list-unstyled">'."\n";
|
||||
|
||||
if(Utils::is_error(NAME_EMPTY)) {
|
||||
echo '<li>' . _('Enter a name') . "</li>\n";
|
||||
echo '<li>' . _("Enter a name") . "</li>\n";
|
||||
}
|
||||
if(Utils::is_error(NAME_TAKEN)) {
|
||||
echo '<li>' . _('The name you\'ve chosen already exist in this poll!') . "</li>\n";
|
||||
echo '<li>' . _("The name you've chosen already exist in this poll!") . "</li>\n";
|
||||
}
|
||||
if(Utils::is_error(COMMENT_EMPTY) || Utils::is_error(COMMENT_USER_EMPTY)) {
|
||||
echo '<li>' . _('Enter a name and a comment!') . "</li>\n";
|
||||
echo '<li>' . _("Enter a name and a comment!") . "</li>\n";
|
||||
}
|
||||
if(Utils::is_error(COMMENT_INSERT_FAILED) ) {
|
||||
echo '<li>' . _('Failed to insert the comment!') . "</li>\n";
|
||||
echo '<li>' . _("Failed to insert the comment!") . "</li>\n";
|
||||
}
|
||||
|
||||
echo '</ul></div>';
|
||||
@ -244,7 +243,7 @@ echo '
|
||||
//affichage de la description du sondage
|
||||
if ($dsondage->commentaires) {
|
||||
$commentaires = $dsondage->commentaires;
|
||||
$commentaires=nl2br(str_replace('\\', '', $commentaires));
|
||||
$commentaires=nl2br(str_replace("\\","",$commentaires));
|
||||
echo '
|
||||
<div class="form-group col-md-7">
|
||||
<h4 class="control-label">'._("Description") .'</h4><br />
|
||||
@ -261,12 +260,12 @@ $nblignes = $user_studs->RecordCount();
|
||||
//on teste pour voir si une ligne doit etre modifiée
|
||||
$testmodifier = false;
|
||||
$ligneamodifier = -1;
|
||||
for ($i=0; $i < $nblignes; ++$i) {
|
||||
if (isset($_POST['modifierligne'. $i])) {
|
||||
for ($i=0;$i<$nblignes;$i++) {
|
||||
if (isset($_POST["modifierligne$i"])) {
|
||||
$ligneamodifier = $i;
|
||||
}
|
||||
|
||||
//test pour voir si une ligne est à modifier
|
||||
//test pour voir si une ligne est a modifier
|
||||
if (isset($_POST['validermodifier'.$i])) {
|
||||
$modifier = $i;
|
||||
$testmodifier = true;
|
||||
@ -275,20 +274,19 @@ for ($i=0; $i < $nblignes; ++$i) {
|
||||
|
||||
//si le test est valide alors on affiche des checkbox pour entrer de nouvelles valeurs
|
||||
if ($testmodifier) {
|
||||
// TODO reuse getNewChoiceFromPOST of adminstuds.php see 8272e0db84fb65210eddf5a370e0c5a2411fea79
|
||||
$nouveauchoix = '';
|
||||
for ($i=0;$i<$nbcolonnes;$i++) {
|
||||
// radio checked 1 = Yes, 2 = Ifneedbe, 0 = No
|
||||
if (isset($_POST["choix$i"])) {
|
||||
switch ($_POST["choix$i"]) {
|
||||
case 1: $nouveauchoix .= "1"; break;
|
||||
case 2: $nouveauchoix .= "2"; break;
|
||||
default: $nouveauchoix .= "0";
|
||||
case 1: $nouveauchoix .= "1";break;
|
||||
case 2: $nouveauchoix .= "2";break;
|
||||
default: $nouveauchoix .= "0";break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$compteur = 0;
|
||||
$compteur=0;
|
||||
while ($data = $user_studs->FetchNextObject(false) ) {
|
||||
//mise a jour des données de l'utilisateur dans la base SQL
|
||||
if ($compteur == $modifier) {
|
||||
@ -300,7 +298,7 @@ if ($testmodifier) {
|
||||
Utils::sendEmail( "$dsondage->mail_admin", "[".NOMAPPLICATION."] " . _("Poll's participation") . " : ".html_entity_decode($dsondage->titre, ENT_QUOTES, 'UTF-8'), "\"".html_entity_decode($data->nom, ENT_QUOTES, 'UTF-8')."\""."" . _("has filled a line.\nYou can find your poll at the link") . " :\n\n" . Utils::getUrlSondage($numsondage) . " \n\n" . _("Thanks for your confidence.") . "\n".NOMAPPLICATION );
|
||||
}
|
||||
}
|
||||
++$compteur;
|
||||
$compteur++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -352,7 +350,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+"||$dsondage->format=="D-") {
|
||||
} else {
|
||||
$border[$i] = true;
|
||||
$tr_months .= '<th colspan="'.$colspan_month.'" class="bg-primary month" id="M'.($i+1-$colspan_month).'">'.strftime("%B",$horoCur[0]).' '.strftime("%Y", $horoCur[0]).'</th>';
|
||||
$colspan_month = 1;
|
||||
$colspan_month=1;
|
||||
}
|
||||
|
||||
// Days
|
||||
@ -363,7 +361,7 @@ if ($dsondage->format=="D"||$dsondage->format=="D+"||$dsondage->format=="D-") {
|
||||
} else {
|
||||
$rbd = ($border[$i]) ? ' rbd' : '';
|
||||
$tr_days .= '<th colspan="'.$colspan_day.'" class="bg-primary day'.$rbd.'" id="D'.($i+1-$colspan_day).'">'.strftime($date_format['txt_day'],$horoCur[0]).'</th>';
|
||||
$colspan_day = 1;
|
||||
$colspan_day=1;
|
||||
}
|
||||
|
||||
// Hours
|
||||
@ -387,14 +385,13 @@ if ($dsondage->format=="D"||$dsondage->format=="D+"||$dsondage->format=="D-") {
|
||||
|
||||
// Subjects poll
|
||||
} else {
|
||||
$toutsujet=str_replace('@','<br />', $toutsujet);
|
||||
$toutsujet=str_replace("@","<br />",$toutsujet);
|
||||
|
||||
$tr_subjects = '<tr><th role="presentation"></th>';
|
||||
|
||||
for ($i = 0; isset($toutsujet[$i]); ++$i) {
|
||||
for ($i = 0; isset($toutsujet[$i]); $i++) {
|
||||
|
||||
$td_headers[$i] = '';
|
||||
$radio_title[$i] = ''; // init before concatenate
|
||||
$td_headers[$i]='';$radio_title[$i]=''; // init before concatenate
|
||||
|
||||
// Subjects
|
||||
preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$toutsujet[$i],$md_a_img); // Markdown [![alt](src)](href)
|
||||
@ -501,9 +498,9 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
// variable pour afficher la valeur cochée
|
||||
$car_html[0]='value="0"';$car_html[1]='value="1"';$car_html[2]='value="2"';
|
||||
switch ($car) {
|
||||
case '1': $car_html[1]='value="1" checked'; break;
|
||||
case '2': $car_html[2]='value="2" checked'; break;
|
||||
default: $car_html[0]='value="0" checked';
|
||||
case "1": $car_html[1]='value="1" checked';break;
|
||||
case "2": $car_html[2]='value="2" checked';break;
|
||||
default: $car_html[0]='value="0" checked';break;
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -538,7 +535,7 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
if (isset($somme[$k]) === false) {
|
||||
$somme[$k] = 0;
|
||||
}
|
||||
++$somme[$k]; break;
|
||||
$somme[$k]++; break;
|
||||
case "2": echo '<td class="bg-warning text-warning'.$rbd.'" headers="'.$td_headers[$k].'">(<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only"> ' . _('Yes') . _(', ifneedbe') . '</span></td>'."\n"; break;
|
||||
default: echo '<td class="bg-danger'.$rbd.'" headers="'.$td_headers[$k].'"><span class="sr-only">' . _('No') . '</span></td>'."\n";
|
||||
}
|
||||
@ -556,8 +553,8 @@ while ($data = $user_studs->FetchNextObject(false)) {
|
||||
}
|
||||
|
||||
//demande de confirmation pour modification de ligne
|
||||
for ($i=0; $i < $nblignes; ++$i) {
|
||||
if (isset($_POST['modifierligne'. $i])) {
|
||||
for ($i=0;$i<$nblignes;$i++) {
|
||||
if (isset($_POST["modifierligne$i"])) {
|
||||
if ($compteur == $i) {
|
||||
echo '<td style="padding:5px"><button type="submit" class="btn btn-success btn-xs" name="validermodifier'.$compteur.'" title="'. _('Save the choices') .' '.stripslashes($nombase).'">'. _('Save') .'</button></td>'."\n";
|
||||
}
|
||||
@ -636,7 +633,7 @@ for ($i = 0; $i < $nbcolonnes; $i++) {
|
||||
}
|
||||
$tr_addition .= '<td></td></tr>';
|
||||
|
||||
$meilleursujet = str_replace('°', '\'', $meilleursujet).'</ul>';
|
||||
$meilleursujet = str_replace("°", "'", $meilleursujet).'</ul>';
|
||||
$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote');
|
||||
|
||||
// Print Addition and Best choice
|
||||
@ -674,7 +671,7 @@ $sql = $connect->Prepare($sql);
|
||||
$comment_user=$connect->Execute($sql, array($numsondage));
|
||||
|
||||
if ($comment_user->RecordCount() != 0) {
|
||||
echo '<div><h3>' . _('Comments of polled people') . '</h3>'."\n";
|
||||
echo '<div><h3>' . _("Comments of polled people") . '</h3>'."\n";
|
||||
|
||||
while($dcomment = $comment_user->FetchNextObject(false)) {
|
||||
echo '
|
||||
@ -687,7 +684,7 @@ if ($comment_user->RecordCount() != 0) {
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
if ($dsondage->format != 'A-' && $dsondage->format != 'D-') {
|
||||
if ($dsondage->format!="A-" && $dsondage->format!="D-") {
|
||||
echo '
|
||||
<div class="hidden-print alert alert-info">
|
||||
<div class="col-md-6 col-md-offset-3">
|
||||
|
Loading…
Reference in New Issue
Block a user