Merge branch 'develop' into 'master'

Release 1.1.0-alpha.2

See merge request framasoft/framadate!246
This commit is contained in:
Thomas Citharel 2018-03-22 11:04:11 +01:00
commit 17f16cd0f8
36 changed files with 741 additions and 229 deletions

View File

@ -1,20 +1,14 @@
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

View File

@ -1,7 +1,9 @@
#!/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/

View File

@ -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);

View File

@ -1,107 +1 @@
# 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)

View File

@ -1,5 +1,7 @@
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:

View File

@ -1,76 +1,39 @@
# 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 nest 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).
Follow the instructions on our Wiki : <https://framagit.org/framasoft/framadate/wikis/home>
# Comment contribuer avec du code
# Contribute
## 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**
* Où [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
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.
## 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.
Follow the instructions on <https://framagit.org/framasoft/framadate/wikis/translating>
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).
# Used libraries
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
[PHP 5.4.4](http://php.net)
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

View File

@ -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();

View File

@ -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);
echo json_encode($response);

View File

@ -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);

View File

@ -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 */

View File

@ -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;');
}
}

View File

@ -0,0 +1,68 @@
<?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');
}
}

View File

@ -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 ; \',

View File

@ -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\',

View File

@ -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];
}
}
}
}

View 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
];

View File

@ -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

View File

@ -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';
}

View File

@ -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();

View File

@ -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();

View File

@ -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 Raphaël 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 régi 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 Raphaël 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 */
/* ---- */

448
locale/ar.json Normal file
View File

