Merge branch 'develop' into 'master'

Version 1.1.0-beta.3

See merge request framasoft/framadate!281
This commit is contained in:
Thomas Citharel 2018-04-06 12:04:45 +02:00
commit 20e5f5c130
30 changed files with 448 additions and 177 deletions

View File

@ -17,6 +17,20 @@ test:
paths:
- vendor/
check-trad:
stage: test
allow_failure: true
script:
- if [ -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then echo "*** Unable to check if translations need to be pulled, exiting ***"; exit 1; fi
- export ORIG=$(git diff-files --shortstat)
- if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then mkdir -p ${HOME}/.config; echo -e "${ZANATA_CONFIG_FRAMABOT}" > ${HOME}/.config/zanata.ini; fi
- if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then make push-locales; fi
- git status > /dev/null 2>&1
- export CHANGES=$(git diff-files --shortstat)
- if [[ $CHANGES != $ORIG ]]; then echo "*** There is changes in locales ***"; echo "*** You need to do `make pull-locales` in your repo ***"; exit 1; fi
only:
- develop
# Create artifacts on master
pages:
stage: deploy
@ -28,6 +42,7 @@ pages:
- mkdir tpl_c
- mkdir framadate
- mv `ls -A | grep -v framadate` ./framadate
- chmod -R 644 framadate/ && chmod -R 770 framadate/tpl_c/ && chmod -R 770 framadate/app/inc/
- zip -r latest.zip framadate
- mkdir .public
- cp latest.zip .public
@ -45,9 +60,12 @@ beta:
- git checkout develop
- composer install -o --no-interaction --no-progress --prefer-dist --no-dev
- composer dump-autoload --optimize --no-dev --classmap-authoritative
- if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then mkdir -p ${HOME}/.config; echo -e "${ZANATA_CONFIG_FRAMABOT}" > ${HOME}/.config/zanata.ini; fi
- if [ ! -z ${ZANATA_CONFIG_FRAMABOT+x} ]; then make pull-locales; fi
- mkdir tpl_c
- mkdir .public
- cp -r * .public
- cp -r .git .public
- mv .public public
- mkdir "${HOME}/.ssh"
- chmod 700 "${HOME}/.ssh"

View File

@ -79,7 +79,7 @@ if (is_null($message)) {
$subject = '[' . NOMAPPLICATION . '][' . __('EditLink', 'REMINDER') . '] ' . __f('EditLink', 'Edit link for poll "%s"', $poll->title);
//$mailService->send($email, $subject, $body);
$mailService->send($email, $subject, $body);
$sessionService->remove("Common", SESSION_EDIT_LINK_TOKEN);
$sessionService->set("Common", SESSION_EDIT_LINK_TIME, time());

View File

@ -435,7 +435,7 @@ $smarty->assign('deletion_date', strtotime($poll->end_date) + PURGE_DELAY * 8640
$smarty->assign('slots', $poll->format === 'D' ? $pollService->splitSlots($slots) : $slots);
$smarty->assign('slots_hash', $pollService->hashSlots($slots));
$smarty->assign('votes', $pollService->splitVotes($votes));
$smarty->assign('best_choices', $pollService->computeBestChoices($votes));
$smarty->assign('best_choices', $pollService->computeBestChoices($votes, $poll));
$smarty->assign('comments', $comments);
$smarty->assign('editingVoteId', $editingVoteId);
$smarty->assign('message', $message);

View File

@ -79,7 +79,7 @@ class PollRepository extends AbstractRepository {
}
/**
* Search polls in databse.
* Search polls in database.
*
* @param array $search Array of search : ['id'=>..., 'title'=>..., 'name'=>..., 'mail'=>...]
* @param int $start The number of first entry to select
@ -88,28 +88,48 @@ class PollRepository extends AbstractRepository {
*/
public function findAll($search, $start, $limit) {
// Polls
$prepared = $this->prepare('
SELECT p.*,
(SELECT count(1) FROM `' . Utils::table('vote') . '` v WHERE p.id=v.poll_id) votes
FROM `' . Utils::table('poll') . '` p
WHERE (:id = "" OR p.id LIKE :id)
AND (:title = "" OR p.title LIKE :title)
AND (:name = "" OR p.admin_name LIKE :name)
AND (:mail = "" OR p.admin_mail LIKE :mail)
ORDER BY p.title ASC
LIMIT :start, :limit
');
$poll = $search['poll'] . '%';
$title = '%' . $search['title'] . '%';
$name = '%' . $search['name'] . '%';
$mail = '%' . $search['mail'] . '%';
$prepared->bindParam(':id', $poll, PDO::PARAM_STR);
$prepared->bindParam(':title', $title, PDO::PARAM_STR);
$prepared->bindParam(':name', $name, PDO::PARAM_STR);
$prepared->bindParam(':mail', $mail, PDO::PARAM_STR);
$request = "";
$request .= "SELECT p.*,";
$request .= " (SELECT count(1) FROM `" . Utils::table('vote') . "` v WHERE p.id=v.poll_id) votes";
$request .= " FROM `" . Utils::table('poll') . "` p";
$request .= " WHERE 1";
$values = [];
if (!empty($search["poll"])) {
$request .= " AND p.id LIKE :poll";
$values["poll"] = "{$search["poll"]}%";
}
$fields = [
// key of $search => column name
"title" => "title",
"name" => "admin_name",
"mail" => "admin_mail",
];
foreach ($fields as $searchKey => $columnName) {
if (empty($search[$searchKey])) {
continue;
}
$request .= " AND p.$columnName LIKE :$searchKey";
$values[$searchKey] = "%{$search[$searchKey]}%";
}
$request .= " ORDER BY p.title ASC";
$request .= " LIMIT :start, :limit";
$prepared = $this->prepare($request);
foreach ($values as $searchKey => $value) {
$prepared->bindParam(":$searchKey", $value, PDO::PARAM_STR);
}
$prepared->bindParam(':start', $start, PDO::PARAM_INT);
$prepared->bindParam(':limit', $limit, PDO::PARAM_INT);
$prepared->execute();
return $prepared->fetchAll();

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)
*/
namespace Framadate\Repositories;

View File

@ -18,6 +18,8 @@
*/
namespace Framadate\Services;
use DateTime;
use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\RFCValidation;
/**
* This class helps to clean all inputs from the users or external services.
@ -65,7 +67,26 @@ class InputService {
}
public function filterMail($mail) {
return filter_var($mail, FILTER_VALIDATE_EMAIL);
///////////////////////////////////////////////////////////////////////////////////////
// formatting
$mail = trim($mail);
///////////////////////////////////////////////////////////////////////////////////////
// e-mail validation
$resultat = FALSE;
$validator = new EmailValidator();
if ($validator->isValid($mail, new RFCValidation())) {
$resultat = $mail;
}
///////////////////////////////////////////////////////////////////////////////////////
// return
return $resultat;
}
public function filterDescription($description) {

View File

@ -25,7 +25,6 @@ use Framadate\Form;
use Framadate\FramaDB;
use Framadate\Repositories\RepositoryFactory;
use Framadate\Security\Token;
use Framadate\Utils;
class PollService {
private $connect;
@ -178,8 +177,18 @@ class PollService {
return $this->pollRepository->findAllByAdminMail($mail);
}
function computeBestChoices($votes) {
$result = ['y' => [0], 'inb' => [0]];
/**
* @param array $votes
* @param \stdClass $poll
* @return array
*/
public function computeBestChoices($votes, $poll) {
if (0 === count($votes)) {
return $this->computeEmptyBestChoices($poll);
}
$result = ['y' => [], 'inb' => []];
// if there are votes
foreach ($votes as $vote) {
$choices = str_split($vote->choices);
foreach ($choices as $i => $choice) {
@ -262,6 +271,39 @@ class PollService {
return $slots;
}
/**
* @param \stdClass $poll
* @return array
*/
private function computeEmptyBestChoices($poll)
{
$result = ['y' => [], 'inb' => []];
// if there is no votes, calculates the number of slot
$slots = $this->allSlotsByPoll($poll);
if ($poll->format === 'A') {
// poll format classic
for ($i = 0; $i < count($slots); $i++) {
$result['y'][] = 0;
$result['inb'][] = 0;
}
} else {
// poll format date
$slots = $this->splitSlots($slots);
foreach ($slots as $slot) {
for ($i = 0; $i < count($slot->moments); $i++) {
$result['y'][] = 0;
$result['inb'][] = 0;
}
}
}
return $result;
}
private function random($length) {
return Token::getToken($length);
}
@ -293,10 +335,10 @@ class PollService {
if (count($votes) <= 0) {
return;
}
$best_choices = $this->computeBestChoices($votes);
$best_choices = $this->computeBestChoices($votes, $poll);
foreach ($best_choices['y'] as $i => $nb_choice) {
// if for this option we have reached maximum value and user wants to add itself too
if ($poll->ValueMax !== null && $nb_choice >= $poll->ValueMax && $user_choice[$i] === "2") {
if ($poll->ValueMax !== null && $nb_choice >= $poll->ValueMax && $user_choice[$i] === "2") {
throw new ConcurrentVoteException();
}
}

View File

@ -18,7 +18,7 @@
*/
// FRAMADATE version
const VERSION = '1.1.0-alpha.1';
const VERSION = '1.1.0-beta.3';
// PHP Needed version
const PHP_NEEDED_VERSION = '5.6';

View File

@ -1,7 +1,9 @@
<?php
namespace Framadate;
abstract class FramaTestCase extends \PHPUnit_Framework_TestCase {
use PHPUnit\Framework\TestCase;
abstract class FramaTestCase extends TestCase {
protected function getTestResourcePath($resourcepath) {
return __DIR__ . '/../resources/' . $resourcepath;
}

View File

@ -0,0 +1,32 @@
<?php
namespace Framadate\Services;
use Framadate\FramaTestCase;
class InputServiceUnitTest extends FramaTestCase
{
public function liste_emails() {
return [
// valids addresses
"valid address" => ["example@example.com", "example@example.com"],
"local address" => ["test@localhost", "test@localhost"],
"IP address" => ["ip.email@127.0.0.1", "ip.email@127.0.0.1"],
"with spaces arround" => [" with@spaces ", "with@spaces"],
"unicode caracters" => ["unicode.éà@idn-œ.com", "unicode.éà@idn-œ.com"],
// invalids addresses
"without domain" => ["without-domain", FALSE],
"space inside" => ["example example@example.com", FALSE],
"forbidden chars" => ["special_chars.@example.com", FALSE],
];
}
/**
* @dataProvider liste_emails
*/
public function test_filterMail($email, $expected) {
$inputService = new InputService();
$filtered = $inputService->filterMail($email);
$this->assertSame($expected, $filtered);
}
}

View File

@ -6,10 +6,7 @@ use Framadate\FramaTestCase;
class MailServiceUnitTest extends FramaTestCase {
const MSG_KEY = '666';
/**
* @test
*/
function should_send_a_2nd_mail_after_a_good_interval() {
public function test_should_send_a_2nd_mail_after_a_good_interval() {
// Given
$mailService = new MailService(true);
$_SESSION[MailService::MAILSERVICE_KEY] = [self::MSG_KEY => time() - 1000];
@ -21,10 +18,7 @@ class MailServiceUnitTest extends FramaTestCase {
$this->assertSame(true, $canSendMsg);
}
/**
* @test
*/
function should_not_send_2_mails_in_a_short_interval() {
public function test_should_not_send_2_mails_in_a_short_interval() {
// Given
$mailService = new MailService(true);
$_SESSION[MailService::MAILSERVICE_KEY] = [self::MSG_KEY => time()];

View File

@ -61,7 +61,8 @@
"phpmailer/phpmailer": "^5.2",
"ircmaxell/password-compat": "dev-master",
"roave/security-advisories": "dev-master",
"erusev/parsedown": "^1.7"
"erusev/parsedown": "^1.7",
"egulias/email-validator": "~2.1"
},
"require-dev": {

167
composer.lock generated
View File

@ -4,8 +4,119 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "a3ca2dd4f87562095f8c19a94560fed7",
"content-hash": "40759eac537218b0212ed923261b9850",
"packages": [
{
"name": "doctrine/lexer",
"version": "v1.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Lexer\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"lexer",
"parser"
],
"time": "2014-09-09T13:34:57+00:00"
},
{
"name": "egulias/email-validator",
"version": "2.1.3",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/1bec00a10039b823cc94eef4eddd47dcd3b2ca04",
"reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.0.1",
"php": ">= 5.5"
},
"require-dev": {
"dominicsayers/isemail": "dev-master",
"phpunit/phpunit": "^4.8.35",
"satooshi/php-coveralls": "^1.0.1"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Egulias\\EmailValidator\\": "EmailValidator"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eduardo Gulias Davis"
}
],
"description": "A library for validating emails against several RFCs",
"homepage": "https://github.com/egulias/EmailValidator",
"keywords": [
"email",
"emailvalidation",
"emailvalidator",
"validation",
"validator"
],
"time": "2017-11-15T23:40:40+00:00"
},
{
"name": "erusev/parsedown",
"version": "1.7.1",
@ -613,60 +724,6 @@
],
"time": "2015-06-14T21:17:01+00:00"
},
{
"name": "doctrine/lexer",
"version": "v1.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Lexer\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"lexer",
"parser"
],
"time": "2014-09-09T13:34:57+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v2.10.4",

View File

@ -2,7 +2,62 @@ $(document).ready(function() {
wrapper = new MDEWrapper($('.js-desc textarea')[0], $('#rich-editor-button'), $('#simple-editor-button'));
var firstOpening = true;
$('[data-toggle="popover"]').popover();
function createNode(text) {
var node = document.createElement('pre');
node.style.width = '1px';
node.style.height = '1px';
node.style.position = 'fixed';
node.style.top = '5px';
node.textContent = text;
return node;
}
function copyNode(node) {
var selection = getSelection();
selection.removeAllRanges();
var range = document.createRange();
range.selectNodeContents(node);
selection.addRange(range);
document.execCommand('copy');
selection.removeAllRanges();
}
function copyText(text) {
var node = createNode(text);
document.body.appendChild(node);
copyNode(node);
document.body.removeChild(node);
}
/**
* When clicked on a .clipboard-url link, copy link inside clipboard and show popover confirmation for 2 seconds
*/
$('body').on('click', '.clipboard-url', function(e) {
var btn = $(e.target);
/**
* Kind of workaround for clicking child instead of button (because propagation is stopped with preventDefault())
*/
if (!btn.get(0).hasAttribute('data-toggle')) {
btn = btn.parent();
}
/**
* Try catch because reasons : https://caniuse.com/#feat=clipboard
*/
try {
copyText(btn.attr('href'));
btn.popover('show');
setTimeout(function () {
btn.popover('hide');
}, 2000);
e.preventDefault();
} catch (err) {
console.log('Oops, unable to copy');
}
});
$('#title-form .btn-edit').on('click', function() {
$('#title-form h3').hide();
@ -140,4 +195,4 @@ $(document).ready(function() {
});
});
});

View File

@ -75,7 +75,8 @@ $(document).ready(function () {
var lastComment = $('#comments_list')
.find('div.comment')
.last();
lastComment.effect('highlight', {color: 'green'}, 401);
// TODO : replace old jQuery UI Effect with Modern CSS
// lastComment.effect('highlight', {color: 'green'}, 401);
$('html, body').animate({
scrollTop: lastComment.offset().top
}, 750);

13
js/jquery-ui.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -122,6 +122,7 @@
"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 on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"Error!": "خطأ !",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
@ -142,6 +143,8 @@
"Poll id already used": "Identifier is already used",
"Something is going wrong...": "حدث هناك خطأ ما ...",
"Something is wrong with the format": "Something is wrong with the format",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.",
@ -182,7 +185,7 @@
"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",
"Ifneedbe": "If need be",
"Legend:": "Legend:",
"Link": "الرابط",
"Make your polls": "Make your polls",
@ -269,13 +272,14 @@
"Chart": "المنحنى البياني",
"Display the chart of the results": "عرض المنحنى البياني للنتائج",
"Edit the line: %s": "Edit line: %s",
"Link to edit this particular line": "Link to edit this particular line",
"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 ifneedbe for": "Vote \"If need be\" for",
"Vote no for": "Vote \"no\" for",
"Vote yes for": "Vote \"yes\" for",
"Votes of the poll": "الأصوات",

View File

@ -122,12 +122,13 @@
"Enter a name and a comment!": "Enankit un anv hag un evezhiadenn!",
"Enter a title": "Ret eo enankañ un titl!",
"Enter an email address": "Ret eo enankañ ur chomlec'h postel",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"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 all comments": "C'hwitadenn en ur zilemel an holl evezhiadennoù",
"Failed to delete all votes": "C'hwitadenn en ur zilemel an holl vouezhioù",
"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 comment": "C'hwitadenn en ur zilemel an evezhiadenn",
"Failed to delete the poll": "C'hwitadenn en ur zilemel ar sontadeg",
"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",
@ -142,6 +143,8 @@
"Poll id already used": "Arveret eo an naoudi endeo",
"Something is going wrong...": "Un dra bennak a-dreuz a zo...",
"Something is wrong with the format": "Un dra bennak a-dreuz a zo gant ar mentrezh",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.": "Didalvoudek eo ar chomlec'h postel enanket. Ret eo lakaat ur chomlec'h postel talvoudek (skouer: mari-jo@gozmail.bzh)evit resevout ere ar sontadeg.",
"The column already exists": "Ar bann a zo anezhañ endeo",
"The name is invalid.": "Didalvoudek eo an anv.",
@ -269,6 +272,7 @@
"Chart": "Diervad",
"Display the chart of the results": "Skrammañ diervad an disoc'hoù",
"Edit the line: %s": "Kemmañ al linenn: %s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Dilemel al linenn:",
"Save the choices": "Enrollañ an dibaboù",
"Scroll to the left": "Dibunañ d'an tu kleiz",
@ -328,7 +332,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 amount of voters per option": "Limit the amount of voters per option",
"Limit the amount of voters per option": "Bevenniñ an niver a vouezhierien dre zibab",
"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",
@ -347,8 +351,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 ",
"Value Max": "Talvoud uc'hek",
"ValueMax instructions": "mouezhier dre zibab",
"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,7 +3,7 @@
"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 erforderlich.",
"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 keine 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",
@ -60,10 +60,10 @@
"Check again": "Erneut prüfen",
"Consider enabling the PHP extension OpenSSL for increased security.": "Ziehen Sie in Erwägung, für eine verbesserte Sicherheit die OpenSSL-Erweiterung zu aktivieren.",
"Consider setting the date.timezone in php.ini.": "Ziehen Sie in Erwägung, date.timezone in php.ini zu konfigurieren.",
"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.": "DE_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.": "Setzen Sie « session.cookie_httponly = 1 » in Ihrer php.ini oder fügen Sie « php_value session.cookie_httponly 1 » Ihrer .htaccess Datei hinzu so dass auf Cookies nicht per Javascript zugegriffen werden kann.",
"Continue the installation": "Installation fortsetzen",
"Cookies are served from HTTP only.": "DE_Cookies are served from HTTP only.",
"Installation checking": "Verifikation der Installation",
"Cookies are served from HTTP only.": "Cookies werden nur über HTTP ausgeliefert.",
"Installation checking": "Überprüfung der Installation",
"OpenSSL extension loaded.": "Die OpenSSL-Erweiterung ist geladen.",
"PHP Intl extension is enabled.": "Die PHP-Erweiterung Intl ist aktiviert.",
"PHP version %s is enough (needed at least PHP %s).": "PHP Version %s ist ausreichend (mindestens PHP %s wird benötigt).",
@ -119,15 +119,16 @@
"Comment failed": "Abgabe des Kommentars gescheitert",
"Cookies are disabled on your browser. Theirs activation is required to create a poll.": "Cookies werden von Ihrem Browser abgelehnt. Um eine Umfrage zu erstellen, müssen Sie sie akzeptieren.",
"Enter a name": "Geben Sie einen Namen ein",
"Enter a name and a comment!": "Geben Sie einen Namen und ein Kommentar ein!",
"Enter a name and a comment!": "Geben Sie einen Namen und einen Kommentar ein!",
"Enter a title": "Titel eingeben",
"Enter an email address": "Geben Sie eine E-Mail Adresse ein",
"Error on amount of voters limitation : value must be an integer greater than 0": "Wählerzahlbegrenzung ist falsch: Wert muss größer als 0 sein.",
"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 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 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",
@ -140,29 +141,31 @@
"Passwords do not match": "Die Passwörter stimmen nicht überein.",
"Poll has been updated before you vote": "Die Abstimmung wurde vor Ihrer Stimmabgabe aktualisiert",
"Poll id already used": "Der Bezeichner ist bereits in Verwendung",
"Something is going wrong...": "Etwas geht schief...",
"Something is going wrong...": "Etwas ging schief ...",
"Something is wrong with the format": "Mit dem Format stimmt etwas nicht",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Etwas ist falsch mit dem Format: Persönliche URLs dürfen nur aus alphanumerischen Zeichen und Bindestrichen bestehen.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Etwas ist falsch mit dem Format: Es sollte kein Leerzeichen vor oder nach dem Namen stehen.",
"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.": "Die Adresse ist nicht korrekt! Sie sollten eine gültige E-Mail-Adresse angeben, damit Ihnen der Link zur Umfrage zugeschickt werden kann.",
"The column already exists": "Die Spalte existiert bereits",
"The name is invalid.": "Der Name ist ungültig.",
"The name you've chosen already exist in this poll!": "Der von Ihnen eingegebenen Name existiert schon in dieser Umfrage",
"There is a problem with your choices": "Es gibt ein Problem mit Ihren Alternativen",
"The name you've chosen already exist in this poll!": "Der von Ihnen eingegebene Name existiert schon in dieser Umfrage!",
"There is a problem with your choices": "Es gibt ein Problem mit Ihrer Auswahl",
"This poll doesn't exist !": "Diese Umfrage existiert nicht!",
"Update vote failed": "Aktualisierung der Wertung fehlgeschlagen",
"Update vote failed": "Aktualisierung der Stimme fehlgeschlagen",
"You already voted": "Sie haben bereits abgestimmt",
"You can't create a poll with hidden results with the following edition option:": "Sie können mit der folgenden Editier-Option keine Umfrage mit versteckten Ergebnissen erzeugen:",
"You can't select more than %d dates": "Es können nicht mehr als %d Termine ausgewählt werden",
"You haven't filled the first section of the poll creation.": "Sie haben den ersten Teil der Umfrageerstellung nicht ausgefüllt.",
"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."
"Your vote wasn't counted, because someone voted in the meantime and it conflicted with your choices and the poll conditions. Please retry.": "Ihre Stimme wurde nicht gezählt, da jemand in der Zwischenzeit gewählt hat und dies mit Ihrer Abstimmung und den Umfrage-Bestimmungen in Konflikt stand. Bitte versuchen Sie es erneut."
},
"FindPolls": {
"Have a good day!": "Einen schönen Tag noch!",
"Here is the list of the polls that you manage on %s:": "Hier ist die Liste der Umfragen die Sie auf %s verwalten:",
"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.": "Wenn Sie diesen Vorgang nicht veranlasst haben und glauben dass dieser Dienst missbraucht wurde, benachrichtene Sie bitte den Administrator auf %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.": "Wenn Sie diesen Vorgang nicht veranlasst haben und glauben dass dieser Dienst missbraucht wurde, benachrichtigen Sie bitte den Administrator auf %s.",
"List of your polls": "Liste Ihrer Umfragen",
"PS: this email has been sent because you or someone else asked to get back the polls created with your email address.": "PS : Diese E-Mail wurde abgeschickt weil Sie oder jemand anderes Zugriff auf die mit Ihrer E-Mail-Adresse angelegten Umfragen angefordert hat.",
"Polls sent": "Umfragen abgeschickt",
"Send me my polls": "Senden Sie mir mein Umfragen"
"Send me my polls": "Senden Sie mir meine Umfragen"
},
"Generic": {
"(in the format name@mail.com)": "(Format: name@mail.com)",
@ -182,7 +185,7 @@
"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",
"Ifneedbe": "Wenn nötig",
"Legend:": "Legende:",
"Link": "Link",
"Make your polls": "Eigene Umfragen erstellen",
@ -233,7 +236,7 @@
},
"Mail": {
"Author's message": "Nachricht vom Autor ",
"FOOTER": "„Die Strecke ist lang, aber der Weg ist frei… » <br/>Framasoft besteht nur durch Ihre Spenden (in Frankreich von der Steuer absetzba).<br/>Herzlichen Dank für Ihre Unterstützung https://soutenir.framasoft.org",
"FOOTER": "„Die Strecke ist lang, aber der Weg ist frei… \"<br/>Framasoft besteht nur durch Ihre Spenden (in Frankreich von der Steuer absetzbar).<br/>Herzlichen Dank für Ihre Unterstützung https://soutenir.framasoft.org",
"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",
@ -241,7 +244,7 @@
"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.",
"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 Umfrageteilnehmer.",
"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 ",
@ -252,7 +255,7 @@
},
"Maintenance": {
"Thank you for your understanding.": "Danke für Ihr Verständnis.",
"The application": "die Anwendung",
"The application": "Die Anwendung",
"is currently under maintenance.": "wird gerade gewartet."
},
"Password": {
@ -269,6 +272,7 @@
"Chart": "Grafik",
"Display the chart of the results": "Ergebnisgrafik anzeigen",
"Edit the line: %s": "Zeile bearbeiten: %s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Zeile entfernen:",
"Save the choices": "Wahl speichern",
"Scroll to the left": "Nach links scrollen",
@ -285,7 +289,7 @@
"PollInfo": {
"Admin link of the poll": "Administrationsseite der Umfrage",
"Cancel the description edit": "Änderungen der Beschreibung verwerfen",
"Cancel the email address edit": "Abbruch, Mail-Adresse nicht ändern",
"Cancel the email address edit": "Abbruch, E-Mail-Adresse nicht ändern",
"Cancel the expiration date edit": "Abbruch, Ablaufdatum nicht ändern",
"Cancel the name edit": "Abbruch, Namen nicht ändern",
"Cancel the rules edit": "Abbruch, Regeln nicht ändern",
@ -312,14 +316,14 @@
"Remove the poll": "Umfrage löschen",
"Results are hidden": "Ergebnisse werden ausgeblendet",
"Results are visible": "Ergebnisse sind sichtbar",
"Rich editor": "DE_Editeur avancé",
"Rich editor": "Rich Text Editor",
"Save the description": "Beschreibung speichern",
"Save the email address": "Speichern Sie die E-Mail-Adresse",
"Save the new expiration date": "Speichern Sie das neue Ablaufdatum",
"Save the new name": "Speichern Sie den neuen Namen",
"Save the new rules": "Neue Regeln speichern",
"Save the new title": "Den neuen Titel speichern",
"Simple editor": "DE_Editeur simple",
"Simple editor": "Einfacher Editor",
"Title": "Titel",
"Votes and comments are locked": "Wertungen und Kommentare sind gesperrt",
"Votes protected by password": "Wertungen sind passwortgeschützt"
@ -328,8 +332,8 @@
"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 amount of voters per option": "Begrenzung der anzahl der aähler pro option",
"More informations here:": "DE_Plus d'informations ici :",
"Limit the amount of voters per option": "Anzahl der Stimmen pro Option begrenzen",
"More informations here:": "Weitere Informationen gibt es hier:",
"Only the poll maker can see the poll's results": "Einzig der Autor der Abstimmung kann die Ergebnisse einsehen",
"Optional parameters": "Optionale Einstellungen",
"Password choice": "Passwortauswahl",
@ -337,22 +341,22 @@
"Permissions": "Berechtigungen",
"Poll creation (1 on 3)": "Umfrage erstellen (Schritt 1 von 3)",
"Poll id": "Bezeichner",
"Poll id rules": "Der Bezeichner kann Buchstaben, Zahlen und Bindestriche enhalten \"-\".",
"Poll id rules": "Der Bezeichner kann Buchstaben, Zahlen und Bindestriche \"-\" enthalten.",
"Poll id warning": "Mit der Verwendung eines Bezeichners können möglicherweise Personen unerwünscht Zugriff auf die Umfrage erhalten. Es wird empfohlen sie mit einem Passwort zu schützen.",
"Poll password": "Passwort",
"Poll title": "Titel der Umfrage",
"Required fields cannot be left blank.": "Mit * markierte Felder müssen ausgefüllt sein.",
"The results are publicly visible": "Die Ergebnisse sind öffentlich Einsehbar",
"To make the description more attractive, you can use the Markdown format.": "DE_Afin de rendre le descriptif de ce sondage plus attractif, vous pouvez utiliser le formatage Markdown.",
"The results are publicly visible": "Die Ergebnisse sind öffentlich einsehbar",
"To make the description more attractive, you can use the Markdown format.": "Sie können das Markdown Format nutzen um die Beschreibung attraktiver zu gestalten.",
"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 ",
"ValueMax instructions": "Stimmen 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",
"You can enable or disable the editor at will.": "DE_Vous pouvez activer ou désactiver l'éditeur à votre guise."
"You can enable or disable the editor at will.": "Sie können den Editor nach Belieben ein- und wieder ausschalten."
},
"Step 2": {
"Back to step 1": "Zurück zum 1. Schritt",
@ -367,16 +371,16 @@
"Remove a choice": "Eine Auswahlmöglichkeit entfernen",
"These fields are optional. You can add a link, an image or both.": "Diese Felder sind optional. Sie können einen Link, ein Bild oder beides hinzufügen.",
"To make a generic poll you need to propose at least two choices between differents subjects.": "Um eine gewöhnliche Umfrage zu erstellen, müssen Sie mindestens zwei Alternativen zur Auswahl stellen.",
"URL of the image": "URL des Bilds",
"URL of the image": "URL des Bildes",
"You can add or remove additional choices with the buttons": "Um Auswahlmöglichkeiten hinzuzufügen oder zu entfernen, verwenden Sie die Buttons",
"the Markdown syntax": "Markdown Syntax"
},
"Step 2 date": {
"Add a day": "Einen Tag hinzufügen",
"Add an hour": "Eine Uhrzeit hinzufügen",
"Choose the dates of your poll": "Machen Sie Treminvorschläge für Ihre Umfrage",
"Choose the dates of your poll": "Machen Sie Terminvorschläge für Ihre Umfrage",
"Copy hours of the first day": "Uhrzeiten des ersten Tags kopieren",
"For each selected day, you can choose, or not, meeting hours (e.g.: \"8h\", \"8:30\", \"8h-10h\", \"evening\", etc.)": "Für jeden ausgewählten Tag können Sie fakultativ Uhrzeiten festlegen (z.B.: \"8h\", \"8:30\", \"8h-10h\", \"abends\", usw.)",
"For each selected day, you can choose, or not, meeting hours (e.g.: \"8h\", \"8:30\", \"8h-10h\", \"evening\", etc.)": "Für jeden ausgewählten Tag können Sie fakultativ Uhrzeiten vorschlagen (z. B.: \"8h\", \"8:30\", \"8h-10h\", \"abends\", usw.)",
"Poll dates (2 on 3)": "Umfragedaten (2 von 3)",
"Remove a day": "Einen Tag entfernen",
"Remove all days": "Alle Tage entfernen",
@ -394,10 +398,10 @@
"List of your choices": "Liste Ihrer Auswahlmöglichkeiten",
"Once you have confirmed the creation of your poll, you will be automatically redirected on the administration page of your poll.": "Wenn Sie die Erzeugung ihrer Umfrage bestätigt haben, werden sie automatisch zur Administrationsseite ihrer Umfrage weitergeleitet.",
"Removal date and confirmation (3 on 3)": "Abstimmungszeitraum und Bestätigung (3 von 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.": "Sie werden zwei E-Mails erhalten: die Eine enthält den Link zur Umfrage für die Teilnehmer, die andere den zur Administrationsseite für Ihre Umfrage.",
"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.": "Sie werden zwei E-Mails erhalten: Die eine enthält den Link zur Umfrage für die Teilnehmer, die andere den Link zur Administrationsseite für Ihre Umfrage.",
"You can set a closer archiving date for it.": "Sie können das Datum der Archivierung vorverlegen.",
"Your poll will automatically be archived": "Ihre Umfrage wird automatisch",
"Your poll will be automatically archived in %d days.": "Ihre Umfrage wird automatisch in %d Tage archiviert werden.",
"Your poll will automatically be archived": "Ihre Umfrage wird automatisch archiviert",
"Your poll will be automatically archived in %d days.": "Ihre Umfrage wird automatisch in %d Tagen archiviert werden.",
"after the last date of your poll.": "nach dem letzten Termin der Abstimmung archiviert."
},
"adminstuds": {
@ -406,7 +410,7 @@
"All votes deleted": "Alle Wertungen werden gelöscht",
"As poll administrator, you can change all the lines of this poll with this button": "Als Administrator der Umfrage können Sie alle Zeilen der Umfrage über diesen Button ändern",
"Back to the poll": "Zurück zur Umfrage",
"Choice added": "Alternative hinzugefügt",
"Choice added": "Option hinzugefügt",
"Column removed": "Spalte entfernt",
"Column's adding": "Spalte hinzufügen",
"Comment deleted": "Kommentar gelöscht",
@ -415,8 +419,8 @@
"Confirm removal of the column.": "Bestätigen Sie die Entfernung der Spalte",
"Confirm removal of the poll": "Bestätigen Sie die Löschung ihrer Umfrage",
"Delete the poll": "Umfrage löschen",
"Finally, you can change the informations of this poll like the title, the comments or your email address.": "Schließlich können Sie die Informationen wie Titel, Kommentare oder Ihre E-Mail-Adresse ändern.",
"If you just want to add a new hour to an existant date, put the same date and choose a new hour.": "Wenn Sie nur eine neue Uhrzeiteit zu einem vorhandenen Datum hinzufügen möchten, geben Sie das selbe Datum an und wählen Sie eine neue Uhrzeit aus.",
"Finally, you can change the informations of this poll like the title, the comments or your email address.": "Schließlich können Sie Informationen wie Titel, Kommentare oder Ihre E-Mail-Adresse ändern.",
"If you just want to add a new hour to an existant date, put the same date and choose a new hour.": "Wenn Sie nur eine neue Uhrzeit zu einem vorhandenen Datum hinzufügen möchten, geben Sie das selbe Datum an und wählen Sie eine neue Uhrzeit aus.",
"Keep comments": "Kommentare beibehalten",
"Keep the comments": "Kommentare beibehalten",
"Keep the poll": "Umfrage beibehalten",
@ -428,9 +432,9 @@
"Remove the column": "Spalte entfernen",
"Remove the comments": "Kommentare entfernen",
"Remove the votes": "Entfernen Sie die Stimmen",
"Vote added": "Wertung hinzugefügt",
"Vote deleted": "Wertung gelöscht",
"Vote updated": "Wertung aktualisiert",
"Vote added": "Stimme hinzugefügt",
"Vote deleted": "Stimme gelöscht",
"Vote updated": "Stimme aktualisiert",
"You can add a new scheduling date to your poll.": "Sie können Ihrer Umfrage ein neues Datum hinzufügen.",
"Your poll has been removed!": "Ihre Umfrage wurde gelöscht!",
"and add a new column with": "und neue Spalte hinzufügen mit",
@ -440,7 +444,7 @@
"Adding the vote succeeded": "Die Wertung wurde hinzugefügt",
"Deletion date:": "Löschdatum:",
"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.": "Wenn Sie an dieser Umfrage teilnehmen möchten, müssen Sie ihren Namen angeben, die Auswahl treffen, die Ihnen am ehesten zusagt und mit dem Plus-Button am Ende der Zeile bestätigen.",
"POLL_LOCKED_WARNING": "Die Abstimmung wurde vom Administrator gesperrt. Bewertungen und Kommentare werden eingefroren; es ist nicht mehr möglich, teilzunehmen",
"POLL_LOCKED_WARNING": "Die Abstimmung wurde vom Administrator gesperrt. Bewertungen und Kommentare werden eingefroren; es ist nicht mehr möglich teilzunehmen",
"The poll is expired, it will be deleted soon.": "Der Zeitraum für die Umfrage ist überschritten, sie wird bald gelöscht werden.",
"Update vote succeeded": "Die Wertung wurde geändert",
"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:": "Ihre Stimme wurde gezählt, aber beachten Sie, dass diese Umfrage die nachträgliche Änderung Ihrer Wertung nur über den nachfolgend genannten, personalisierten Link erlaubt; verwahren Sie ihn an einem sicheren Ort!"

View File

@ -122,6 +122,7 @@
"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 on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"Error!": "Error!",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
@ -142,10 +143,9 @@
"Poll id already used": "Identifier is already used",
"Something is going wrong...": "Something has gone wrong...",
"Something is wrong with the format": "Something is wrong with the format",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation : value must be an integer greater than 0",
"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!",
@ -272,13 +272,15 @@
"Chart": "Chart",
"Display the chart of the results": "Display the chart of the results",
"Edit the line: %s": "Edit line: %s",
"Link to edit this particular line": "Link to edit this particular line",
"Link to edit this particular line has been copied inside the clipboard!": "Link to edit this particular line has been copied inside the clipboard!",
"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 ifneedbe for": "Vote \"If need be\" for",
"Vote no for": "Vote \"no\" for",
"Vote yes for": "Vote \"yes\" for",
"Votes of the poll": "Votes",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Introduzca su nombre y un comentario",
"Enter a title": "Introducza un título",
"Enter an email address": "Introduzca un correo electrónico",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"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",
@ -142,6 +143,8 @@
"Poll id already used": "ES_L'identifiant est déjà utilisé",
"Something is going wrong...": "Algo anda mal...",
"Something is wrong with the format": "Algo está mal con el formato",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.": "El correo electrónico es incorrecto. Tiene que introducir una dirección cálida (por ejemplo r.stallman@outlook.com) para recibir el enlace de su encuesta.",
"The column already exists": "La columna ya existe",
"The name is invalid.": "Este nombre es invalido.",
@ -241,7 +244,7 @@
"Someone just delete your poll %s.": "Alguien acaba de borrar su encuesta \"%s\".",
"Thanks for filling the poll at the link above": "Gracias por ir a llenar la encuesta siguiendo este enlace",
"Thanks for your trust.": "Gracias por su confianza.",
"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.": "Este es el mensaje que puede enviar a todos los votantes.<br/>Ahora puede transmitir Voueste mensaje para todas las personas susceptibles de participar al voto.",
"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.": "Este es el mensaje que puede enviar a todos los votantes.",
"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": "Este mensaje NO tiene que ser difundido a los votantes. Es reservado para el autor de la encuesta.<br/><br/>Puede modificar esta encuesta en el enlace siguiente ",
"You have changed the settings of your poll. \nYou can modify this poll with this link": "Acaba de cambiar los parámetros de su encuestra.<br/>Puede seguir modificando la encuesta siguiendo este enlace",
"[ADMINISTRATOR] New settings for your poll": "[ADMINISTRACIÓN] Cambio de configuración de la encuesta",
@ -269,6 +272,7 @@
"Chart": "Gráfico",
"Display the chart of the results": "Mostrar el gráfico de resultados",
"Edit the line: %s": "Modificar la fila: %s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Borrar la fila:",
"Save the choices": "Guardar los cambios",
"Scroll to the left": "Hacer desfilar hacia la izquierda",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Merci de remplir les deux champs !",
"Enter a title": "Il faut saisir un titre !",
"Enter an email address": "Il faut saisir une adresse électronique !",
"Error on amount of voters limitation : value must be an integer greater than 0": "Erreur sur le nombre maximum de votants : la valeur doit être un entier supérieur à 0",
"Error!": "Erreur !",
"Failed to delete all comments": "Impossible de supprimer tous les commentaires",
"Failed to delete all votes": "Impossible de supprimer tous les votes",
@ -145,7 +146,6 @@
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Quelque chose ne va pas avec le format: les urls personalisées devraient contenir uniquement des caractères alphanumériques et des tirets.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Quelque chose ne va pas avec le format : le nom ne devrait pas contenir d'espaces avant ou après",
"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.": "L'adresse saisie n'est pas correcte ! Il faut une adresse électronique valide (par exemple r.stallman@outlock.com) pour recevoir le lien vers le sondage.",
"Error on amount of voters limitation : value must be an integer greater than 0": "Erreur sur le nombre maximum de votants : la valeur doit être un entier supérieur à 0",
"The column already exists": "La colonne existe déjà",
"The name is invalid.": "Le nom n'est pas valide.",
"The name you've chosen already exist in this poll!": "Le nom que vous avez choisi existe déjà !",
@ -272,6 +272,8 @@
"Chart": "Graphique",
"Display the chart of the results": "Afficher le graphique des résultats",
"Edit the line: %s": "Modifier la ligne : %s",
"Link to edit this particular line": "Lien pour éditer cette ligne",
"Link to edit this particular line has been copied!": "Le lien pour éditer cette ligne a bien été copié dans le presse-papiers !",
"Remove the line:": "Supprimer la ligne :",
"Save the choices": "Enregistrer les choix",
"Scroll to the left": "Faire défiler à gauche",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Merci de remplir les deux champs !",
"Enter a title": "Il faut saisir un titre !",
"Enter an email address": "Il faut saisir une adresse électronique !",
"Error on amount of voters limitation : value must be an integer greater than 0": "Erreur sur le nombre maximum de votants : la valeur doit être un entier supérieur à 0",
"Error!": "Erreur !",
"Failed to delete all comments": "Impossible de supprimer tous les commentaires",
"Failed to delete all votes": "Impossible de supprimer tous les votes",
@ -142,10 +143,9 @@
"Poll id already used": "L'identifiant est déjà utilisé",
"Something is going wrong...": "Quelque chose ne va pas...",
"Something is wrong with the format": "Quelque chose ne va pas avec le format",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Quelque chose ne va pas avec le format : les urls personalisées devraient contenir uniquement des caractères alphanumériques et des tirets.",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Quelque chose ne va pas avec le format: les urls personalisées devraient contenir uniquement des caractères alphanumériques et des tirets.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Quelque chose ne va pas avec le format : le nom ne devrait pas contenir d'espaces avant ou après",
"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.": "L'adresse saisie n'est pas correcte ! Il faut une adresse électronique valide (par exemple r.stallman@outlock.com) pour recevoir le lien vers le sondage.",
"Error on amount of voters limitation : value must be an integer greater than 0": "Erreur sur le nombre maximum de votants : la valeur doit être un entier supérieur à 0",
"The column already exists": "La colonne existe déjà",
"The name is invalid.": "Le nom n'est pas valide.",
"The name you've chosen already exist in this poll!": "Le nom que vous avez choisi existe déjà !",
@ -272,6 +272,8 @@
"Chart": "Graphique",
"Display the chart of the results": "Afficher le graphique des résultats",
"Edit the line: %s": "Modifier la ligne : %s",
"Link to edit this particular line": "Lien pour éditer cette ligne",
"Link to edit this particular line has been copied!": "Le lien pour éditer cette ligne a bien été copié dans le presse-papiers !",
"Remove the line:": "Supprimer la ligne :",
"Save the choices": "Enregistrer les choix",
"Scroll to the left": "Faire défiler à gauche",
@ -331,9 +333,9 @@
"All voters can modify any vote": "Tou·te·s les sondé·e·s peuvent modifier tous les votes",
"Customize the URL": "Personnaliser le lien",
"Go to step 2": "Aller à l'étape 2",
"Limit the amount of voters per option": "limiter le nombre de votants par option",
"Limit the amount of voters per option": "Limiter le nombre de votant·e·s par option",
"More informations here:": "Plus d'informations ici :",
"Only the poll maker can see the poll's results": "Seul le ou la créateur·rice du sondage peut voir les résultats",
"Only the poll maker can see the poll's results": "Seul·e le ou la créateur·rice du sondage peut voir les résultats",
"Optional parameters": "Paramètres facultatifs",
"Password choice": "Choix",
"Password confirmation": "Confirmation",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Inserire un nome e un commento!",
"Enter a title": "È necessario inserire un titolo !",
"Enter an email address": "È necessario inserire un indirizzo e-mail!",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"Error!": "Errore!",
"Failed to delete all comments": "Impossibile eliminare tutti i commenti",
"Failed to delete all votes": "Impossibile eliminare tutti i voti",
@ -142,6 +143,8 @@
"Poll id already used": "L'identificativo del sondaggio è già in uso",
"Something is going wrong...": "Qualcosa non è corretto...",
"Something is wrong with the format": "Qualche errore nel formato",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.": "L'indirizzo inserito non è corretto ! È necessario un indirizzo e-mail valido (per esempio r.stallman@outlock.com) per ricevere il link del sondaggio.",
"The column already exists": "La colonna esiste già",
"The name is invalid.": "Nome non valido.",
@ -269,6 +272,7 @@
"Chart": "Grafico",
"Display the chart of the results": "Mostra il grafico dei risultati",
"Edit the line: %s": "Modificare la riga : %s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Eliminare la riga :",
"Save the choices": "Salvare le scelte",
"Scroll to the left": "Spostare a sinistra",
@ -328,7 +332,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 amount of voters per option": "Limitare la quantità di elettori per opzione",
"Limit the amount of voters per option": "Limitate la quantità di votanti 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",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Vul een naam en een opmerking in!",
"Enter a title": "Voer een titel in",
"Enter an email address": "Voer een emailadres in",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"Error!": "Fout!",
"Failed to delete all comments": "Failed to delete all comments",
"Failed to delete all votes": "Failed to delete all votes",
@ -142,6 +143,8 @@
"Poll id already used": "Deze ID is reeds gebruikt",
"Something is going wrong...": "Er is iets foutgegaan...",
"Something is wrong with the format": "Er is iets foutgegaan met het formaat",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.": "Het adres is niet juist! Je moet een geldig emailadres invoeren (zoals r.stallman@outlock.com) zodat je de link naar je poll kan ontvangen.",
"The column already exists": "De kolom bestaat reeds",
"The name is invalid.": "De naam is niet geldig.",
@ -269,6 +272,7 @@
"Chart": "Grafiek",
"Display the chart of the results": "Toon de grafiek met resultaten",
"Edit the line: %s": "Bewerk regel: %s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Verwijder regel:",
"Save the choices": "Keuzes opslaan",
"Scroll to the left": "Scroll naar links",

View File

@ -122,6 +122,7 @@
"Enter a name and a comment!": "Mercé de garnir los dos camps!",
"Enter a title": "Cal picar un títol!",
"Enter an email address": "Cal picar una adreça de messatjariá!",
"Error on amount of voters limitation : value must be an integer greater than 0": "Error on amount of voters limitation: value must be an integer greater than 0",
"Error!": "Error!",
"Failed to delete all comments": "Fracàs de la supression de totes los comentaris",
"Failed to delete all votes": "Fracàs de la supression de totes los vòtes",
@ -142,6 +143,8 @@
"Poll id already used": "Lidentificant es ja utilizat",
"Something is going wrong...": "I a quicòm que truca...",
"Something is wrong with the format": "I a quicòm que truca amb lo format.",
"Something is wrong with the format: customized urls should only consist of alphanumeric characters and hyphens.": "Something is wrong with the format: Customized urls should only consist of alphanumeric characters and hyphens.",
"Something is wrong with the format: name shouldn't have any spaces before or after": "Something is wrong with the format: name shouldn't have any spaces before or after",
"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.": "Ladreça picada es pas corrècta!Cal una adreça valida (per exemple r.stallman@outlock.com) per recebre lo ligam cap al sondatge.",
"The column already exists": "La colomna existís ja",
"The name is invalid.": "Lo nom es pas valid.",
@ -269,6 +272,7 @@
"Chart": "Grafic",
"Display the chart of the results": "Afichar lo grafic dels resultats",
"Edit the line: %s": "Modificar la linha:%s",
"Link to edit this particular line": "Link to edit this particular line",
"Remove the line:": "Suprimir la linha:",
"Save the choices": "Enregistrar las causidas",
"Scroll to the left": "Far desfilar a man esquèrra",

View File

@ -227,7 +227,7 @@ $smarty->assign('deletion_date', strtotime($poll->end_date) + PURGE_DELAY * 8640
$smarty->assign('slots', $poll->format === 'D' ? $pollService->splitSlots($slots) : $slots);
$smarty->assign('slots_hash', $pollService->hashSlots($slots));
$smarty->assign('votes', $pollService->splitVotes($votes));
$smarty->assign('best_choices', $pollService->computeBestChoices($votes));
$smarty->assign('best_choices', $pollService->computeBestChoices($votes, $poll));
$smarty->assign('comments', $comments);
$smarty->assign('editingVoteId', $editingVoteId);
$smarty->assign('message', $message);

View File

@ -146,11 +146,15 @@
<i class="glyphicon glyphicon-pencil"></i><span class="sr-only">{__('Generic', 'Edit')}</span>
</a>
{if $admin}
<a href="{poll_url id=$poll->id vote_id=$vote->uniqId}" class="btn btn-default btn-sm clipboard-url" data-toggle="popover" data-trigger="manual" title="{__('Poll results', 'Link to edit this particular line')}" data-content="{__('Poll results', 'Link to edit this particular line has been copied!')}">
<span class="btn-link glyphicon glyphicon-link"></span>
</a>
<a href="{poll_url id=$admin_poll_id admin=true action='delete_vote' action_value=$vote->id}"
class="btn btn-default btn-sm"
title="{__('Poll results', 'Remove the line:')} {$vote->name|html}">
<i class="glyphicon glyphicon-remove text-danger"></i><span class="sr-only">{__('Generic', 'Remove')}</span>
</a>
{/if}
</td>
{else}

View File

@ -204,11 +204,15 @@
<i class="glyphicon glyphicon-pencil"></i><span class="sr-only">{__('Generic', 'Edit')}</span>
</a>
{if $admin}
<a href="{poll_url id=$poll->id vote_id=$vote->uniqId}" class="btn btn-default btn-sm clipboard-url" data-toggle="popover" data-trigger="manual" title="{__('Poll results', 'Link to edit this particular line')}" data-content="{__('Poll results', 'Link to edit this particular line has been copied!')}">
<i class="glyphicon glyphicon-link"></i><span class="sr-only">{__('Generic', 'Link')}</span>
</a>
<a href="{poll_url id=$admin_poll_id admin=true action='delete_vote' action_value=$vote->id}"
class="btn btn-default btn-sm"
title="{__('Poll results', 'Remove the line:')} {$vote->name|html}">
<i class="glyphicon glyphicon-remove text-danger"></i><span class="sr-only">{__('Generic', 'Remove')}</span>
</a>
{/if}
</td>
{else}

View File

@ -1,7 +1,6 @@
{extends file='page.tpl'}
{block name="header"}
<script src="{"js/jquery-ui.min.js"|resource}" type="text/javascript"></script>
<script src="{"js/Chart.min.js"|resource}" type="text/javascript"></script>
<script src="{"js/Chart.StackedBar.js"|resource}" type="text/javascript"></script>
<script src="{"js/app/studs.js"|resource}" type="text/javascript"></script>