3 class mw_env_data_upgrade extends mw_env{
8 function data_upgrades(){
9 return $this->data_upgrades;
12 function init_data_upgrades(){
13 $impl_dir = ($this->bdd("sgbd") == "xml" ? "xml" : "sql")."/";
14 $versions_dir = $this->path("mw_dir")."app/data/upgrades/".$impl_dir;
15 if(is_dir($versions_dir)){
16 $data_upgrade = new mw_data_upgrade($this, "mtweb");
17 if(!$data_upgrade->load_versions($versions_dir)){
18 return "erreur lors de la lecture des versions";
20 if(!isset($this->data_upgrades)) $this->data_upgrades = array();
21 $this->data_upgrades["mtweb"] = $data_upgrade;
24 if(($plugins = $this->plugins("ASC")) === false){
25 return "impossible de lire les upgrades pour les plugins";
27 foreach($plugins as $plugin_name => $plugin){
32 $versions_dir = $this->path("mw_dir")."plugins/".$plugin_name."/app/data/upgrades/".$impl_dir;
33 if(!is_dir($versions_dir)){
36 $data_upgrade = new mw_data_upgrade($this, $plugin_name);
37 if(!$data_upgrade->load_versions($versions_dir)){
38 return "erreur lors de la lecture des versions pour le plugin ".$plugin_name;
40 if(!isset($this->data_upgrades)) $this->data_upgrades = array();
41 $this->data_upgrades[$plugin_name] = $data_upgrade;
44 if(!isset($this->data_upgrades)) $this->data_upgrades = array();
48 function data_upgrade_required($RELOAD = false){
49 if(!isset($this->data_upgrades)){
50 if(($res = $this->init_data_upgrades()) !== true){
54 if(!isset($this->data_upgrades)){
55 return "impossible de charger les upgrades";
57 if($RELOAD || !isset($this->UPGRADE_REQUIRED)){
58 $this->UPGRADE_REQUIRED = false;
59 foreach($this->data_upgrades as $data_upgrade){
60 if($data_upgrade->upgrade_required()){
61 $this->UPGRADE_REQUIRED = true;
66 return $this->UPGRADE_REQUIRED;
69 function do_data_upgrade(){
70 if(!isset($this->data_upgrades)) return false;
71 foreach($this->data_upgrades as $data_upgrade){
72 if($data_upgrade->upgrade_required() && ($res = $data_upgrade->do_upgrade()) !== true){
81 class mw_data_upgrade{
83 var $application_name;
87 function mw_data_upgrade($env, $application_name){
89 $this->application_name = $application_name;
93 return isset($this->env) ? $this->env : false;
96 function load_versions($versions_dir){
97 if($dh = opendir($versions_dir)){
98 $versions_dir .= $versions_dir && substr($versions_dir, -1) != "/" ? "/" : "";
99 while(($file = readdir($dh)) !== false){
101 substr($file, 0, 1) != "."
102 && !is_dir($versions_dir.$file)
103 && strcmp(substr($file, -4), ".php") == 0
104 ) $this->load_version($versions_dir, $file);
112 function load_version($versions_dir, $version_file){
115 || !file_exists($versions_dir.$version_file)
116 || (substr($version_file, 0, 1) == ".")
117 || is_dir($versions_dir.$version_file)
118 || (substr($version_file, -4) != ".php")
120 $class_name = substr($version_file, 0, -4);
121 if(!class_exists($class_name)) require_once $versions_dir.$version_file;
122 if(!class_exists($class_name)) return false;
123 $version = new $class_name($this->env(), $this->application_name);
124 return $this->add_version($version);
127 function add_version($version){
128 if(!$version->version()) return false;
129 if(!isset($this->versions)) $this->versions = array();
132 foreach($this->versions as $_version){
133 if(version_compare($version->version(), $_version->version()) == 0){
136 elseif(version_compare($version->version(), $_version->version()) < 0){
145 if(!$INSERTED) $tmp[] = $version;
146 $this->versions = $tmp;
150 function upgrade_required(){
151 if(!isset($this->versions)) return false;
152 foreach($this->versions as $version){
153 if($version->upgrade_required()) return true;
158 function do_upgrade(){
159 if(!isset($this->versions)) return true;
160 foreach($this->versions as $version){
161 if($version->upgrade_required() && ($res = $version->do_upgrade()) !== true){
162 return $res." (dans ".get_class($version).")";
164 if(!$version->set_data_version()){
165 return "impossible de mettre a jour la version des donnees pour ".$this->application_name." ".$version->version();
173 class mw_data_version{
176 var $application_name;
182 function application_name(){
183 return $this->application_name;
186 function mw_data_version($env, $application_name){
188 $this->application_name = $application_name;
192 return isset($this->env) ? $this->env : false;
195 function upgrade_required(){
196 if(!isset($this->application_name)) return false;
197 if(!$this->version()) return false;
199 $data = $env->data();
200 if(!($data_version = $data->version($this->application_name))) return true;
201 return version_compare($data_version, $this->version()) < 0;
204 function do_upgrade(){
208 function set_data_version(){
209 if(!isset($this->application_name)) return false;
210 if(!$this->version()) return false;
212 $data = $env->data();
213 return $data->set_version($this->application_name, $this->version());