@ -0,0 +1,448 @@
{
"1st section": {
"Define dates or subjects to choose": "Define dates or subjects to choose from",
"Discuss and make a decision": "Discuss and make a decision",
"Do you want to": "Do you want to",
"Framadate is an online service for planning an appointment or make a decision quickly and easily. No registration is required.": "Framadate is an online service for planning an appointment or making a decision quickly and easily. No registration is required.",
"Here is how it works:": "Here is how it works:",
"Make a poll": "Create a poll",
"Send the poll link to your friends or colleagues": "Send the poll link to your friends or colleagues",
"What is that?": "What is Framadate?",
"view an example?": "view an example?"
},
"2nd section": {
"CeCILL-B license": "CeCILL-B license",
"Framadate was initially based on ": "Framadate was initially based on ",
"It is governed by the": "Framadate is licensed under the",
"The software": "The software",
"This software needs javascript and cookies enabled. It is compatible with the following web browsers:": "This software needs JavaScript and cookies enabled. It is compatible with the following web browsers:",
"a software developed by the University of Strasbourg. Today, it is devevoped by the association Framasoft.": "software developed by the University of Strasbourg. These days, it is developed by the Framasoft association."
},
"3rd section": {
"Cultivate your garden": "Grow your own",
"If you want to install the software for your own use and thus increase your independence, we help you on:": "If you want to install the software for your own use and thus increase your independence, we can help you at:",
"To participate in the software development, suggest improvements or simply download it, please visit ": "To participate in the software development, suggest improvements or simply download it, please visit ",
"the development site": "the development site"
},
"Admin": {
"Actions": "Actions",
"Administration": "Administration",
"Author": "Author",
"Back to administration": "Back to administration",
"Change the poll": "Change the poll",
"Confirm removal of the poll": "Confirm removal of the poll ",
"Deleted the poll": "Deleted the poll",
"Email": "Email",
"Expiration date": "Expiry date",
"Fail": "Fail",
"Failed:": "Failed:",
"Format": "Format",
"Installation": "Installation",
"Logs": "Logs",
"Migration": "Migration",
"Nothing": "Nothing",
"Pages:": "الصفحات :",
"Poll ID": "Poll ID",
"Polls": "إستطلاعات الرأي",
"Purge": "Purge",
"Purge the polls": "Purge the polls",
"Purged:": "Purged:",
"See the poll": "See the poll",
"Skipped:": "Skipped:",
"Succeeded:": "Succeeded:",
"Success": "Success",
"Summary": "الملخص",
"Title": "Title",
"Votes": "الأصوات",
"polls in the database at this time": "polls in the database at this time"
},
"Check": {
"Check again": "Check again",
"Consider enabling the PHP extension OpenSSL for increased security.": "Consider enabling the PHP extension OpenSSL for increased security.",
"Consider setting the date.timezone in php.ini.": "Consider setting the date.timezone in php.ini.",
"Consider setting « session.cookie_httponly = 1 » inside your php.ini or add « php_value session.cookie_httponly 1 » to your .htaccess so that cookies can't be accessed through Javascript.": "Consider setting « session.cookie_httponly = 1 » inside your php.ini or add « php_value session.cookie_httponly 1 » to your .htaccess so that cookies can't be accessed through Javascript.",
"Continue the installation": "مواصلة التنصيب",
"Cookies are served from HTTP only.": "Cookies are served from HTTP only.",
"Installation checking": "Installation checking",
"OpenSSL extension loaded.": "OpenSSL extension loaded.",
"PHP Intl extension is enabled.": "PHP Intl extension is enabled.",
"PHP version %s is enough (needed at least PHP %s).": "PHP version %s is enough (needed at least PHP %s).",
"The config file directory (%s) is not writable and the config file (%s) does not exists.": "The config file directory (%s) is not writable and the config file (%s) does not exists.",
"The config file directory (%s) is writable.": "The config file directory (%s) is writable.",
"The config file exists.": "ملف الإعداد موجود.",
"The template compile directory (%s) doesn't exist in \"%s\". Retry the installation process.": "The template compile directory (%s) doesn't exist in \"%s\". Retry the installation process.",
"The template compile directory (%s) is not writable.": "The template compile directory (%s) is not writable.",
"The template compile directory (%s) is writable.": "The template compile directory (%s) is writable.",
"You need to enable the PHP Intl extension.": "You need to enable the PHP Intl extension.",
"Your PHP version (%s) is too old. This application needs at least PHP %s.": "Your PHP version (%s) is too old. This application needs at least PHP %s.",
"date.timezone is set.": "date.timezone is set."
},
"Comments": {
"Add a comment to the poll": "إضافة تعليق إلى إستطلاع الرأي",
"Comment added": "تم حفظ التعليق",
"Comments of polled people": "التعليقات",
"Remove the comment": "حذف التعليق",
"Send the comment": "إرسال التعليق",
"Your comment": "تعليق",
"anonyme": "مجهول"
},
"Date": {
"Add range dates": "Add range dates",
"DATE": "%Y-%m-%d",
"DATETIME": "%m/%d/%Y %H:%M",
"DAY": "%a %e",
"End date": "End date",
"FULL": "%A, %B %e, %Y",
"MONTH_YEAR": "%B %Y",
"Max dates count": "You can select at most 4 months",
"SHORT": "%A %e %B %Y",
"Start date": "Start date",
"datepicker": "yyyy-mm-dd",
"datetime_parseformat": "Y-m-d",
"dd/mm/yyyy": "yyyy-mm-dd"
},
"EditLink": {
"Edit link for poll \"%s\"": "Edit link for poll \"%s\"",
"Here is the link for editing your vote:": "Here is the link for editing your vote:",
"If you don't want to lose your personalized link, we can send it to your email.": "If you don't want to lose your personalized link, we can send it to your email.",
"Please wait %d seconds before we can send an email to you then try again.": "Please wait %d seconds before we can send an email to you then try again.",
"REMINDER": "تذكير",
"Send": "إرسال",
"The email address is not correct.": "عنوان البريد الإلكتروني غير صحيح.",
"Your reminder has been successfully sent!": "تم إرسال الإخطار بالتذكير بنجاح !"
},
"Error": {
"Adding vote failed": "Adding vote failed",
"CANT_CONNECT_TO_DATABASE": "Unable to connect to database",
"Can't create an empty column.": "Can't create an empty column.",
"Can't create the config.php file in '%s'.": "Can't create the config.php file in '%s'.",
"Comment failed": "Comment failed",
"Cookies are disabled on your browser. Theirs activation is required to create a poll.": "Cookies are disabled on your browser. They are required to be able to create a poll.",
"Enter a name": "Enter a name",
"Enter a name and a comment!": "Enter a name and a comment!",
"Enter a title": "Enter a title",
"Enter an email address": "Enter an email address",
"Error!": "خطأ !",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
"Failed to delete column": "Failed to delete column",
"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!": "Failed to delete the vote!",
"Failed to insert the comment!": "Failed to insert the comment!",
"Failed to save poll": "Failed to save poll",
"Forbidden!": "ممنوع !",
"Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "Framadate is not properly installed, please see the 'INSTALL' file for instructions on setting up the database before continuing.",
"Javascript is disabled on your browser. Its activation is required to create a poll.": "JavaScript is disabled on your browser. It is required to create a poll.",
"MISSING_VALUES": "Missing values",
"No polls found": "No polls found",
"Password is empty": "كلمة السر فارغة.",
"Passwords do not match": "كلمتي السر غير متطابقتان.",
"Poll has been updated before you vote": "Poll has been updated before you vote",
"Poll id already used": "Identifier is already used",
"Something is going wrong...": "حدث هناك خطأ ما ...",
"Something is wrong with the format": "Something is wrong with the format",
"The address is not correct! You should enter a valid email address (like r.stallman@outlock.com) in order to receive the link to your poll.": "The address is not correct! You should enter a valid email address (like r.stallman@outlock.com) in order to receive the link to your poll.",
"The column already exists": "The column already exists",
"The name is invalid.": "The name is invalid.",
"The name you've chosen already exist in this poll!": "The name you've chosen already exists in this poll!",
"There is a problem with your choices": "There is a problem with your choices",
"This poll doesn't exist !": "This poll doesn't exist!",
"Update vote failed": "Update vote failed",
"You already voted": "You already voted",
"You can't create a poll with hidden results with the following edition option:": "You can't create a poll with hidden results with the following option: ",
"You can't select more than %d dates": "You can't select more than %d dates",
"You haven't filled the first section of the poll creation.": "You haven't filled in the first section of the poll.",
"Your vote wasn't counted, because someone voted in the meantime and it conflicted with your choices and the poll conditions. Please retry.": "Your vote wasn't counted, because someone voted in the meantime and it conflicted with your choices and the poll conditions. Please retry."
},
"FindPolls": {
"Have a good day!": "طاب نهارك !",
"Here is the list of the polls that you manage on %s:": "Here is the list of the polls that you manage on %s:",
"If you weren't the source of this action and if you think this is an abuse of the service, please notify the administrator on %s.": "If you weren't the source of this action and if you think this is an abuse of the service, please notify the administrator on %s.",
"List of your polls": "قائمة إستطلاعات الرأي الخاصة بك",
"PS: this email has been sent because you or someone else asked to get back the polls created with your email address.": "PS: this email has been sent because you or someone else asked to get back the polls created with your email address.",
"Polls sent": "Polls sent",
"Send me my polls": "Send me my polls"
},
"Generic": {
"(in the format name@mail.com)": "(على نسق name@mail.com)",
"ASTERISK": "*",
"Add": "إضافة",
"Back": "العودة",
"Back to the homepage of": "العودة إلى صفحة",
"Cancel": "إلغاء",
"Caption": "Caption",
"Choice": "الخَيار",
"Classic": "عادي",
"Close": "إغلاق",
"Creation date:": "تاريخ الإنشاء :",
"Date": "التاريخ",
"Day": "يوم",
"Description": "الوصف",
"Edit": "تعديل",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate is an online service for planning an appointment or make a decision quickly and easily.",
"Home": "الرئيسية",
"Ifneedbe": "Ifneedbe",
"Legend:": "Legend:",
"Link": "الرابط",
"Make your polls": "Make your polls",
"Markdown": "Markdown",
"Next": "التالي",
"No": "لا",
"Page generated in": "تم توليد الصفحة في",
"Poll": "Poll",
"Remove": "حذف",
"Save": "حفظ",
"Search": "البحث",
"Time": "الوقت",
"Validate": "Validate",
"Yes": "نعم",
"Your email address": "عنوان بريدك الإلكتروني",
"Your name": "إسمك",
"days": "أيام",
"for": "for",
"months": "أشهر",
"seconds": "ثواني",
"vote": "vote",
"votes": "أصوات",
"with": "with"
},
"Homepage": {
"Make a classic poll": "Make a standard poll",
"Schedule an event": "Schedule an event",
"Where are my polls": "Where are my polls?"
},
"Installation": {
"AppMail": "عنوان البريد الإلكتروني الخاص بالمدير",
"AppName": "إسم التطبيق",
"CleanUrl": "Clean URL",
"Database": "إسم قاعدة البيانات",
"DbConnectionString": "Connection string",
"DbPassword": "كلمة السر",
"DbPrefix": "Prefix",
"DbUser": "المستخدم",
"DefaultLanguage": "اللغة الإفتراضية",
"General": "General",
"Install": "تنصيب",
"MigrationTable": "Migration table",
"ResponseMail": "Respond-to mail address"
},
"Language selector": {
"Change the language": "تغيير اللغة",
"Select the language": "إختيار لغة"
},
"Mail": {
"Author's message": "Author's message",
"FOOTER": "\"The road is long, but the way is clear…\"<br/>Framasoft lives only by your donations.<br/>Thank you in advance for your support https://soutenir.framasoft.org",
"For sending to the polled users": "Participant link",
"Notification of poll: %s": "Notification of poll: %s",
"Poll's participation: %s": "Poll participation: %s",
"Someone just change your poll available at the following link %s.": "Someone just changed your poll at the following link <a href=\"%1$s\">%1$s</a>.",
"Someone just delete your poll %s.": "Someone just deleted your poll \"%s\".",
"Thanks for filling the poll at the link above": "Please fill in the poll at the link above",
"Thanks for your trust.": "شكرا لك على ثقتك.",
"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.": "This is the message to forward to the poll participants.",
"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": "This message should NOT be sent to the poll participants. You should keep it private. <br/><br/>You can modify your poll at the link above",
"You have changed the settings of your poll. \nYou can modify this poll with this link": "You have changed the settings of your poll.<br/>You can modify this poll with this link",
"[ADMINISTRATOR] New settings for your poll": "[ADMINISTRATOR] New settings for your poll",
"filled a vote.\nYou can find your poll at the link": "added a vote.<br/>You can visit your poll at the link",
"hast just created a poll called": "has just created a poll called",
"updated a vote.\nYou can find your poll at the link": "updated a vote.<br/>You can visit your poll at the link",
"wrote a comment.\nYou can find your poll at the link": "wrote a comment.<br/>You can visit your poll at the link"
},
"Maintenance": {
"Thank you for your understanding.": "نشكرك على تفهمك.",
"The application": "التطبيق",
"is currently under maintenance.": "حاليا تجرى عليها عملية صيانة."
},
"Password": {
"Password": "كلمة السر",
"Submit access": "Submit access",
"Wrong password": "كلمة السر خاطئة",
"You have to provide a password so you can participate to the poll.": "You have to provide a password so you can participate to the poll.",
"You have to provide a password to access the poll.": "You have to provide a password to access the poll."
},
"Poll results": {
"Addition": "العدد الإجمالي",
"Best choice": "Best choice",
"Best choices": "Best choices",
"Chart": "المنحنى البياني",
"Display the chart of the results": "عرض المنحنى البياني للنتائج",
"Edit the line: %s": "Edit line: %s",
"Remove the line:": "Remove line:",
"Save the choices": "Save choices",
"Scroll to the left": "Scroll to the left",
"Scroll to the right": "Scroll to the right",
"The best choice at this time is:": "The current best choice is:",
"The bests choices at this time are:": "The current best choices are:",
"Vote ifneedbe for": "Vote \"ifneedbe\" for",
"Vote no for": "Vote \"no\" for",
"Vote yes for": "Vote \"yes\" for",
"Votes of the poll": "الأصوات",
"polled user": "polled user",
"polled users": "polled users"
},
"PollInfo": {
"Admin link of the poll": "Admin link for the poll",
"Cancel the description edit": "Cancel the description edit",
"Cancel the email address edit": "Cancel the email address edit",
"Cancel the expiration date edit": "Cancel the expiration date edit",
"Cancel the name edit": "Cancel the name edit",
"Cancel the rules edit": "Cancel the rules edit",
"Cancel the title edit": "Cancel the title edit",
"Edit the description": "تعديل الوصف",
"Edit the email adress": "تعديل عنوان البريد الإلكتروني",
"Edit the expiration date": "تعديل تاريخ النهاية",
"Edit the name": "تعديل الإسم",
"Edit the poll rules": "Edit the poll rules",
"Edit the title": "تعديل العنوان",
"Email": "البريد الإلكتروني",
"Expiration date": "Expiry date",
"Export to CSV": "Export to CSV",
"Initiator of the poll": "Creator of the poll",
"No password": "No password",
"Only votes are protected": "Only votes are protected",
"Password protected": "Password protected",
"Poll rules": "Poll rules",
"Print": "طباعة",
"Public link of the poll": "Public link to the poll",
"Remove all the comments": "إزالة كافة التعليقات",
"Remove all the votes": "إزالة كافة التصويتات",
"Remove password": "Remove password",
"Remove the poll": "حذف إستطلاع الرأي",
"Results are hidden": "النتائج مخفية",
"Results are visible": "Results are visible",
"Rich editor": "Rich editor",
"Save the description": "حفظ الوصف",
"Save the email address": "حفظ عنوان البريد الإلكتروني",
"Save the new expiration date": "Save the new expiration date",
"Save the new name": "حفظ الإسم الجديد",
"Save the new rules": "حفظ القواعد الجديدة",
"Save the new title": "حفظ العنوان الجديد",
"Simple editor": "محرر بسيط",
"Title": "عنوان موضوع إستطلاع الرأي",
"Votes and comments are locked": "Votes and comments are locked",
"Votes protected by password": "Votes protected by password"
},
"Step 1": {
"All voters can modify any vote": "All voters can modify any vote",
"Customize the URL": "Customize the URL",
"Go to step 2": "الإنتقال إلى الخطوة 2",
"Limit the ammount of voters per option": "Limit the amount of voters per option",
"More informations here:": "المزيد من التفاصيل هنا :",
"Only the poll maker can see the poll's results": "Only the poll maker can see the poll results",
"Optional parameters": "Optional parameters",
"Password choice": "Choice",
"Password confirmation": "Confirmation",
"Permissions": "التصريحات",
"Poll creation (1 on 3)": "Poll creation (1 of 3)",
"Poll id": "رابط إستطلاع الرأي",
"Poll id rules": "The identifier can contain letters, numbers and dashes \"-\".",
"Poll id warning": "By defining an identifier that can facilitate access to the poll for unwanted people. It is recommended to protect it with a password.",
"Poll password": "كلمة السر",
"Poll title": "عنوان موضوع إستطلاع الرأي",
"Required fields cannot be left blank.": "لا يجب أن تترك الحقول فارغة.",
"The results are publicly visible": "The results are publicly visible",
"To make the description more attractive, you can use the Markdown format.": "To make the description more attractive, you can use the Markdown format.",
"To receive an email for each new comment": "Receive an email for each new comment",
"To receive an email for each new vote": "Receive an email for each new vote",
"Use a password to restrict access": "Use a password to restrict access",
"Value Max": "Value Max",
"ValueMax instructions": "voters per options ",
"Voters can modify their vote themselves": "Voters can modify their vote themselves",
"Votes cannot be modified": "Votes cannot be modified",
"You are in the poll creation section.": "You are in the poll creation section.",
"You can enable or disable the editor at will.": "You can enable or disable the editor at will."
},
"Step 2": {
"Back to step 1": "العودة إلى المرحلة 1",
"Go to step 3": "الإنتقال إلى الخطوة 3"
},
"Step 2 classic": {
"Add a choice": "إضافة خيار",
"Add a link or an image": "إضافة رابط أو صورة",
"Alternative text": "نص بديل",
"It's possible to propose links or images by using": "Links or images can be included using",
"Poll subjects (2 on 3)": "Poll options (2 of 3)",
"Remove a choice": "حذف خيار",
"These fields are optional. You can add a link, an image or both.": "These fields are optional. You can add a link, an image or both.",
"To make a generic poll you need to propose at least two choices between differents subjects.": "To create a poll you should provide at least two different choices.",
"URL of the image": "عنوان رابط الصورة",
"You can add or remove additional choices with the buttons": "بإمكانك إضافة أو حذف خيارات بالنقر على الأزرار",
"the Markdown syntax": "Markdown syntax"
},
"Step 2 date": {
"Add a day": "إضافة يوم",
"Add an hour": "إضافة مدة زمنية",
"Choose the dates of your poll": "إختر تواريخ إستطلاع الرأي",
"Copy hours of the first day": "Copy times from the first day",
"For each selected day, you can choose, or not, meeting hours (e.g.: \"8h\", \"8:30\", \"8h-10h\", \"evening\", etc.)": "For each selected day, you are free to suggest meeting times (e.g., \"8h\", \"8:30\", \"8h-10h\", \"evening\", etc.)",
"Poll dates (2 on 3)": "Poll dates (2 of 3)",
"Remove a day": "Remove a day",
"Remove all days": "Remove all days",
"Remove all hours": "Remove all times",
"Remove an hour": "Remove a time slot",
"Remove this day": "Remove this day",
"To schedule an event you need to propose at least two choices (two hours for one day or two days).": "To schedule an event you need to provide at least two choices (e.g., two time slots on one day or two days).",
"You can add or remove additionnal days and hours with the buttons": "You can add or remove additional days and times with the buttons"
},
"Step 3": {
"Archiving date:": "Expiry date:",
"Back to step 2": "Back to step 2",
"Confirm the creation of your poll": "Confirm the creation of your poll",
"Create the poll": "Create the poll",
"List of your choices": "قائمة الخيارات",
"Once you have confirmed the creation of your poll, you will be automatically redirected on the administration page of your poll.": "Once you have confirmed the creation of your poll, you will automatically be redirected to the poll's administration page.",
"Removal date and confirmation (3 on 3)": "Removal date and confirmation (3 of 3)",
"Then, you will receive quickly two emails: one contening the link of your poll for sending it to the voters, the other contening the link to the administration page of your poll.": "Then you will receive two emails: one containing the link of your poll for sending to the participants, the other containing the link to the poll administration page.",
"You can set a closer archiving date for it.": "You can set a specific expiry date for the poll.",
"Your poll will automatically be archived": "Your poll will automatically be archived",
"Your poll will be automatically archived in %d days.": "Your poll will be automatically archived in %d days.",
"after the last date of your poll.": "after the last date of your poll."
},
"adminstuds": {
"Add a column": "إضافة عمود",
"All comments deleted": "تم حذف كافة التعليقات",
"All votes deleted": "تم حذف كافة الأصوات",
"As poll administrator, you can change all the lines of this poll with this button": "As poll administrator, you can change all the lines of this poll with this button",
"Back to the poll": "العودة إلى إستطلاع الرأي",
"Choice added": "Choice added",
"Column removed": "تم حذف العمود",
"Column's adding": "Adding a column",
"Comment deleted": "تم حذف التعليق",
"Confirm removal of all comments of the poll": "Confirm removal of all comments",
"Confirm removal of all votes of the poll": "Confirm removal of all votes",
"Confirm removal of the column.": "Confirm removal of the column.",
"Confirm removal of the poll": "Confirm removal of your poll",
"Delete the poll": "حذف إستطلاع الرأي",
"Finally, you can change the informations of this poll like the title, the comments or your email address.": "Finally, you can change the properties of this poll such as the title, the comments or your email address.",
"If you just want to add a new hour to an existant date, put the same date and choose a new hour.": "If you just want to add a new time slot to an existing date, add that date here and choose a new time slot.",
"Keep comments": "الإحتفاظ بالتعليقات",
"Keep the comments": "الإحتفاظ بالتعليقات",
"Keep the poll": "الإحتفاظ باستطلاع الرأي",
"Keep the votes": "الإحتفاظ على الأصوات",
"Keep this poll": "Keep this poll",
"Keep votes": "Keep votes",
"Poll fully deleted": "تم حذف إستطلاع الرأي بالكامل",
"Poll saved": "تم حفظ إستطلاع الرأي",
"Remove the column": "حذف عمود",
"Remove the comments": "إزالة التعليقات",
"Remove the votes": "حذف الأصوات",
"Vote added": "Vote added",
"Vote deleted": "Vote deleted",
"Vote updated": "تم تحديث التصويت",
"You can add a new scheduling date to your poll.": "You can add a new scheduling date to your poll.",
"Your poll has been removed!": "Your poll has been removed!",
"and add a new column with": "and add a new column with",
"remove a column or a line with": "remove a column or a line with"
},
"studs": {
"Adding the vote succeeded": "Vote added",
"Deletion date:": "Deletion date:",
"If you want to vote in this poll, you have to give your name, choose the values that fit best for you and validate with the plus button at the end of the line.": "If you want to vote in this poll, you have to give your name, make your choice, and submit it with the plus button at the end of the line.",
"POLL_LOCKED_WARNING": "The administrator locked this poll. Votes and comments are frozen, it is no longer possible to participate",
"The poll is expired, it will be deleted soon.": "The poll has expired, it will soon be deleted.",
"Update vote succeeded": "Vote updated",
"Your vote has been registered successfully, but be careful: regarding this poll options, you need to keep this personal link to edit your own vote:": "Your vote has been saved, but please note: you need to keep this personalised link to be able to edit your vote."
}
}

