Update.class.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. @nom: Update
  4. @auteur: Maël ILLOUZ (mael.illouz@cobestran.com)
  5. @description: Classe de gestion des mises à jour en BDD liées aux améliorations apportées dans Leed
  6. @todo : Ajouter la possiblité d'executer des fichiers php de maj.
  7. */
  8. class Update{
  9. const FOLDER = '/updates';
  10. /**
  11. * Description : Récupération des fichiers déjà passés lors des anciennes mises à jour.
  12. */
  13. private static function getUpdateFile(){
  14. $updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
  15. if(!file_exists($updateFile)) {
  16. if (!touch($updateFile)) {
  17. die ('Impossible d\'écrire dans le répertoire .'.dirname($updateFile).'. Merci d\'ajouter les droits necessaires.');
  18. }
  19. }
  20. return json_decode(file_get_contents($updateFile),true);
  21. }
  22. private static function addUpdateFile($addFile){
  23. $updateFile = dirname(__FILE__).Update::FOLDER.'/update.json';
  24. $originFile = Update::getUpdateFile();
  25. if(empty($originFile))
  26. $originFile = array();
  27. $newfile = array_merge($originFile,$addFile);
  28. if (is_writable($updateFile)){
  29. file_put_contents($updateFile,json_encode($newfile));
  30. } else {
  31. die ('Impossible d\'écrire dans le fichier .'.$updateFile.'. Merci d\'ajouter les droits nécessaires.');
  32. }
  33. }
  34. /**
  35. * Description : Permet de trouver les fichiers qui n'ont pas encore été joués
  36. */
  37. private static function getNewPatch() {
  38. $files = glob(dirname(__FILE__). Update::FOLDER .'/*.sql');
  39. if(empty($files))
  40. $files = array();
  41. $jsonFiles = Update::getUpdateFile();
  42. $notPassed = array();
  43. if ($jsonFiles=='') $jsonFiles[0] = array();
  44. foreach($files as $file){
  45. $found = false;
  46. foreach($jsonFiles as $jsonfile){
  47. if (isset($jsonfile[0])) {
  48. if(in_array(basename($file), $jsonfile)) $found = true;
  49. }
  50. }
  51. if (!$found) $notPassed [] = basename($file);
  52. }
  53. return $notPassed;
  54. }
  55. /**
  56. * Description : Permet l'execution des fichiers sql non joués
  57. * @simulation : true pour ne pas faire les actions en bdd
  58. */
  59. public static function ExecutePatch($simulation=false) {
  60. $newFilesForUpdate = Update::getNewPatch();
  61. //si aucun nouveau fichier de mise à jour à traiter @return : false
  62. if(count($newFilesForUpdate)==0) return false;
  63. if (!$simulation) {
  64. Functions::purgeRaintplCache();
  65. foreach($newFilesForUpdate as $file){
  66. // récupération du contenu du sql
  67. $sql = file_get_contents(dirname(__FILE__).Update::FOLDER.'/'.$file);
  68. $conn = MysqlConnector::getInstance()->connection;
  69. //on sépare chaque requête par les ;
  70. $sql_array = explode (";",$sql);
  71. foreach ($sql_array as $val) {
  72. $val = preg_replace('#([-].*)|(\n)#','',$val);
  73. if ($val != '') {
  74. //remplacement des préfixes de table
  75. $val = str_replace('##MYSQL_PREFIX##',MYSQL_PREFIX,$val);
  76. $result = $conn->query($val);
  77. $ficlog = dirname(__FILE__).Update::FOLDER.'/'.substr($file,0,strlen($file)-3).'log';
  78. if (false===$result) {
  79. file_put_contents($ficlog, date('d/m/Y H:i:s').' : SQL : '.$val."\n", FILE_APPEND);
  80. file_put_contents($ficlog, date('d/m/Y H:i:s').' : '.$conn->error."\n", FILE_APPEND);
  81. } else {
  82. file_put_contents($ficlog, date('d/m/Y H:i:s').' : SQL : '.$val."\n", FILE_APPEND);
  83. file_put_contents($ficlog, date('d/m/Y H:i:s').' : '.$conn->affected_rows.' rows affected'."\n", FILE_APPEND);
  84. }
  85. }
  86. }
  87. unset($conn);
  88. }
  89. $_SESSION = array();
  90. session_unset();
  91. session_destroy();
  92. }
  93. // quand toutes les requêtes ont été executées, on insert le sql dans le json
  94. Update::addUpdateFile(array($newFilesForUpdate));
  95. return true;
  96. }
  97. }
  98. ?>