X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=mw%2Fenv%2Fmodules%2Fmw_env_data_upgrade.php;h=1d655516122f7e502de976663d1f4af71e20f691;hb=ed558d720ebf6985290c99297f5b1d2c86d1f60a;hp=8a3f0c19266269507b851ecc0b0720025d91f846;hpb=441212b3fdf07852be95c4a59315aa39a7264249;p=mtweb diff --git a/mw/env/modules/mw_env_data_upgrade.php b/mw/env/modules/mw_env_data_upgrade.php index 8a3f0c1..1d65551 100644 --- a/mw/env/modules/mw_env_data_upgrade.php +++ b/mw/env/modules/mw_env_data_upgrade.php @@ -3,30 +3,67 @@ class mw_env_data_upgrade extends mw_env{ var $data_upgrades; + var $UPGRADE_REQUIRED; + + function data_upgrades(){ + return $this->data_upgrades; + } function init_data_upgrades(){ - $data_upgrade = new mw_data_upgrade($this); $impl_dir = ($this->bdd("sgbd") == "xml" ? "xml" : "sql")."/"; $versions_dir = $this->path("mw_dir")."app/data/upgrades/".$impl_dir; - if(!is_dir($versions_dir)){ - return false; + if(is_dir($versions_dir)){ + $data_upgrade = new mw_data_upgrade($this, "mtweb"); + if(!$data_upgrade->load_versions($versions_dir)){ + return "erreur lors de la lecture des versions"; + } + if(!isset($this->data_upgrades)) $this->data_upgrades = array(); + $this->data_upgrades["mtweb"] = $data_upgrade; + + } + if(($plugins = $this->plugins("ASC")) === false){ + return "impossible de lire les upgrades pour les plugins"; } - if(!$data_upgrade->load_versions("mtweb", $versions_dir)){ - return false; + foreach($plugins as $plugin_name => $plugin){ + if( + $plugin["installed"] + && $plugin["enabled"] + ){ + $versions_dir = $this->path("mw_dir")."plugins/".$plugin_name."/app/data/upgrades/".$impl_dir; + if(!is_dir($versions_dir)){ + continue; + } + $data_upgrade = new mw_data_upgrade($this, $plugin_name); + if(!$data_upgrade->load_versions($versions_dir)){ + return "erreur lors de la lecture des versions pour le plugin ".$plugin_name; + } + if(!isset($this->data_upgrades)) $this->data_upgrades = array(); + $this->data_upgrades[$plugin_name] = $data_upgrade; + } } if(!isset($this->data_upgrades)) $this->data_upgrades = array(); - $this->data_upgrades[] = $data_upgrade; return true; } - function data_upgrade_required(){ - if(!isset($this->data_upgrades)) return false; - foreach($this->data_upgrades as $data_upgrade){ - if($data_upgrade->upgrade_required()){ - return true; + function data_upgrade_required($RELOAD = false){ + if(!isset($this->data_upgrades)){ + if(($res = $this->init_data_upgrades()) !== true){ + return $res; } } - return false; + if(!isset($this->data_upgrades)){ + return "impossible de charger les upgrades"; + } + if($RELOAD || !isset($this->UPGRADE_REQUIRED)){ + $this->UPGRADE_REQUIRED = false; + foreach($this->data_upgrades as $data_upgrade){ + if($data_upgrade->upgrade_required()){ + $this->UPGRADE_REQUIRED = true; + break; + } + } + } + return $this->UPGRADE_REQUIRED; } function do_data_upgrade(){ @@ -43,18 +80,20 @@ class mw_data_upgrade{ + var $application_name; var $versions; var $env; - function mw_data_upgrade($env){ + function mw_data_upgrade($env, $application_name){ $this->env = $env; + $this->application_name = $application_name; } function env(){ return isset($this->env) ? $this->env : false; } - function load_versions($application_name, $versions_dir){ + function load_versions($versions_dir){ if($dh = opendir($versions_dir)){ $versions_dir .= $versions_dir && substr($versions_dir, -1) != "/" ? "/" : ""; while(($file = readdir($dh)) !== false){ @@ -62,7 +101,7 @@ substr($file, 0, 1) != "." && !is_dir($versions_dir.$file) && strcmp(substr($file, -4), ".php") == 0 - ) $this->load_version($application_name, $versions_dir, $file); + ) $this->load_version($versions_dir, $file); } closedir($dh); } @@ -70,7 +109,7 @@ return true; } - function load_version($application_name, $versions_dir, $version_file){ + function load_version($versions_dir, $version_file){ if( !$version_file || !file_exists($versions_dir.$version_file) @@ -81,7 +120,7 @@ $class_name = substr($version_file, 0, -4); if(!class_exists($class_name)) require_once $versions_dir.$version_file; if(!class_exists($class_name)) return false; - $version = new $class_name($this->env(), $application_name); + $version = new $class_name($this->env(), $this->application_name); return $this->add_version($version); } @@ -110,7 +149,7 @@ function upgrade_required(){ if(!isset($this->versions)) return false; - foreach($this->versions as $version_number => $version){ + foreach($this->versions as $version){ if($version->upgrade_required()) return true; } return false; @@ -118,9 +157,12 @@ function do_upgrade(){ if(!isset($this->versions)) return true; - foreach($this->versions as $version_number => $version){ + foreach($this->versions as $version){ if($version->upgrade_required() && ($res = $version->do_upgrade()) !== true){ - return $res; + return $res." (dans ".get_class($version).")"; + } + if(!$version->set_data_version()){ + return "impossible de mettre a jour la version des donnees pour ".$this->application_name." ".$version->version(); } } return true; @@ -137,6 +179,10 @@ return false; } + function application_name(){ + return $this->application_name; + } + function mw_data_version($env, $application_name){ $this->env = $env; $this->application_name = $application_name; @@ -148,15 +194,23 @@ function upgrade_required(){ if(!isset($this->application_name)) return false; + if(!$this->version()) return false; $env = $this->env(); $data = $env->data(); - if(!($env_version = $env->version($this->application_name))) return false; if(!($data_version = $data->version($this->application_name))) return true; - return version_compare($data_version, $env_version) < 0; + return version_compare($data_version, $this->version()) < 0; } function do_upgrade(){ return true; } + function set_data_version(){ + if(!isset($this->application_name)) return false; + if(!$this->version()) return false; + $env = $this->env(); + $data = $env->data(); + return $data->set_version($this->application_name, $this->version()); + } + }