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){
131 class mw_data_version{
134 var $application_name;
140 function mw_data_version($env, $application_name){
142 $this->application_name = $application_name;
146 return isset($this->env) ? $this->env : false;
149 function upgrade_required(){
150 if(!isset($this->application_name)) return false;
152 $data = $env->data();
153 if(!($env_version = $env->version($this->application_name))) return false;
154 if(!($data_version = $data->version($this->application_name))) return true;
155 return version_compare($data_version, $env_version) < 0;
158 function do_upgrade(){