3 class mw_env_data_upgrade extends mw_env{
7 function init_data_upgrades(){
8 $data_upgrade = new mw_data_upgrade($this);
9 $impl_dir = ($this->bdd("sgbd") == "xml" ? "xml" : "sql")."/";
10 $versions_dir = $this->path("mw_dir")."app/data/upgrades/".$impl_dir;
11 if(!is_dir($versions_dir)){
14 if(!$data_upgrade->load_versions("mtweb", $versions_dir)){
17 if(!isset($this->data_upgrades)) $this->data_upgrades = array();
18 $this->data_upgrades[] = $data_upgrade;
22 function data_upgrade_required(){
23 if(!isset($this->data_upgrades)) return false;
24 foreach($this->data_upgrades as $data_upgrade){
25 if($data_upgrade->upgrade_required()){
32 function do_data_upgrade(){
33 if(!isset($this->data_upgrades)) return false;
34 foreach($this->data_upgrades as $data_upgrade){
35 if($data_upgrade->upgrade_required() && ($res = $data_upgrade->do_upgrade()) !== true){
44 class mw_data_upgrade{
49 function mw_data_upgrade($env){
54 return isset($this->env) ? $this->env : false;
57 function load_versions($application_name, $versions_dir){
58 if($dh = opendir($versions_dir)){
59 $versions_dir .= $versions_dir && substr($versions_dir, -1) != "/" ? "/" : "";
60 while(($file = readdir($dh)) !== false){
62 substr($file, 0, 1) != "."
63 && !is_dir($versions_dir.$file)
64 && strcmp(substr($file, -4), ".php") == 0
65 ) $this->load_version($application_name, $versions_dir, $file);
73 function load_version($application_name, $versions_dir, $version_file){
76 || !file_exists($versions_dir.$version_file)
77 || (substr($version_file, 0, 1) == ".")
78 || is_dir($versions_dir.$version_file)
79 || (substr($version_file, -4) != ".php")
81 $class_name = substr($version_file, 0, -4);
82 if(!class_exists($class_name)) require_once $versions_dir.$version_file;
83 if(!class_exists($class_name)) return false;
84 $version = new $class_name($this->env(), $application_name);
85 return $this->add_version($version);
88 function add_version($version){
89 if(!$version->version()) return false;
90 if(!isset($this->versions)) $this->versions = array();
93 foreach($this->versions as $_version){
94 if(version_compare($version->version(), $_version->version()) == 0){
97 elseif(version_compare($version->version(), $_version->version()) < 0){
106 if(!$INSERTED) $tmp[] = $version;
107 $this->versions = $tmp;
111 function upgrade_required(){
112 if(!isset($this->versions)) return false;
113 foreach($this->versions as $version_number => $version){
114 if($version->upgrade_required()) return true;
119 function do_upgrade(){
120 if(!isset($this->versions)) return true;
121 foreach($this->versions as $version_number => $version){
122 if($version->upgrade_required() && ($res = $version->do_upgrade()) !== true){
123 return $res." (dans ".get_class($version).")";
125 if(!$version->set_data_version()){
126 return "impossible de mettre a jour la version des donnees pour ".$version->application_name();
134 class mw_data_version{
137 var $application_name;
143 function application_name(){
144 return $this->application_name;
147 function mw_data_version($env, $application_name){
149 $this->application_name = $application_name;
153 return isset($this->env) ? $this->env : false;
156 function upgrade_required(){
157 if(!isset($this->application_name)) return false;
159 $data = $env->data();
160 if(!($env_version = $env->version($this->application_name))) return false;
161 if(!($data_version = $data->version($this->application_name))) return true;
162 return version_compare($data_version, $env_version) < 0;
165 function do_upgrade(){
169 function set_data_version(){
170 if(!isset($this->application_name)) return false;
172 $data = $env->data();
173 return $data->set_version($this->application_name, $this->version());