diff --git a/agenda/agenda.php b/agenda/agenda.php
new file mode 100644
index 0000000..c0cbd5b
--- /dev/null
+++ b/agenda/agenda.php
@@ -0,0 +1,1269 @@
+
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @license GNU General Public License, version 3
+ * @link http://zwiicms.com/
+ */
+ /** Module Zwii développé par Sylvain Lelièvre
+ * Utilise le package Fullcalendar
+ * FullCalendar Core Package v4.3.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */
+
+class agenda extends common {
+
+ public static $actions = [
+ 'creation' => self::GROUP_VISITOR,
+ 'edition' => self::GROUP_VISITOR,
+ 'config' => self::GROUP_MODERATOR,
+ 'categories' => self::GROUP_MODERATOR,
+ 'delete' => self::GROUP_VISITOR,
+ 'deleteEvent' => self::GROUP_VISITOR,
+ 'deleteall' => self::GROUP_MODERATOR,
+ 'categorieDelete' => self::GROUP_MODERATOR,
+ 'index' => self::GROUP_VISITOR
+ ];
+
+ const VERSION = '4.7';
+ const REALNAME = 'Agenda';
+ const DELETE = true;
+ const UPDATE = '4.1';
+ const DATADIRECTORY = self::DATA_DIR.'agenda/';
+
+ // Constantes utilisées pour les adresses des données externes
+ const DATAMODULE = self::DATA_DIR.'agenda/module/';
+ const DATAFILE ='./site/file/source/agenda/';
+
+ // Gestion des catégories
+ public static $tabCategories = [];
+ public static $categorie = [];
+
+ //Couleur du bandeau et du texte
+ public static $couleur = [
+ 'black' => 'noir',
+ 'grey' => 'gris',
+ 'blue' => 'bleu',
+ 'red' => 'rouge',
+ 'yellow' => 'jaune',
+ 'orange' => 'orange',
+ 'green' => 'vert',
+ 'white' => 'blanc'
+ ];
+
+ public static $groupe = [
+ '0' => 'Visiteur',
+ '1' => 'Membre',
+ '2' => 'Editeur',
+ '3' => 'Administrateur'
+ ];
+
+ //Evenement
+ public static $evenement = [
+ 'id' => 0,
+ 'datedebut' => '',
+ 'datefin' => '',
+ 'texte' => 'texte déclaration public static',
+ 'couleurfond' => 'black',
+ 'couleurtexte' => 'white',
+ 'groupe_lire' => 0,
+ 'groupe_mod' => 2
+ ];
+
+ //Largeur maximale de l'agenda
+ public static $maxwidth = [
+ '400' => '400 pixels',
+ '500' => '500 pixels',
+ '600' => '600 pixels',
+ '710' => '710 pixels',
+ '800' => '800 pixels',
+ '920' => '920 pixels',
+ '1130' => '1130 pixels',
+ '10000' => '100%'
+ ];
+
+ // Gestion des dates
+ public static $datecreation = '';
+ public static $time_unix_deb = '';
+ public static $time_unix_fin = '';
+ public static $annee;
+ public static $jour;
+ public static $mois;
+
+ public static $sujet_mailing = '';
+
+ public static $liste_adresses =[];
+
+ // Fichiers sauvegardés
+ public static $savedFiles = [];
+ public static $icsFiles = [];
+ public static $csvFiles = [];
+
+ //Pour choix de l'affichage mois / semaine dans configuration de l'agenda
+ public static $vue_agenda = [
+ 'dayGridMonth' => 'Vue par mois',
+ 'dayGridWeek' => 'Vue par semaine'
+ ];
+
+ /**
+ * Mise à jour du module
+ * Appelée par les fonctions index et config
+ */
+ private function update() {
+
+ // Initialisation ou mise à jour vers la version 4.5
+ if (version_compare($this->getData(['module', $this->getUrl(0), 'config', 'versionData']), '4.5', '<') ) {
+
+ //Si mise à jour depuis une version <4.5
+ if( is_dir('site/data/agenda/data')){
+ $this->custom_copy( 'site/data/agenda/data', 'site/data/agenda/module/data');
+ $this->removeDir('site/data/agenda/data');
+ $this->custom_copy( 'site/data/agenda/adresses', 'site/data/agenda/module/adresses');
+ $this->removeDir('site/data/agenda/adresses');
+ $this->custom_copy( 'site/data/agenda/ics', 'site/data/agenda/module/ics');
+ $this->removeDir('site/data/agenda/ics');
+ $this->custom_copy( 'site/data/agenda/categories', 'site/data/agenda/module/categories');
+ $this->removeDir('site/data/agenda/categories');
+ }
+ $this->setData(['module', $this->getUrl(0), 'config', 'versionData','4.5']);
+ }
+ }
+
+ /**
+ * Configuration Paramètrage
+ */
+ public function config() {
+
+ // Mise à jour des données de module
+ $this->update();
+
+ // Soumission du formulaire
+ if($this->isPost()) {
+ $notification = 'Opérations enregistrées';
+ $state = true;
+ $fichier_restaure = $this->getInput('config_restaure');
+ $fichier_sauve = $this->getInput('config_sauve');
+ $droit_creation = $this->getInput('config_droit_creation');
+ $droit_limite = $this->getInput('config_droit_limite', helper::FILTER_BOOLEAN);
+ $fichier_ics = $this->getInput('config_fichier_ics');
+ $largeur_maxi = $this->getInput('config_MaxiWidth');
+ $fichier_csv_txt = $this->getInput('config_fichier_csv_txt');
+
+ //Sauvegarder l'agenda
+ if ($fichier_sauve !=''){
+ $json_sauve = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve/'.$fichier_sauve.'.json', $json_sauve);
+ }
+
+ //Charger un agenda sauvegardé
+ if (strpos($fichier_restaure,'.json') !== false){
+
+ //Remplacement par le fichier de restauration
+ $json_restaure = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve/'. $fichier_restaure);
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', $json_restaure);
+
+ //Sauvegarde dans data_sauve de l'agenda chargé
+ $this->sauve($json_restaure);
+
+ //Valeurs en sortie après prise en compte du formulaire
+ $this->addOutput([
+ 'notification' => 'Agenda chargé',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0),
+ 'state' => true
+ ]);
+ }
+
+ //Ajouter des évènements contenus dans le fichier ics
+ if (strpos($fichier_ics,'.ics') !== false){
+ $tableau = $this->getIcsEventsAsArray(self::DATAFILE.'ics/'.$fichier_ics);
+ foreach($tableau as $key=>$value){
+ $evenement_texte = '';
+ $date_debut = '';
+ $date_fin = '';
+ $begin = '';
+ $end = '';
+ $clef_fin ='';
+ foreach($value as $key2=>$value2){
+ if($key2 == "BEGIN"){
+ $begin = $value2;
+ }
+ if($key2 == "SUMMARY"){
+ $evenement_texte = $value2;
+ }
+ if(strpos($key2,"DTSTART") !== false){
+ $date_debut = $value2;
+ $clef_debut = $key2;
+ }
+ if(strpos($key2,"DTEND") !== false){
+ $date_fin = $value2;
+ $clef_fin = $key2;
+ }
+ if($key2 == "END"){
+ $end = $value2;
+ }
+ }
+
+ //Si un évènement VEVENT est trouvé, avec summary et dtstart présents, on ajoute cet évènement à l'agenda
+ if ($evenement_texte != '' && strpos($begin,'VEVENT')!==false && $date_debut!=='' ){
+ if($date_fin == '') {
+ $date_fin = $date_debut;
+ $clef_fin = $clef_debut;
+ }
+ $evenement_texte = $this->modif_texte($evenement_texte);
+ //Modifier date format ics yyyymmddThhmm... ou yyyymmdd vers format fullcalendar yyyy-mm-ddThh:mm
+ $date_debut = $this->modif_date($date_debut, $clef_debut);
+ $date_fin = $this->modif_date($date_fin, $clef_fin);
+
+ //Valeurs par défaut pour l'import ics fond blanc, texte noir, lecture visiteur, modification éditeur
+ $this->nouvel_evenement($evenement_texte,$date_debut,$date_fin,'white','black','0','2', '0', '', '', '');
+ }
+ }
+ }
+
+ // Ajouter un carnet d'adresses
+ if (strpos($fichier_csv_txt,'.csv') !== false || strpos($fichier_csv_txt,'.txt') !== false){
+ $adresses = file_get_contents(self::DATAFILE.'adresses/'.$fichier_csv_txt);
+ if( strrchr($adresses, '@') && ! strrchr($adresses, ';')){
+ copy(self::DATAFILE.'adresses/'.$fichier_csv_txt, self::DATAMODULE.'adresses/'.$fichier_csv_txt);
+ }
+ else{
+ $notification = 'Le contenu du carnet d\'adresses est incorrect';
+ $state = false;
+ }
+ }
+
+ //Mise à jour des données de configuration liées aux droits et à l'affichage
+ $this->setData(['module', $this->getUrl(0), 'config', [
+ 'droit_creation' => intval($droit_creation),
+ 'droit_limite' => $droit_limite,
+ 'maxiWidth' => $largeur_maxi,
+ 'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData'])
+ ]]);
+
+ //Valeurs en sortie
+ $this->addOutput([
+ 'notification' => $notification,
+ 'redirect' => helper::baseUrl() . $this->getUrl(0),
+ 'state' => $state
+ ]);
+ }
+ else{
+ // Fichiers sauvegardés
+ if(is_dir(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve')) {
+ $dir=self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve';
+ $values = scandir($dir);
+ self::$savedFiles=[];
+ $values[0] = 'Votre choix...';
+ unset($values[array_search('..', $values)]);
+ if (count($values) <= 1){
+ self::$savedFiles = array(0 => 'Pas de fichier dans le dossier'. self::DATAMODULE.'/data');
+ }
+ else{
+ //Modifier les clefs (qui sont les valeurs de retour du formulaire avec 'config_restaure') avec clef = valeur
+ self::$savedFiles = array_combine($values,$values);
+ }
+ }
+ else {
+ self::$savedFiles = array(0 => 'Dossier'.self::DATAMODULE.'data inexistant');
+ }
+ // Fichiers ics
+ if(is_dir(self::DATAFILE.'ics')) {
+ $dir=self::DATAFILE.'ics';
+ $values = scandir($dir);
+ $values[0] = 'Votre choix...';
+ unset($values[array_search('..', $values)]);
+ if (count($values) <= 1){
+ self::$icsFiles = array(0 => 'Pas de fichier dans le dossier '.self::DATAFILE.'ics');
+ }
+ else{
+ //Modifier les clefs (qui sont les valeurs de retour du formulaire avec 'config_fichier_ics') avec clef = valeur
+ self::$icsFiles = array_combine($values,$values);
+ }
+ }
+ else {
+ self::$icsFiles = array(0 => 'Dossier '.self::DATAFILE.'ics non existant');
+ }
+ // Fichiers csv ou txt
+ if(is_dir(self::DATAFILE.'adresses')) {
+ $dir=self::DATAFILE.'adresses';
+ $values = scandir($dir);
+ $values[0] = 'Votre choix...';
+ unset($values[array_search('..', $values)]);
+ // Supprimer les $values qui ne sont pas csv ou txt
+ for($i=2; $i <= count($values); $i++){
+ if ( pathinfo($dir.'/'.$values[$i],PATHINFO_EXTENSION) !== 'txt' && pathinfo($dir.'/'.$values[$i],PATHINFO_EXTENSION) !== 'csv') unset($values[$i]);
+ }
+ if (count($values) <= 1){
+ self::$csvFiles = array(0 => 'Pas de fichier dans le dossier '.self::DATAFILE.'adresses');
+ }
+ else{
+ //Modifier les clefs (qui sont les valeurs de retour du formulaire avec 'config_fichier_csv_txt') avec clef = valeur
+ self::$csvFiles = array_combine($values,$values);
+ }
+ }
+ else {
+ self::$csvFiles = array(0 => 'Dossier '.self::DATAFILE.'adresses non existant');
+ }
+
+ // Copie des fichiers ics entre les dossiers self::DATAFILE.ics et self::DATAMODULE.ics pour export
+ $this->custom_copy(self::DATAFILE.'ics', self::DATAMODULE.'ics');
+ $this->custom_copy(self::DATAMODULE.'ics', self::DATAFILE.'ics');
+
+ // Valeurs en sortie hors soumission du formulaire
+ $this->addOutput([
+ 'showBarEditButton' => true,
+ 'showPageContent' => false,
+ 'view' => 'config'
+ ]);
+ }
+ }
+
+ /**
+ * Liaison entre edition et suppression d'un évènement
+ */
+ public function deleteEvent() {
+ $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ $lid = $this->getUrl(2);
+ $sauve = true;
+ $this->delete($lid, $sauve, $json);
+ }
+
+ /**
+ * Suppression d'un évènement
+ */
+ public function delete($lid, $sauve, $json) {
+ $json_initial = $json;
+ //$pos1 et $pos2 sont les délimiteurs de la partie à supprimer
+ $pos1 = strpos($json, '{"id":'.$lid);
+ // si $pos1 non trouvé pas d'effacement
+ if ( $pos1 !== false ){
+ $pos2 = strpos($json, '}', $pos1);
+ //Premier évènement ?
+ if ($pos1 < 2) {
+ //Premier ! et dernier évènement ?
+ if (strlen($json) < $pos2 + 4){
+ $json ='[]';
+ }
+ else{
+ $json = substr_replace($json,'{},',$pos1, $pos2-$pos1+2);
+ }
+ }
+ else{
+ $json = substr_replace($json,',{}',$pos1-1, $pos2-$pos1+2);
+ }
+
+ //Enregistrer le nouveau fichier json
+ //file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', $json);
+
+ //Enregistrer le json et sauvegarder dans data_sauve si suppression de l'évènement et non modification
+ if ($sauve == true){
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', $json);
+ $this->sauve($json);
+
+ // Emission d'un mailing éventuel en récupérant les valeurs dans le $json initial
+ $tableau = json_decode($json_initial, true);
+ $mailing_val = '0';
+ $mailing_adresses = 'Votre choix...';
+ // Si la clef 'mailing_val' existe dans events.json (version >=3.0) lire mailing_val et mailing_adresses
+ if( isset( $tableau[$lid]['mailing_val'] )){
+ $mailing_val = $tableau[$lid]['mailing_val'];
+ $mailing_adresses = $tableau[$lid]['mailing_adresses'];
+ self::$sujet_mailing = 'Agenda - Suppression d\'un évènement';
+ }
+ $evenement_texte ='SUPPRIME'.$tableau[$lid]['title'];
+ $date_debut = $tableau[$lid]['start'];
+ $date_fin = $tableau[$lid]['end'];
+ if( $mailing_val === '1') $this->mailing($evenement_texte, $date_debut, $date_fin, $mailing_val, $mailing_adresses);
+ //Valeurs en sortie si suppression demandée et réalisée
+ $this->addOutput([
+ 'notification' => 'Evènement supprimé',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0),
+ 'state' => true
+ ]);
+ }
+ else{
+ return $json;
+ }
+ }
+ else{
+ return $json;
+ }
+
+ }
+
+
+ /**
+ * Suppression de tous les évènements
+ */
+ public function deleteall() {
+
+ //Sauvegarde dans data de l'agenda actuel bien qu'il soit déjà sauvegardé dans data_sauve
+ $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events_'.date('YmdHis').'.json', $json);
+
+ //Enregistrer le nouveau fichier json vide
+ $json='[]';
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', $json);
+
+ //Valeurs en sortie
+ $this->addOutput([
+ 'notification' => 'Suppression de tous les évènements',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0),
+ 'state' => true
+ ]);
+
+ }
+
+ /*
+ * Gestion des catégories
+ */
+ public function categories(){
+ // Soumission du formulaire
+ if($this->isPost()) {
+
+ // Ajout ou modification d'une catégorie
+ if( $this->getInput('categorie_name') !== ''){
+ $name = $this->getInput('categorie_name');
+ $fond = $this->getInput('categorie_couleur_fond');
+ $texte = $this->getInput('categorie_couleur_texte');
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode($json,true);
+ $unsetkey = '';
+ foreach($tabcat as $key=>$value){
+ if($value['name'] === $name){
+ unset( $value);
+ $unsetkey = $key;
+ }
+ }
+ $unsetkey === '' ? $indice = count($tabcat) : $indice = $unsetkey;
+ $tabcat[$indice]['name'] = $name;
+ $tabcat[$indice]['backgroundcolor'] = $fond;
+ $tabcat[$indice]['textcolor'] = $texte;
+ $tabcatjson = json_encode($tabcat);
+ file_put_contents(self::DATAMODULE.'categories/categories.json', $tabcatjson);
+ }
+
+ // Validation du choix par catégorie enregistré dans module.json
+ $valcategories = $this->getInput('val_categories', helper::FILTER_BOOLEAN);
+ //Mise à jour de la validation du choix des couleurs par catégorie
+ $this->setData(['module', $this->getUrl(0), 'categories', [
+ 'valCategories' => $valcategories
+ ]]);
+
+ //Valeurs en sortie
+ $this->addOutput([
+ 'notification' => 'Modifications des catégories enregistrées',
+ 'redirect' => helper::baseUrl() . $this->getUrl(),
+ 'state' => true
+ ]);
+ }
+ // Préparation du tableau d'affichage des catégories : nom, couleur du fond, couleur du texte
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode($json,true);
+ foreach( $tabcat as $key=>$value ){
+ self::$tabCategories[] = [
+ $value['name'],
+ $value['backgroundcolor'],
+ $value['textcolor'],
+ $value['name'] !== 'Défaut' ?
+ template::button('categorieDelete' . $key, [
+ 'class' => 'buttonRed',
+ 'href' => helper::baseUrl() . $this->getUrl(0) . '/categorieDelete/' . $key,
+ 'value' => template::ico('cancel')
+ ])
+ : '',
+ ];
+ }
+ // Valeurs en sortie hors soumission du formulaire
+ $this->addOutput([
+ 'showBarEditButton' => true,
+ 'showPageContent' => false,
+ 'vendor' => [
+ 'tinycolorpicker'
+ ],
+ 'view' => 'categorie'
+ ]);
+ }
+
+ /*
+ * Suppression d'une catégorie
+ */
+ public function categorieDelete(){
+
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode($json,true);
+ $name = $tabcat[$this->getUrl(2)]['name'];
+ unset($tabcat[$this->getUrl(2)]);
+ $ii = 0;
+ $tab = [];
+ foreach($tabcat as $key=>$value){
+ $tab[$ii] = $value;
+ $ii++;
+ }
+ $tabcatjson = json_encode($tab);
+ file_put_contents(self::DATAMODULE.'categories/categories.json', $tabcatjson);
+ //Valeurs en sortie
+ $this->addOutput([
+ 'notification' => 'Catégorie '.$name.' supprimée',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0).'/categories/',
+ 'state' => true
+ ]);
+ }
+
+ /**
+ * Création
+ */
+ public function creation() {
+
+ // Soumission du formulaire
+ if($this->isPost()) {
+
+ $categorie = '';
+ //lecture du formulaire
+ if( $this->getData(['module', $this->getUrl(0), 'categories', 'valCategories' ]) === true ){
+ $categorie = $this->getInput('creation_categorie');
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode( $json, true );
+ $couleur_fond = $tabcat[$categorie]['backgroundcolor'];
+ $couleur_texte = $tabcat[$categorie]['textcolor'];
+ }
+ else{
+ $couleur_fond = $this->getInput('creation_couleur_fond');
+ $couleur_texte = $this->getInput('creation_couleur_texte');
+ }
+ $evenement_texte = $this->getInput('creation_text',null);
+ $date_debut = $this->getInput('creation_date_debut');
+ $date_fin = $this->getInput('creation_date_fin');
+ $groupe_visible = $this->getInput('creation_groupe_lire');
+ $groupe_mod = $this->getInput('creation_groupe_mod');
+ $mailing_val = $this->getInput('creation_mailing_validation', helper::FILTER_BOOLEAN);
+ $mailing_adresses = $this->getInput('creation_mailing_adresses');
+
+ if($mailing_val === false){
+ $mailing_val='0';
+ }
+ else{
+ $mailing_val='1';
+ }
+
+ //Modification de CR LF " { } dans le texte de l'évènement
+ $evenement_texte = $this->modif_texte($evenement_texte);
+
+ //Vérification que date fin > date debut
+ if ($this->verif_date($date_debut,$date_fin)){
+ self::$sujet_mailing = 'Agenda - Création d\'un évènement';
+ //Ajout et enregistrement de l'évènement
+ $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ $this->nouvel_evenement($evenement_texte,$date_debut,$date_fin,$couleur_fond,$couleur_texte,$groupe_visible,$groupe_mod,$mailing_val,$mailing_adresses,$categorie,$json);
+
+ //Valeurs en sortie après prise en compte du formulaire
+ $this->addOutput([
+ 'notification' => 'Evènement enregistré',
+ 'state' => true,
+ 'redirect' => helper::baseUrl() . $this->getUrl(0)
+ ]);
+ }
+ //Valeurs saisies non correctes
+ else{
+ $this->addOutput([
+ 'notification' => 'La date de fin précède la date de début !',
+ 'view' => 'creation',
+ 'state' => false
+ ]);
+ }
+ }
+ else{
+
+ // liste des emails des membres
+ if(! is_dir(self::DATAMODULE.'adresses')) mkdir(self::DATAMODULE.'adresses',0770,true);
+ // Liste des utilisateurs
+ $membres = '';
+ $editeurs = '';
+ $administrateurs = '';
+ $inscrits = '';
+ foreach($this->getData(['user']) as $userId => $arrayValues){
+ if($userId != ''){
+ $mail = $this->getData(['user',$userId,'mail']);
+ switch ($this->getData(['user',$userId,'group'])) {
+ case 1:
+ $membres .= $mail.',';
+ break;
+ case 2:
+ $editeurs .= $mail.',';
+ break;
+ case 3:
+ $administrateurs .= $mail.',';
+ break;
+ default :
+ break;
+ }
+ $inscrits .= $mail.',';
+ }
+ }
+ //suppression de la dernière virgule
+ if( $membres != ''){$membres = substr($membres, 0, -1);}
+ if( $editeurs != ''){$editeurs = substr($editeurs, 0, -1);}
+ $administrateurs = substr($administrateurs, 0, -1);
+ $inscrits = substr($inscrits, 0, -1);
+ //Placer les listes dans un fichier txt et sauvegarder dans le dossier self::DATAMODULE.adresses
+ file_put_contents(self::DATAMODULE.'adresses/editeurs_administrateurs.txt', $editeurs.','.$administrateurs);
+ file_put_contents(self::DATAMODULE.'adresses/administrateurs.txt', $administrateurs);
+ file_put_contents(self::DATAMODULE.'adresses/tous_inscrits.txt', $inscrits);
+
+ // Sélection du fichier destinataires
+ $dir=self::DATAMODULE.'adresses';
+ self::$liste_adresses = scandir($dir);
+ self::$liste_adresses[0] = 'Votre choix...';
+ unset(self::$liste_adresses[array_search('..', self::$liste_adresses)]);
+ unset(self::$liste_adresses[array_search('.htaccess', self::$liste_adresses)]);
+ if (count(self::$liste_adresses) <= 1){
+ self::$liste_adresses = array(0 => 'Pas de fichier dans le dossier '.self::DATAMODULE.'adresses');
+ }
+ else{
+ self::$liste_adresses= array_combine(self::$liste_adresses,self::$liste_adresses);
+ }
+ $this->limite_groupes();
+ // Tableau des catégories
+ if( is_file(self::DATAMODULE.'categories/categories.json') && $this->getData(['module', $this->getUrl(0), 'categories', 'valCategories' ]) ){
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode( $json, true );
+ self::$categorie = [];
+ foreach( $tabcat as $key=>$value){
+ self::$categorie[$key] = $tabcat[$key]['name'];
+ }
+ }
+ //Récupérer la date cliquée
+ $dateclic = self::$datecreation;
+ self::$annee = intval(substr($dateclic, 0, 4));
+ self::$mois = intval(substr($dateclic, 5, 2));
+ self::$jour= intval(substr($dateclic, 8, 2));
+ //Conversion date au format unix (valeur 0 au 1/1/1970 00:00)
+ $date = new DateTime();
+ //setDate(année, mois, jour) setTime(heure, minute)
+ $date->setDate(self::$annee, self::$mois, self::$jour);
+ $date->setTime(8, 00);
+ self::$time_unix_deb = $date->getTimestamp();
+ $date->setTime(18, 00);
+ self::$time_unix_fin = $date->getTimestamp();
+ // Valeurs en sortie hors soumission du formulaire
+ $this->addOutput([
+ 'showBarEditButton' => true,
+ 'showPageContent' => false,
+ 'vendor' => [
+ 'flatpickr'
+ ],
+ 'view' => 'creation'
+ ]);
+ }
+ }
+
+ /**
+ * Edition, modification, suppression
+ */
+ public function edition($lid) {
+
+ //Préparation avant l'édition de l'évènement
+ self::$evenement['id'] = $lid;
+ $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ $tableau = json_decode($json, true);
+ self::$evenement['groupe_lire'] = $tableau[$lid]['groupe_lire'];
+ self::$evenement['groupe_mod'] = $tableau[$lid]['groupe_mod'];
+ self::$evenement['texte'] = $this->restaure_texte($tableau[$lid]['title']);
+ self::$evenement['couleurfond'] = $tableau[$lid]['backgroundColor'];
+ self::$evenement['couleurtexte'] = $tableau[$lid]['textColor'];
+ self::$evenement['categorie'] = $tableau[$lid]['categorie'];
+ $dateclic = $tableau[$lid]['start'];
+ self::$evenement['datedebut'] = $this->conversion_date($dateclic);
+ $dateclic = $tableau[$lid]['end'];
+ self::$evenement['datefin'] = $this->conversion_date($dateclic);
+
+ //Soumission du formulaire
+ if($this->isPost()) {
+ $categorie = $tableau[$lid]['categorie'];
+ //lecture du formulaire
+ if( self::$evenement['categorie'] != '' ){
+ $categorie = $this->getInput('edition_categorie');
+ $jsone = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode( $jsone, true );
+ $couleur_fond = $tabcat[$categorie]['backgroundcolor'];
+ $couleur_texte = $tabcat[$categorie]['textcolor'];
+ }
+ else{
+ $couleur_fond = $this->getInput('edition_couleur_fond');
+ $couleur_texte = $this->getInput('edition_couleur_texte');
+ }
+ $evenement_texte = $this->getInput('edition_text', null);
+ $date_debut = $this->getInput('edition_date_debut');
+ $date_fin = $this->getInput('edition_date_fin');
+ $groupe_visible = $this->getInput('edition_groupe_lire');
+ $groupe_mod = $this->getInput('edition_groupe_mod');
+
+ // Si la clef 'mailing_val' existe dans events.json (version >=3.0) lire mailing_val et mailing_adresses
+ if( isset( $tableau[$lid]['mailing_val'] )){
+ $mailing_val = $tableau[$lid]['mailing_val'];
+ $mailing_adresses = $tableau[$lid]['mailing_adresses'];
+ self::$sujet_mailing = 'Agenda - Modification d\'un évènement';
+ }
+ else{
+ $mailing_val = '0';
+ $mailing_adresses = 'Votre choix...';
+ }
+
+ //Modification de CR LF " { } dans le texte de l'évènement
+ $evenement_texte = $this->modif_texte($evenement_texte);
+
+ //Vérification que date fin > date debut
+ if ($this->verif_date($date_debut,$date_fin)){
+
+ //Effacer l'évènement sans sauvegarde dans data_sauve
+ $sauve = false;
+ $json = $this->delete($lid, $sauve, $json);
+
+ //Ajout, enregistrement et sauvegarde de l'évènement
+ $this->nouvel_evenement($evenement_texte,$date_debut,$date_fin,$couleur_fond,$couleur_texte,$groupe_visible,$groupe_mod,$mailing_val,$mailing_adresses,$categorie,$json);
+
+ //Valeurs en sortie après prise en compte du formulaire
+ $this->addOutput([
+ 'notification' => 'Modification de l\'évènement enregistrée',
+ 'state' => true,
+ 'redirect' => helper::baseUrl() . $this->getUrl(0)
+ ]);
+
+ }
+ //Valeurs saisies non correctes
+ else{
+ $this->addOutput([
+ 'notification' => 'La date de fin précède la date de début !',
+ 'view' => 'edition',
+ 'state' => false
+ ]);
+ }
+ }
+ else{
+ // Traitement avant affichage
+ if( self::$evenement['categorie'] != '' ){
+ $json = file_get_contents(self::DATAMODULE.'categories/categories.json');
+ $tabcat = json_decode( $json, true );
+ self::$categorie = [];
+ foreach( $tabcat as $key=>$value){
+ self::$categorie[$key] = $tabcat[$key]['name'];
+ }
+ }
+ $this->limite_groupes();
+ // Affichage de la page édition d'un évènement avec valeurs actuelles
+ $this->addOutput([
+ 'showBarEditButton' => true,
+ 'showPageContent' => false,
+ 'vendor' => [
+ 'flatpickr'
+ ],
+ 'view' => 'edition'
+ ]);
+ }
+ }
+
+
+ /**
+ * Newname utilisé par la version 9 pour inscrire le nouveau nom de page dans le json du module
+ */
+ public function newname() {
+ $this->setData(['module',$this->getUrl(0),'name',$this->getUrl(0)]);
+ }
+
+ /**
+ * Accueil
+ */
+ public function index() {
+
+ // Mise à jour des données de module
+ $this->update();
+
+ //Pour récupération des données ajax jquery date ou id
+ $url = $_SERVER['REQUEST_URI'];
+ if (strpos($url,'/da:') !== false){
+ //Extraction des données de la chaîne url et détection de changement de vue
+ $dateclic = $this->vue_debut($url,'/da:');
+ self::$datecreation = $dateclic;
+ //Vers la création d'un évènement
+ $this->creation();
+ }
+ else{
+ if (strpos($url,'/id:') !== false){
+ //Extraction des données de la chaîne url et détection de changement de vue
+ $idclic = $this->vue_debut($url,'/id:');
+ //Vers l'édition d'un évènement
+ $this->edition($idclic);
+ }
+ else{
+ //Initialisations des paramètres de configuration du module et création des dossiers de sauvegarde
+ if( null === $this->getData(['module', $this->getUrl(0), 'vue'])) {
+ // name est utilisé pour détecter un changement de nom de la page contenant le module
+ $this->setData(['module',$this->getUrl(0),[
+ 'name' => $this->getUrl(0),
+ 'vue' => [
+ 'vueagenda' => 'dayGridMonth',
+ 'debagenda' => date('Y-m-d')
+ ],
+ 'config' => [
+ 'droit_creation' => 2,
+ 'droit_limite' => true,
+ 'maxiWidth' => '800',
+ 'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData'])
+ ],
+ 'categories' => [
+ 'valCategories' => false
+ ]
+ ]]);
+
+ //Création des dossiers de sauvegarde de l'agenda
+ if(! is_dir(self::DATAMODULE.'data')) mkdir(self::DATAMODULE.'data',0770,true);
+ if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve'))mkdir(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve');
+ if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0).'_visible')) mkdir(self::DATAMODULE.'data/'.$this->getUrl(0).'_visible');
+ if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0))) mkdir(self::DATAMODULE.'data/'.$this->getUrl(0));
+ if(! is_dir(self::DATAFILE.'ics')) mkdir(self::DATAFILE.'ics');
+ if(! is_dir(self::DATAFILE.'categories')) mkdir(self::DATAFILE.'categories');
+ if(! is_dir(self::DATAMODULE.'ics')) mkdir(self::DATAMODULE.'ics');
+ if(! is_dir(self::DATAMODULE.'adresses')) mkdir(self::DATAMODULE.'adresses');
+
+
+ $this->addOutput([
+ 'notification' => 'Initialisations effectuées, vous devez valider une configuration.',
+ 'redirect' => helper::baseUrl() . $this->getUrl(0).'/config/',
+ 'state' => true
+ ]);
+ }
+ else{
+ //le module existe dans le json, détection du changement de nom de la page pour renommer les dossiers
+ if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0))){
+ $oldname = $this->getData(['module', $this->getUrl(0), 'name']);
+ $newname = $this->getUrl(0);
+ rename( self::DATAMODULE.'data/'.$oldname, self::DATAMODULE.'data/'.$newname);
+ rename( self::DATAMODULE.'data/'.$oldname.'_visible' , self::DATAMODULE.'data/'.$newname.'_visible');
+ rename( self::DATAMODULE.'data/'.$oldname.'_sauve' , self::DATAMODULE.'data/'.$newname.'_sauve');
+ $this->addOutput([
+ 'notification' => 'Modification des dossiers de sauvegarde',
+ 'state' => true
+ ]);
+ //Fonctionne avec Zwii 10.0.044 mais sans effet avec version 9.2.27, pourquoi ?
+ //$this->setData(['module',$newname,'name',$newname]);
+ //avec une version 9 on passe par une fonction pour réaliser cette mise à jour
+ $this->newname();
+
+ }
+ }
+ //Si le fichier events.json n'existe pas ou si sa taille est inférieure à 2 on le crée vide
+ if( is_file(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json') === false ||
+ ( is_file(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json') === true && filesize(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json')<2)){
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', '[]');
+ }
+
+ //Création d'une copie d'events.json visible en fonction des droits
+ $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');
+ $tableau = json_decode($json, true);
+ foreach($tableau as $key=>$value){
+ if( isset($value['groupe_lire'])){
+ if($value['groupe_lire'] > $this->getUser('group')){
+ $json = $this->delete_visible($json,$key);
+ }
+ else{
+ if( isset ($value['title'])){
+ $newvalues = html_entity_decode($value['title']);
+ $newvalue = strip_tags($newvalues);
+ //Modification de CR LF " { } dans le texte de l'évènement
+ $newvalue = $this->modif_texte($newvalue);
+ $json = str_replace($value['title'], $newvalue, $json);
+ }
+ }
+ }
+ }
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'_visible/events.json',$json);
+
+ // Affichage de la page agenda
+ $this->addOutput([
+ 'showBarEditButton' => true,
+ 'showPageContent' => true,
+ 'vendor' => [
+ 'js'
+ ],
+ 'view' => 'index'
+ ]);
+
+ }
+ }
+
+ }
+
+
+ /*
+ /*Fonctions privées
+ */
+
+ /* Conversion date au format unix (valeur 0 au 1/1/1970 00:00)
+ */
+ private function conversion_date($dateclic){
+ $annee = intval(substr($dateclic, 0, 4));
+ $mois = intval(substr($dateclic, 5, 2));
+ $jour= intval(substr($dateclic, 8, 2));
+ $heure = intval(substr($dateclic, 11, 2));
+ $minute = intval(substr($dateclic, 14, 2));
+ $date = new DateTime();
+ $date->setDate($annee, $mois, $jour);
+ $date->setTime($heure, $minute);
+ return $date->getTimestamp();
+ }
+
+
+ /* Vérification que $datedebut précède $datefin
+ */
+ private function verif_date($datedebut, $datefin){
+ $result = false;
+ $date[0] = $datedebut;
+ $date[1] = $datefin;
+ for($key = 0; $key <2; $key++){
+ $annee = substr($date[$key],0,4);
+ $mois = substr($date[$key],5,2);
+ $jour = substr($date[$key],8,2);
+ $heure = substr($date[$key],11,2);
+ $minute = substr($date[$key],14,2);
+ $valdate[$key] = intval($annee.$mois.$jour.$heure.$minute);
+ }
+ if ($valdate[0] <= $valdate[1]){ $result = true;}
+ return $result;
+ }
+
+ /*Modifier date format ics yyyymmddThhmm... ou yyyymmdd vers format fullcalendar yyyy-mm-ddThh:mm ou yyyy-mm-dd
+ */
+ private function modif_date($datein, $clef){
+ if (strpos($clef, 'VALUE=DATE') !== false){
+ $dateout = substr($datein, 0, 4).'-'.substr($datein, 4, 2).'-'.substr($datein, 6, 2);
+ }
+ else{
+ $dateout = substr($datein, 0, 4).'-'.substr($datein, 4, 2).'-'.substr($datein, 6, 5).':'.substr($datein, 11, 2);
+ }
+ return $dateout;
+ }
+
+
+
+ /* Modification de CR LF " ' { } dans le texte de l'évènement
+ */
+ private function modif_texte($evenement_texte){
+ $evenement_texte = str_replace(CHR(13),"
",$evenement_texte);
+ $evenement_texte = str_replace(CHR(10),"
",$evenement_texte);
+ $evenement_texte = str_replace('"','"',$evenement_texte);
+ $evenement_texte = str_replace("'","'",$evenement_texte);
+ $evenement_texte = str_replace('}','}',$evenement_texte);
+ $evenement_texte = str_replace('{','{',$evenement_texte);
+ return $evenement_texte;
+ }
+
+ /* Restauration des CR LF " ' { } dans le texte de l'évènement
+ */
+ private function restaure_texte($evenement_texte){
+ $evenement_texte = str_replace("
",CHR(13),$evenement_texte);
+ $evenement_texte = str_replace("
",CHR(10),$evenement_texte);
+ $evenement_texte = str_replace('"','"',$evenement_texte);
+ $evenement_texte = str_replace("'","'",$evenement_texte);
+ $evenement_texte = str_replace('}','}',$evenement_texte);
+ $evenement_texte = str_replace('{','{',$evenement_texte);
+ return $evenement_texte;
+ }
+
+ /* Ajout et enregistrement d'un évènement sur création ou édition, émission de mail si mailing_val = '1'
+ */
+ private function nouvel_evenement($evenement_texte,$date_debut,$date_fin,$couleur_fond,$couleur_texte,$groupe_visible,$groupe_mod,$mailing_val, $mailing_adresses, $categorie, $json){
+ //Changement du format des dates yyyy-mm-dd hh:mm:0 vers format fullcalendar yyyy-mm-ddThh:mm
+ $date_debut = str_replace(' ','T',$date_debut);
+ $date_fin = str_replace(' ','T',$date_fin);
+
+ //Limitation à 16 caractères
+ $date_debut = substr($date_debut,0,16);
+ $date_fin = substr($date_fin,0,16);
+
+ //Ouverture et décodage du fichier json
+ if($json == ''){$json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json');}
+ $tableau = json_decode($json, true);
+ $keynew = count($tableau);
+
+ //Chaîne à ajouter de type ,{"id":"2","title":"...","start":"...","end":"...","backgroundColor":"...","textColor":"...","groupe":"..."} etc... ]
+ //Sans la virgule initiale si c'est le premier évènement
+ if (strlen($json) > 2){
+ $new = ',{"id":'.$keynew.',"title":"'.$evenement_texte.'","start":"'.$date_debut.'","end":"'
+ .$date_fin.'","backgroundColor":"'.$couleur_fond.'","textColor":"'.$couleur_texte.'","groupe_lire":"'.$groupe_visible.'","groupe_mod":"'
+ .$groupe_mod.'","mailing_val":"'.$mailing_val.'","mailing_adresses":"'.$mailing_adresses.'","categorie":"'.$categorie.'"}]';
+ }
+ else{
+ $new = '{"id":'.$keynew.',"title":"'.$evenement_texte.'","start":"'.$date_debut.'","end":"'
+ .$date_fin.'","backgroundColor":"'.$couleur_fond.'","textColor":"'.$couleur_texte.'","groupe_lire":"'.$groupe_visible.'","groupe_mod":"'
+ .$groupe_mod.'","mailing_val":"'.$mailing_val.'","mailing_adresses":"'.$mailing_adresses.'","categorie":"'.$categorie.'"}]';
+ }
+ $json = str_replace(']',$new,$json);
+
+ //Enregistrement dans le fichier json et sauvegarde pour restauration par "Agenda précédent"
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json', $json);
+ $this->sauve($json);
+ if($mailing_val === '1') $this->mailing($evenement_texte, $date_debut, $date_fin, $mailing_val, $mailing_adresses);
+ }
+
+ /* Sauvegarde automatique de l'agenda sous une forme datée après chaque création, modification, suppression d'un évènement
+ * ou chargement d'un nouvel agenda, seuls les 10 derniers agendas sont sauvegardés
+ */
+ private function sauve($sauve_json) {
+
+ //Sauvegarde du fichier json actuel
+ file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve/events_'.date('YmdHis').'.json', $sauve_json);
+
+ //Effacement du plus ancien fichier de sauvegarde auto si le nombre de fichiers dépasse 10
+ $dir=self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve';
+ $nom_fichier = scandir($dir);
+ //Comptage du nombre de fichiers de sauvegarde auto
+ $nb_sauve_auto = 0;
+ $plus_ancien_clef = 0;
+ foreach($nom_fichier as $key=>$value){
+ if(strpos($value,'events_') !== false && strlen($value) == 26){
+ if ($nb_sauve_auto == 0) { $plus_ancien_clef = $key;}
+ $nb_sauve_auto++;
+ }
+ }
+ if ($nb_sauve_auto > 10){
+ $handle = opendir(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve');
+ unlink(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve/'.$nom_fichier[$plus_ancien_clef]);
+ closedir($handle);
+ }
+ }
+
+ /* Suppression d'évènements dans le json public ( visible) en fonction des droits
+ */
+ private function delete_visible($json,$lid) {
+ //$pos1 et $pos2 sont les délimiteurs de la partie à supprimer
+ $pos1 = strpos($json, '{"id":'.$lid);
+ $pos2 = strpos($json, '}', $pos1);
+ //Premier évènement ?
+ if ($pos1 < 2) {
+ //Premier ! et dernier évènement ?
+ if (strlen($json) < $pos2 + 4){
+ $json ='[]';
+ }
+ else{
+ $json = substr_replace($json,'{},',$pos1, $pos2-$pos1+2);
+ }
+ }
+ else{
+ $json = substr_replace($json,',{}',$pos1-1, $pos2-$pos1+2);
+ }
+ return $json;
+ }
+
+ /* Limitation des choix pour les groupes lecture et modification avant création ou édition
+ */
+ private function limite_groupes() {
+ //Modification du tableau self::$groupe si case cochée en configuration
+ if ($this->getData(['module', $this->getUrl(0), 'config', 'droit_limite'])
+ && $this->getUser('group') >= self::$evenement['groupe_mod']){
+ switch ($this->getUser('group')) {
+ case 0 :
+ array_splice(self::$groupe,1);
+ break;
+ case 1 :
+ array_splice(self::$groupe,2);
+ break;
+ case 2 :
+ array_splice(self::$groupe,3);
+ break;
+ }
+ }
+ }
+
+ /*
+ * Extraction des données de la chaîne url et détection de changement de vue
+ */
+ private function vue_debut($url,$idda) {
+ $pos1 = strpos($url,$idda);
+ $pos2 = strpos($url,'vue:');
+ $pos3 = strpos($url,'deb:');
+ $iddaclic = substr($url,$pos1 + 4, $pos2-($pos1+4));
+ $grid = substr($url,$pos2 + 4, $pos3-($pos2+4));
+ $deb = substr($url,$pos3 + 4, 10);
+ $gridold = $this->getData(['module', $this->getUrl(0), 'vue','vueagenda']);
+ $debold = $this->getData(['module', $this->getUrl(0), 'vue','debagenda']);
+ if($grid != $gridold || $deb != $debold){
+ $this->setData(['module', $this->getUrl(0), 'vue', [
+ 'vueagenda' => $grid,
+ 'debagenda' => $deb
+ ]]);
+ $this->addOutput([
+ 'notification' => 'Modification de vue enregistrée',
+ 'state' => true
+ ]);
+ }
+ return $iddaclic;
+ }
+
+ /* Function is to get all the contents from ics and explode all the datas according to the events and its sections */
+ /* de https://www.apptha.com/blog/import-google-calendar-events-in-php/ */
+ function getIcsEventsAsArray($file) {
+ $icalString = file_get_contents ( $file );
+ $icsDates = array ();
+ /* Explode the ICs Data to get datas as array according to string ‘BEGIN:’ */
+ $icsData = explode ( "BEGIN:", $icalString );
+ /* Iterating the icsData value to make all the start end dates as sub array */
+ foreach ( $icsData as $key => $value ) {
+ $icsDatesMeta [$key] = explode ( "\n", $value );
+ }
+ /* Itearting the Ics Meta Value */
+ foreach ( $icsDatesMeta as $key => $value ) {
+ foreach ( $value as $subKey => $subValue ) {
+ /* to get ics events in proper order */
+ $icsDates = $this->getICSDates ( $key, $subKey, $subValue, $icsDates );
+ }
+ }
+ return $icsDates;
+ }
+
+ /* funcion is to avaid the elements wich is not having the proper start, end and summary informations */
+ /* de https://www.apptha.com/blog/import-google-calendar-events-in-php/ */
+ function getICSDates($key, $subKey, $subValue, $icsDates) {
+ if ($key != 0 && $subKey == 0) {
+ $icsDates [$key] ["BEGIN"] = $subValue;
+ } else {
+ $subValueArr = explode ( ":", $subValue, 2 );
+ if (isset ( $subValueArr [1] )) {
+ $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
+ }
+ }
+ return $icsDates;
+ }
+
+ /* Fonction mailing($evenement_texte, $date_debut, $date_fin, $mailing_val, $mailing_adresses)
+ /*
+ */
+ private function mailing($evenement_texte, $date_debut, $date_fin, $mailing_val, $mailing_adresses){
+ $adresses = file_get_contents(self::DATAMODULE.'adresses/'.$mailing_adresses);
+ if( strpos( $adresses, '@' ) !== false){
+ // Conversion $adresses en tableau
+ $to=[];
+ $to = explode(',',$adresses);
+ //filtrage des éléments du tableau $to qui ne contiennent pas @ pour fichiers txt ou csv
+ $num = count($to);
+ for ($c=0; $c < $num; $c++) {
+ if (strrchr($to[$c], '@') === false){
+ unset($to[$c]);
+ }
+ }
+ // Modification de l'aspect des dates : 2020-12-04T08:00 vers 04/12/2020 à 08:00
+ $date_debut = $this->change_date($date_debut);
+ $date_fin = $this->change_date($date_fin);
+ $subject = self::$sujet_mailing;
+ $content = 'Evènement '.$evenement_texte.'
Début -> '.$date_debut.'
Fin -> '.$date_fin;
+ $mode = 'bcc';
+ $this->envoyerMail($to, $subject, $content, $mode);
+ }
+ }
+
+
+ /* Fonction envoyerMail($to, $subject, $content, $mode)
+ /* Copie de la fonction sendMail() de core.php avec en plus l'argument $mode pour cacher ou non les destinataires*/
+ private function envoyerMail($to, $subject, $content, $mode){
+ // Utilisation de PHPMailer version 6.0.6 avec zwii 9.x.x ou 10.x.x
+ if($this->getData(['core', 'dataVersion']) < 10000) {
+ require_once "core/vendor/phpmailer/phpmailer.php";
+ require_once "core/vendor/phpmailer/exception.php";
+ }
+ else{
+ //require_once "core/class/phpmailer/phpmailer.class.php";
+ //require_once "core/class/phpmailer/exception.class.php";
+ }
+ // Layout
+ ob_start();
+ include './core/layout/mail.php';
+ $layout = ob_get_clean();
+ // Mail
+ try{
+ $mail = new PHPMailer\PHPMailer\PHPMailer;
+ $mail->CharSet = 'UTF-8';
+ $host = str_replace('www.', '', $_SERVER['HTTP_HOST']);
+ $mail->setFrom('no-reply@' . $host, $this->getData(['config', 'title']));
+ $mail->addReplyTo('no-reply@' . $host, $this->getData(['config', 'title']));
+ if(is_array($to)) {
+ foreach($to as $userMail) {
+ if ( $mode == 'bcc' ){
+ $mail->addBCC($userMail);
+ }
+ else{
+ $mail->addAddress($userMail);
+ }
+ }
+ }
+ else {
+ if ( $mode == 'bcc' ){
+ $mail->addBCC($to);
+ }
+ else{
+ $mail->addAddress($to);
+ }
+ }
+ $mail->isHTML(true);
+ $mail->Subject = $subject;
+ $mail->Body = $layout;
+ $mail->AltBody = strip_tags($content);
+ if($mail->send()) {
+ return true;
+ }
+ else {
+ return $mail->ErrorInfo;
+ }
+ } catch (phpmailerException $e) {
+ return $e->errorMessage();
+ } catch (Exception $e) {
+ return $e->getMessage();
+ }
+ }
+
+ /*
+ ** Fonction change_date($date) Modification de l'aspect des dates : 2020-12-04T08:00 vers 04/12/2020 à 08:00
+ */
+ private function change_date( $date ){
+ $jour = substr($date, 8, 2);
+ $mois = substr($date, 5, 2);
+ $annee = substr($date, 0, 4);
+ $heure = substr($date, 11, 2);
+ $minute = substr($date, 14, 2);
+ $date = $jour.'/'.$mois.'/'.$annee.' à '.$heure.':'.$minute;
+ return $date;
+ }
+
+ /*
+ * Copie récursive de dossiers
+ *
+ */
+ private function custom_copy($src, $dst) {
+ // open the source directory
+ $dir = opendir($src);
+ // Make the destination directory if not exist
+ if (!is_dir($dst)) {
+ mkdir($dst);
+ }
+ // Loop through the files in source directory
+ while( $file = readdir($dir) ) {
+ if (( $file != '.' ) && ( $file != '..' )) {
+ if ( is_dir($src . '/' . $file) ){
+ // Recursively calling custom copy function
+ // for sub directory
+ $this -> custom_copy($src . '/' . $file, $dst . '/' . $file);
+ }
+ else {
+ copy($src . '/' . $file, $dst . '/' . $file);
+ }
+ }
+ }
+ closedir($dir);
+ }
+
+}
\ No newline at end of file
diff --git a/agenda/vendor/js/inc.json b/agenda/vendor/js/inc.json
new file mode 100644
index 0000000..f8b1630
--- /dev/null
+++ b/agenda/vendor/js/inc.json
@@ -0,0 +1,8 @@
+[
+ "packages/core/main.css",
+ "packages/daygrid/main.css",
+ "packages/core/main.js",
+ "packages/interaction/main.js",
+ "packages/daygrid/main.js",
+ "packages/core/locales-all.js"
+]
\ No newline at end of file
diff --git a/agenda/vendor/js/init01.js b/agenda/vendor/js/init01.js
new file mode 100644
index 0000000..2dc1df4
--- /dev/null
+++ b/agenda/vendor/js/init01.js
@@ -0,0 +1,243 @@
+/**
+
+ * Initialisation de TinyMCE
+
+ */
+
+tinymce.init({
+ // Classe où appliquer l'éditeur
+ selector: ".editorWysiwyg",
+ // Aperçu dans le pied de page
+ setup:function(ed) {
+ ed.on('change', function(e) {
+ if (ed.id === 'themeFooterText') {
+ $("#footerText").html(tinyMCE.get('themeFooterText').getContent());
+ }
+ });
+ },
+ // Langue
+ language: "fr_FR",
+ // Plugins
+ plugins: "advlist anchor autolink autoresize autosave colorpicker contextmenu fullscreen hr lists paste searchreplace stickytoolbar tabfocus template textcolor visualblocks",
+ // Contenu de la barre d'outils
+ toolbar: "restoredraft | undo redo | styleselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | visualblocks fullscreen",
+ // Cibles de la target
+ target_list: [
+ {title: 'None', value: ''},
+ {title: 'Nouvel onglet', value: '_blank'}
+ ],
+ // Target pour lightbox
+ rel_list: [
+ {title: 'None', value: ''},
+ {title: 'Popup intégrée (Lity)', value: 'data-lity'},
+ {title: 'Diaporama d\'images (SimpleLightbox)', value: 'gallery'}
+ ],
+ // Titre des images
+ image_title: true,
+ // Pages internes
+ link_list: baseUrl + "core/vendor/tinymce/links.php",
+ // Contenu du menu contextuel
+ contextmenu: "cut copy paste pastetext | selectall searchreplace ",
+ // Fichiers CSS à intégrer à l'éditeur
+ content_css: [
+ baseUrl + "core/layout/common.css",
+ baseUrl + "core/vendor/tinymce/content.css",
+ baseUrl + "site/data/theme.css",
+ baseUrl + "site/data/custom.css"
+ ],
+// Classe à ajouter à la balise body dans l'iframe
+ body_class: "editorWysiwyg",
+ // Cache les menus
+ menubar: false,
+ // URL menu contextuel
+ link_context_toolbar: true,
+ // Cache la barre de statut
+ statusbar: false,
+ // Autorise tous les éléments
+ valid_elements :"*[*]",
+ valid_children : "*[*]",
+ // Autorise l'ajout de script
+ // extended_valid_elements: "script[language|type|src]",
+ // Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive)
+ media_dimensions: true,
+ // Désactiver la dimension des images
+ image_dimensions: true,
+ // Active l'onglet avancé lors de l'ajout d'une image
+ image_advtab: true,
+ // Urls absolues
+ relative_urls: false,
+ // Url de base
+ document_base_url: baseUrl,
+ // Gestionnaire de fichiers
+ //filemanager_access_key: privateKey,
+ //external_filemanager_path: baseUrl + "core/vendor/filemanager/",
+ //external_plugins: {
+ // "filemanager": baseUrl + "core/vendor/filemanager/plugin.min.js"
+ //},
+ // Thème mobile
+ // mobile: {
+ // theme: "mobile",
+ // plugins: [ 'autosave', 'lists', 'autolink' ],
+ // toolbar: [ 'undo', 'bold', 'italic', 'styleselect' ]
+ //},
+ // Contenu du bouton insérer
+ insert_button_items: "image link media template codesample inserttable | hr | anchor",
+ // Contenu du bouton formats
+ style_formats: [
+ {title: "Headers", items: [
+ {title: "Header 1", format: "h1"},
+ {title: "Header 2", format: "h2"},
+ {title: "Header 3", format: "h3"},
+ {title: "Header 4", format: "h4"}
+ ]},
+ {title: "Inline", items: [
+ {title: "Bold", icon: "bold", format: "bold"},
+ {title: "Italic", icon: "italic", format: "italic"},
+ {title: "Underline", icon: "underline", format: "underline"},
+ {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"},
+ {title: "Superscript", icon: "superscript", format: "superscript"},
+ {title: "Subscript", icon: "subscript", format: "subscript"},
+ {title: "Code", icon: "code", format: "code"}
+ ]},
+ {title: "Blocks", items: [
+ {title: "Paragraph", format: "p"},
+ {title: "Blockquote", format: "blockquote"},
+ {title: "Div", format: "div"},
+ {title: "Pre", format: "pre"}
+ ]},
+ {title: "Alignment", items: [
+ {title: "Left", icon: "alignleft", format: "alignleft"},
+ {title: "Center", icon: "aligncenter", format: "aligncenter"},
+ {title: "Right", icon: "alignright", format: "alignright"},
+ {title: "Justify", icon: "alignjustify", format: "alignjustify"}
+ ]}
+ ],
+ // Templates
+ templates: [
+ {
+ title: "Bloc de texte",
+ url: baseUrl + "core/vendor/tinymce/templates/block.html",
+ description: "Bloc de texte avec un titre."
+ },
+ {
+ title: "Effet accordéon",
+ url: baseUrl + "core/vendor/tinymce/templates/accordion.html",
+ description: "Bloc de texte avec effet accordéon."
+ },
+ {
+ title: "Grille symétrique : 6 - 6",
+ url: baseUrl + "core/vendor/tinymce/templates/col6.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille symétrique : 4 - 4 - 4",
+ url: baseUrl + "core/vendor/tinymce/templates/col4.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille symétrique : 3 - 3 - 3 - 3",
+ url: baseUrl + "core/vendor/tinymce/templates/col3.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 4 - 8",
+ url: baseUrl + "core/vendor/tinymce/templates/col4-8.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 8 - 4",
+ url: baseUrl + "core/vendor/tinymce/templates/col8-4.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 2 - 10",
+ url: baseUrl + "core/vendor/tinymce/templates/col2-10.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 10 - 2",
+ url: baseUrl + "core/vendor/tinymce/templates/col10-2.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ }
+ ]
+});
+
+
+
+tinymce.PluginManager.add('stickytoolbar', function(editor, url) {
+ editor.on('init', function() {
+ setSticky();
+ });
+
+ $(window).on('scroll', function() {
+ setSticky();
+ });
+
+ function setSticky() {
+ var container = editor.editorContainer;
+ var toolbars = $(container).find('.mce-toolbar-grp');
+ var statusbar = $(container).find('.mce-statusbar');
+
+ if (isSticky()) {
+ $(container).css({
+ paddingTop: toolbars.outerHeight()
+ });
+
+ if (isAtBottom()) {
+ toolbars.css({
+ top: 'auto',
+ bottom: statusbar.outerHeight(),
+ position: 'absolute',
+ width: '100%',
+ borderBottom: 'none'
+ });
+ } else {
+ toolbars.css({
+ top: 45,
+ bottom: 'auto',
+ position: 'fixed',
+ width: $(container).width(),
+ borderBottom: '1px solid rgba(0,0,0,0.2)'
+ });
+ }
+ } else {
+ $(container).css({
+ paddingTop: 0
+ });
+
+ toolbars.css({
+ top:0,
+ position: 'relative',
+ width: 'auto',
+ borderBottom: 'none'
+ });
+ }
+ }
+
+ function isSticky() {
+ var container = editor.editorContainer,
+ editorTop = container.getBoundingClientRect().top;
+
+ if (editorTop < 0) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function isAtBottom() {
+ var container = editor.editorContainer,
+ editorTop = container.getBoundingClientRect().top;
+
+ var toolbarHeight = $(container).find('.mce-toolbar-grp').outerHeight();
+ var footerHeight = $(container).find('.mce-statusbar').outerHeight();
+
+ var hiddenHeight = -($(container).outerHeight() - toolbarHeight - footerHeight);
+
+ if (editorTop < hiddenHeight) {
+ return true;
+ }
+
+ return false;
+ }
+ });
diff --git a/agenda/vendor/js/init23.js b/agenda/vendor/js/init23.js
new file mode 100644
index 0000000..76fa6ec
--- /dev/null
+++ b/agenda/vendor/js/init23.js
@@ -0,0 +1,259 @@
+/**
+
+ * Initialisation de TinyMCE
+
+ */
+
+tinymce.init({
+ // Classe où appliquer l'éditeur
+ selector: ".editorWysiwyg",
+ // Aperçu dans le pied de page
+ setup:function(ed) {
+ ed.on('change', function(e) {
+ if (ed.id === 'themeFooterText') {
+ $("#footerText").html(tinyMCE.get('themeFooterText').getContent());
+ }
+ });
+ },
+ // Langue
+ language: "fr_FR",
+ // Plugins
+ plugins: "advlist anchor autolink autoresize autosave codemirror codesample colorpicker contextmenu fullscreen hr image imagetools link lists media paste searchreplace stickytoolbar tabfocus table template textcolor visualblocks",
+ // Contenu de la barre d'outils
+ toolbar: "restoredraft | undo redo | styleselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | insert | code visualblocks fullscreen",
+ // CodeMirror
+ codemirror: {
+ indentOnInit: true, // Whether or not to indent code on init.
+ fullscreen: false, // Default setting is false
+ path: 'codemirror', // Path to CodeMirror distribution
+ config: { // CodeMirror config object
+ mode: 'application/x-httpd-php',
+ lineNumbers: true
+ },
+ width: 800, // Default value is 800
+ height: 500, // Default value is 550
+ files: [ // Additional JS files to load
+ baseUrl + 'core/vendor/tinymce/mode/clike/clike.js',
+ baseUrl + 'core/vendor/tinymce/mode/php/php.js'
+ ]
+ },
+ // Cibles de la target
+ target_list: [
+ {title: 'None', value: ''},
+ {title: 'Nouvel onglet', value: '_blank'}
+ ],
+ // Target pour lightbox
+ rel_list: [
+ {title: 'None', value: ''},
+ {title: 'Popup intégrée (Lity)', value: 'data-lity'},
+ {title: 'Diaporama d\'images (SimpleLightbox)', value: 'gallery'}
+ ],
+ // Titre des image
+ image_title: true,
+ // Pages internes
+ link_list: baseUrl + "core/vendor/tinymce/links.php",
+ // Contenu du menu contextuel
+ contextmenu: "cut copy paste pastetext | selectall searchreplace | link image inserttable | cell row column deletetable",
+ // Fichiers CSS à intégrer à l'éditeur
+ content_css: [
+ baseUrl + "core/layout/common.css",
+ baseUrl + "core/vendor/tinymce/content.css",
+ baseUrl + "site/data/theme.css",
+ baseUrl + "site/data/custom.css"
+ ],
+// Classe à ajouter à la balise body dans l'iframe
+ body_class: "editorWysiwyg",
+ // Cache les menus
+ menubar: false,
+ // URL menu contextuel
+ link_context_toolbar: true,
+ // Cache la barre de statut
+ statusbar: false,
+ // Autorise tous les éléments
+ valid_elements :"*[*]",
+ valid_children : "*[*]",
+ // Autorise l'ajout de script
+ // extended_valid_elements: "script[language|type|src]",
+ // Bloque le dimensionnement des médias (car automatiquement en fullsize avec fitvids pour le responsive)
+ media_dimensions: true,
+ // Désactiver la dimension des images
+ image_dimensions: true,
+ // Active l'onglet avancé lors de l'ajout d'une image
+ image_advtab: true,
+ // Urls absolues
+ relative_urls: false,
+ // Url de base
+ document_base_url: baseUrl,
+ // Gestionnaire de fichiers
+ filemanager_access_key: privateKey,
+ external_filemanager_path: baseUrl + "core/vendor/filemanager/",
+ external_plugins: {
+ "filemanager": baseUrl + "core/vendor/filemanager/plugin.min.js"
+ },
+ // Thème mobile
+ // mobile: {
+ // theme: "mobile",
+ // plugins: [ 'autosave', 'lists', 'autolink' ],
+ // toolbar: [ 'undo', 'bold', 'italic', 'styleselect' ]
+ //},
+ // Contenu du bouton insérer
+ insert_button_items: "image link media template codesample inserttable | hr | anchor",
+ // Contenu du bouton formats
+ style_formats: [
+ {title: "Headers", items: [
+ {title: "Header 1", format: "h1"},
+ {title: "Header 2", format: "h2"},
+ {title: "Header 3", format: "h3"},
+ {title: "Header 4", format: "h4"}
+ ]},
+ {title: "Inline", items: [
+ {title: "Bold", icon: "bold", format: "bold"},
+ {title: "Italic", icon: "italic", format: "italic"},
+ {title: "Underline", icon: "underline", format: "underline"},
+ {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"},
+ {title: "Superscript", icon: "superscript", format: "superscript"},
+ {title: "Subscript", icon: "subscript", format: "subscript"},
+ {title: "Code", icon: "code", format: "code"}
+ ]},
+ {title: "Blocks", items: [
+ {title: "Paragraph", format: "p"},
+ {title: "Blockquote", format: "blockquote"},
+ {title: "Div", format: "div"},
+ {title: "Pre", format: "pre"}
+ ]},
+ {title: "Alignment", items: [
+ {title: "Left", icon: "alignleft", format: "alignleft"},
+ {title: "Center", icon: "aligncenter", format: "aligncenter"},
+ {title: "Right", icon: "alignright", format: "alignright"},
+ {title: "Justify", icon: "alignjustify", format: "alignjustify"}
+ ]}
+ ],
+ // Templates
+ templates: [
+ {
+ title: "Bloc de texte",
+ url: baseUrl + "core/vendor/tinymce/templates/block.html",
+ description: "Bloc de texte avec un titre."
+ },
+ {
+ title: "Effet accordéon",
+ url: baseUrl + "core/vendor/tinymce/templates/accordion.html",
+ description: "Bloc de texte avec effet accordéon."
+ },
+ {
+ title: "Grille symétrique : 6 - 6",
+ url: baseUrl + "core/vendor/tinymce/templates/col6.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille symétrique : 4 - 4 - 4",
+ url: baseUrl + "core/vendor/tinymce/templates/col4.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille symétrique : 3 - 3 - 3 - 3",
+ url: baseUrl + "core/vendor/tinymce/templates/col3.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 4 - 8",
+ url: baseUrl + "core/vendor/tinymce/templates/col4-8.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 8 - 4",
+ url: baseUrl + "core/vendor/tinymce/templates/col8-4.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 2 - 10",
+ url: baseUrl + "core/vendor/tinymce/templates/col2-10.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ },
+ {
+ title: "Grille asymétrique : 10 - 2",
+ url: baseUrl + "core/vendor/tinymce/templates/col10-2.html",
+ description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres."
+ }
+ ]
+});
+
+
+
+tinymce.PluginManager.add('stickytoolbar', function(editor, url) {
+ editor.on('init', function() {
+ setSticky();
+ });
+
+ $(window).on('scroll', function() {
+ setSticky();
+ });
+
+ function setSticky() {
+ var container = editor.editorContainer;
+ var toolbars = $(container).find('.mce-toolbar-grp');
+ var statusbar = $(container).find('.mce-statusbar');
+
+ if (isSticky()) {
+ $(container).css({
+ paddingTop: toolbars.outerHeight()
+ });
+
+ if (isAtBottom()) {
+ toolbars.css({
+ top: 'auto',
+ bottom: statusbar.outerHeight(),
+ position: 'absolute',
+ width: '100%',
+ borderBottom: 'none'
+ });
+ } else {
+ toolbars.css({
+ top: 45,
+ bottom: 'auto',
+ position: 'fixed',
+ width: $(container).width(),
+ borderBottom: '1px solid rgba(0,0,0,0.2)'
+ });
+ }
+ } else {
+ $(container).css({
+ paddingTop: 0
+ });
+
+ toolbars.css({
+ top:0,
+ position: 'relative',
+ width: 'auto',
+ borderBottom: 'none'
+ });
+ }
+ }
+
+ function isSticky() {
+ var container = editor.editorContainer,
+ editorTop = container.getBoundingClientRect().top;
+
+ if (editorTop < 0) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function isAtBottom() {
+ var container = editor.editorContainer,
+ editorTop = container.getBoundingClientRect().top;
+
+ var toolbarHeight = $(container).find('.mce-toolbar-grp').outerHeight();
+ var footerHeight = $(container).find('.mce-statusbar').outerHeight();
+
+ var hiddenHeight = -($(container).outerHeight() - toolbarHeight - footerHeight);
+
+ if (editorTop < hiddenHeight) {
+ return true;
+ }
+
+ return false;
+ }
+ });
diff --git a/agenda/vendor/js/packages/LICENSE.txt b/agenda/vendor/js/packages/LICENSE.txt
new file mode 100644
index 0000000..2149cfb
--- /dev/null
+++ b/agenda/vendor/js/packages/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2019 Adam Shaw
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/agenda/vendor/js/packages/core/LICENSE.txt b/agenda/vendor/js/packages/core/LICENSE.txt
new file mode 100644
index 0000000..2149cfb
--- /dev/null
+++ b/agenda/vendor/js/packages/core/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2019 Adam Shaw
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/agenda/vendor/js/packages/core/README.md b/agenda/vendor/js/packages/core/README.md
new file mode 100644
index 0000000..7ed36f4
--- /dev/null
+++ b/agenda/vendor/js/packages/core/README.md
@@ -0,0 +1,8 @@
+
+# FullCalendar Core Package
+
+Provides core functionality, including the Calendar class
+
+[View the docs »](https://fullcalendar.io/docs/initialize-es6)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
diff --git a/agenda/vendor/js/packages/core/locales-all.js b/agenda/vendor/js/packages/core/locales-all.js
new file mode 100644
index 0000000..5c7c9fa
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales-all.js
@@ -0,0 +1,1348 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, global.FullCalendarLocalesAll = factory());
+}(this, function () { 'use strict';
+
+ var _m0 = {
+ code: "af",
+ week: {
+ dow: 1,
+ doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ },
+ buttonText: {
+ prev: "Vorige",
+ next: "Volgende",
+ today: "Vandag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayHtml: "Heeldag",
+ eventLimitText: "Addisionele",
+ noEventsMessage: "Daar is geen gebeurtenisse nie"
+ };
+
+ var _m1 = {
+ code: "ar-dz",
+ week: {
+ dow: 0,
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m2 = {
+ code: "ar-kw",
+ week: {
+ dow: 0,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m3 = {
+ code: "ar-ly",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m4 = {
+ code: "ar-ma",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m5 = {
+ code: "ar-sa",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m6 = {
+ code: "ar-tn",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m7 = {
+ code: "ar",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ var _m8 = {
+ code: "bg",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "назад",
+ next: "напред",
+ today: "днес",
+ month: "Месец",
+ week: "Седмица",
+ day: "Ден",
+ list: "График"
+ },
+ allDayText: "Цял ден",
+ eventLimitText: function (n) {
+ return "+още " + n;
+ },
+ noEventsMessage: "Няма събития за показване"
+ };
+
+ var _m9 = {
+ code: "bs",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prošli",
+ next: "Sljedeći",
+ today: "Danas",
+ month: "Mjesec",
+ week: "Sedmica",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekLabel: "Sed",
+ allDayText: "Cijeli dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nema događaja za prikazivanje"
+ };
+
+ var _m10 = {
+ code: "ca",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Següent",
+ today: "Avui",
+ month: "Mes",
+ week: "Setmana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekLabel: "Set",
+ allDayText: "Tot el dia",
+ eventLimitText: "més",
+ noEventsMessage: "No hi ha esdeveniments per mostrar"
+ };
+
+ var _m11 = {
+ code: "cs",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Dříve",
+ next: "Později",
+ today: "Nyní",
+ month: "Měsíc",
+ week: "Týden",
+ day: "Den",
+ list: "Agenda"
+ },
+ weekLabel: "Týd",
+ allDayText: "Celý den",
+ eventLimitText: function (n) {
+ return "+další: " + n;
+ },
+ noEventsMessage: "Žádné akce k zobrazení"
+ };
+
+ var _m12 = {
+ code: "da",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Næste",
+ today: "I dag",
+ month: "Måned",
+ week: "Uge",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uge",
+ allDayText: "Hele dagen",
+ eventLimitText: "flere",
+ noEventsMessage: "Ingen arrangementer at vise"
+ };
+
+ var _m13 = {
+ code: "de",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zurück",
+ next: "Vor",
+ today: "Heute",
+ year: "Jahr",
+ month: "Monat",
+ week: "Woche",
+ day: "Tag",
+ list: "Terminübersicht"
+ },
+ weekLabel: "KW",
+ allDayText: "Ganztägig",
+ eventLimitText: function (n) {
+ return "+ weitere " + n;
+ },
+ noEventsMessage: "Keine Ereignisse anzuzeigen"
+ };
+
+ var _m14 = {
+ code: "el",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Προηγούμενος",
+ next: "Επόμενος",
+ today: "Σήμερα",
+ month: "Μήνας",
+ week: "Εβδομάδα",
+ day: "Ημέρα",
+ list: "Ατζέντα"
+ },
+ weekLabel: "Εβδ",
+ allDayText: "Ολοήμερο",
+ eventLimitText: "περισσότερα",
+ noEventsMessage: "Δεν υπάρχουν γεγονότα για να εμφανιστεί"
+ };
+
+ var _m15 = {
+ code: "en-au",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m16 = {
+ code: "en-gb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m17 = {
+ code: "en-nz",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m18 = {
+ code: "es",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ var _m19 = {
+ code: "es",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ var _m20 = {
+ code: "et",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Eelnev",
+ next: "Järgnev",
+ today: "Täna",
+ month: "Kuu",
+ week: "Nädal",
+ day: "Päev",
+ list: "Päevakord"
+ },
+ weekLabel: "näd",
+ allDayText: "Kogu päev",
+ eventLimitText: function (n) {
+ return "+ veel " + n;
+ },
+ noEventsMessage: "Kuvamiseks puuduvad sündmused"
+ };
+
+ var _m21 = {
+ code: "eu",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Aur",
+ next: "Hur",
+ today: "Gaur",
+ month: "Hilabetea",
+ week: "Astea",
+ day: "Eguna",
+ list: "Agenda"
+ },
+ weekLabel: "As",
+ allDayHtml: "Egun
osoa",
+ eventLimitText: "gehiago",
+ noEventsMessage: "Ez dago ekitaldirik erakusteko"
+ };
+
+ var _m22 = {
+ code: "fa",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "قبلی",
+ next: "بعدی",
+ today: "امروز",
+ month: "ماه",
+ week: "هفته",
+ day: "روز",
+ list: "برنامه"
+ },
+ weekLabel: "هف",
+ allDayText: "تمام روز",
+ eventLimitText: function (n) {
+ return "بیش از " + n;
+ },
+ noEventsMessage: "هیچ رویدادی به نمایش"
+ };
+
+ var _m23 = {
+ code: "fi",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Edellinen",
+ next: "Seuraava",
+ today: "Tänään",
+ month: "Kuukausi",
+ week: "Viikko",
+ day: "Päivä",
+ list: "Tapahtumat"
+ },
+ weekLabel: "Vk",
+ allDayText: "Koko päivä",
+ eventLimitText: "lisää",
+ noEventsMessage: "Ei näytettäviä tapahtumia"
+ };
+
+ var _m24 = {
+ code: "fr",
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m25 = {
+ code: "fr-ch",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Courant",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m26 = {
+ code: "fr",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m27 = {
+ code: "gl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Seg",
+ today: "Hoxe",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Axenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
o día",
+ eventLimitText: "máis",
+ noEventsMessage: "Non hai eventos para amosar"
+ };
+
+ var _m28 = {
+ code: "he",
+ dir: 'rtl',
+ buttonText: {
+ prev: "הקודם",
+ next: "הבא",
+ today: "היום",
+ month: "חודש",
+ week: "שבוע",
+ day: "יום",
+ list: "סדר יום"
+ },
+ allDayText: "כל היום",
+ eventLimitText: "אחר",
+ noEventsMessage: "אין אירועים להצגה",
+ weekLabel: "שבוע"
+ };
+
+ var _m29 = {
+ code: "hi",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "पिछला",
+ next: "अगला",
+ today: "आज",
+ month: "महीना",
+ week: "सप्ताह",
+ day: "दिन",
+ list: "कार्यसूची"
+ },
+ weekLabel: "हफ्ता",
+ allDayText: "सभी दिन",
+ eventLimitText: function (n) {
+ return "+अधिक " + n;
+ },
+ noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
+ };
+
+ var _m30 = {
+ code: "hr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prijašnji",
+ next: "Sljedeći",
+ today: "Danas",
+ month: "Mjesec",
+ week: "Tjedan",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekLabel: "Tje",
+ allDayText: "Cijeli dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nema događaja za prikaz"
+ };
+
+ var _m31 = {
+ code: "hu",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "vissza",
+ next: "előre",
+ today: "ma",
+ month: "Hónap",
+ week: "Hét",
+ day: "Nap",
+ list: "Napló"
+ },
+ weekLabel: "Hét",
+ allDayText: "Egész nap",
+ eventLimitText: "további",
+ noEventsMessage: "Nincs megjeleníthető esemény"
+ };
+
+ var _m32 = {
+ code: "id",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "mundur",
+ next: "maju",
+ today: "hari ini",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekLabel: "Mg",
+ allDayHtml: "Sehari
penuh",
+ eventLimitText: "lebih",
+ noEventsMessage: "Tidak ada acara untuk ditampilkan"
+ };
+
+ var _m33 = {
+ code: "is",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Fyrri",
+ next: "Næsti",
+ today: "Í dag",
+ month: "Mánuður",
+ week: "Vika",
+ day: "Dagur",
+ list: "Dagskrá"
+ },
+ weekLabel: "Vika",
+ allDayHtml: "Allan
daginn",
+ eventLimitText: "meira",
+ noEventsMessage: "Engir viðburðir til að sýna"
+ };
+
+ var _m34 = {
+ code: "it",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prec",
+ next: "Succ",
+ today: "Oggi",
+ month: "Mese",
+ week: "Settimana",
+ day: "Giorno",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Tutto il
giorno",
+ eventLimitText: function (n) {
+ return "+altri " + n;
+ },
+ noEventsMessage: "Non ci sono eventi da visualizzare"
+ };
+
+ var _m35 = {
+ code: "ja",
+ buttonText: {
+ prev: "前",
+ next: "次",
+ today: "今日",
+ month: "月",
+ week: "週",
+ day: "日",
+ list: "予定リスト"
+ },
+ weekLabel: "週",
+ allDayText: "終日",
+ eventLimitText: function (n) {
+ return "他 " + n + " 件";
+ },
+ noEventsMessage: "表示する予定はありません"
+ };
+
+ var _m36 = {
+ code: "ka",
+ week: {
+ dow: 1,
+ doy: 7
+ },
+ buttonText: {
+ prev: "წინა",
+ next: "შემდეგი",
+ today: "დღეს",
+ month: "თვე",
+ week: "კვირა",
+ day: "დღე",
+ list: "დღის წესრიგი"
+ },
+ weekLabel: "კვ",
+ allDayText: "მთელი დღე",
+ eventLimitText: function (n) {
+ return "+ კიდევ " + n;
+ },
+ noEventsMessage: "ღონისძიებები არ არის"
+ };
+
+ var _m37 = {
+ code: "kk",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Алдыңғы",
+ next: "Келесі",
+ today: "Бүгін",
+ month: "Ай",
+ week: "Апта",
+ day: "Күн",
+ list: "Күн тәртібі"
+ },
+ weekLabel: "Не",
+ allDayText: "Күні бойы",
+ eventLimitText: function (n) {
+ return "+ тағы " + n;
+ },
+ noEventsMessage: "Көрсету үшін оқиғалар жоқ"
+ };
+
+ var _m38 = {
+ code: "ko",
+ buttonText: {
+ prev: "이전달",
+ next: "다음달",
+ today: "오늘",
+ month: "월",
+ week: "주",
+ day: "일",
+ list: "일정목록"
+ },
+ weekLabel: "주",
+ allDayText: "종일",
+ eventLimitText: "개",
+ noEventsMessage: "일정이 없습니다"
+ };
+
+ var _m39 = {
+ code: "lb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zréck",
+ next: "Weider",
+ today: "Haut",
+ month: "Mount",
+ week: "Woch",
+ day: "Dag",
+ list: "Terminiwwersiicht"
+ },
+ weekLabel: "W",
+ allDayText: "Ganzen Dag",
+ eventLimitText: "méi",
+ noEventsMessage: "Nee Evenementer ze affichéieren"
+ };
+
+ var _m40 = {
+ code: "lt",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Atgal",
+ next: "Pirmyn",
+ today: "Šiandien",
+ month: "Mėnuo",
+ week: "Savaitė",
+ day: "Diena",
+ list: "Darbotvarkė"
+ },
+ weekLabel: "SAV",
+ allDayText: "Visą dieną",
+ eventLimitText: "daugiau",
+ noEventsMessage: "Nėra įvykių rodyti"
+ };
+
+ var _m41 = {
+ code: "lv",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Iepr.",
+ next: "Nāk.",
+ today: "Šodien",
+ month: "Mēnesis",
+ week: "Nedēļa",
+ day: "Diena",
+ list: "Dienas kārtība"
+ },
+ weekLabel: "Ned.",
+ allDayText: "Visu dienu",
+ eventLimitText: function (n) {
+ return "+vēl " + n;
+ },
+ noEventsMessage: "Nav notikumu"
+ };
+
+ var _m42 = {
+ code: "mk",
+ buttonText: {
+ prev: "претходно",
+ next: "следно",
+ today: "Денес",
+ month: "Месец",
+ week: "Недела",
+ day: "Ден",
+ list: "График"
+ },
+ weekLabel: "Сед",
+ allDayText: "Цел ден",
+ eventLimitText: function (n) {
+ return "+повеќе " + n;
+ },
+ noEventsMessage: "Нема настани за прикажување"
+ };
+
+ var _m43 = {
+ code: "ms",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Sebelum",
+ next: "Selepas",
+ today: "hari ini",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekLabel: "Mg",
+ allDayText: "Sepanjang hari",
+ eventLimitText: function (n) {
+ return "masih ada " + n + " acara";
+ },
+ noEventsMessage: "Tiada peristiwa untuk dipaparkan"
+ };
+
+ var _m44 = {
+ code: "nb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Neste",
+ today: "I dag",
+ month: "Måned",
+ week: "Uke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uke",
+ allDayText: "Hele dagen",
+ eventLimitText: "til",
+ noEventsMessage: "Ingen hendelser å vise"
+ };
+
+ var _m45 = {
+ code: "nl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Voorgaand",
+ next: "Volgende",
+ today: "Vandaag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayText: "Hele dag",
+ eventLimitText: "extra",
+ noEventsMessage: "Geen evenementen om te laten zien"
+ };
+
+ var _m46 = {
+ code: "nn",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Førre",
+ next: "Neste",
+ today: "I dag",
+ month: "Månad",
+ week: "Veke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Veke",
+ allDayText: "Heile dagen",
+ eventLimitText: "til",
+ noEventsMessage: "Ingen hendelser å vise"
+ };
+
+ var _m47 = {
+ code: "pl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Poprzedni",
+ next: "Następny",
+ today: "Dziś",
+ month: "Miesiąc",
+ week: "Tydzień",
+ day: "Dzień",
+ list: "Plan dnia"
+ },
+ weekLabel: "Tydz",
+ allDayText: "Cały dzień",
+ eventLimitText: "więcej",
+ noEventsMessage: "Brak wydarzeń do wyświetlenia"
+ };
+
+ var _m48 = {
+ code: "pt-br",
+ buttonText: {
+ prev: "Anterior",
+ next: "Próximo",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Compromissos"
+ },
+ weekLabel: "Sm",
+ allDayText: "dia inteiro",
+ eventLimitText: function (n) {
+ return "mais +" + n;
+ },
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ var _m49 = {
+ code: "pt",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Seguinte",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekLabel: "Sem",
+ allDayText: "Todo o dia",
+ eventLimitText: "mais",
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ var _m50 = {
+ code: "ro",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "precedentă",
+ next: "următoare",
+ today: "Azi",
+ month: "Lună",
+ week: "Săptămână",
+ day: "Zi",
+ list: "Agendă"
+ },
+ weekLabel: "Săpt",
+ allDayText: "Toată ziua",
+ eventLimitText: function (n) {
+ return "+alte " + n;
+ },
+ noEventsMessage: "Nu există evenimente de afișat"
+ };
+
+ var _m51 = {
+ code: "ru",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Пред",
+ next: "След",
+ today: "Сегодня",
+ month: "Месяц",
+ week: "Неделя",
+ day: "День",
+ list: "Повестка дня"
+ },
+ weekLabel: "Нед",
+ allDayText: "Весь день",
+ eventLimitText: function (n) {
+ return "+ ещё " + n;
+ },
+ noEventsMessage: "Нет событий для отображения"
+ };
+
+ var _m52 = {
+ code: "sk",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Predchádzajúci",
+ next: "Nasledujúci",
+ today: "Dnes",
+ month: "Mesiac",
+ week: "Týždeň",
+ day: "Deň",
+ list: "Rozvrh"
+ },
+ weekLabel: "Ty",
+ allDayText: "Celý deň",
+ eventLimitText: function (n) {
+ return "+ďalšie: " + n;
+ },
+ noEventsMessage: "Žiadne akcie na zobrazenie"
+ };
+
+ var _m53 = {
+ code: "sl",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prejšnji",
+ next: "Naslednji",
+ today: "Trenutni",
+ month: "Mesec",
+ week: "Teden",
+ day: "Dan",
+ list: "Dnevni red"
+ },
+ weekLabel: "Teden",
+ allDayText: "Ves dan",
+ eventLimitText: "več",
+ noEventsMessage: "Ni dogodkov za prikaz"
+ };
+
+ var _m54 = {
+ code: "sq",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "mbrapa",
+ next: "Përpara",
+ today: "sot",
+ month: "Muaj",
+ week: "Javë",
+ day: "Ditë",
+ list: "Listë"
+ },
+ weekLabel: "Ja",
+ allDayHtml: "Gjithë
ditën",
+ eventLimitText: function (n) {
+ return "+më tepër " + n;
+ },
+ noEventsMessage: "Nuk ka evente për të shfaqur"
+ };
+
+ var _m55 = {
+ code: "sr-cyrl",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Претходна",
+ next: "следећи",
+ today: "Данас",
+ month: "Месец",
+ week: "Недеља",
+ day: "Дан",
+ list: "Планер"
+ },
+ weekLabel: "Сед",
+ allDayText: "Цео дан",
+ eventLimitText: function (n) {
+ return "+ још " + n;
+ },
+ noEventsMessage: "Нема догађаја за приказ"
+ };
+
+ var _m56 = {
+ code: "sr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prethodna",
+ next: "Sledeći",
+ today: "Danas",
+ month: "Mеsеc",
+ week: "Nеdеlja",
+ day: "Dan",
+ list: "Planеr"
+ },
+ weekLabel: "Sed",
+ allDayText: "Cеo dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nеma događaja za prikaz"
+ };
+
+ var _m57 = {
+ code: "sv",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Förra",
+ next: "Nästa",
+ today: "Idag",
+ month: "Månad",
+ week: "Vecka",
+ day: "Dag",
+ list: "Program"
+ },
+ weekLabel: "v.",
+ allDayText: "Heldag",
+ eventLimitText: "till",
+ noEventsMessage: "Inga händelser att visa"
+ };
+
+ var _m58 = {
+ code: "th",
+ buttonText: {
+ prev: "ย้อน",
+ next: "ถัดไป",
+ today: "วันนี้",
+ month: "เดือน",
+ week: "สัปดาห์",
+ day: "วัน",
+ list: "แผนงาน"
+ },
+ allDayText: "ตลอดวัน",
+ eventLimitText: "เพิ่มเติม",
+ noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
+ };
+
+ var _m59 = {
+ code: "tr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "geri",
+ next: "ileri",
+ today: "bugün",
+ month: "Ay",
+ week: "Hafta",
+ day: "Gün",
+ list: "Ajanda"
+ },
+ weekLabel: "Hf",
+ allDayText: "Tüm gün",
+ eventLimitText: "daha fazla",
+ noEventsMessage: "Gösterilecek etkinlik yok"
+ };
+
+ var _m60 = {
+ code: "uk",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Попередній",
+ next: "далі",
+ today: "Сьогодні",
+ month: "Місяць",
+ week: "Тиждень",
+ day: "День",
+ list: "Порядок денний"
+ },
+ weekLabel: "Тиж",
+ allDayText: "Увесь день",
+ eventLimitText: function (n) {
+ return "+ще " + n + "...";
+ },
+ noEventsMessage: "Немає подій для відображення"
+ };
+
+ var _m61 = {
+ code: "vi",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Trước",
+ next: "Tiếp",
+ today: "Hôm nay",
+ month: "Tháng",
+ week: "Tuần",
+ day: "Ngày",
+ list: "Lịch biểu"
+ },
+ weekLabel: "Tu",
+ allDayText: "Cả ngày",
+ eventLimitText: function (n) {
+ return "+ thêm " + n;
+ },
+ noEventsMessage: "Không có sự kiện để hiển thị"
+ };
+
+ var _m62 = {
+ code: "zh-cn",
+ week: {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ month: "月",
+ week: "周",
+ day: "日",
+ list: "日程"
+ },
+ weekLabel: "周",
+ allDayText: "全天",
+ eventLimitText: function (n) {
+ return "另外 " + n + " 个";
+ },
+ noEventsMessage: "没有事件显示"
+ };
+
+ var _m63 = {
+ code: "zh-tw",
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ month: "月",
+ week: "週",
+ day: "天",
+ list: "活動列表"
+ },
+ weekLabel: "周",
+ allDayText: "整天",
+ eventLimitText: '顯示更多',
+ noEventsMessage: "没有任何活動"
+ };
+
+ var _rollupPluginMultiEntry_entryPoint = [
+ _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7, _m8, _m9, _m10, _m11, _m12, _m13, _m14, _m15, _m16, _m17, _m18, _m19, _m20, _m21, _m22, _m23, _m24, _m25, _m26, _m27, _m28, _m29, _m30, _m31, _m32, _m33, _m34, _m35, _m36, _m37, _m38, _m39, _m40, _m41, _m42, _m43, _m44, _m45, _m46, _m47, _m48, _m49, _m50, _m51, _m52, _m53, _m54, _m55, _m56, _m57, _m58, _m59, _m60, _m61, _m62, _m63
+ ];
+
+ return _rollupPluginMultiEntry_entryPoint;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales-all.min.js b/agenda/vendor/js/packages/core/locales-all.min.js
new file mode 100644
index 0000000..810d6de
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales-all.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).FullCalendarLocalesAll=t()}(this,function(){"use strict";return[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo
el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun
osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo
o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari
penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan
daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il
giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë
ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",buttonText:{prev:"ย้อน",next:"ถัดไป",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]});
\ No newline at end of file
diff --git a/agenda/vendor/js/packages/core/locales/af.js b/agenda/vendor/js/packages/core/locales/af.js
new file mode 100644
index 0000000..ee9f9f7
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/af.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory()));
+}(this, function () { 'use strict';
+
+ var af = {
+ code: "af",
+ week: {
+ dow: 1,
+ doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ },
+ buttonText: {
+ prev: "Vorige",
+ next: "Volgende",
+ today: "Vandag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayHtml: "Heeldag",
+ eventLimitText: "Addisionele",
+ noEventsMessage: "Daar is geen gebeurtenisse nie"
+ };
+
+ return af;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-dz.js b/agenda/vendor/js/packages/core/locales/ar-dz.js
new file mode 100644
index 0000000..201eb17
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-dz.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory()));
+}(this, function () { 'use strict';
+
+ var arDz = {
+ code: "ar-dz",
+ week: {
+ dow: 0,
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arDz;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-kw.js b/agenda/vendor/js/packages/core/locales/ar-kw.js
new file mode 100644
index 0000000..94c6900
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-kw.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory()));
+}(this, function () { 'use strict';
+
+ var arKw = {
+ code: "ar-kw",
+ week: {
+ dow: 0,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arKw;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-ly.js b/agenda/vendor/js/packages/core/locales/ar-ly.js
new file mode 100644
index 0000000..e1c8aeb
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-ly.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory()));
+}(this, function () { 'use strict';
+
+ var arLy = {
+ code: "ar-ly",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arLy;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-ma.js b/agenda/vendor/js/packages/core/locales/ar-ma.js
new file mode 100644
index 0000000..00cc7c6
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-ma.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory()));
+}(this, function () { 'use strict';
+
+ var arMa = {
+ code: "ar-ma",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arMa;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-sa.js b/agenda/vendor/js/packages/core/locales/ar-sa.js
new file mode 100644
index 0000000..0361f6d
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-sa.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory()));
+}(this, function () { 'use strict';
+
+ var arSa = {
+ code: "ar-sa",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arSa;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar-tn.js b/agenda/vendor/js/packages/core/locales/ar-tn.js
new file mode 100644
index 0000000..57a07f8
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar-tn.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory()));
+}(this, function () { 'use strict';
+
+ var arTn = {
+ code: "ar-tn",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return arTn;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ar.js b/agenda/vendor/js/packages/core/locales/ar.js
new file mode 100644
index 0000000..f789afd
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ar.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory()));
+}(this, function () { 'use strict';
+
+ var ar = {
+ code: "ar",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "السابق",
+ next: "التالي",
+ today: "اليوم",
+ month: "شهر",
+ week: "أسبوع",
+ day: "يوم",
+ list: "أجندة"
+ },
+ weekLabel: "أسبوع",
+ allDayText: "اليوم كله",
+ eventLimitText: "أخرى",
+ noEventsMessage: "أي أحداث لعرض"
+ };
+
+ return ar;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/bg.js b/agenda/vendor/js/packages/core/locales/bg.js
new file mode 100644
index 0000000..e7343a6
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/bg.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory()));
+}(this, function () { 'use strict';
+
+ var bg = {
+ code: "bg",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "назад",
+ next: "напред",
+ today: "днес",
+ month: "Месец",
+ week: "Седмица",
+ day: "Ден",
+ list: "График"
+ },
+ allDayText: "Цял ден",
+ eventLimitText: function (n) {
+ return "+още " + n;
+ },
+ noEventsMessage: "Няма събития за показване"
+ };
+
+ return bg;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/bs.js b/agenda/vendor/js/packages/core/locales/bs.js
new file mode 100644
index 0000000..d96b8ad
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/bs.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory()));
+}(this, function () { 'use strict';
+
+ var bs = {
+ code: "bs",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prošli",
+ next: "Sljedeći",
+ today: "Danas",
+ month: "Mjesec",
+ week: "Sedmica",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekLabel: "Sed",
+ allDayText: "Cijeli dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nema događaja za prikazivanje"
+ };
+
+ return bs;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ca.js b/agenda/vendor/js/packages/core/locales/ca.js
new file mode 100644
index 0000000..d2d3e2a
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ca.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory()));
+}(this, function () { 'use strict';
+
+ var ca = {
+ code: "ca",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Següent",
+ today: "Avui",
+ month: "Mes",
+ week: "Setmana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekLabel: "Set",
+ allDayText: "Tot el dia",
+ eventLimitText: "més",
+ noEventsMessage: "No hi ha esdeveniments per mostrar"
+ };
+
+ return ca;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/cs.js b/agenda/vendor/js/packages/core/locales/cs.js
new file mode 100644
index 0000000..2624e36
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/cs.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory()));
+}(this, function () { 'use strict';
+
+ var cs = {
+ code: "cs",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Dříve",
+ next: "Později",
+ today: "Nyní",
+ month: "Měsíc",
+ week: "Týden",
+ day: "Den",
+ list: "Agenda"
+ },
+ weekLabel: "Týd",
+ allDayText: "Celý den",
+ eventLimitText: function (n) {
+ return "+další: " + n;
+ },
+ noEventsMessage: "Žádné akce k zobrazení"
+ };
+
+ return cs;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/da.js b/agenda/vendor/js/packages/core/locales/da.js
new file mode 100644
index 0000000..73d1559
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/da.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory()));
+}(this, function () { 'use strict';
+
+ var da = {
+ code: "da",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Næste",
+ today: "I dag",
+ month: "Måned",
+ week: "Uge",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uge",
+ allDayText: "Hele dagen",
+ eventLimitText: "flere",
+ noEventsMessage: "Ingen arrangementer at vise"
+ };
+
+ return da;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/de.js b/agenda/vendor/js/packages/core/locales/de.js
new file mode 100644
index 0000000..ab5a815
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/de.js
@@ -0,0 +1,33 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory()));
+}(this, function () { 'use strict';
+
+ var de = {
+ code: "de",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zurück",
+ next: "Vor",
+ today: "Heute",
+ year: "Jahr",
+ month: "Monat",
+ week: "Woche",
+ day: "Tag",
+ list: "Terminübersicht"
+ },
+ weekLabel: "KW",
+ allDayText: "Ganztägig",
+ eventLimitText: function (n) {
+ return "+ weitere " + n;
+ },
+ noEventsMessage: "Keine Ereignisse anzuzeigen"
+ };
+
+ return de;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/el.js b/agenda/vendor/js/packages/core/locales/el.js
new file mode 100644
index 0000000..9f59e36
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/el.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory()));
+}(this, function () { 'use strict';
+
+ var el = {
+ code: "el",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Προηγούμενος",
+ next: "Επόμενος",
+ today: "Σήμερα",
+ month: "Μήνας",
+ week: "Εβδομάδα",
+ day: "Ημέρα",
+ list: "Ατζέντα"
+ },
+ weekLabel: "Εβδ",
+ allDayText: "Ολοήμερο",
+ eventLimitText: "περισσότερα",
+ noEventsMessage: "Δεν υπάρχουν γεγονότα για να εμφανιστεί"
+ };
+
+ return el;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/en-au.js b/agenda/vendor/js/packages/core/locales/en-au.js
new file mode 100644
index 0000000..be10bfb
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/en-au.js
@@ -0,0 +1,17 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory()));
+}(this, function () { 'use strict';
+
+ var enAu = {
+ code: "en-au",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ return enAu;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/en-gb.js b/agenda/vendor/js/packages/core/locales/en-gb.js
new file mode 100644
index 0000000..8a4a84e
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/en-gb.js
@@ -0,0 +1,17 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory()));
+}(this, function () { 'use strict';
+
+ var enGb = {
+ code: "en-gb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ return enGb;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/en-nz.js b/agenda/vendor/js/packages/core/locales/en-nz.js
new file mode 100644
index 0000000..df56c14
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/en-nz.js
@@ -0,0 +1,17 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory()));
+}(this, function () { 'use strict';
+
+ var enNz = {
+ code: "en-nz",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ return enNz;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/es-us.js b/agenda/vendor/js/packages/core/locales/es-us.js
new file mode 100644
index 0000000..1efa89a
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/es-us.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory()));
+}(this, function () { 'use strict';
+
+ var esUs = {
+ code: "es",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ return esUs;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/es.js b/agenda/vendor/js/packages/core/locales/es.js
new file mode 100644
index 0000000..bfd9af4
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/es.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory()));
+}(this, function () { 'use strict';
+
+ var es = {
+ code: "es",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Sig",
+ today: "Hoy",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ return es;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/et.js b/agenda/vendor/js/packages/core/locales/et.js
new file mode 100644
index 0000000..c44fcae
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/et.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory()));
+}(this, function () { 'use strict';
+
+ var et = {
+ code: "et",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Eelnev",
+ next: "Järgnev",
+ today: "Täna",
+ month: "Kuu",
+ week: "Nädal",
+ day: "Päev",
+ list: "Päevakord"
+ },
+ weekLabel: "näd",
+ allDayText: "Kogu päev",
+ eventLimitText: function (n) {
+ return "+ veel " + n;
+ },
+ noEventsMessage: "Kuvamiseks puuduvad sündmused"
+ };
+
+ return et;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/eu.js b/agenda/vendor/js/packages/core/locales/eu.js
new file mode 100644
index 0000000..91903aa
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/eu.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory()));
+}(this, function () { 'use strict';
+
+ var eu = {
+ code: "eu",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Aur",
+ next: "Hur",
+ today: "Gaur",
+ month: "Hilabetea",
+ week: "Astea",
+ day: "Eguna",
+ list: "Agenda"
+ },
+ weekLabel: "As",
+ allDayHtml: "Egun
osoa",
+ eventLimitText: "gehiago",
+ noEventsMessage: "Ez dago ekitaldirik erakusteko"
+ };
+
+ return eu;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/fa.js b/agenda/vendor/js/packages/core/locales/fa.js
new file mode 100644
index 0000000..031fc7b
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/fa.js
@@ -0,0 +1,33 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory()));
+}(this, function () { 'use strict';
+
+ var fa = {
+ code: "fa",
+ week: {
+ dow: 6,
+ doy: 12 // The week that contains Jan 1st is the first week of the year.
+ },
+ dir: 'rtl',
+ buttonText: {
+ prev: "قبلی",
+ next: "بعدی",
+ today: "امروز",
+ month: "ماه",
+ week: "هفته",
+ day: "روز",
+ list: "برنامه"
+ },
+ weekLabel: "هف",
+ allDayText: "تمام روز",
+ eventLimitText: function (n) {
+ return "بیش از " + n;
+ },
+ noEventsMessage: "هیچ رویدادی به نمایش"
+ };
+
+ return fa;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/fi.js b/agenda/vendor/js/packages/core/locales/fi.js
new file mode 100644
index 0000000..3912845
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/fi.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory()));
+}(this, function () { 'use strict';
+
+ var fi = {
+ code: "fi",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Edellinen",
+ next: "Seuraava",
+ today: "Tänään",
+ month: "Kuukausi",
+ week: "Viikko",
+ day: "Päivä",
+ list: "Tapahtumat"
+ },
+ weekLabel: "Vk",
+ allDayText: "Koko päivä",
+ eventLimitText: "lisää",
+ noEventsMessage: "Ei näytettäviä tapahtumia"
+ };
+
+ return fi;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/fr-ca.js b/agenda/vendor/js/packages/core/locales/fr-ca.js
new file mode 100644
index 0000000..d554c14
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/fr-ca.js
@@ -0,0 +1,27 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory()));
+}(this, function () { 'use strict';
+
+ var frCa = {
+ code: "fr",
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return frCa;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/fr-ch.js b/agenda/vendor/js/packages/core/locales/fr-ch.js
new file mode 100644
index 0000000..358b8bf
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/fr-ch.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory()));
+}(this, function () { 'use strict';
+
+ var frCh = {
+ code: "fr-ch",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Courant",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return frCh;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/fr.js b/agenda/vendor/js/packages/core/locales/fr.js
new file mode 100644
index 0000000..b679cef
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/fr.js
@@ -0,0 +1,31 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory()));
+}(this, function () { 'use strict';
+
+ var fr = {
+ code: "fr",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Précédent",
+ next: "Suivant",
+ today: "Aujourd'hui",
+ year: "Année",
+ month: "Mois",
+ week: "Semaine",
+ day: "Jour",
+ list: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la
journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return fr;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/gl.js b/agenda/vendor/js/packages/core/locales/gl.js
new file mode 100644
index 0000000..721a6a8
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/gl.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory()));
+}(this, function () { 'use strict';
+
+ var gl = {
+ code: "gl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Ant",
+ next: "Seg",
+ today: "Hoxe",
+ month: "Mes",
+ week: "Semana",
+ day: "Día",
+ list: "Axenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Todo
o día",
+ eventLimitText: "máis",
+ noEventsMessage: "Non hai eventos para amosar"
+ };
+
+ return gl;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/he.js b/agenda/vendor/js/packages/core/locales/he.js
new file mode 100644
index 0000000..3521d9e
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/he.js
@@ -0,0 +1,27 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory()));
+}(this, function () { 'use strict';
+
+ var he = {
+ code: "he",
+ dir: 'rtl',
+ buttonText: {
+ prev: "הקודם",
+ next: "הבא",
+ today: "היום",
+ month: "חודש",
+ week: "שבוע",
+ day: "יום",
+ list: "סדר יום"
+ },
+ allDayText: "כל היום",
+ eventLimitText: "אחר",
+ noEventsMessage: "אין אירועים להצגה",
+ weekLabel: "שבוע"
+ };
+
+ return he;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/hi.js b/agenda/vendor/js/packages/core/locales/hi.js
new file mode 100644
index 0000000..15348e6
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/hi.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory()));
+}(this, function () { 'use strict';
+
+ var hi = {
+ code: "hi",
+ week: {
+ dow: 0,
+ doy: 6 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "पिछला",
+ next: "अगला",
+ today: "आज",
+ month: "महीना",
+ week: "सप्ताह",
+ day: "दिन",
+ list: "कार्यसूची"
+ },
+ weekLabel: "हफ्ता",
+ allDayText: "सभी दिन",
+ eventLimitText: function (n) {
+ return "+अधिक " + n;
+ },
+ noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
+ };
+
+ return hi;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/hr.js b/agenda/vendor/js/packages/core/locales/hr.js
new file mode 100644
index 0000000..295b485
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/hr.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory()));
+}(this, function () { 'use strict';
+
+ var hr = {
+ code: "hr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prijašnji",
+ next: "Sljedeći",
+ today: "Danas",
+ month: "Mjesec",
+ week: "Tjedan",
+ day: "Dan",
+ list: "Raspored"
+ },
+ weekLabel: "Tje",
+ allDayText: "Cijeli dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nema događaja za prikaz"
+ };
+
+ return hr;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/hu.js b/agenda/vendor/js/packages/core/locales/hu.js
new file mode 100644
index 0000000..2f0fe8a
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/hu.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory()));
+}(this, function () { 'use strict';
+
+ var hu = {
+ code: "hu",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "vissza",
+ next: "előre",
+ today: "ma",
+ month: "Hónap",
+ week: "Hét",
+ day: "Nap",
+ list: "Napló"
+ },
+ weekLabel: "Hét",
+ allDayText: "Egész nap",
+ eventLimitText: "további",
+ noEventsMessage: "Nincs megjeleníthető esemény"
+ };
+
+ return hu;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/id.js b/agenda/vendor/js/packages/core/locales/id.js
new file mode 100644
index 0000000..b742e80
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/id.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory()));
+}(this, function () { 'use strict';
+
+ var id = {
+ code: "id",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "mundur",
+ next: "maju",
+ today: "hari ini",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekLabel: "Mg",
+ allDayHtml: "Sehari
penuh",
+ eventLimitText: "lebih",
+ noEventsMessage: "Tidak ada acara untuk ditampilkan"
+ };
+
+ return id;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/is.js b/agenda/vendor/js/packages/core/locales/is.js
new file mode 100644
index 0000000..dd569bc
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/is.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory()));
+}(this, function () { 'use strict';
+
+ var is = {
+ code: "is",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Fyrri",
+ next: "Næsti",
+ today: "Í dag",
+ month: "Mánuður",
+ week: "Vika",
+ day: "Dagur",
+ list: "Dagskrá"
+ },
+ weekLabel: "Vika",
+ allDayHtml: "Allan
daginn",
+ eventLimitText: "meira",
+ noEventsMessage: "Engir viðburðir til að sýna"
+ };
+
+ return is;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/it.js b/agenda/vendor/js/packages/core/locales/it.js
new file mode 100644
index 0000000..39a2829
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/it.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory()));
+}(this, function () { 'use strict';
+
+ var it = {
+ code: "it",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prec",
+ next: "Succ",
+ today: "Oggi",
+ month: "Mese",
+ week: "Settimana",
+ day: "Giorno",
+ list: "Agenda"
+ },
+ weekLabel: "Sm",
+ allDayHtml: "Tutto il
giorno",
+ eventLimitText: function (n) {
+ return "+altri " + n;
+ },
+ noEventsMessage: "Non ci sono eventi da visualizzare"
+ };
+
+ return it;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ja.js b/agenda/vendor/js/packages/core/locales/ja.js
new file mode 100644
index 0000000..eb4245b
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ja.js
@@ -0,0 +1,28 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory()));
+}(this, function () { 'use strict';
+
+ var ja = {
+ code: "ja",
+ buttonText: {
+ prev: "前",
+ next: "次",
+ today: "今日",
+ month: "月",
+ week: "週",
+ day: "日",
+ list: "予定リスト"
+ },
+ weekLabel: "週",
+ allDayText: "終日",
+ eventLimitText: function (n) {
+ return "他 " + n + " 件";
+ },
+ noEventsMessage: "表示する予定はありません"
+ };
+
+ return ja;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ka.js b/agenda/vendor/js/packages/core/locales/ka.js
new file mode 100644
index 0000000..b971c03
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ka.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory()));
+}(this, function () { 'use strict';
+
+ var ka = {
+ code: "ka",
+ week: {
+ dow: 1,
+ doy: 7
+ },
+ buttonText: {
+ prev: "წინა",
+ next: "შემდეგი",
+ today: "დღეს",
+ month: "თვე",
+ week: "კვირა",
+ day: "დღე",
+ list: "დღის წესრიგი"
+ },
+ weekLabel: "კვ",
+ allDayText: "მთელი დღე",
+ eventLimitText: function (n) {
+ return "+ კიდევ " + n;
+ },
+ noEventsMessage: "ღონისძიებები არ არის"
+ };
+
+ return ka;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/kk.js b/agenda/vendor/js/packages/core/locales/kk.js
new file mode 100644
index 0000000..5b19b99
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/kk.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory()));
+}(this, function () { 'use strict';
+
+ var kk = {
+ code: "kk",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Алдыңғы",
+ next: "Келесі",
+ today: "Бүгін",
+ month: "Ай",
+ week: "Апта",
+ day: "Күн",
+ list: "Күн тәртібі"
+ },
+ weekLabel: "Не",
+ allDayText: "Күні бойы",
+ eventLimitText: function (n) {
+ return "+ тағы " + n;
+ },
+ noEventsMessage: "Көрсету үшін оқиғалар жоқ"
+ };
+
+ return kk;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ko.js b/agenda/vendor/js/packages/core/locales/ko.js
new file mode 100644
index 0000000..ffe985d
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ko.js
@@ -0,0 +1,26 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory()));
+}(this, function () { 'use strict';
+
+ var ko = {
+ code: "ko",
+ buttonText: {
+ prev: "이전달",
+ next: "다음달",
+ today: "오늘",
+ month: "월",
+ week: "주",
+ day: "일",
+ list: "일정목록"
+ },
+ weekLabel: "주",
+ allDayText: "종일",
+ eventLimitText: "개",
+ noEventsMessage: "일정이 없습니다"
+ };
+
+ return ko;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/lb.js b/agenda/vendor/js/packages/core/locales/lb.js
new file mode 100644
index 0000000..b9b17e3
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/lb.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory()));
+}(this, function () { 'use strict';
+
+ var lb = {
+ code: "lb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Zréck",
+ next: "Weider",
+ today: "Haut",
+ month: "Mount",
+ week: "Woch",
+ day: "Dag",
+ list: "Terminiwwersiicht"
+ },
+ weekLabel: "W",
+ allDayText: "Ganzen Dag",
+ eventLimitText: "méi",
+ noEventsMessage: "Nee Evenementer ze affichéieren"
+ };
+
+ return lb;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/lt.js b/agenda/vendor/js/packages/core/locales/lt.js
new file mode 100644
index 0000000..ec641b7
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/lt.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory()));
+}(this, function () { 'use strict';
+
+ var lt = {
+ code: "lt",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Atgal",
+ next: "Pirmyn",
+ today: "Šiandien",
+ month: "Mėnuo",
+ week: "Savaitė",
+ day: "Diena",
+ list: "Darbotvarkė"
+ },
+ weekLabel: "SAV",
+ allDayText: "Visą dieną",
+ eventLimitText: "daugiau",
+ noEventsMessage: "Nėra įvykių rodyti"
+ };
+
+ return lt;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/lv.js b/agenda/vendor/js/packages/core/locales/lv.js
new file mode 100644
index 0000000..5453630
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/lv.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory()));
+}(this, function () { 'use strict';
+
+ var lv = {
+ code: "lv",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Iepr.",
+ next: "Nāk.",
+ today: "Šodien",
+ month: "Mēnesis",
+ week: "Nedēļa",
+ day: "Diena",
+ list: "Dienas kārtība"
+ },
+ weekLabel: "Ned.",
+ allDayText: "Visu dienu",
+ eventLimitText: function (n) {
+ return "+vēl " + n;
+ },
+ noEventsMessage: "Nav notikumu"
+ };
+
+ return lv;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/mk.js b/agenda/vendor/js/packages/core/locales/mk.js
new file mode 100644
index 0000000..6729fa6
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/mk.js
@@ -0,0 +1,28 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory()));
+}(this, function () { 'use strict';
+
+ var mk = {
+ code: "mk",
+ buttonText: {
+ prev: "претходно",
+ next: "следно",
+ today: "Денес",
+ month: "Месец",
+ week: "Недела",
+ day: "Ден",
+ list: "График"
+ },
+ weekLabel: "Сед",
+ allDayText: "Цел ден",
+ eventLimitText: function (n) {
+ return "+повеќе " + n;
+ },
+ noEventsMessage: "Нема настани за прикажување"
+ };
+
+ return mk;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ms.js b/agenda/vendor/js/packages/core/locales/ms.js
new file mode 100644
index 0000000..7205ecc
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ms.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory()));
+}(this, function () { 'use strict';
+
+ var ms = {
+ code: "ms",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Sebelum",
+ next: "Selepas",
+ today: "hari ini",
+ month: "Bulan",
+ week: "Minggu",
+ day: "Hari",
+ list: "Agenda"
+ },
+ weekLabel: "Mg",
+ allDayText: "Sepanjang hari",
+ eventLimitText: function (n) {
+ return "masih ada " + n + " acara";
+ },
+ noEventsMessage: "Tiada peristiwa untuk dipaparkan"
+ };
+
+ return ms;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/nb.js b/agenda/vendor/js/packages/core/locales/nb.js
new file mode 100644
index 0000000..6464461
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/nb.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nb = factory()));
+}(this, function () { 'use strict';
+
+ var nb = {
+ code: "nb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Forrige",
+ next: "Neste",
+ today: "I dag",
+ month: "Måned",
+ week: "Uke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uke",
+ allDayText: "Hele dagen",
+ eventLimitText: "til",
+ noEventsMessage: "Ingen hendelser å vise"
+ };
+
+ return nb;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/nl.js b/agenda/vendor/js/packages/core/locales/nl.js
new file mode 100644
index 0000000..c91b5e5
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/nl.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nl = factory()));
+}(this, function () { 'use strict';
+
+ var nl = {
+ code: "nl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Voorgaand",
+ next: "Volgende",
+ today: "Vandaag",
+ year: "Jaar",
+ month: "Maand",
+ week: "Week",
+ day: "Dag",
+ list: "Agenda"
+ },
+ allDayText: "Hele dag",
+ eventLimitText: "extra",
+ noEventsMessage: "Geen evenementen om te laten zien"
+ };
+
+ return nl;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/nn.js b/agenda/vendor/js/packages/core/locales/nn.js
new file mode 100644
index 0000000..a5cdd16
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/nn.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nn = factory()));
+}(this, function () { 'use strict';
+
+ var nn = {
+ code: "nn",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Førre",
+ next: "Neste",
+ today: "I dag",
+ month: "Månad",
+ week: "Veke",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Veke",
+ allDayText: "Heile dagen",
+ eventLimitText: "til",
+ noEventsMessage: "Ingen hendelser å vise"
+ };
+
+ return nn;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/pl.js b/agenda/vendor/js/packages/core/locales/pl.js
new file mode 100644
index 0000000..0a22e69
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/pl.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pl = factory()));
+}(this, function () { 'use strict';
+
+ var pl = {
+ code: "pl",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Poprzedni",
+ next: "Następny",
+ today: "Dziś",
+ month: "Miesiąc",
+ week: "Tydzień",
+ day: "Dzień",
+ list: "Plan dnia"
+ },
+ weekLabel: "Tydz",
+ allDayText: "Cały dzień",
+ eventLimitText: "więcej",
+ noEventsMessage: "Brak wydarzeń do wyświetlenia"
+ };
+
+ return pl;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/pt-br.js b/agenda/vendor/js/packages/core/locales/pt-br.js
new file mode 100644
index 0000000..0133cd6
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/pt-br.js
@@ -0,0 +1,28 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['pt-br'] = factory()));
+}(this, function () { 'use strict';
+
+ var ptBr = {
+ code: "pt-br",
+ buttonText: {
+ prev: "Anterior",
+ next: "Próximo",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Compromissos"
+ },
+ weekLabel: "Sm",
+ allDayText: "dia inteiro",
+ eventLimitText: function (n) {
+ return "mais +" + n;
+ },
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ return ptBr;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/pt.js b/agenda/vendor/js/packages/core/locales/pt.js
new file mode 100644
index 0000000..5c54d8d
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/pt.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pt = factory()));
+}(this, function () { 'use strict';
+
+ var pt = {
+ code: "pt",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Anterior",
+ next: "Seguinte",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Agenda"
+ },
+ weekLabel: "Sem",
+ allDayText: "Todo o dia",
+ eventLimitText: "mais",
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ return pt;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ro.js b/agenda/vendor/js/packages/core/locales/ro.js
new file mode 100644
index 0000000..e8992f2
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ro.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ro = factory()));
+}(this, function () { 'use strict';
+
+ var ro = {
+ code: "ro",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "precedentă",
+ next: "următoare",
+ today: "Azi",
+ month: "Lună",
+ week: "Săptămână",
+ day: "Zi",
+ list: "Agendă"
+ },
+ weekLabel: "Săpt",
+ allDayText: "Toată ziua",
+ eventLimitText: function (n) {
+ return "+alte " + n;
+ },
+ noEventsMessage: "Nu există evenimente de afișat"
+ };
+
+ return ro;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/ru.js b/agenda/vendor/js/packages/core/locales/ru.js
new file mode 100644
index 0000000..77e0308
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/ru.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ru = factory()));
+}(this, function () { 'use strict';
+
+ var ru = {
+ code: "ru",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Пред",
+ next: "След",
+ today: "Сегодня",
+ month: "Месяц",
+ week: "Неделя",
+ day: "День",
+ list: "Повестка дня"
+ },
+ weekLabel: "Нед",
+ allDayText: "Весь день",
+ eventLimitText: function (n) {
+ return "+ ещё " + n;
+ },
+ noEventsMessage: "Нет событий для отображения"
+ };
+
+ return ru;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sk.js b/agenda/vendor/js/packages/core/locales/sk.js
new file mode 100644
index 0000000..3513a64
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sk.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sk = factory()));
+}(this, function () { 'use strict';
+
+ var sk = {
+ code: "sk",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Predchádzajúci",
+ next: "Nasledujúci",
+ today: "Dnes",
+ month: "Mesiac",
+ week: "Týždeň",
+ day: "Deň",
+ list: "Rozvrh"
+ },
+ weekLabel: "Ty",
+ allDayText: "Celý deň",
+ eventLimitText: function (n) {
+ return "+ďalšie: " + n;
+ },
+ noEventsMessage: "Žiadne akcie na zobrazenie"
+ };
+
+ return sk;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sl.js b/agenda/vendor/js/packages/core/locales/sl.js
new file mode 100644
index 0000000..3233553
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sl.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sl = factory()));
+}(this, function () { 'use strict';
+
+ var sl = {
+ code: "sl",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prejšnji",
+ next: "Naslednji",
+ today: "Trenutni",
+ month: "Mesec",
+ week: "Teden",
+ day: "Dan",
+ list: "Dnevni red"
+ },
+ weekLabel: "Teden",
+ allDayText: "Ves dan",
+ eventLimitText: "več",
+ noEventsMessage: "Ni dogodkov za prikaz"
+ };
+
+ return sl;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sq.js b/agenda/vendor/js/packages/core/locales/sq.js
new file mode 100644
index 0000000..0d43a52
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sq.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sq = factory()));
+}(this, function () { 'use strict';
+
+ var sq = {
+ code: "sq",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "mbrapa",
+ next: "Përpara",
+ today: "sot",
+ month: "Muaj",
+ week: "Javë",
+ day: "Ditë",
+ list: "Listë"
+ },
+ weekLabel: "Ja",
+ allDayHtml: "Gjithë
ditën",
+ eventLimitText: function (n) {
+ return "+më tepër " + n;
+ },
+ noEventsMessage: "Nuk ka evente për të shfaqur"
+ };
+
+ return sq;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sr-cyrl.js b/agenda/vendor/js/packages/core/locales/sr-cyrl.js
new file mode 100644
index 0000000..ba0d0df
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sr-cyrl.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['sr-cyrl'] = factory()));
+}(this, function () { 'use strict';
+
+ var srCyrl = {
+ code: "sr-cyrl",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Претходна",
+ next: "следећи",
+ today: "Данас",
+ month: "Месец",
+ week: "Недеља",
+ day: "Дан",
+ list: "Планер"
+ },
+ weekLabel: "Сед",
+ allDayText: "Цео дан",
+ eventLimitText: function (n) {
+ return "+ још " + n;
+ },
+ noEventsMessage: "Нема догађаја за приказ"
+ };
+
+ return srCyrl;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sr.js b/agenda/vendor/js/packages/core/locales/sr.js
new file mode 100644
index 0000000..23e5c9b
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sr.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sr = factory()));
+}(this, function () { 'use strict';
+
+ var sr = {
+ code: "sr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Prethodna",
+ next: "Sledeći",
+ today: "Danas",
+ month: "Mеsеc",
+ week: "Nеdеlja",
+ day: "Dan",
+ list: "Planеr"
+ },
+ weekLabel: "Sed",
+ allDayText: "Cеo dan",
+ eventLimitText: function (n) {
+ return "+ još " + n;
+ },
+ noEventsMessage: "Nеma događaja za prikaz"
+ };
+
+ return sr;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/sv.js b/agenda/vendor/js/packages/core/locales/sv.js
new file mode 100644
index 0000000..a887060
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/sv.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sv = factory()));
+}(this, function () { 'use strict';
+
+ var sv = {
+ code: "sv",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Förra",
+ next: "Nästa",
+ today: "Idag",
+ month: "Månad",
+ week: "Vecka",
+ day: "Dag",
+ list: "Program"
+ },
+ weekLabel: "v.",
+ allDayText: "Heldag",
+ eventLimitText: "till",
+ noEventsMessage: "Inga händelser att visa"
+ };
+
+ return sv;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/th.js b/agenda/vendor/js/packages/core/locales/th.js
new file mode 100644
index 0000000..caa3fe9
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/th.js
@@ -0,0 +1,25 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.th = factory()));
+}(this, function () { 'use strict';
+
+ var th = {
+ code: "th",
+ buttonText: {
+ prev: "ย้อน",
+ next: "ถัดไป",
+ today: "วันนี้",
+ month: "เดือน",
+ week: "สัปดาห์",
+ day: "วัน",
+ list: "แผนงาน"
+ },
+ allDayText: "ตลอดวัน",
+ eventLimitText: "เพิ่มเติม",
+ noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
+ };
+
+ return th;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/tr.js b/agenda/vendor/js/packages/core/locales/tr.js
new file mode 100644
index 0000000..4845898
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/tr.js
@@ -0,0 +1,30 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.tr = factory()));
+}(this, function () { 'use strict';
+
+ var tr = {
+ code: "tr",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "geri",
+ next: "ileri",
+ today: "bugün",
+ month: "Ay",
+ week: "Hafta",
+ day: "Gün",
+ list: "Ajanda"
+ },
+ weekLabel: "Hf",
+ allDayText: "Tüm gün",
+ eventLimitText: "daha fazla",
+ noEventsMessage: "Gösterilecek etkinlik yok"
+ };
+
+ return tr;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/uk.js b/agenda/vendor/js/packages/core/locales/uk.js
new file mode 100644
index 0000000..de33f25
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/uk.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uk = factory()));
+}(this, function () { 'use strict';
+
+ var uk = {
+ code: "uk",
+ week: {
+ dow: 1,
+ doy: 7 // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: "Попередній",
+ next: "далі",
+ today: "Сьогодні",
+ month: "Місяць",
+ week: "Тиждень",
+ day: "День",
+ list: "Порядок денний"
+ },
+ weekLabel: "Тиж",
+ allDayText: "Увесь день",
+ eventLimitText: function (n) {
+ return "+ще " + n + "...";
+ },
+ noEventsMessage: "Немає подій для відображення"
+ };
+
+ return uk;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/vi.js b/agenda/vendor/js/packages/core/locales/vi.js
new file mode 100644
index 0000000..167ce11
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/vi.js
@@ -0,0 +1,32 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.vi = factory()));
+}(this, function () { 'use strict';
+
+ var vi = {
+ code: "vi",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "Trước",
+ next: "Tiếp",
+ today: "Hôm nay",
+ month: "Tháng",
+ week: "Tuần",
+ day: "Ngày",
+ list: "Lịch biểu"
+ },
+ weekLabel: "Tu",
+ allDayText: "Cả ngày",
+ eventLimitText: function (n) {
+ return "+ thêm " + n;
+ },
+ noEventsMessage: "Không có sự kiện để hiển thị"
+ };
+
+ return vi;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/zh-cn.js b/agenda/vendor/js/packages/core/locales/zh-cn.js
new file mode 100644
index 0000000..4debbb9
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/zh-cn.js
@@ -0,0 +1,33 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-cn'] = factory()));
+}(this, function () { 'use strict';
+
+ var zhCn = {
+ code: "zh-cn",
+ week: {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ month: "月",
+ week: "周",
+ day: "日",
+ list: "日程"
+ },
+ weekLabel: "周",
+ allDayText: "全天",
+ eventLimitText: function (n) {
+ return "另外 " + n + " 个";
+ },
+ noEventsMessage: "没有事件显示"
+ };
+
+ return zhCn;
+
+}));
diff --git a/agenda/vendor/js/packages/core/locales/zh-tw.js b/agenda/vendor/js/packages/core/locales/zh-tw.js
new file mode 100644
index 0000000..bc14dcd
--- /dev/null
+++ b/agenda/vendor/js/packages/core/locales/zh-tw.js
@@ -0,0 +1,26 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-tw'] = factory()));
+}(this, function () { 'use strict';
+
+ var zhTw = {
+ code: "zh-tw",
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ month: "月",
+ week: "週",
+ day: "天",
+ list: "活動列表"
+ },
+ weekLabel: "周",
+ allDayText: "整天",
+ eventLimitText: '顯示更多',
+ noEventsMessage: "没有任何活動"
+ };
+
+ return zhTw;
+
+}));
diff --git a/agenda/vendor/js/packages/core/main.css b/agenda/vendor/js/packages/core/main.css
new file mode 100644
index 0000000..4412a18
--- /dev/null
+++ b/agenda/vendor/js/packages/core/main.css
@@ -0,0 +1,1052 @@
+@charset "UTF-8";
+.fc {
+ direction: ltr;
+ text-align: left;
+}
+
+.fc-rtl {
+ text-align: right;
+}
+
+body .fc {
+ /* extra precedence to overcome jqui */
+ font-size: 1em;
+}
+
+/* Colors
+--------------------------------------------------------------------------------------------------*/
+.fc-highlight {
+ /* when user is selecting cells */
+ background: #bce8f1;
+ opacity: 0.3;
+}
+
+.fc-bgevent {
+ /* default look for background events */
+ background: #8fdf82;
+ opacity: 0.3;
+}
+
+.fc-nonbusiness {
+ /* default look for non-business-hours areas */
+ /* will inherit .fc-bgevent's styles */
+ background: #d7d7d7;
+}
+
+/* Popover
+--------------------------------------------------------------------------------------------------*/
+.fc-popover {
+ position: absolute;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+}
+
+.fc-popover .fc-header {
+ /* TODO: be more consistent with fc-head/fc-body */
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 2px 4px;
+}
+
+.fc-rtl .fc-popover .fc-header {
+ flex-direction: row-reverse;
+}
+
+.fc-popover .fc-header .fc-title {
+ margin: 0 2px;
+}
+
+.fc-popover .fc-header .fc-close {
+ cursor: pointer;
+ opacity: 0.65;
+ font-size: 1.1em;
+}
+
+/* Misc Reusable Components
+--------------------------------------------------------------------------------------------------*/
+.fc-divider {
+ border-style: solid;
+ border-width: 1px;
+}
+
+hr.fc-divider {
+ height: 0;
+ margin: 0;
+ padding: 0 0 2px;
+ /* height is unreliable across browsers, so use padding */
+ border-width: 1px 0;
+}
+
+.fc-bg,
+.fc-bgevent-skeleton,
+.fc-highlight-skeleton,
+.fc-mirror-skeleton {
+ /* these element should always cling to top-left/right corners */
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+
+.fc-bg {
+ bottom: 0;
+ /* strech bg to bottom edge */
+}
+
+.fc-bg table {
+ height: 100%;
+ /* strech bg to bottom edge */
+}
+
+/* Tables
+--------------------------------------------------------------------------------------------------*/
+.fc table {
+ width: 100%;
+ box-sizing: border-box;
+ /* fix scrollbar issue in firefox */
+ table-layout: fixed;
+ border-collapse: collapse;
+ border-spacing: 0;
+ font-size: 1em;
+ /* normalize cross-browser */
+}
+
+.fc th {
+ text-align: center;
+}
+
+.fc th,
+.fc td {
+ border-style: solid;
+ border-width: 1px;
+ padding: 0;
+ vertical-align: top;
+}
+
+.fc td.fc-today {
+ border-style: double;
+ /* overcome neighboring borders */
+}
+
+/* Internal Nav Links
+--------------------------------------------------------------------------------------------------*/
+a[data-goto] {
+ cursor: pointer;
+}
+
+a[data-goto]:hover {
+ text-decoration: underline;
+}
+
+/* Fake Table Rows
+--------------------------------------------------------------------------------------------------*/
+.fc .fc-row {
+ /* extra precedence to overcome themes forcing a 1px border */
+ /* no visible border by default. but make available if need be (scrollbar width compensation) */
+ border-style: solid;
+ border-width: 0;
+}
+
+.fc-row table {
+ /* don't put left/right border on anything within a fake row.
+ the outer tbody will worry about this */
+ border-left: 0 hidden transparent;
+ border-right: 0 hidden transparent;
+ /* no bottom borders on rows */
+ border-bottom: 0 hidden transparent;
+}
+
+.fc-row:first-child table {
+ border-top: 0 hidden transparent;
+ /* no top border on first row */
+}
+
+/* Day Row (used within the header and the DayGrid)
+--------------------------------------------------------------------------------------------------*/
+.fc-row {
+ position: relative;
+}
+
+.fc-row .fc-bg {
+ z-index: 1;
+}
+
+/* highlighting cells & background event skeleton */
+.fc-row .fc-bgevent-skeleton,
+.fc-row .fc-highlight-skeleton {
+ bottom: 0;
+ /* stretch skeleton to bottom of row */
+}
+
+.fc-row .fc-bgevent-skeleton table,
+.fc-row .fc-highlight-skeleton table {
+ height: 100%;
+ /* stretch skeleton to bottom of row */
+}
+
+.fc-row .fc-highlight-skeleton td,
+.fc-row .fc-bgevent-skeleton td {
+ border-color: transparent;
+}
+
+.fc-row .fc-bgevent-skeleton {
+ z-index: 2;
+}
+
+.fc-row .fc-highlight-skeleton {
+ z-index: 3;
+}
+
+/*
+row content (which contains day/week numbers and events) as well as "mirror" (which contains
+temporary rendered events).
+*/
+.fc-row .fc-content-skeleton {
+ position: relative;
+ z-index: 4;
+ padding-bottom: 2px;
+ /* matches the space above the events */
+}
+
+.fc-row .fc-mirror-skeleton {
+ z-index: 5;
+}
+
+.fc .fc-row .fc-content-skeleton table,
+.fc .fc-row .fc-content-skeleton td,
+.fc .fc-row .fc-mirror-skeleton td {
+ /* see-through to the background below */
+ /* extra precedence to prevent theme-provided backgrounds */
+ background: none;
+ /* in case
' + + ' |
' + + ' |
' + + ' |
' + + ' |
=0&&uChoix des couleurs des évènements par catégorie
+
+ Création ou modification d'une catégorie
+ Gérer les droits
+ Affichage de l'agenda
+ Sauvegarder, restaurer un agenda
+ Attention ! supprime tous les évènements de l'agenda
+ Ajouter des évènements à l'agenda actuel depuis un fichier ics
+
'.'Les fichiers doivent être placés dans le dossier site/file/source/agenda/ics en utilisant le gestionnaire de fichiers de Zwii',
+ 'id' => 'config_fichier_ics',
+ 'label' => 'Sélection d\'un fichier ics pour ajouter des évènements'
+ ]); ?>
+ Ajouter un carnet d'adresses
+
'.'Les carnets doivent être placés dans le dossier site/file/source/agenda/adresses en utilisant le gestionnaire de fichiers de Zwii',
+ 'id' => 'config_fichier_csv_txt',
+ 'label' => 'Sélection d\'un fichier csv ou txt pour ajouter un carnet d\'adresses'
+ ]); ?>
+ Créer un évènement
+
'.'
+ 3 fichiers sont générés automatiquement à partir des utilisateurs inscrits et vous pouvez, en configuration, ajouter vos propres fichiers d\'adresses',
+ 'label' => 'Sélection d\'un fichier destinataires'
+ ]); ?>
+ Vous n'avez pas accès à la création d'évènements, connectez-vous.
+
+
+
+
+
+
+