View File

@ -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.",

View File

@ -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 Online-Dienst, der Ihnen bei der Absprache von Terminen oder der Entscheidungsfindung hilft.",
"Home": "Startseite",
"Ifneedbe": "Wenn notwendig",
"Legend:": "Legende:",
@ -232,12 +237,12 @@
"For sending to the polled users": "Nachricht für die Teilnehmer",
"Notification of poll: %s": "Mitteilung bezüglich der Umfrage: %s",
"Poll's participation: %s": "Beteiligung an der Umfrage: %s",
"Someone just change your poll available at the following link %s.": "Jemand hat gerade Ihre Umfrage auf %s geändert.",
"Someone just change your poll available at the following link %s.": "Jemand hat gerade Ihre Umfrage auf <a href=\"%1$s\">%1$s</a> geändert.",
"Someone just delete your poll %s.": "Jemand hat gerade Ihre Umfrage auf %s gelöscht.",
"Thanks for filling the poll at the link above": "Danke, dass Sie die Umfrage unter dem obigen Link ausgefüllt haben",
"Thanks for your trust.": "Danke für Ihr Vertrauen.",
"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.": "Dies ist die Nachricht an die Leute, die Sie zur Abstimmung bitten.<br/>Schicken Sie sie an alle, die Sie zur Teilnahme aufrufen möchten.",
"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": "Diese Meldung sollte NICHT an die befragten Personen gesendet werden. Sie richtet sich einzig an den Autor der Umfrage. Sie können sie jetzt über den oben genannten Link abändern.",
"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.": "Dies ist die Nachricht an die Leute, die Sie zur Abstimmung bitten.",
"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": "Diese Meldung sollte NICHT an die befragten Personen gesendet werden. Sie sollten sie für sich behalten. <br/><br/>Sie können Ihre Umfrage über den oben genannten Link abändern",
"You have changed the settings of your poll. \nYou can modify this poll with this link": "Sie haben die Einstellungen Ihrer Umfrage verändert.<br/>Sie können diese Umfrage über diesen Link ändern",
"[ADMINISTRATOR] New settings for your poll": "[ADMINISTRATOR] Neue Einstellungen für Ihre Umfrage ",
"filled a vote.\nYou can find your poll at the link": "hat abgestimmt.<br/>Sie finden Ihre Umfrage über den Link",
@ -323,6 +328,7 @@
"All voters can modify any vote": "Jeder Teilnehmer kann jede abgegebene Wertung ändern",
"Customize the URL": "Link anpassen",
"Go to step 2": "Weiter zum 2. Schritt",
"Limit the ammount of voters per option": "Begrenzung der anzahl der aähler pro option",
"More informations here:": "DE_Plus d'informations ici :",
"Only the poll maker can see the poll's results": "Einzig der Autor der Abstimmung kann die Ergebnisse einsehen",
"Optional parameters": "Optionale Einstellungen",
@ -341,6 +347,8 @@
"To receive an email for each new comment": "Bei jedem neuen Kommentar eine E-Mail erhalten",
"To receive an email for each new vote": "Bei jeder neuen Wertung eine E-Mail erhalten",
"Use a password to restrict access": "Verwende ein Passwort um den Zugriff zu beschänken",
"Value Max": "Wert Max",
"ValueMax instructions": "wähler pro option ",
"Voters can modify their vote themselves": "Teilnehmer können ihre Wertungen verändern",
"Votes cannot be modified": "Wertungen können nicht verändert werden",
"You are in the poll creation section.": "Hier erstellen Sie die Umfrage",

