Browse Source

Merge branch 'isverbose' into dev avec la partie Update BDD

cobalt74 7 years ago
parent
commit
32abe76226
8 changed files with 132 additions and 18 deletions
  1. 1 0
      .gitignore
  2. 0 17
      Update-2.0.sql
  3. 105 0
      Update.class.php
  4. 3 1
      common.php
  5. 2 0
      install.php
  6. 1 0
      locale/en.json
  7. 1 0
      locale/fr.json
  8. 19 0
      updates/00001-Update-20140213.sql

+ 1 - 0
.gitignore

@@ -2,3 +2,4 @@
 /constant.php
 /logs/
 /plugins/
+update.json

+ 0 - 17
Update-2.0.sql

@@ -1,17 +0,0 @@
-/* #############
-###  MISE À JOUR Base de données de Leed pour fonctionnement en v2.0
-
-Conseils :
-- Avant d'effectuer la mise à jour, sauvegardez votre BDD et exportez vos flux en OPML.
-- Attention : "leed_" est à remplacer par votre préfix de table.
-- Ce fichier est à supprimer après installation.
-
-Description :
-- Les requêtes suivantes sont a exécuter sur votre Base de données Leed avec phpMyAdmin par exemple
-
-############### */
--- Mise à jour table FOLDER (Obligatoire)
-ALTER TABLE `leed_feed` ADD `isverbose` INT(1) NOT NULL;
-
--- évolution pour les flux RSS défini verbeux qu'il faut ou ne faut pas afficher sur la page d'accueil.
-INSERT INTO `leed_configuration` (`key`,`value`) VALUES ('optionFeedIsVerbose',1);

+ 105 - 0
Update.class.php

@@ -0,0 +1,105 @@
+<?php
+/**
+ @nom: Update
+ @auteur: Maël ILLOUZ (mael.illouz@cobestran.com)
+ @description: Classe de gestion des mises à jour en BDD liées aux améliorations apportées dans Leed
+ @todo : Ajouter la possiblité d'executer des fichiers php de maj.
+ */
+
+class Update{
+    const FOLDER = '/updates';
+
+    /**
+     * Description : Récupération des fichiers déjà passé lors des anciennes mises à jour.
+     */
+    private static function getUpdateFile(){
+        $updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
+        if(!file_exists($updateFile)) {
+            if (!touch($updateFile)) {
+                die ('Impossible d\'écrire dans le répertoire .'.dirname($updateFile).'. Merci d\'ajouter les droits necessaires.');
+            }
+        }
+
+        return json_decode(file_get_contents($updateFile),true);
+    }
+
+    private static function addUpdateFile($addFile){
+        $updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
+        $originFile = Update::getUpdateFile();
+        if(empty($originFile))
+            $originFile = array();
+        $newfile = array_merge($originFile,$addFile);
+        if (is_writable($updateFile)){
+            file_put_contents($updateFile,json_encode($newfile));
+        } else {
+            die ('Impossible d\'écrire dans le fichier .'.$updateFile.'. Merci d\'ajouter les droits necessaires.');
+        }
+    }
+
+
+    /**
+     * Description : Permet de trouver les fichiers qui n'ont pas encore été joués
+     */
+    private static function getNewPatch() {
+        $files = glob(dirname(__FILE__). Update::FOLDER .'/*.sql');
+        if(empty($files))
+            $files = array();
+
+        $jsonFiles = Update::getUpdateFile();
+
+        $alreadyPassed = array();
+        $notPassed = array();
+
+        if ($jsonFiles==''){
+            $jsonFiles[0] = array();
+        }
+        foreach($files as $file){
+            if(in_array(basename($file), $jsonFiles[0])){
+                $alreadyPassed [] =  basename($file);
+            }else{
+                $notPassed [] =  basename($file);
+            }
+        }
+        return $notPassed;
+    }
+
+    /**
+     * Description : Permet l'execution des fichiers sql non joués
+     * @simulation : true pour ne pas faire les actions en bdd
+     */
+    public static function ExecutePatch($simulation=false) {
+        $newFilesForUpdate = Update::getNewPatch();
+
+        //si aucun nouveau fichier de mise à jour à traiter @return : false
+        if(count($newFilesForUpdate)==0) return false;
+        if (!$simulation) {
+            foreach($newFilesForUpdate as $file){
+                // récupération du contenu du sql
+                $sql = file_get_contents(dirname(__FILE__).Update::FOLDER.'/'.$file);
+
+                $conn = new MysqlEntity();
+                //on sépare chaque requête par les ;
+                $sql_array = explode (";",$sql);
+                foreach ($sql_array as $val) {
+                    $val = preg_replace('#([-].*)|(\n)#','',$val);
+                    if ($val != '') {
+                        //remplacement des préfixes de table
+                        $val = str_replace('##MYSQL_PREFIX##',MYSQL_PREFIX,$val);
+                        $conn->customQuery($val);
+                    }
+                }
+                unset($conn);
+            }
+            $_SESSION = array();
+            session_unset();
+            session_destroy();
+        }
+        // quand toutes les requêtes ont été executées, on insert le sql dans le json
+        Update::addUpdateFile(array($newFilesForUpdate));
+
+        return true;
+    }
+
+}
+
+?>

