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(!$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;
+ 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(){
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){
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);
}
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)
$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 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(){
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." (dans ".get_class($version).")";
}
if(!$version->set_data_version()){
- return "impossible de mettre a jour la version des donnees pour ".$version->application_name();
+ return "impossible de mettre a jour la version des donnees pour ".$this->application_name." ".$version->version();
}
}
return true;
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(){
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());