View File

@ -180,6 +180,7 @@
"Day": "Day",
"Description": "Description",
"Edit": "Edit",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate is an online service for planning an appointment or make a decision quickly and easily.",
"Home": "Home",
"Ifneedbe": "Ifneedbe",
"Legend:": "Legend:",
@ -327,7 +328,7 @@
"All voters can modify any vote": "All voters can modify any vote",
"Customize the URL": "Customize the URL",
"Go to step 2": "Go to step 2",
"Limit the ammount of voters per option": "Limit the ammount of voters per option",
"Limit the ammount of voters per option": "Limit the amount of voters per option",
"More informations here:": "More informations here:",
"Only the poll maker can see the poll's results": "Only the poll maker can see the poll results",
"Optional parameters": "Optional parameters",

View File

@ -123,7 +123,11 @@
"Enter a title": "Introducza un título",
"Enter an email address": "Introduzca un correo electrónico",
"Error!": "¡Error!",
"Failed to delete all comments": "No se han eliminado todos los comentarios",
"Failed to delete all votes": "No se han eliminado todos los votos",
"Failed to delete column": "Error al eliminar la columna",
"Failed to delete the comment": "No se ha podido eliminar el comentario",
"Failed to delete the poll": "No se borró la encuesta",
"Failed to delete the vote!": "Error al borrar el voto",
"Failed to insert the comment!": "Error al crear el comentario",
"Failed to save poll": "Error al guardar la encuesta",
@ -176,6 +180,7 @@
"Day": "Día",
"Description": "Descripción",
"Edit": "Cambio",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate es un servicio en línea que permite planificar un encuentro o tomar decisiones rapidamente y de manera sencilla.",
"Home": "Inicio",
"Ifneedbe": "En caso de ser necesario",
"Legend:": "Leyenda:",
@ -323,6 +328,7 @@
"All voters can modify any vote": "Los votos pueden ser modificados por cualquiera",
"Customize the URL": "ES_Personnaliser le lien",
"Go to step 2": "Ir al paso número 2",
"Limit the ammount of voters per option": "Limitar el número de votantes por opción",
"More informations here:": "ES_Plus d'informations ici :",
"Only the poll maker can see the poll's results": "Solo el creador de la encuesta puede ver los resultados",
"Optional parameters": "ES_Paramètres optionnels",
@ -341,6 +347,8 @@
"To receive an email for each new comment": "Recibir un correo electrónico para cada nuevo comentario",
"To receive an email for each new vote": "Recibir un correo electrónico para cada nuevo voto",
"Use a password to restrict access": "ES_Utiliser un mot de passe pour restreindre l'accès au sondage",
"Value Max": "Valor max",
"ValueMax instructions": "votantes por opciones ",
"Voters can modify their vote themselves": "Los votos peuden ser modificados por su autor",
"Votes cannot be modified": "Los votos no pueden ser modificados",
"You are in the poll creation section.": "Usted ha eligido crear una nueva encuesta",