+ 3 - 1
common.php

@@ -21,6 +21,8 @@ require_once('RainTPL.php');
 require_once('i18n.php');
 class_exists('Plugin') or require_once('Plugin.class.php');
 class_exists('MysqlEntity') or require_once('MysqlEntity.class.php');
+class_exists('Update') or require_once('Update.class.php');
+$resultUpdate = Update::ExecutePatch();
 class_exists('Feed') or require_once('Feed.class.php');
 class_exists('Event') or require_once('Event.class.php');
 class_exists('Functions') or require_once('Functions.class.php');
@@ -58,7 +60,7 @@ raintpl::configure("tpl_dir", './templates/'.DEFAULT_THEME.'/' );
 raintpl::configure("cache_dir", "./cache/tmp/" );
 
 i18n_init(LANGUAGE);
-
+if ($resultUpdate) die (_t('LEED_UPDATE_MESSAGE'));
 
 $view = '';
 $tpl->assign('myUser',$myUser);

+ 2 - 0
install.php

@@ -140,6 +140,8 @@ if (isset($_['installButton']) && empty($test[$lib_errors])) { // Pas d'erreur,
 
     require_once('constant.php');
     require_once('MysqlEntity.class.php');
+    class_exists('Update') or require_once('Update.class.php');
+    Update::ExecutePatch(true);
     require_once('Feed.class.php');
     require_once('Event.class.php');
 

+ 1 - 0
locale/en.json

@@ -121,6 +121,7 @@
  "KEEP_LAST_X_EVENTS_FEED":"Keep the last $1 events of a feed",
  "KEEP_LAST_X_EVENTS_FEED_DESC":"NB : To keep a better performance, we suggest you to keep the last 50 events at most. Notice that events marked as favorites will never be deleted.",
  "LAUNCH_SYNCHRONISATION":"Start a manual synchronization",
+ "LEED_UPDATE_MESSAGE":"Leed has been updated. Refresh the page to return to your Leed.",
  "LET_EMPTY_IF_NO_PASS_CHANGE":"Leave this part empty if you don't want to change your password.",
  "LET_SLASH_AT_END":"Leave a '/' at the end of the URL, example : http://mysite.com/leed/",
  "LIBRARIES":"LIBRARIES",

+ 1 - 0
locale/fr.json

@@ -121,6 +121,7 @@
  "KEEP_LAST_X_EVENTS_FEED":"Conserver les $1 derniers événements d’un flux",
  "KEEP_LAST_X_EVENTS_FEED_DESC":"NB : Plus il y aura d’événements à conserver, plus votre base de données sera importante. Nous vous conseillons de garder les 50 derniers événements au maximum pour conserver une performance correcte.<br />Notez que vos événements marqués comme favoris ne seront jamais supprimés.",
  "LAUNCH_SYNCHRONISATION":"Lancer une synchronisation manuelle",
+ "LEED_UPDATE_MESSAGE":"Leed à été mis à jour. Rafraîchir la page pour retourner sur votre Leed.",
  "LET_EMPTY_IF_NO_PASS_CHANGE":"Laissez le champ vide si vous ne souhaitez pas changer le mot de passe.",
  "LET_SLASH_AT_END":"Laissez bien un '/' en fin de chaine. Par exemple : http://monsite.com/leed/",
  "LIBRARIES":"LIBRAIRIES",

+ 19 - 0
updates/00001-Update-20140213.sql

@@ -0,0 +1,19 @@
+--######################################################################################################
+--#####
+--#####     MISE À JOUR Base de données de Leed
+--#####			Date : 13/02/2014
+--#####
+--#####				Préfixe des tables : ##MYSQL_PREFIX## est remplacé automatiquement
+--#####
+--##### 			Feature(s) :
+--#####				- Option pour cacher les flux souhaités sur la page d'accueil
+--#####
+--######################################################################################################
+
+-- Mise à jour table FOLDER (Obligatoire)
+ALTER TABLE `##MYSQL_PREFIX##feed` DROP `isverbose`;
+ALTER TABLE `##MYSQL_PREFIX##feed` ADD `isverbose` INT(1) NOT NULL;
+
+-- évolution pour les flux RSS défini verbeux qu'il faut ou ne faut pas afficher sur la page d'accueil.
+DELETE FROM `##MYSQL_PREFIX##configuration` WHERE `key` = 'optionFeedIsVerbose';
+INSERT INTO `##MYSQL_PREFIX##configuration` (`key`,`value`) VALUES ('optionFeedIsVerbose',1);