X-Git-Url: http://git.dj3c1t.com/index.cgi?a=blobdiff_plain;f=mw%2Fenv%2Fmodules%2Fmw_env_data_upgrade.php;h=ff5e1b0ca2e79f6b16a02c7258a0b87ce21e4af8;hb=HEAD;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..ff5e1b0 100644 --- a/mw/env/modules/mw_env_data_upgrade.php +++ b/mw/env/modules/mw_env_data_upgrade.php @@ -2,34 +2,71 @@ class mw_env_data_upgrade extends mw_env{ - var $data_upgrades; + public $data_upgrades; + public $UPGRADE_REQUIRED; - function init_data_upgrades(){ - $data_upgrade = new mw_data_upgrade($this); + public function data_upgrades(){ + return $this->data_upgrades; + } + + public function load_data_upgrades(){ $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(!$data_upgrade->load_versions("mtweb", $versions_dir)){ - return false; + if(($plugins = $this->plugins("ASC")) === false){ + return "impossible de lire les upgrades pour les plugins"; + } + 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; + public function data_upgrade_required($RELOAD = false){ + if(!isset($this->data_upgrades)){ + if(($res = $this->load_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(){ + public function do_data_upgrade(){ if(!isset($this->data_upgrades)) return false; foreach($this->data_upgrades as $data_upgrade){ if($data_upgrade->upgrade_required() && ($res = $data_upgrade->do_upgrade()) !== true){ @@ -41,20 +78,26 @@ } + // ------------------------------------------------------------------------------------------- + // class mw_data_upgrade + // + class mw_data_upgrade{ - var $versions; - var $env; + public $application_name; + public $versions; + public $env; - function mw_data_upgrade($env){ + public function __construct($env, $application_name){ $this->env = $env; + $this->application_name = $application_name; } - function env(){ + public function env(){ return isset($this->env) ? $this->env : false; } - function load_versions($application_name, $versions_dir){ + public 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 +105,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 +113,7 @@ return true; } - function load_version($application_name, $versions_dir, $version_file){ + public function load_version($versions_dir, $version_file){ if( !$version_file || !file_exists($versions_dir.$version_file) @@ -81,11 +124,11 @@ $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); } - function add_version($version){ + public function add_version($version){ if(!$version->version()) return false; if(!isset($this->versions)) $this->versions = array(); $tmp = array(); @@ -108,19 +151,22 @@ return true; } - function upgrade_required(){ + public 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; } - function do_upgrade(){ + public 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; @@ -128,35 +174,51 @@ } - class mw_data_version{ + // ------------------------------------------------------------------------------------------- + // class mw_data_version + // - var $env; - var $application_name; + abstract class mw_data_version{ - function version(){ - return false; - } + public $env; + public $application_name; - function mw_data_version($env, $application_name){ + public function __construct($env, $application_name){ $this->env = $env; $this->application_name = $application_name; } - function env(){ + public function version(){ + return false; + } + + public function application_name(){ + return $this->application_name; + } + + public function env(){ return isset($this->env) ? $this->env : false; } - function upgrade_required(){ + public 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(){ + public function do_upgrade(){ return true; } + public 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()); + } + }