View File

@ -180,6 +180,7 @@
"Day": "Jour",
"Description": "Description",
"Edit": "Modifier",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement.",
"Home": "Accueil",
"Ifneedbe": "Si nécessaire",
"Legend:": "Légende :",

View File

@ -180,6 +180,7 @@
"Day": "Jour",
"Description": "Description",
"Edit": "Modifier",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate est un service en ligne permettant de planifier un rendez-vous ou prendre des décisions rapidement et simplement.",
"Home": "Accueil",
"Ifneedbe": "Si nécessaire",
"Legend:": "Légende :",

View File

@ -123,8 +123,12 @@
"Enter a title": "È necessario inserire un titolo !",
"Enter an email address": "È necessario inserire un indirizzo e-mail!",
"Error!": "Errore!",
"Failed to delete all comments": "Impossibile eliminare tutti i commenti",
"Failed to delete all votes": "Impossibile eliminare tutti i voti",
"Failed to delete column": "Impossibile eliminare la colonna",
"Failed to delete the vote!": "Failed to delete the vote!",
"Failed to delete the comment": "Impossibile cancellare il commento",
"Failed to delete the poll": "Impossibile cancellare il sondaggio",
"Failed to delete the vote!": "Impossibile cancellare il voto!",
"Failed to insert the comment!": "Errore nell'inserimento del commento !",
"Failed to save poll": "Errore nel salvataggio del sondaggio",
"Forbidden!": "Proibito!",
@ -176,6 +180,7 @@
"Day": "giorni",
"Description": "Descrizione",
"Edit": "Modificare",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate è un servizio online per pianificare un appuntamento o prendere una decisione velocemente e facilmente.",
"Home": "Home Page",
"Ifneedbe": "Se necessario",
"Legend:": "Legenda:",
@ -323,6 +328,7 @@
"All voters can modify any vote": "Tutti i votanti possono cambiare tutti i voti",
"Customize the URL": "Personalizzare il link",
"Go to step 2": "Andare al punto 2",
"Limit the ammount of voters per option": "Limitare la quantità di elettori per opzione",
"More informations here:": "IT_Plus d'informations ici :",
"Only the poll maker can see the poll's results": "Solo il creatore sondaggio possono vedere i risultati",
"Optional parameters": "Parametri opzionali",
@ -341,6 +347,8 @@
"To receive an email for each new comment": "Per ricevere una e-mail per ogni nuovo commento",
"To receive an email for each new vote": "Per ricevere un'email per ogni nuovo voto",
"Use a password to restrict access": "Utilizzare una passwor per limitare l'accesso al sondaggio",
"Value Max": "Value Max",
"ValueMax instructions": "elettori per opzione",
"Voters can modify their vote themselves": "I partecipanti possono modificare il loro voto in autonomia",
"Votes cannot be modified": "Nessun voto può essere modificato",
"You are in the poll creation section.": "Avete scelto di creare un nuovo sondaggio.",

