From 7a3a53f552b1a8d1e8ea5ecc51e00da20de0b93c Mon Sep 17 00:00:00 2001 From: deltacms Date: Tue, 2 Apr 2024 11:09:16 +0200 Subject: [PATCH] agenda 7.0 avec data_module --- module/agenda/agenda.php | 121 ++++++++++++++++---------- module/agenda/view/config/config.php | 2 +- module/agenda/view/index/index.js.php | 2 +- 3 files changed, 79 insertions(+), 46 deletions(-) diff --git a/module/agenda/agenda.php b/module/agenda/agenda.php index 3765ed0..e4dd912 100644 --- a/module/agenda/agenda.php +++ b/module/agenda/agenda.php @@ -36,7 +36,7 @@ class agenda extends common { 'index' => self::GROUP_VISITOR ]; - const VERSION = '6.0'; + const VERSION = '7.0'; const REALNAME = 'Agenda'; const DELETE = true; const UPDATE = '4.1'; @@ -122,6 +122,32 @@ class agenda extends common { $this->setData(['module', $this->getUrl(0),'config', 'gridColor', 'rgba(146, 52, 101, 1)']); $this->setData(['module', $this->getUrl(0), 'config', 'versionData','6.0']); } + // Mise à jour vers la version 7.0 + if (version_compare($this->getData(['module', $this->getUrl(0), 'config', 'versionData']), '7.0', '<') ) { + // Déplacement des fichiers htaccess une seule fois + if(is_file(self::DATAMODULE.'data/.htaccess')){ + $listDir = scandir(self::DATAMODULE.'data'); + foreach($listDir as $element) { + if($element != "." && $element != "..") { + if(is_dir(self::DATAMODULE.'data/'. $element) && is_file(self::DATAMODULE.'data/.htaccess') ) { + copy( self::DATAMODULE.'data/.htaccess', self::DATAMODULE.'data/'. $element.'/.htaccess' ); + } + } + } + unlink( self::DATAMODULE.'data/.htaccess'); + } + // Modification d'emplacement des dossiers de données des pages agenda dans la langue ciblée + foreach( $this->getData(['page']) as $page => $value){ + if( $value['moduleId'] === 'agenda' ) + if( is_dir( self::DATAMODULE.'data/'.$page)) $this->custom_copy( self::DATAMODULE.'data/'.$page , self::DATA_DIR. self::$i18n.'/data_module/'.$page); + if( is_dir( self::DATAMODULE.'data/'.$page.'_sauve')) $this->custom_copy( self::DATAMODULE.'data/'.$page.'_sauve' , self::DATA_DIR. self::$i18n.'/data_module/'.$page.'_sauve'); + if( is_dir( self::DATAMODULE.'data/'.$page.'_affiche')) $this->custom_copy( self::DATAMODULE.'data/'.$page.'_affiche' , self::DATA_DIR. self::$i18n.'/data_module/'.$page.'_affiche'); + if( is_dir( self::DATAMODULE.'data/'.$page.'_visible')) $this->custom_copy( self::DATAMODULE.'data/'.$page.'_visible' , self::DATA_DIR. self::$i18n.'/data_module/'.$page.'_visible'); + } + // Pour l'instant suppression manuelle de self::DATAMODULE.'data/' après la maj dans chaque langue avec page agenda car une page agenda pouvait avoir le même nom + // dans plusieurs langues et partager les mêmes données. Ce qui ne sera plus le cas. + $this->setData(['module', $this->getUrl(0), 'config', 'versionData','7.0']); + } } /** @@ -157,16 +183,16 @@ class agenda extends common { //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); + $json_sauve = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json'); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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); + $json_restaure = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve/'. $fichier_restaure); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json', $json_restaure); //Sauvegarde dans data_sauve de l'agenda chargé $this->sauve($json_restaure); @@ -262,14 +288,14 @@ class agenda extends common { } else{ // Fichiers sauvegardés - if(is_dir(self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve')) { - $dir=self::DATAMODULE.'data/'.$this->getUrl(0).'_sauve'; + if(is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve')) { + $dir=self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'; $values = scandir($dir); self::$savedFiles=[]; $values[0] = $text['agenda']['config'][0]; unset($values[array_search('..', $values)]); if (count($values) <= 1){ - self::$savedFiles = array(0 => $text['agenda']['config'][1]. self::DATAMODULE.'/data'); + self::$savedFiles = array(0 => $text['agenda']['config'][1]. self::DATA_DIR. self::$i18n.'/data_module'); } else{ //Modifier les clefs (qui sont les valeurs de retour du formulaire avec 'config_restaure') avec clef = valeur @@ -277,7 +303,7 @@ class agenda extends common { } } else { - self::$savedFiles = array(0 => $text['agenda']['config'][2].self::DATAMODULE.$text['agenda']['config'][3]); + self::$savedFiles = array(0 => $text['agenda']['config'][2].self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'.$text['agenda']['config'][3]); } // Fichiers ics if(is_dir(self::DATAFILE.'ics')) { @@ -339,7 +365,7 @@ class agenda extends common { * Liaison entre edition et suppression d'un évènement */ public function deleteEvent() { - $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json'); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json'); $lid = $this->getUrl(2); $sauve = true; $this->delete($lid, $sauve, $json); @@ -352,7 +378,7 @@ class agenda extends common { // Autorisation si groupe autorisé à modifier l'evt $lid $group = $this->getUser('group'); if ($group === false ) $group = 0; - $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json'); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json'); $tableau = json_decode($json, true); if( $group < $tableau[$lid]['groupe_mod'] ) { // Valeurs en sortie @@ -387,7 +413,7 @@ class agenda extends common { //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); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json', $json); $this->sauve($json); // Emission d'un mailing éventuel en récupérant les valeurs dans le $json initial @@ -438,12 +464,12 @@ class agenda extends common { // Lexique include('./module/agenda/lang/'. $this->getData(['config', 'i18n', 'langAdmin']) . '/lex_agenda.php'); //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); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json'); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json', $json); //Valeurs en sortie $this->addOutput([ @@ -616,7 +642,7 @@ class agenda extends common { if ($this->verif_date($date_debut,$date_fin)){ self::$sujet_mailing = $text['agenda']['creation'][0]; //Ajout et enregistrement de l'évènement - $json = file_get_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'/events.json'); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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 @@ -734,7 +760,7 @@ class agenda extends common { include('./module/agenda/lang/'. $this->getData(['config', 'i18n', 'langAdmin']) . '/lex_agenda.php'); //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'); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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']; @@ -858,10 +884,7 @@ class agenda extends common { // Lexique include('./module/agenda/lang/'. $this->getData(['config', 'i18n', 'langAdmin']) . '/lex_agenda.php'); // Mise à jour des données de module - if (null !== $this->getData(['module', $this->getUrl(0), 'config', 'versionData']) - && version_compare($this->getData(['module', $this->getUrl(0), 'config', 'versionData']), '5.7', '<')){ - $this->update(); - } + if (null !== $this->getData(['module', $this->getUrl(0), 'config', 'versionData'])) $this->update(); //Pour récupération des données ajax jquery date ou id $url = $_SERVER['REQUEST_URI']; if (strpos($url,'/da:') !== false){ @@ -903,13 +926,17 @@ class agenda extends common { // Upload des ressources puis création des dossiers de sauvegarde de l'agenda $this->custom_copy('./module/agenda/ressource/data', self::DATA_DIR); $this->custom_copy('./module/agenda/ressource/file', self::FILE_DIR); - if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0)))mkdir(self::DATAMODULE.'data/'.$this->getUrl(0)); - 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).'_affiche')) mkdir(self::DATAMODULE.'data/'.$this->getUrl(0).'_affiche'); - if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0))) mkdir(self::DATAMODULE.'data/'.$this->getUrl(0)); + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0)))mkdir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0)); + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'))mkdir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'); + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_visible')) mkdir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_visible'); + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_affiche')) mkdir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_affiche'); + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0))) mkdir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0)); if(! is_dir(self::DATAFILE.'categories')) mkdir(self::DATAFILE.'categories'); - + // copie des fichiers htaccess + copy( 'module/agenda/ressource/data/agenda/module/data/.htaccess', self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve/.htaccess' ); + copy( 'module/agenda/ressource/data/agenda/module/data/.htaccess', self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_visible/.htaccess' ); + copy( 'module/agenda/ressource/data/agenda/module/data/.htaccess', self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_affiche/.htaccess' ); + copy( 'module/agenda/ressource/data/agenda/module/data/.htaccess', self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/.htaccess' ); $this->addOutput([ 'notification' => $text['agenda']['index'][0], 'redirect' => helper::baseUrl() . $this->getUrl(0).'/config/', @@ -917,14 +944,20 @@ class agenda extends common { ]); } else{ - //le module existe dans le json, détection du changement de nom de la page pour copier les dossiers avec leur nouveau nom - if(! is_dir(self::DATAMODULE.'data/'.$this->getUrl(0))){ + // Page renommée : détection du changement de nom de la page pour copier les dossiers avec leur nouveau nom + if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0))){ $oldname = $this->getData(['module', $this->getUrl(0), 'name']); $newname = $this->getUrl(0); - $this->copyDir( self::DATAMODULE.'data/'.$oldname, self::DATAMODULE.'data/'.$newname); - $this->copyDir( self::DATAMODULE.'data/'.$oldname.'_visible' , self::DATAMODULE.'data/'.$newname.'_visible'); - $this->copyDir( self::DATAMODULE.'data/'.$oldname.'_sauve' , self::DATAMODULE.'data/'.$newname.'_sauve'); - $this->copyDir( self::DATAMODULE.'data/'.$oldname.'_affiche' , self::DATAMODULE.'data/'.$newname.'_affiche'); + $this->copyDir( self::DATA_DIR. self::$i18n.'/data_module/'.$oldname, self::DATA_DIR. self::$i18n.'/data_module/'.$newname); + $this->copyDir( self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_visible' , self::DATA_DIR. self::$i18n.'/data_module/'.$newname.'_visible'); + $this->copyDir( self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_sauve' , self::DATA_DIR. self::$i18n.'/data_module/'.$newname.'_sauve'); + $this->copyDir( self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_affiche' , self::DATA_DIR. self::$i18n.'/data_module/'.$newname.'_affiche'); + // suppression des anciens dossiers + $this->removeDir(self::DATA_DIR. self::$i18n.'/data_module/'.$oldname); + $this->removeDir(self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_visible'); + $this->removeDir(self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_sauve'); + $this->removeDir(self::DATA_DIR. self::$i18n.'/data_module/'.$oldname.'_affiche'); + $this->addOutput([ 'notification' => $text['agenda']['index'][1], 'state' => true @@ -934,13 +967,13 @@ class agenda extends common { } } //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', '[]'); + if( is_file(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json') === false || + ( is_file(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json') === true && filesize(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json')<2)){ + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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'); + $json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json'); $tableau = json_decode($json, true); foreach($tableau as $key=>$value){ if( isset($value['groupe_lire'])){ @@ -958,7 +991,7 @@ class agenda extends common { } } } - file_put_contents(self::DATAMODULE.'data/'.$this->getUrl(0).'_affiche/events.json',$json); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_affiche/events.json',$json); // Affichage de la page agenda $this->addOutput([ @@ -1075,7 +1108,7 @@ class agenda extends common { $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');} + if($json == ''){$json = file_get_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'/events.json');} $tableau = json_decode($json, true); $keynew = count($tableau); @@ -1094,7 +1127,7 @@ class agenda extends common { $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); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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); } @@ -1105,10 +1138,10 @@ class agenda extends common { 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); + file_put_contents(self::DATA_DIR. self::$i18n.'/data_module/'.$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'; + $dir=self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'; $nom_fichier = scandir($dir); //Comptage du nombre de fichiers de sauvegarde auto $nb_sauve_auto = 0; @@ -1120,8 +1153,8 @@ class agenda extends common { } } 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]); + $handle = opendir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve'); + unlink(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0).'_sauve/'.$nom_fichier[$plus_ancien_clef]); closedir($handle); } } diff --git a/module/agenda/view/config/config.php b/module/agenda/view/config/config.php index 010aaf1..e835907 100644 --- a/module/agenda/view/config/config.php +++ b/module/agenda/view/config/config.php @@ -3,7 +3,7 @@ // Lexique include('./module/agenda/lang/'. $this->getData(['config', 'i18n', 'langAdmin']) . '/lex_agenda.php'); -if(! is_dir($module::DATAMODULE.'data/'.$this->getUrl(0))){ $readonly = true;}else{ $readonly = false;} +if(! is_dir(self::DATA_DIR. self::$i18n.'/data_module/'.$this->getUrl(0))){ $readonly = true;}else{ $readonly = false;} echo template::formOpen('configuration'); ?>
diff --git a/module/agenda/view/index/index.js.php b/module/agenda/view/index/index.js.php index 96b16c3..87622aa 100644 --- a/module/agenda/view/index/index.js.php +++ b/module/agenda/view/index/index.js.php @@ -40,7 +40,7 @@ selectable: true, editable: true, //afficher les évènements à partir d'un fichier JSON - events : 'getUrl(0); ?>'+'_affiche/events.json?n='+'', + events : 'getUrl(0); ?>'+'_affiche/events.json?n='+'', //créer un évènement dateClick: function(info) { window.open('getUrl(0); ?>'+ '/da:'+ info.dateStr + 'vue:' + info.view.type + 'deb:' + calendar.formatIso(info.view.currentStart),'_self');