Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/recurrent date field #1149

Merged
merged 54 commits into from May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
8aab951
feat(DateService): change it to be able to follow recurrent events
J9rem Sep 18, 2023
e86c4d8
fix(DAteField): allow repetitions for events
J9rem Sep 18, 2023
bfcd2c5
fix(bazar/inputs/date.twig): remove line for tests
J9rem Sep 19, 2023
6272084
fix(Recurrent/DateField): change date format and display
J9rem Sep 21, 2023
1b6ea47
refactor(Bazar\DateService): spit from Core\DateSerice
J9rem Sep 21, 2023
81108aa
fix(DateField/repetition): be careful not enable it for only one entr…
J9rem Sep 22, 2023
d79c562
fix(RecurrentDateField): be careful to set the current day for week r…
J9rem Sep 27, 2023
884b789
fix(DateField): show message if not %
J9rem Sep 27, 2023
fa97c73
fix(date.twig): more stable css with not margot themes
J9rem Oct 2, 2023
31e41c2
fix(recurrentEvents): remove 2w 2m 3m
J9rem Oct 12, 2023
62df7c6
fix(recurrent-event): remove monday if alone when selecting weeks
J9rem Oct 12, 2023
177e49b
fix(field/inputs/date): show maximum times only if clicked on button
J9rem Oct 12, 2023
5c3f056
fix(recurrentEvents): allow to delete linked entries even if not owner
J9rem Oct 12, 2023
542ed68
fix(recurrentEvent): be careful when modifying ImageField
J9rem Oct 12, 2023
88c5b40
fix(RecurrentEvent): set Default NbMax to 50
J9rem Oct 20, 2023
9b86879
fix(FileField): catch file/image deletion by owner
J9rem Oct 27, 2023
1807b1b
refactor(DateService: split ::createRepetitions
J9rem Oct 27, 2023
71e849d
featDateService): check except
J9rem Oct 27, 2023
837e8b6
fix(services.yaml): after refactor
J9rem Oct 27, 2023
8562a95
fix(DateService): calculateNewStartDate to newStartDate
J9rem Oct 27, 2023
f71e6a3
fix(RecurrentEvents): manage except with limitDate and NBmax
J9rem Feb 15, 2024
f720d66
fix(RecurrentEvents): be carefull with ISO Date + trigger error message
J9rem Feb 15, 2024
d601b24
fix(recurrentEvent): update except on repetition change
J9rem Feb 15, 2024
93c2619
fix(DateService): test if page exists instead of entry
J9rem Mar 14, 2024
26c7f51
refactor(fields/date.twig): split translation in several variables
J9rem Mar 14, 2024
07ddf2a
refactor(RecurrentEvents): PSR2 autoformat
J9rem Mar 14, 2024
2cc1506
fix(Bazar/DateService): link to PageManager
J9rem Mar 20, 2024
6c809b0
fix(DateService): serach entriesToDelete with query compatible with m…
J9rem Mar 21, 2024
81f1a6a
Remove recurrent every X + changed display in form
Apr 10, 2024
f0c0d25
Suppresion de la traduction
Apr 10, 2024
d334bf4
Update display + update from previous feedbacks
Apr 10, 2024
2b3040d
Fix other feedbacks
Apr 10, 2024
9b95c0a
fix(bazar.lang): propagate changes to other languages
J9rem Apr 15, 2024
191784e
Translation
Apr 10, 2024
62b98a4
fix(DateField): doesnotchange the layout
J9rem Apr 15, 2024
4fe822a
refactor(inputs/date):split in two files (more readable)
J9rem Apr 15, 2024
37c5fa4
refactor(inputs/date): split too long line
J9rem Apr 15, 2024
99aeeef
fix(inputs/date.twig): retrieve original structure
J9rem Apr 15, 2024
8baeeec
fix(inputs/_date_recurrent): show recurrence only if concerned
J9rem Apr 15, 2024
4d46e0b
refactor(inputs/_date_recurrent):reuse layout
J9rem Apr 15, 2024
a77a57f
fix(inputs/_date_recurrent): css
J9rem Apr 15, 2024
a514ebb
feat(inputs/_date_recurrent): retrive other options
J9rem Apr 15, 2024
d6a6b8e
fix(inputs/date_recurrent): show except
J9rem Apr 15, 2024
0a76993
doc(bazar/date_recurrent): change i18n
J9rem Apr 15, 2024
67e0b4c
refactor(recurrent-event.js): only use defaultNbMax
J9rem Apr 15, 2024
a6d84f6
refactor(recurrent-event.js): replace 300 by defaultNbMax
J9rem Apr 15, 2024
5a6967e
refactor(DateService): PSR2 auto format
J9rem Apr 15, 2024
61add48
fix(DateField): recurrent fix nbmax
J9rem Apr 15, 2024
941f003
Merge pull request #5 from J9rem/fix/pr-recurrent-date-field
Zoldiru Apr 16, 2024
66bf3f1
limitdate required and limit to 600 repetitions
Apr 23, 2024
ea598fb
Fix exception date update bug
Apr 24, 2024
a38c36c
Add missing fixes from Jerem branch
Apr 24, 2024
140b7d7
Resolve merge conflict
May 14, 2024
b8e26f6
Merge pull request #7 from Zoldiru/Zoldiru-feat/recurrent-date-field
Zoldiru May 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions tools/bazar/config.yaml
Expand Up @@ -133,6 +133,9 @@ services:

YesWiki\Bazar\Service\:
resource: 'services/*'
YesWiki\Bazar\Service\DateService:
tags:
- { name: yeswiki.event_subscriber }

# Allows to use controllers as services
YesWiki\Bazar\Controller\:
Expand Down
59 changes: 51 additions & 8 deletions tools/bazar/fields/DateField.php
Expand Up @@ -2,7 +2,8 @@

namespace YesWiki\Bazar\Field;

use YesWiki\Core\Service\DateService;
use YesWiki\Bazar\Service\DateService;
use YesWiki\Core\Service\DateService as CoreDateService;

/**
* @Field({"jour", "listedatedeb", "listedatefin"})
Expand All @@ -19,7 +20,7 @@ protected function renderInput($entry)

if (!empty($value)) {
// Default value when entry exist
$day = $this->getService(DateService::class)->getDateTimeWithRightTimeZone($value)->format('Y-m-d H:i');
$day = $this->getService(CoreDateService::class)->getDateTimeWithRightTimeZone($value)->format('Y-m-d H:i');
$hasTime = (strlen($value) > 10);
if ($hasTime) {
$result = explode(' ', $day);
Expand All @@ -43,19 +44,47 @@ protected function renderInput($entry)
'hour' => $hour,
'minute' => $minute,
'hasTime' => $hasTime,
'value' => $value
'value' => $value,
'data' => $entry["{$this->getPropertyName()}_data"] ?? [],
'canRegisterMultipleEntries' => $this->getService(DateService::class)->canRegisterMultipleEntries($entry)
]);
}

public function formatValuesBeforeSave($entry)
{
$return = [];
if ($this->getPropertyname() === 'bf_date_fin_evenement') {
if(!empty($entry['id_fiche'])
&& is_string($entry['id_fiche'])) {
$this->getService(DateService::class)->followId($entry['id_fiche']);
}
if (!$this->getService(DateService::class)->canRegisterMultipleEntries($entry)) {
// clean data from entry because not possible to create repetition
if (isset($entry['bf_date_fin_evenement_data'])) {
unset($entry['bf_date_fin_evenement_data']);
}
} elseif (!empty($entry['bf_date_fin_evenement_data']['other'])) {
unset($entry['bf_date_fin_evenement_data']['other']);
if (!empty($entry['bf_date_fin_evenement_data'])) {
$return['bf_date_fin_evenement_data'] = $entry['bf_date_fin_evenement_data'];
}
}
}
$value = $this->getValue($entry);
if (!empty($value) && isset($entry[$this->propertyName . '_allday']) && $entry[$this->propertyName . '_allday'] == 0
&& isset($entry[$this->propertyName . '_hour']) && isset($entry[$this->propertyName . '_minutes'])) {
$value = $this->getService(DateService::class)->getDateTimeWithRightTimeZone("$value {$entry[$this->propertyName . '_hour']}:{$entry[$this->propertyName . '_minutes']}")->format('c');
$value = $this->getService(CoreDateService::class)->getDateTimeWithRightTimeZone("$value {$entry[$this->propertyName . '_hour']}:{$entry[$this->propertyName . '_minutes']}")->format('c');
}
return [$this->propertyName => $value,
'fields-to-remove' => [$this->propertyName . '_allday',$this->propertyName . '_hour',$this->propertyName . '_minutes']];
$return[$this->propertyName] = $value;
$return['fields-to-remove'] = [
$this->propertyName . '_allday',
$this->propertyName . '_hour',
$this->propertyName . '_minutes'
];
if (empty($entry['bf_date_fin_evenement_data'])) {
$return['fields-to-remove'][] = 'bf_date_fin_evenement_data';
}
return $return;
}

protected function renderStatic($entry)
Expand All @@ -66,13 +95,27 @@ protected function renderStatic($entry)
}

if (strlen($value) > 10) {
$value = $this->getService(DateService::class)->getDateTimeWithRightTimeZone($value)->format('d.m.Y - H:i');
$value = $this->getService(CoreDateService::class)->getDateTimeWithRightTimeZone($value)->format('d.m.Y - H:i');
} else {
$value = date('d.m.Y', strtotime($value));
}

$matches = [];
$recurrenceBaseId = '';
$data = [];
if ($this->getPropertyname() === 'bf_date_fin_evenement'
&& !empty($entry['bf_date_fin_evenement_data'])) {
if(is_string($entry['bf_date_fin_evenement_data'])
&& preg_match('/\{\\"recurrentParentId\\":\\"([^"]+)\\"\}/', $entry['bf_date_fin_evenement_data'], $matches)) {
$recurrenceBaseId = $matches[1];
} elseif (is_array($entry['bf_date_fin_evenement_data'])) {
$data = $entry['bf_date_fin_evenement_data'];
}
}
return $this->render('@bazar/fields/date.twig', [
'value' => $value
'value' => $value,
'recurrenceBaseId' => $recurrenceBaseId,
'data' => $data
]);
}

Expand Down
17 changes: 17 additions & 0 deletions tools/bazar/fields/FileField.php
Expand Up @@ -5,6 +5,7 @@
use attach;
use Psr\Container\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use YesWiki\Bazar\Service\DateService;
use YesWiki\Bazar\Service\EntryManager;
use YesWiki\Bazar\Service\Guard;
use YesWiki\Core\Service\EventDispatcher;
Expand Down Expand Up @@ -295,7 +296,15 @@ protected function updateEntryAfterFileDelete($entry)
$_POST = [];
$previousRequest = $_REQUEST;
$_REQUEST = [];

// remove current field
unset($entryFromDb[$this->propertyName]);

// be careful to recurrence
if (isset($entryFromDb['bf_date_fin_evenement_data']) && is_string($entryFromDb['bf_date_fin_evenement_data'])) {
unset($entryFromDb['bf_date_fin_evenement_data']); // remove links to parent
}

$entryFromDb['antispam'] = 1;
$entryFromDb['date_maj_fiche'] = date('Y-m-d H:i:s', time());
$newEntry = $entryManager->update($entryFromDb['id_fiche'], $entryFromDb, false, true);
Expand All @@ -304,6 +313,14 @@ protected function updateEntryAfterFileDelete($entry)
$_POST = $previousPost;
$_REQUEST = $previousRequest;

// be careful to recurrence

if (!empty($newEntry['id_fiche'])
&& is_string($newEntry['id_fiche'])
&& isset($newEntry['bf_date_fin_evenement'])) {
$this->getService(DateService::class)->followId($newEntry['id_fiche']);
}

$errors = $this->services->get(EventDispatcher::class)->yesWikiDispatch('entry.updated', [
'id' => $newEntry['id_fiche'],
'data' => $newEntry
Expand Down
41 changes: 41 additions & 0 deletions tools/bazar/lang/bazar_ca.inc.php
Expand Up @@ -377,6 +377,47 @@
// 'SUM' => 'Somme',
'URL' => 'Url',

// templates/bazar/fields/date.twig
// 'EVENT_IS_RECURRENT' => 'Cet évènement est récurrent : %{repetition}',
// 'EVENT_LIMIT_DATE' => 'jusqu\'au %{date}',
// 'EVENT_REPETITION_FOR_DAYS' => 'tous les %{x} jours',
// 'EVENT_REPETITION_FOR_MONTHS' => 'tous les %{x} mois, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_WEEKS' => 'toutes les %{x} semaines, %{days}',
// 'EVENT_REPETITION_FOR_YEAR' => 'tous les ans, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_YEARS' => 'toutes les %{x} années, %{monthRepetition}',
// 'EVENT_REPETITION_NTH_OF_MONTH' => 'le %{nth} %{month}',
// 'EVENT_REPETITION_NTH_OF_MONTH_ALONE' => 'le %{nth}',
// 'EVENT_REPETITION_IN_MONTH' => 'en %{month}, ',
// 'EVENT_IS_LINKED_TO_RECURRENT' => 'Cet évènement est un évènement récurrent lié à la fiche %{link}',

// templates/bazar/inputs/date.twig
// 'EVENT_ACTIVATE_CUSTOM' => 'Voir les options supplémentaires',
// 'EVENT_EVERY_DAYS' => 'Tous les jours',
// 'EVENT_EVERY_X_DAYS' => 'Tous les X jours',
// 'EVENT_EVERY_WEEKS' => 'Toutes les semaines',
// 'EVENT_EVERY_X_WEEKS' => 'Toutes les X semaines',
// 'EVENT_EVERY_MONTHS' => 'Tous les mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_YEARS' => 'Tous les ans',
// 'EVENT_EVERY_X_YEARS' => 'Toutes les X années',
// 'EVENT_EXCEPT_LABEL' => 'Sauf',
// 'EVENT_FIRST_Y_OF_MONTH' => 'Le premier Y du mois',
// 'EVENT_FORTH_Y_OF_MONTH' => 'Le quatrième Y du mois',
// 'EVENT_IS_LINKED_TO_RECURRENT_EDIT' => 'Cette évènement est un évènement récurrent lié à la fiche %{link}.<br/>Toute modification de cette fiche cassera le lien avec l\'évènement de base !',
// 'EVENT_LAST_Y_OF_MONTH' => 'Le dernier Y du mois',
// 'EVENT_LIMIT_DATE_UPDATE_FORCED' => 'La date de fin a été forcée pour réduire le nombre de répétitions à 600 !',
// 'EVENT_NO_REPETITION' => 'Pas de répétition',
// 'EVENT_NTH_OF_MONTH' => 'Chaque Y du mois',
// 'EVENT_ON_MONTH' => 'En :',
// 'EVENT_RECURRENT' => 'Récurrence',
// 'EVENT_REMOVE_CUSTOM' => 'Masques les options supplémentaires',
// 'EVENTS_REPETITIONS' => 'Répétitions',
// 'EVENT_SECOND_Y_OF_MONTH' => 'Le second Y du mois',
// 'EVENT_THIRD_Y_OF_MONTH' => 'Le troisième Y du mois',
// 'EVENT_UP_TO_DATE' => 'Jusqu\'au :',
// 'EVENTS_WHEN_IN_MONTH' => 'A quel moment du mois ?',

// presentation/templates/timeline.tpl.html
// 'BAZ_YEAR' => 'Ann&eacute;e',

Expand Down
42 changes: 42 additions & 0 deletions tools/bazar/lang/bazar_en.inc.php
Expand Up @@ -352,5 +352,47 @@
// templates/tableau.twig
'SUM' => 'Sum',
'URL' => 'Url',

// templates/bazar/fields/date.twig
// 'EVENT_IS_RECURRENT' => 'Cet évènement est récurrent : %{repetition}',
// 'EVENT_LIMIT_DATE' => 'jusqu\'au %{date}',
// 'EVENT_REPETITION_FOR_DAYS' => 'tous les %{x} jours',
// 'EVENT_REPETITION_FOR_MONTHS' => 'tous les %{x} mois, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_WEEKS' => 'toutes les %{x} semaines, %{days}',
// 'EVENT_REPETITION_FOR_YEAR' => 'tous les ans, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_YEARS' => 'toutes les %{x} années, %{monthRepetition}',
// 'EVENT_REPETITION_NTH_OF_MONTH' => 'le %{nth} %{month}',
// 'EVENT_REPETITION_NTH_OF_MONTH_ALONE' => 'le %{nth}',
// 'EVENT_REPETITION_IN_MONTH' => 'en %{month}, ',
// 'EVENT_IS_LINKED_TO_RECURRENT' => 'Cet évènement est un évènement récurrent lié à la fiche %{link}',

// templates/bazar/inputs/date.twig
// 'EVENT_ACTIVATE_CUSTOM' => 'Voir les options supplémentaires',
// 'EVENT_EVERY_DAYS' => 'Tous les jours',
// 'EVENT_EVERY_X_DAYS' => 'Tous les X jours',
// 'EVENT_EVERY_WEEKS' => 'Toutes les semaines',
// 'EVENT_EVERY_X_WEEKS' => 'Toutes les X semaines',
// 'EVENT_EVERY_MONTHS' => 'Tous les mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_YEARS' => 'Tous les ans',
// 'EVENT_EVERY_X_YEARS' => 'Toutes les X années',
// 'EVENT_EXCEPT_LABEL' => 'Sauf',
// 'EVENT_FIRST_Y_OF_MONTH' => 'Le premier Y du mois',
// 'EVENT_FORTH_Y_OF_MONTH' => 'Le quatrième Y du mois',
// 'EVENT_IS_LINKED_TO_RECURRENT_EDIT' => 'Cette évènement est un évènement récurrent lié à la fiche %{link}.<br/>Toute modification de cette fiche cassera le lien avec l\'évènement de base !',
// 'EVENT_LAST_Y_OF_MONTH' => 'Le dernier Y du mois',
// 'EVENT_LIMIT_DATE_UPDATE_FORCED' => 'La date de fin a été forcée pour réduire le nombre de répétitions à 600 !',
// 'EVENT_NO_REPETITION' => 'Pas de répétition',
// 'EVENT_NTH_OF_MONTH' => 'Chaque Y du mois',
// 'EVENT_ON_MONTH' => 'En :',
// 'EVENT_RECURRENT' => 'Récurrence',
// 'EVENT_REMOVE_CUSTOM' => 'Masques les options supplémentaires',
// 'EVENTS_REPETITIONS' => 'Répétitions',
// 'EVENT_SECOND_Y_OF_MONTH' => 'Le second Y du mois',
// 'EVENT_THIRD_Y_OF_MONTH' => 'Le troisième Y du mois',
// 'EVENT_UP_TO_DATE' => 'Jusqu\'au :',
// 'EVENTS_WHEN_IN_MONTH' => 'A quel moment du mois ?',

'BAZ_FILEFIELD_FILE' => 'File : {filename}',
];
41 changes: 41 additions & 0 deletions tools/bazar/lang/bazar_es.inc.php
Expand Up @@ -378,6 +378,47 @@
// 'SUM' => 'Somme',
'URL' => 'Url',

// templates/bazar/fields/date.twig
// 'EVENT_IS_RECURRENT' => 'Cet évènement est récurrent : %{repetition}',
// 'EVENT_LIMIT_DATE' => 'jusqu\'au %{date}',
// 'EVENT_REPETITION_FOR_DAYS' => 'tous les %{x} jours',
// 'EVENT_REPETITION_FOR_MONTHS' => 'tous les %{x} mois, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_WEEKS' => 'toutes les %{x} semaines, %{days}',
// 'EVENT_REPETITION_FOR_YEAR' => 'tous les ans, %{monthRepetition}',
// 'EVENT_REPETITION_FOR_YEARS' => 'toutes les %{x} années, %{monthRepetition}',
// 'EVENT_REPETITION_NTH_OF_MONTH' => 'le %{nth} %{month}',
// 'EVENT_REPETITION_NTH_OF_MONTH_ALONE' => 'le %{nth}',
// 'EVENT_REPETITION_IN_MONTH' => 'en %{month}, ',
// 'EVENT_IS_LINKED_TO_RECURRENT' => 'Cet évènement est un évènement récurrent lié à la fiche %{link}',

// templates/bazar/inputs/date.twig
// 'EVENT_ACTIVATE_CUSTOM' => 'Voir les options supplémentaires',
// 'EVENT_EVERY_DAYS' => 'Tous les jours',
// 'EVENT_EVERY_X_DAYS' => 'Tous les X jours',
// 'EVENT_EVERY_WEEKS' => 'Toutes les semaines',
// 'EVENT_EVERY_X_WEEKS' => 'Toutes les X semaines',
// 'EVENT_EVERY_MONTHS' => 'Tous les mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
// 'EVENT_EVERY_YEARS' => 'Tous les ans',
// 'EVENT_EVERY_X_YEARS' => 'Toutes les X années',
// 'EVENT_EXCEPT_LABEL' => 'Sauf',
// 'EVENT_FIRST_Y_OF_MONTH' => 'Le premier Y du mois',
// 'EVENT_FORTH_Y_OF_MONTH' => 'Le quatrième Y du mois',
// 'EVENT_IS_LINKED_TO_RECURRENT_EDIT' => 'Cette évènement est un évènement récurrent lié à la fiche %{link}.<br/>Toute modification de cette fiche cassera le lien avec l\'évènement de base !',
// 'EVENT_LAST_Y_OF_MONTH' => 'Le dernier Y du mois',
// 'EVENT_LIMIT_DATE_UPDATE_FORCED' => 'La date de fin a été forcée pour réduire le nombre de répétitions à 600 !',
// 'EVENT_NO_REPETITION' => 'Pas de répétition',
// 'EVENT_NTH_OF_MONTH' => 'Chaque Y du mois',
// 'EVENT_ON_MONTH' => 'En :',
// 'EVENT_RECURRENT' => 'Récurrence',
// 'EVENT_REMOVE_CUSTOM' => 'Masques les options supplémentaires',
// 'EVENTS_REPETITIONS' => 'Répétitions',
// 'EVENT_SECOND_Y_OF_MONTH' => 'Le second Y du mois',
// 'EVENT_THIRD_Y_OF_MONTH' => 'Le troisième Y du mois',
// 'EVENT_UP_TO_DATE' => 'Jusqu\'au :',
// 'EVENTS_WHEN_IN_MONTH' => 'A quel moment du mois ?',

// presentation/templates/timeline.tpl.html
// 'BAZ_YEAR' => 'Ann&eacute;e',

Expand Down
41 changes: 41 additions & 0 deletions tools/bazar/lang/bazar_fr.inc.php
Expand Up @@ -383,6 +383,47 @@
'SUM' => 'Somme',
'URL' => 'Url',

// templates/bazar/fields/date.twig
'EVENT_IS_RECURRENT' => 'Cet évènement est récurrent : %{repetition}',
'EVENT_LIMIT_DATE' => 'jusqu\'au %{date}',
'EVENT_REPETITION_FOR_DAYS' => 'tous les %{x} jours',
'EVENT_REPETITION_FOR_MONTHS' => 'tous les %{x} mois, %{monthRepetition}',
'EVENT_REPETITION_FOR_WEEKS' => 'toutes les %{x} semaines, %{days}',
'EVENT_REPETITION_FOR_YEAR' => 'tous les ans, %{monthRepetition}',
'EVENT_REPETITION_FOR_YEARS' => 'toutes les %{x} années, %{monthRepetition}',
'EVENT_REPETITION_NTH_OF_MONTH' => 'le %{nth} %{month}',
'EVENT_REPETITION_NTH_OF_MONTH_ALONE' => 'le %{nth}',
'EVENT_REPETITION_IN_MONTH' => 'en %{month}, ',
'EVENT_IS_LINKED_TO_RECURRENT' => 'Cet évènement est un évènement récurrent lié à la fiche %{link}',

// templates/bazar/inputs/date.twig
'EVENT_ACTIVATE_CUSTOM' => 'Voir les options supplémentaires',
'EVENT_EVERY_DAYS' => 'Tous les jours',
'EVENT_EVERY_X_DAYS' => 'Tous les X jours',
'EVENT_EVERY_WEEKS' => 'Toutes les semaines',
'EVENT_EVERY_X_WEEKS' => 'Toutes les X semaines',
'EVENT_EVERY_MONTHS' => 'Tous les mois',
'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
'EVENT_EVERY_X_MONTHS' => 'Tous les X mois',
'EVENT_EVERY_YEARS' => 'Tous les ans',
'EVENT_EVERY_X_YEARS' => 'Toutes les X années',
'EVENT_EXCEPT_LABEL' => 'Sauf',
'EVENT_FIRST_Y_OF_MONTH' => 'Le premier Y du mois',
'EVENT_FORTH_Y_OF_MONTH' => 'Le quatrième Y du mois',
'EVENT_IS_LINKED_TO_RECURRENT_EDIT' => 'Cette évènement est un évènement récurrent lié à la fiche %{link}.<br/>Toute modification de cette fiche cassera le lien avec l\'évènement de base !',
'EVENT_LAST_Y_OF_MONTH' => 'Le dernier Y du mois',
'EVENT_LIMIT_DATE_UPDATE_FORCED' => 'La date de fin a été forcée pour réduire le nombre de répétitions à 600 !',
'EVENT_NO_REPETITION' => 'Pas de répétition',
'EVENT_NTH_OF_MONTH' => 'Chaque Y du mois',
'EVENT_ON_MONTH' => 'En :',
'EVENT_RECURRENT' => 'Récurrence',
'EVENT_REMOVE_CUSTOM' => 'Masques les options supplémentaires',
'EVENTS_REPETITIONS' => 'Répétitions',
'EVENT_SECOND_Y_OF_MONTH' => 'Le second Y du mois',
'EVENT_THIRD_Y_OF_MONTH' => 'Le troisième Y du mois',
'EVENT_UP_TO_DATE' => 'Jusqu\'au :',
'EVENTS_WHEN_IN_MONTH' => 'A quel moment du mois ?',

// presentation/templates/timeline.tpl.html
'BAZ_YEAR' => 'Ann&eacute;e',

Expand Down