Commit 17f16cd0 by Thomas Citharel

Merge branch 'develop' into 'master'

Release 1.1.0-alpha.2

See merge request !246
parents 89c5ff36 edb5a84c
Pipeline #43786 passed with stage
in 1 minute 6 seconds
image: php
image: framasoft/framadate-ci
stages:
- test
- deploy
- funky
# install zip, git, composer on each build
before_script:
- apt-get update -yqq
- apt-get install zip unzip git -yqq
# Run php-cs-fixer and phpunit on all branches
test:
stage: test
script:
- curl --silent --show-error https://getcomposer.org/installer | php
- php composer.phar install -o --no-interaction --no-progress --prefer-dist
- composer install -o --no-interaction --no-progress --prefer-dist
- mkdir tpl_c
- php vendor/bin/php-cs-fixer fix --verbose --dry-run
- vendor/bin/phpunit --bootstrap app/tests/bootstrap.php --debug app/tests
......@@ -28,10 +22,8 @@ pages:
script:
- latesttag=$(git describe --tags)
- git checkout ${latesttag}
- curl --silent --show-error https://getcomposer.org/installer | php
- php composer.phar install -o --no-interaction --no-progress --prefer-dist --no-dev
- php composer.phar dump-autoload --optimize --no-dev --classmap-authoritative
- rm -rf composer.phar
- composer install -o --no-interaction --no-progress --prefer-dist --no-dev
- composer dump-autoload --optimize --no-dev --classmap-authoritative
- mkdir tpl_c
- mkdir framadate
- mv `ls -A | grep -v framadate` ./framadate
......@@ -50,8 +42,7 @@ funky:
stage: funky
script:
- git checkout funky
- curl --silent --show-error https://getcomposer.org/installer | php
- php composer.phar install
- composer install
- mkdir tpl_c
- mkdir .public
- cp -r * .public
......
#!/bin/bash
po2json -i po/en.po -t locale/en.json --progress none -o po/default.json
for i in po/*.po
do
j=$(echo $i | cut -d '.' -f 1 | cut -d '/' -f 2)
po2json -i $i -t locale/en.json --progress none | ./.renest_json.pl > po/$j.json
mv po/$j.json locale/
done
mv po/*.json locale/
......@@ -3,10 +3,20 @@ use strict;
use warnings;
use JSON;
#use Hash::Merge::Simple qw(merge);
my $json = JSON->new->utf8->space_before(0)->space_after(1)->indent(4)->canonical(1);
my $en_file = 'po/default.json';
my $en;
{
open my $fh, '<', $en_file or die;
local $/ = undef;
$en = <$fh>;
close $fh;
}
$en = $json->decode($en);
my $new_json = {};
my $old_json = '';
......@@ -20,7 +30,11 @@ for my $key (keys %{$old_json}) {
my $real_key = substr($key, 0, $index++);
my $trad_key = substr($key, $index);
$new_json->{$real_key}->{$trad_key} = $old_json->{$key} if $old_json->{$key};
if ($old_json->{$key}) {
$new_json->{$real_key}->{$trad_key} = $old_json->{$key};
} else {
$new_json->{$real_key}->{$trad_key} = $en->{$key};
}
}
print $json->encode($new_json);
# Pré-requis
- Apache
- MySQL ou PostgreSQL
- PHP 5.6+
- [Composer](https://getcomposer.org/)
# Pré-installation
## Composer
Pour installer les dépendances nécessaires au bon fonctionnement du projet, vous devez lancer la commande suivante :
```sh
composer install
```
## Base de données
Framadate fonctionne indépendemment de la base SQL utilisée.
Cependant la base de donnée doit être créée au préalable,
après avoir renseigné les paramètres de la base de données, créez la.
### PostgreSQL
```bash
su - pgsql
createdb framadate
```
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 `framadate`" pour donner les droits à l'utilisateur `framadate` 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".
### MySQL
```sql
-- Créer une base de données
CREATE DATABASE IF NOT EXISTS `framadate_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-- Créer un utilisateur
CREATE USER 'framadate_user'@'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON `framadate_db`.* TO 'framadate_user'@'localhost';
```
## Si vous utilisez la version GIT
Il faut utiliser [Composer](https://getcomposer.org/) avant d'effectuer l'installation
Ensuite ``composer install`` ou ``php composer.phar install``
À noter que pour que l'installation se déroule correctement, MySQL doit être lancé avec le paramètre `[NO_ZERO_DATE](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date)` désactivé. Il vous faudra aller le supprimer du fichier de configuration `my.cnf`.
# Installation
Pour installer l'application Framadate, rendez-vous sur la page http://monsite/ ; vous serez redirigé vers un outil de vérification de l'état de l'installation qui vous permettra, une fois les prérequis remplis, d'accèder au formulaire de paramètrage.
Le champ `* Chaîne de connexion` contient la variable `<HOST>` qui doit être remplacée par le nom d'hôte de votre base de données, par exemple `localhost`. Il contient également la variable `<SCHEMA>` qui doit être remplacée par le nom de la base de données que vous allez utiliser. Si vous avez suivi les recommandations précédente, ça devrait être `framadate_db`.
Une fois le formulaire rempli et envoyé, un script va générer le fichier `app/inc/config.php` puis vous rediriger vers la page de migration.
La page de migration s'occupe :
- D'installer toute la base de données (tables + données d'exemple)
- De mettre à jour la base de données lors des mises à jour de l'application.
! Attention, le chargement de la page de migration peut prendre du temps étant donné qu'elle applique toutes les mises à jours requises !
# Accès à la page administrateur
Le répertoire `admin/` fournit l'accès à certaines actions et informations à protéger.
Il convient de mettre en place un couple de fichiers `.htaccess`/`.htpasswd`, pour restreindre l'accès à la page d'administration de l'application.
Il existe une multitude de tutoriels sur internet à ce sujet.
# Journal de l'application
Un fichier `admin/stdout.log` doit être créé et accessible en écriture
par votre serveur Web. Quelque chose comme devrait convenir:
```bash
touch admin/stdout.log
chmod 700 admin/stdout.log
chown www-data admin/stdout.log
```
# Maintenance
Framadate dispose d'une possibilité de mise en maintenance par le biais d'un fichier `.htaccess`.
La section `<Directory>` relative à Framadate, 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, le nom des tables est donné sans préfixe.
La base se compose de quatre tables :
- `poll` : Le paramètrage des sondages;
- `slot` : les choix disponibles pour chaque sondage;
- `vote` : les votes effectués par les utilisateurs pour chaque sondage;
- `comment` : les commentaires apportés à chaque sondage.
# [Now available here](https://framagit.org/framasoft/framadate/wikis/home)
\ No newline at end of file
push-locales:
locales:
json2po -P -i locale/en.json -t locale/en.json -o po/framadate.pot
push-locales: locales
zanata-cli -q -B push
pull-locales:
......
# Présentation du projet
# Framadate
![Gitlab](https://framagit.org/assets/logo-black-f52905a40830b30aa287f784b537c823.png)[https://framagit.org](https://framagit.org)
![English](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/20px-Flag_of_the_United_Kingdom.svg.png) Framadate is an online service for planning an appointment or making a decision quickly and easily. No registration is required.
![English](https://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 [framagit.org](https://framagit.org)**. (no registration needed, you can sign in with your Github account)
![Français](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/20px-Flag_of_France.svg.png) Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement. Aucune inscription préalable n’est nécessaire.
![Français](https://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 [framagit.org](https://framagit.org)**. (l'inscription n'est pas nécessaire, vous pouvez vous connecter avec votre compte Github)
---
# Installation
Un fichier est dédié à l'installation de framadate : [INSTALL.md](INSTALL.md).
# Comment contribuer avec du code
## De votre côté
1. Créer un compte sur [https://framagit.org](https://framagit.org)
1. Créer un fork du projet principal : [Créer le fork](https://framagit.org/framasoft/framadate/forks/new)
1. Créer une branche nommée feature/[Description] à partir de la branche **develop**
*[Description] est une description en anglais très courte de ce qui va être fait
1. Faire des commits dans votre branche
1. Pusher la branche sur votre fork
1. Demander une merge request vers **develop**
## La suite se passe de notre côté
1. Quelqu'un relira votre travail
* Essayez de rendre ce travail plus facile en organisant vos commits
1. S'il y a des remarques sur le travail, le relecteur fera des commentaires sur la merge request
1. Si la merge request lui semble correcte il peut merger votre travail avec la branche **develop**
## Corrections suite à une relecture
Follow the instructions on our Wiki : <https://framagit.org/framasoft/framadate/wikis/home>
La relecture de la merge request peut vous amener à faire des corrections.
Vous pouvez faire ces corrections dans votre branche, ce qui aura pour effet de les ajouter à la merge request.
# Contribute
## Comprendre le code
Un fichier est dédié à l'appréhension du code de framadate : [Document technique](doc/TECHNICAL.md).
## Code
Follow the instructions on <https://framagit.org/framasoft/framadate/wikis/coding>
# Traductions
Les traductions se trouvent dans le dossier `locale`. Chaque langue est dans un fichier JSON différent organisé par section.
Ne modifiez pas directement les fichiers !
Si vous avez des modifications à y apporter (voire ajouter une nouvelle traduction), allez sur <https://trad.framasoft.org> (tout y est expliqué sur la page d'accueil).
La page de traduction du projet Framadate est <https://trad.framasoft.org/zanata/iteration/view/framadate/master>.
# Synthèses des librairies utilisées
[Smarty](http://www.smarty.net/),
gestion des templates pour PHP
[o80-i18n](https://github.com/olivierperez/o80-i18n),
système d'internationalisation
Follow the instructions on <https://framagit.org/framasoft/framadate/wikis/translating>
[PHP 5.4.4](http://php.net)
# Used libraries
PostgreSQL ou [MySQL 5.5](https://dev.mysql.com/downloads/mysql/5.5.html)
* PHP [PHP 5.6](http://php.net)
* Templating [Smarty](http://www.smarty.net/),
* I18N [o80-i18n](https://github.com/olivierperez/o80-i18n)
* Database: PostgreSQL ou [MySQL 5.5](https://dev.mysql.com/downloads/mysql/5.5.html)
---
Framadate est un fork du projet [STUdS](https://sourcesup.cru.fr/projects/studs/), il motorise framadate.org pour framasoft.org
Framadate is a fork of the [STUdS](https://sourcesup.cru.fr/projects/studs/) project, that works at framadate.org for framasoft.org
Les auteurs principaux de Framadate sont :
Previous main authors of Framadate were :
* Simon LEBLANC
* Pierre-Yves GOSSET
Les auteurs principaux du projet STUdS sont :
Main authors of project STUdS are :
* Guilhem BORGHESI
* Raphaël DROZ
......
......@@ -42,7 +42,7 @@ $is_admin = false;
$logService = new LogService();
$pollService = new PollService($connect, $logService);
$inputService = new InputService();
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
$notificationService = new NotificationService($mailService);
$securityService = new SecurityService();
......
......@@ -28,7 +28,7 @@ include_once __DIR__ . '/../app/inc/init.php';
$logService = new LogService();
$sessionService = new SessionService();
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
$pollService = new PollService($connect, $logService);
$result = false;
......@@ -91,4 +91,4 @@ $smarty->error_reporting = E_ALL & ~E_NOTICE;
$response = ['result' => $result, 'message' => $message];
echo json_encode($response);
\ No newline at end of file
echo json_encode($response);
......@@ -24,6 +24,7 @@ use Framadate\Migration\AddColumn_ValueMax_In_poll_For_1_1;
use Framadate\Migration\AddColumns_password_hash_And_results_publicly_visible_In_poll_For_0_9;
use Framadate\Migration\Alter_Comment_table_adding_date;
use Framadate\Migration\Alter_Comment_table_for_name_length;
use Framadate\Migration\Fix_MySQL_No_Zero_Date;
use Framadate\Migration\From_0_0_to_0_8_Migration;
use Framadate\Migration\From_0_8_to_0_9_Migration;
use Framadate\Migration\Generate_uniqId_for_old_votes;
......@@ -49,11 +50,14 @@ $migrations = [
new Alter_Comment_table_for_name_length(),
new Alter_Comment_table_adding_date(),
new AddColumns_password_hash_And_results_publicly_visible_In_poll_For_0_9(),
new Increase_pollId_size()
new Increase_pollId_size(),
new AddColumn_ValueMax_In_poll_For_1_1(),
new Fix_MySQL_No_Zero_Date(),
];
// ---------------------------------------
// Check if MIGRATION_TABLE already exists
/** @var \Framadate\FramaDB $connect */
$tables = $connect->allTables();
$pdo = $connect->getPDO();
$prefixedMigrationTable = Utils::table(MIGRATION_TABLE);
......
......@@ -49,7 +49,7 @@ $logService = new LogService();
$pollService = new PollService($connect, $logService);
$adminPollService = new AdminPollService($connect, $pollService, $logService);
$inputService = new InputService();
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
$notificationService = new NotificationService($mailService);
/* PAGE */
......
......@@ -65,7 +65,6 @@ class AddColumn_ValueMax_In_poll_For_1_1 implements Migration {
private function alterPollTable(\PDO $pdo) {
$pdo->exec('
ALTER TABLE `' . Utils::table('poll') . '`
ADD `ValueMax` TINYINT,
ADD CHECK (ValueMax > 0)');
ADD `ValueMax` TINYINT NULL;');
}
}
<?php
/**
* This software is governed by the CeCILL-B license. If a copy of this license
* is not distributed with this file, you can obtain one at
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
*
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
* Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft)
*
* =============================
*
* Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
* ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
*
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
*/
namespace Framadate\Migration;
use Framadate\Utils;
/**
* This migration sets Poll.end_date to NULL by default
*
* @package Framadate\Migration
* @version 1.1
*/
class Fix_MySQL_No_Zero_Date implements Migration {
function __construct() {
}
/**
* This method should describe in english what is the purpose of the migration class.
*
* @return string The description of the migration class
*/
function description() {
return 'Sets Poll end_date to NULL by default (work around MySQL NO_ZERO_DATE)';
}
/**
* This method could check if the execute method should be called.
* It is called before the execute method.
*
* @param \PDO $pdo The connection to database
* @return bool true is the Migration should be executed.
*/
function preCondition(\PDO $pdo) {
$stmt = $pdo->prepare("SELECT Column_Default from Information_Schema.Columns where Table_Name = ? AND Column_Name = ?;");
$stmt->bindValue(1, Utils::table('poll'));
$stmt->bindValue(2, 'end_date');
$stmt->execute();
$default = $stmt->fetch(\PDO::FETCH_COLUMN);
return $default !== null;
}
/**
* This method is called only one time in the migration page.
*
* @param \PDO $pdo The connection to database
* @return void true is the execution succeeded
*/
function execute(\PDO $pdo) {
$pdo->exec('ALTER TABLE ' . Utils::table('poll') . ' CHANGE COLUMN end_date TIMESTAMP NULL DEFAULT NULL');
}
}
......@@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS `sondage` (
`titre` text,
`id_sondage_admin` char(24) DEFAULT NULL,
`date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`date_fin` timestamp NOT NULL,
`date_fin` timestamp NULL DEFAULT NULL,
`format` varchar(2) DEFAULT NULL,
`mailsonde` tinyint(1) DEFAULT \'0\',
`statut` int(11) NOT NULL DEFAULT \'1\' COMMENT \'1 = actif ; 0 = inactif ; \',
......
......@@ -89,7 +89,7 @@ CREATE TABLE IF NOT EXISTS `' . Utils::table('poll') . '` (
`admin_name` VARCHAR(64) DEFAULT NULL,
`admin_mail` VARCHAR(128) DEFAULT NULL,
`creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`end_date` TIMESTAMP NOT NULL,
`end_date` TIMESTAMP NULL DEFAULT NULL,
`format` VARCHAR(1) DEFAULT NULL,
`editable` TINYINT(1) DEFAULT \'0\',
`receiveNewVotes` TINYINT(1) DEFAULT \'0\',
......
......@@ -10,21 +10,26 @@ class MailService {
private $smtp_allowed;
private $smtp_options = [];
private $logService;
function __construct($smtp_allowed) {
function __construct($smtp_allowed, $smtp_options = []) {
$this->logService = new LogService();
$this->smtp_allowed = $smtp_allowed;
if (true === is_array($smtp_options)) {
$this->smtp_options = $smtp_options;
}
}
public function isValidEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
function send($to, $subject, $body, $msgKey = null) {
public function send($to, $subject, $body, $msgKey = null) {
if ($this->smtp_allowed === true && $this->canSendMsg($msgKey)) {
$mail = new PHPMailer(true);
$mail->isSMTP();
$this->configureMailer($mail);
// From
$mail->FromName = NOMAPPLICATION;
......@@ -60,7 +65,7 @@ class MailService {
}
}
function canSendMsg($msgKey) {
public function canSendMsg($msgKey) {
if ($msgKey === null) {
return true;
}
......@@ -70,5 +75,28 @@ class MailService {
}
return !isset($_SESSION[self::MAILSERVICE_KEY][$msgKey]) || time() - $_SESSION[self::MAILSERVICE_KEY][$msgKey] > self::DELAY_BEFORE_RESEND;
}
/**
* Configure the mailer with the options
*
* @param PHPMailer $mailer
*/
private function configureMailer(PHPMailer $mailer) {
$mailer->isSMTP();
$available_options = [
'host' => 'Host',
'auth' => 'SMTPAuth',
'username' => 'Username',
'password' => 'Password',
'secure' => 'SMTPSecure',
'port' => 'Port',
];
foreach ($available_options as $config_option => $mailer_option) {
if (true === isset($this->smtp_options[$config_option]) && false === empty($this->smtp_options[$config_option])) {
$mailer->{$mailer_option} = $this->smtp_options[$config_option];
}
}
}
}
\ No newline at end of file
......@@ -89,6 +89,14 @@ const TIME_EDIT_LINK_EMAIL = 60;
$config = [
/* general config */
'use_smtp' => true, // use email for polls creation/modification/responses notification
'smtp_options' => [
'host' => 'localhost', // SMTP server (you could add many servers (main and backup for example) : use ";" like separator
'auth' => false, // Enable SMTP authentication
'username' => '', // SMTP username
'password' => '', // SMTP password
'secure' => '', // Enable encryption (false, tls or ssl)
'port' => 25, // TCP port to connect to
],
'tracking_code' => '', // add HTML code to every page, useful for tools like Piwik
/* home */
'show_what_is_that' => true, // display "how to use" section
......@@ -98,5 +106,5 @@ $config = [
'default_poll_duration' => 180, // default values for the new poll duration (number of days).
/* create_classic_poll.php */
'user_can_add_img_or_link' => true, // user can add link or URL when creating his poll.
'markdown_editor_by_default' => true // The markdown editor for the description is enabled by default
'markdown_editor_by_default' => true, // The markdown editor for the description is enabled by default
];
......@@ -29,7 +29,7 @@ if (isset($_POST['lang']) && is_string($_POST['lang']) && in_array($_POST['lang'
/* <html lang="$locale"> */
$i18n->get('', 'Something, just to load the dictionary');
$locale = $i18n->getLoadedLang();
$locale = str_replace('_', '-', $i18n->getLoadedLang());
/* Date Format */
$date_format['txt_full'] = __('Date', 'FULL'); //summary in create_date_poll.php and removal date in choix_(date|autre).php
......
......@@ -75,3 +75,29 @@ function smarty_modifier_addslashes_single_quote($string) {
function smarty_modifier_html($html) {
return Utils::htmlEscape($html);
}
function smarty_modifier_datepicker_path($lang) {
$i = 0;
while (!is_file(path_for_datepicker_locale($lang)) && $i < 3) {
$lang_arr = explode('-', $lang);
if ($lang_arr && count($lang_arr) > 1) {
$lang = $lang_arr[0];
} else {
$lang = 'en';
}
$i += 1;
}
return 'js/locales/bootstrap-datepicker.' . $lang . '.js';
}
function smarty_modifier_locale_2_lang($locale) {
$lang_arr = explode('-', $locale);
if ($lang_arr && count($lang_arr) > 1) {
return $lang_arr[0];
}
return $locale;
}
function path_for_datepicker_locale($lang) {
return __DIR__ . '/../../js/locales/bootstrap-datepicker.' . $lang . '.js';
}
......@@ -29,7 +29,7 @@ include_once __DIR__ . '/app/inc/init.php';
/*---------*/
$logService = new LogService();
$pollService = new PollService($connect, $logService);
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
$purgeService = new PurgeService($connect, $logService);
if (is_file('bandeaux_local.php')) {
......@@ -44,7 +44,7 @@ if (empty($_SESSION['form']->title) || empty($_SESSION['form']->admin_name) || (
$smarty->assign('error', __('Error', 'You haven\'t filled the first section of the poll creation.'));
$smarty->display('error.tpl');
exit;
}
}
// Min/Max archive date
$min_expiry_time = $pollService->minExpiryDate();
$max_expiry_time = $pollService->maxExpiryDate();
......
......@@ -30,7 +30,7 @@ include_once __DIR__ . '/app/inc/init.php';
/*---------*/
$logService = new LogService();
$pollService = new PollService($connect, $logService);
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
$purgeService = new PurgeService($connect, $logService);
$inputService = new InputService();
......
......@@ -4,16 +4,16 @@
* is not distributed with this file, you can obtain one at
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
*
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphal DROZ
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
* Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft)
*
* =============================
*
* Ce logiciel est rgi par la licence CeCILL-B. Si une copie de cette licence
* Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
* ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
*
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphal DROZ
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
*/
......@@ -28,7 +28,7 @@ include_once __DIR__ . '/app/inc/init.php';
/* -------- */
$logService = new LogService();
$pollService = new PollService($connect, $logService);
$mailService = new MailService($config['use_smtp']);
$mailService = new MailService($config['use_smtp'], $config['smtp_options']);
/* PAGE */
/* ---- */
......
This diff is collapsed. Click to expand it.
......@@ -123,7 +123,11 @@
"Enter a title": "Ret eo enankañ un titl!",
"Enter an email address": "Ret eo enankañ ur chomlec'h postel",
"Error!": "Fazi!",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
"Failed to delete column": "C'hwitadenn war zilemel ar bann",
"Failed to delete the comment": "Failed to delete the comment",
"Failed to delete the poll": "Failed to delete the poll",
"Failed to delete the vote!": "C'hwitadenn en ur zilemel ar vouezh!",
"Failed to insert the comment!": "C'hwitadenn en ur enlakaat an evezhiadenn!",
"Failed to save poll": "C'hwitadenn war enrolladenn ar sontadeg",
......@@ -176,6 +180,7 @@
"Day": "Devezh",
"Description": "Deskrivadur",
"Edit": "Modify",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Ur gwazerezh enlinenn evit prientiñ un emgav pe kemer un diviz a-stroll en un doare eeun hag aes eo Framadate. ",
"Home": "Degemer",
"Ifneedbe": "Marteze",
"Legend:": "Alc'hwez:",
......@@ -323,6 +328,7 @@
"All voters can modify any vote": "An holl vouezhierien a c'hall kemmañ an holl vouezhioù",
"Customize the URL": "Personelaat an ere",
"Go to step 2": "Mont d'ar bazenn 2",
"Limit the ammount of voters per option": "Limit the amount of voters per option",
"More informations here:": "Titouroù ouzhpenn amañ:",
"Only the poll maker can see the poll's results": "N'eus nemet krouer ar sontadeg a c'hell gwelet an disoc'hoù",
"Optional parameters": "Arventennoù diret",
......@@ -341,6 +347,8 @@
"To receive an email for each new comment": "Degemer ur postel evit pep evezhiadenn nevez",
"To receive an email for each new vote": "Degemer ur postel evit pep mouezh nevez",
"Use a password to restrict access": "Lakaat ur ger-tremen evit bevenniñ an haeziñ",
"Value Max": "Value Max",
"ValueMax instructions": "voters per options ",
"Voters can modify their vote themselves": "Pep mouezhier a c'hell kemmañ e vouezh",
"Votes cannot be modified": "N'hall ket ar mouezhioù bezañ kemmet",
"You are in the poll creation section.": "Dibabet ho peus krouiñ ur sontadeg nevez.",
......
......@@ -3,11 +3,11 @@
"Define dates or subjects to choose": "Zeitpunkte oder andere Alternativen zur Auswahl stellen",
"Discuss and make a decision": "Besprechen und Entscheidungen treffen",
"Do you want to": "Wollen Sie sich",
"Framadate is an online service for planning an appointment or make a decision quickly and easily. No registration is required.": "Framadate ist ein Online-Dienst, der Ihnen bei der Absprache von Terminen oder der Entscheidungsfindung hilft. Es ist keinerlei Registrierung ist erforderlich. ",
"Here is how it works:": "So geht es:",
"Framadate is an online service for planning an appointment or make a decision quickly and easily. No registration is required.": "Framadate ist ein Online-Dienst, der Ihnen bei der Absprache von Terminen oder der Entscheidungsfindung hilft. Es ist keinerlei Registrierung erforderlich.",
"Here is how it works:": "So funktioniert es:",
"Make a poll": "Umfrage erstellen",
"Send the poll link to your friends or colleagues": "Link zur Umfrage an Ihre Freunde oder Kollegen schicken",
"What is that?": "Was ist das?",
"What is that?": "Was ist Framadate?",
"view an example?": "ein Beispiel ansehen?"
},
"2nd section": {
......@@ -15,7 +15,7 @@
"Framadate was initially based on ": "Framadate basierte zunächst auf ",
"It is governed by the": "Sie ist lizenziert unter der",
"The software": "Die Software",
"This software needs javascript and cookies enabled. It is compatible with the following web browsers:": "Javascript und Cookie aktiviert sein, damit Framadate funktioniert. Die Software ist mit den folgenden Browsern kompatibel:",
"This software needs javascript and cookies enabled. It is compatible with the following web browsers:": "Javascript und Cookies müssen aktiviert sein, damit Framadate funktioniert. Die Software ist mit den folgenden Browsern kompatibel:",
"a software developed by the University of Strasbourg. Today, it is devevoped by the association Framasoft.": ", einer von der Universität von Straßburg entwickelten Software. Heute wird sie vom Verein Framasoft weiterentwickelt."
},
"3rd section": {
......@@ -123,7 +123,11 @@
"Enter a title": "Titel eingeben",
"Enter an email address": "Geben Sie eine E-Mail Adresse ein",
"Error!": "Fehler!",
"Failed to delete all comments": "Alle kommentare konnten nicht gelöscht werden.",
"Failed to delete all votes": "Alle stimmen konnten nicht gelöscht werden.",
"Failed to delete column": "Löschen der Spalte fehlgeschlagen",
"Failed to delete the comment": "Der kommentar konnte nicht gelöscht werden.",
"Failed to delete the poll": "Die umfrage konnte nicht gelöscht werden.",
"Failed to delete the vote!": "Löschen der Wertung gescheitert!",
"Failed to insert the comment!": "Einfügen des Kommentars gescheitert!",
"Failed to save poll": "Speichern der Umfrage fehlgeschlagen",
......@@ -176,6 +180,7 @@
"Day": "Tag",
"Description": "Beschreibung",
"Edit": "Bearbeiten",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate ist ein On