3 class mw_env_data_upgrade extends mw_env{
6 public $UPGRADE_REQUIRED;
8 public function data_upgrades(){
9 return $this->data_upgrades;
12 public 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 public 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 public 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 // -------------------------------------------------------------------------------------------
82 // class mw_data_upgrade
85 class mw_data_upgrade{
87 public $application_name;
91 public function __construct($env, $application_name){
93 $this->application_name = $application_name;
96 public function env(){
97 return isset($this->env) ? $this->env : false;
100 public function load_versions($versions_dir){
101 if($dh = opendir($versions_dir)){
102 $versions_dir .= $versions_dir && substr($versions_dir, -1) != "/" ? "/" : "";
103 while(($file = readdir($dh)) !== false){
105 substr($file, 0, 1) != "."
106 && !is_dir($versions_dir.$file)
107 && strcmp(substr($file, -4), ".php") == 0
108 ) $this->load_version($versions_dir, $file);
116 public function load_version($versions_dir, $version_file){
119 || !file_exists($versions_dir.$version_file)
120 || (substr($version_file, 0, 1) == ".")
121 || is_dir($versions_dir.$version_file)
122 || (substr($version_file, -4) != ".php")
124 $class_name = substr($version_file, 0, -4);
125 if(!class_exists($class_name)) require_once $versions_dir.$version_file;
126 if(!class_exists($class_name)) return false;
127 $version = new $class_name($this->env(), $this->application_name);
128 return $this->add_version($version);
131 public function add_version($version){
132 if(!$version->version()) return false;
133 if(!isset($this->versions)) $this->versions = array();
136 foreach($this->versions as $_version){
137 if(version_compare($version->version(), $_version->version()) == 0){
140 elseif(version_compare($version->version(), $_version->version()) < 0){
149 if(!$INSERTED) $tmp[] = $version;
150 $this->versions = $tmp;
154 public function upgrade_required(){
155 if(!isset($this->versions)) return false;
156 foreach($this->versions as $version){
157 if($version->upgrade_required()) return true;
162 public function do_upgrade(){
163 if(!isset($this->versions)) return true;
164 foreach($this->versions as $version){
165 if($version->upgrade_required() && ($res = $version->do_upgrade()) !== true){
166 return $res." (dans ".get_class($version).")";
168 if(!$version->set_data_version()){
169 return "impossible de mettre a jour la version des donnees pour ".$this->application_name." ".$version->version();
177 // -------------------------------------------------------------------------------------------
178 // class mw_data_version
181 abstract class mw_data_version{
184 public $application_name;
186 public function __construct($env, $application_name){
188 $this->application_name = $application_name;
191 public function version(){
195 public function application_name(){
196 return $this->application_name;
199 public function env(){
200 return isset($this->env) ? $this->env : false;
203 public function upgrade_required(){
204 if(!isset($this->application_name)) return false;
205 if(!$this->version()) return false;
207 $data = $env->data();
208 if(!($data_version = $data->version($this->application_name))) return true;
209 return version_compare($data_version, $this->version()) < 0;
212 public function do_upgrade(){
216 public function set_data_version(){
217 if(!isset($this->application_name)) return false;
218 if(!$this->version()) return false;
220 $data = $env->data();
221 return $data->set_version($this->application_name, $this->version());