View File

@ -123,7 +123,11 @@
"Enter a title": "Voer een titel in",
"Enter an email address": "Voer een emailadres in",
"Error!": "Fout!",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
"Failed to delete column": "Kolom verwijderen mislukt",
"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!": "Het is niet gelukt de stem te verwijderen!",
"Failed to insert the comment!": "Het is niet gelukt om de opmerking in te voegen!",
"Failed to save poll": "Opslaan van de poll gefaald",
@ -176,6 +180,7 @@
"Day": "dagen",
"Description": "Beschrijving",
"Edit": "Bewerk",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate is een online service om snel en makkelijk een afspraak te plannen of een beslissing te nemen.",
"Home": "Home",
"Ifneedbe": "Indien nodig",
"Legend:": "Legenda:",
@ -228,6 +233,7 @@
},
"Mail": {
"Author's message": "Bericht van de auteur",
"FOOTER": "\"The road is long, but the way is clear…\"<br/>Framasoft lives only by your donations.<br/>Thank you in advance for your support https://soutenir.framasoft.org",
"For sending to the polled users": "Link voor deelnemers",
"Notification of poll: %s": "Bericht van poll: %s",
"Poll's participation: %s": "Poll deelname: %s",
@ -306,12 +312,14 @@
"Remove the poll": "Verwijder de poll",
"Results are hidden": "Resultaten zijn verborgen.",
"Results are visible": "Resultaten zijn zichtbaar.",
"Rich editor": "Rich editor",
"Save the description": "Beschrijving opslaan",
"Save the email address": "Emailadres opslaan",
"Save the new expiration date": "Nieuwe vervaldatum opslaan",
"Save the new name": "Nieuwe naam opslaan",
"Save the new rules": "Nieuwe regels opslaan",
"Save the new title": "Nieuwe titel opslaan",
"Simple editor": "Simple editor",
"Title": "Titel van de poll",
"Votes and comments are locked": "Stemmen en opmerkingen zijn uitgeschakeld",
"Votes protected by password": "Stemmen beveiligd met een wachtwoord"
@ -320,6 +328,8 @@
"All voters can modify any vote": "Alle stemmers kunnen elke stem aanpassen",
"Customize the URL": "Link verpersoonlijken",
"Go to step 2": "Ga naar stap 2",
"Limit the ammount of voters per option": "Limit the amount of voters per option",
"More informations here:": "More informations here:",
"Only the poll maker can see the poll's results": "Alleen degene die de poll aangemaakt heeft kan de resultaten zien",
"Optional parameters": "Optionele parameters",
"Password choice": "Keuze",
@ -333,12 +343,16 @@
"Poll title": "Poll titel",
"Required fields cannot be left blank.": "Verplichte velden kunnen niet leeg blijven.",
"The results are publicly visible": "De resultaten zijn zichtbaar zonder wachtwoord",
"To make the description more attractive, you can use the Markdown format.": "To make the description more attractive, you can use the Markdown format.",
"To receive an email for each new comment": "Ontvang een email bij elke nieuwe opmerking",
"To receive an email for each new vote": "Ontvang een email bij elke nieuwe stem",
"Use a password to restrict access": "Toegang tot poll beperken met een paswoord",
"Value Max": "Value Max",
"ValueMax instructions": "voters per options ",
"Voters can modify their vote themselves": "Stemmers kunnen hun eigen stem aanpassen",
"Votes cannot be modified": "Stemmen kunnen niet worden aangepast",
"You are in the poll creation section.": "Je bent in het onderdeel poll aanmaken."
"You are in the poll creation section.": "Je bent in het onderdeel poll aanmaken.",
"You can enable or disable the editor at will.": "You can enable or disable the editor at will."
},
"Step 2": {
"Back to step 1": "Terug naar stap 1",

View File

@ -60,9 +60,9 @@
"Check again": "Tornar verificar",
"Consider enabling the PHP extension OpenSSL for increased security.": "Mercés de pensar a activar lextension PHP OpenSSL per milhorar la seguritat.",
"Consider setting the date.timezone in php.ini.": "Mercés de far cas a la definicion de date.timezone dins lo php.ini.",
"Consider setting « session.cookie_httponly = 1 » inside your php.ini or add « php_value session.cookie_httponly 1 » to your .htaccess so that cookies can't be accessed through Javascript.": "Consider setting « session.cookie_httponly = 1 » inside your php.ini or add « php_value session.cookie_httponly 1 » to your .htaccess so that cookies can't be accessed through Javascript.",
"Consider setting « session.cookie_httponly = 1 » inside your php.ini or add « php_value session.cookie_httponly 1 » to your .htaccess so that cookies can't be accessed through Javascript.": "Agachatz de configurar « session.cookie_httponly = 1 » dins de vòstre php.ini o ajustatz « php_value session.cookie_httponly 1 » a vòstre .htaccess per empachar daccedir als cookies amb lo Javascript.",
"Continue the installation": "Contunhar linstallacion",
"Cookies are served from HTTP only.": "Cookies are served from HTTP only.",
"Cookies are served from HTTP only.": "Los cookies son pas que fornits en HTTP.",
"Installation checking": "Verificacions de linstallacion",
"OpenSSL extension loaded.": "Lextension PHP OpenSSL es cargada.",
"PHP Intl extension is enabled.": "Lextension PHP Intl es activada.",
@ -180,6 +180,7 @@
"Day": "Jorn",
"Description": "Descripcion",
"Edit": "Modificar",
"Framadate is an online service for planning an appointment or make a decision quickly and easily.": "Framadate es un servici en linha que permet dorganizar un rendètz-vos o de prene de decisions rapidament e simplament.",
"Home": "Acuèlh",
"Ifneedbe": "Se cal",
"Legend:": "Legenda:",
@ -311,14 +312,14 @@
"Remove the poll": "Suprimir lo sondatge",
"Results are hidden": "Los resultats son amagats",
"Results are visible": "Los resultats son visibles",
"Rich editor": "Rich editor",
"Rich editor": "Editor avençat",
"Save the description": "Enregistrar la descripcion",
"Save the email address": "Enregistrar ladreça",
"Save the new expiration date": "Enregistrar la data dexpiracion",
"Save the new name": "Enregistrar lautor",
"Save the new rules": "Enregistrar las permissions novèlas",
"Save the new title": "Enregistrar lo novèl títol",
"Simple editor": "Simple editor",
"Simple editor": "Editor simple",
"Title": "Títol del sondatge",
"Votes and comments are locked": "Los vòtes e comentaris son clavats",
"Votes protected by password": "Vòtes protegits per senhal"
@ -327,7 +328,8 @@
"All voters can modify any vote": "Totes los votants pòdon modificar sos vòtes",
"Customize the URL": "Personalizar lo ligam",
"Go to step 2": "Anar a letapa 2",
"More informations here:": "More informations here:",
"Limit the ammount of voters per option": "Limitar lo nombre de votants per opcion",
"More informations here:": "Mai dinformacion aquí :",
"Only the poll maker can see the poll's results": "Solament lo creator del sondatge pòt veire los resultats",
"Optional parameters": "Paramètres opcionals",
"Password choice": "Causida",
@ -341,14 +343,16 @@
"Poll title": "Títol del sondatge",
"Required fields cannot be left blank.": "Mercés de garnir totes los formularis obligatòris, marcats amb una *.",
"The results are publicly visible": "Los resultats son visibles sens senhal",
"To make the description more attractive, you can use the Markdown format.": "To make the description more attractive, you can use the Markdown format.",
"To make the description more attractive, you can use the Markdown format.": "Per dire de far venir la descripcion mai bèla, podètz utilizar la sintaxi Markdown.",
"To receive an email for each new comment": "Recebre un messatge per cada comentari",
"To receive an email for each new vote": "Recebre un messatge per cada participacion",
"Use a password to restrict access": "Emplegar un senhal per restrénher laccès al sondatge",
"Value Max": "Valor maximala",
"ValueMax instructions": "votants per opcions",
"Voters can modify their vote themselves": "Cadun pòt modificar son pròpri vòte",
"Votes cannot be modified": "Cap de vòte pòt pas èsser modificat",
"You are in the poll creation section.": "Avètz causit de crear un sondatge novèl.",
"You can enable or disable the editor at will.": "You can enable or disable the editor at will."
"You can enable or disable the editor at will.": "Podètz activar o desactivar leditor coma volgatz."
},
"Step 2": {
"Back to step 1": "Tornar a letapa 1",

View File

@ -57,7 +57,7 @@ $comments = [];
$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();
$sessionService = new SessionService();
@ -168,7 +168,7 @@ if ($accessGranted) {
try {
$result = $pollService->addVote($poll_id, $name, $choices, $slots_hash);
if ($result) {
if ($poll->editable === Editable::EDITABLE_BY_OWN) {
if (intval($poll->editable) === Editable::EDITABLE_BY_OWN) {
$editedVoteUniqueId = $result->uniqId;
$message = getMessageForOwnVoteEditableVote($sessionService, $smarty, $editedVoteUniqueId, $config['use_smtp'], $poll_id, $name);
} else {

View File

@ -23,8 +23,8 @@
<script type="text/javascript" src="{'js/jquery-1.12.4.min.js'|resource}"></script>
<script type="text/javascript" src="{'js/bootstrap.min.js'|resource}"></script>
<script type="text/javascript" src="{'js/bootstrap-datepicker.js'|resource}"></script>
{if "en" != $locale}
<script type="text/javascript" src="{"js/locales/bootstrap-datepicker.$locale.js"|resource}"></script>
{if 'en' != $locale}
<script type="text/javascript" src="{$locale|datepicker_path|resource}"></script>
{/if}
<script type="text/javascript" src="{'js/core.js'|resource}"></script>

View File

@ -26,9 +26,9 @@
</p>
<p>
{__('Step 1', 'More informations here:')}
<a href="http://{$locale}.wikipedia.org/wiki/Markdown">http://{$locale}.wikipedia.org/wiki/Markdown</a>
<a href="http://{$locale|locale_2_lang}.wikipedia.org/wiki/Markdown">http://{$locale|locale_2_lang}.wikipedia.org/wiki/Markdown</a>
</p>
</div>
</div>
</div>
</div>
</div>

View File

@ -101,7 +101,13 @@
<tr>
<th class="bg-info">{$vote->name|html}
{if $slots gt 4}
{if $active && !$expired && $accessGranted &&
(
$poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')
or $admin
or ($poll->editable == constant('Framadate\Editable::EDITABLE_BY_OWN') && $editedVoteUniqueId == $vote->uniqId)
) && $slots gt 4
}
<span class="edit-username-left">
<a href="{if $admin}{poll_url id=$poll->admin_id vote_id=$vote->uniqId admin=true}{else}{poll_url id=$poll->id vote_id=$vote->uniqId}{/if}" class="btn btn-default btn-sm" title="{__f('Poll results', 'Edit the line: %s', $vote->name)|html}">
<i class="glyphicon glyphicon-pencil"></i><span class="sr-only">{__('Generic', 'Edit')}</span>
@ -168,7 +174,7 @@
{foreach $slots as $id=>$slot}
<td class="bg-info" headers="C{$id}">
<ul class="list-unstyled choice">
{if $best_choices['y'][$i] lt $poll->ValueMax || $poll->ValueMax eq NULL}
{if $poll->ValueMax eq NULL || $best_choices['y'][$i] lt $poll->ValueMax}
<li class="yes">
<input type="radio" id="y-choice-{$id}" name="choices[{$id}]" value="2" />
<label class="btn btn-default btn-xs" for="y-choice-{$id}" title="{__('Poll results', 'Vote yes for')|html} {$slot->title|html}">

View File

@ -153,9 +153,15 @@
<tr>
{* Voted line *}
<th class="bg-info">{$vote->name|html}
{if $slots gt 4}
{if $active && !$expired && $accessGranted &&
(
$poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')
or $admin
or ($poll->editable == constant('Framadate\Editable::EDITABLE_BY_OWN') && $editedVoteUniqueId == $vote->uniqId)
) &&
$slots|count gt 4
}
<span class="edit-username-left">
<a href="{if $admin}{poll_url id=$poll->admin_id vote_id=$vote->uniqId admin=true}{else}{poll_url id=$poll->id vote_id=$vote->uniqId}{/if}" class="btn btn-default btn-sm" title="{__f('Poll results', 'Edit the line: %s', $vote->name)|html}">
<i class="glyphicon glyphicon-pencil"></i><span class="sr-only">{__('Generic', 'Edit')}</span>
@ -232,7 +238,7 @@
<td class="bg-info" headers="M{$headersM[$i]} D{$headersD[$i]} H{$headersH[$i]}">
<ul class="list-unstyled choice">
{if $best_choices['y'][$i] lt $poll->ValueMax || $poll->ValueMax eq NULL}
{if $poll->ValueMax eq NULL || $best_choices['y'][$i] lt $poll->ValueMax}
<li class="yes">
<input type="radio" id="y-choice-{$i}" name="choices[{$i}]" value="2" />
<label class="btn btn-default btn-xs" for="y-choice-{$i}" title="{__('Poll results', 'Vote yes for')|html} {$slot->day|date_format:$date_format.txt_short|html} - {$moment|html}">