diff --git a/bin/padmin.php b/bin/padmin.php new file mode 100644 index 0000000..7b76ce1 --- /dev/null +++ b/bin/padmin.php @@ -0,0 +1,382 @@ + $thing) + + { + + $arr_table=array(); + + $allfields=array(); + $fields=array(); + $types=array(); + + $field=""; + $type=""; + $null=""; + $key_db=""; + $default=""; + $extra=""; + $key_field_old=$model[$key]->idmodel; + + if(!isset($arr_etable[$key])) + { + //If table not exists make this + + foreach($model[$key]->components as $field => $data) + { + + $arr_table[]='`'.$field.'` '.$model[$key]->components[$field]->get_type_sql(); + + //Check if indexed + + if($model[$key]->components[$field]->indexed==true) + { + + $arr_sql_index[$key][$field]='CREATE INDEX `index_'.$key.'_'.$field.'` ON '.$key.'(`'.$field.'`);'; + $arr_sql_set_index[$key][$field]=''; + + } + + //Check if unique + + if($model[$key]->components[$field]->unique==true) + { + + $arr_sql_unique[$key][$field]=' ALTER TABLE `'.$key.'` ADD UNIQUE (`'.$field.'`)'; + $arr_sql_set_unique[$key][$field]=''; + + } + + //Check if foreignkeyfield... + if(isset($model[$key]->components[$field]->related_model)) + { + + //Create indexes... + + $arr_sql_index[$key][$field]='CREATE INDEX `index_'.$key.'_'.$field.'` ON '.$key.'(`'.$field.'`);'; + + $table_related=$model[$key]->components[$field]->related_model; + + $id_table_related=load_id_model_related($model[$key]->components[$field]); + + //'Id'.ucfirst($model[$key]->components[$field]->related_model); + + $arr_sql_set_index[$key][$field]='ALTER TABLE `'.$key.'` ADD CONSTRAINT `'.$field.'_'.$key.'IDX` FOREIGN KEY ( `'.$field.'` ) REFERENCES `'.$table_related.'` (`'.$id_table_related.'`) ON DELETE RESTRICT ON UPDATE RESTRICT;'; + + } + } + + $sql_query="create table `$key` (\n".implode(",\n", $arr_table)."\n) DEFAULT CHARSET=utf8;\n"; + + echo "Creating table $key\n"; + + $query=MySQLClass::webtsys_query($sql_query); + + /*foreach($arr_sql_index as $key_data => $sql_index) + { + + echo "---Creating index for ".$key_data."\n"; + + $query=MySQLClass::webtsys_query($sql_index); + $query=MySQLClass::webtsys_query($arr_sql_set_index[$key_data]); + + }*/ + + } + else + if(isset($model[$key])) + { + //Obtain all fields of model + + foreach($model[$key]->components as $kfield => $value) + { + + $allfields[$kfield]=1; + + } + + //unset($allfields['Id'.ucfirst($key)]); + + $arr_null['NO']='NOT NULL'; + $arr_null['YES']='NULL'; + + unset($allfields[$model[$key]->idmodel]); + + $query=MySQLClass::webtsys_query("describe `".$key."`"); + + list($key_field_old, $type, $null, $key_db, $default, $extra)=MySQLClass::webtsys_fetch_row($query); + + while(list($field, $type, $null, $key_db, $default, $extra)=MySQLClass::webtsys_fetch_row($query)) + { + + $fields[]=$field; + $types[$field]=$type; + $keys[$field]=$key_db; + + $null_set[$field]=$arr_null[$null]; + + } + + foreach($fields as $field) + { + + if(isset($allfields[$field])) + { + + $type=strtoupper($types[$field]); + + unset($allfields[$field]); + + if($model[$key]->components[$field]->get_type_sql()!=($type.' '.$null_set[$field])) + { + + $query=MySQLClass::webtsys_query('alter table `'.$key.'` modify `'.$field.'` '.$model[$key]->components[$field]->get_type_sql()); + + echo "Upgrading ".$field." from ".$key."...\n"; + + + } + + //Check if indexed + + if($model[$key]->components[$field]->indexed==true && $keys[$field]=='') + { + + $arr_sql_index[$key][$field]='CREATE INDEX `index_'.$key.'_'.$field.'` ON `'.$key.'`(`'.$field.'`);'; + $arr_sql_set_index[$key][$field]=''; + + } + + //Check if unique + + if($model[$key]->components[$field]->unique==true && $keys[$field]=='') + { + + $arr_sql_unique[$key][$field]=' ALTER TABLE `'.$key.'` ADD UNIQUE (`'.$field.'`)'; + $arr_sql_set_unique[$key][$field]=''; + + } + + //Set index + + if(isset($model[$key]->components[$field]->related_model) && $keys[$field]=='') + { + + + $arr_sql_index[$key][$field]='CREATE INDEX `index_'.$key.'_'.$field.'` ON `'.$key.'`(`'.$field.'`);'; + + $table_related=$model[$key]->components[$field]->related_model; + + $id_table_related=load_id_model_related($model[$key]->components[$field]); + + $arr_sql_set_index[$key][$field]='ALTER TABLE `'.$key.'` ADD CONSTRAINT `'.$field.'_'.$key.'IDX` FOREIGN KEY ( `'.$field.'` ) REFERENCES `'.$table_related.'` (`'.$id_table_related.'`) ON DELETE RESTRICT ON UPDATE RESTRICT;'; + + + } + + if(!isset($model[$key]->components[$field]->related_model) && $keys[$field]!='' && $model[$key]->components[$field]->indexed==false && $model[$key]->components[$field]->unique!=true) + { + + echo "---Delete index for ".$field." from ".$key."\n"; + + $query=MySQLClass::webtsys_query('DROP INDEX `index_'.$key.'_'.$field.'` ON '.$key); + + } + + } + + else + + { + + $allfields[$field]=0; + + } + + } + + } + + //Check if new id... + + if($key_field_old!=$model[$key]->idmodel) + { + + $query=MySQLClass::webtsys_query('alter table `'.$key.'` change `'.$key_field_old.'` `'.$model[$key]->idmodel.'` INT NOT NULL AUTO_INCREMENT'); + + echo "Renaming id for this model to ".$model[$key]->idmodel."...\n"; + + } + + //Check if new fields... + + foreach($allfields as $new_field => $new) + { + + if($allfields[$new_field]==1) + { + + $query=MySQLClass::webtsys_query('alter table `'.$key.'` add `'.$new_field.'` '.$model[$key]->components[$new_field]->get_type_sql()); + + echo "Adding ".$new_field." to ".$key."...\n"; + + //Check if indexed + + if($model[$key]->components[$new_field]->indexed==true) + { + + $arr_sql_index[$key][$new_field]='CREATE INDEX `index_'.$key.'_'.$new_field.'` ON `'.$key.'`(`'.$new_field.'`);'; + $arr_sql_set_index[$key][$new_field]=''; + + } + + if(isset($model[$key]->components[$new_field]->related_model) ) + { + + /*echo "---Creating index for ".$new_field." from ".$key."\n"; + + $query=MySQLClass::webtsys_query('CREATE INDEX index_'.$key.'_'.$new_field.' ON '.$key.'('.$new_field.')');*/ + + $arr_sql_index[$key][$new_field]='CREATE INDEX `index_'.$key.'_'.$new_field.'` ON `'.$key.'`(`'.$new_field.'`);'; + + $table_related=$model[$key]->components[$new_field]->related_model; + + $id_table_related=load_id_model_related($model[$key]->components[$new_field]); + + $arr_sql_set_index[$key][$new_field]='ALTER TABLE `'.$key.'` ADD CONSTRAINT `'.$new_field.'_'.$key.'IDX` FOREIGN KEY ( `'.$new_field.'` ) REFERENCES `'.$table_related.'` (`'.$id_table_related.'`) ON DELETE RESTRICT ON UPDATE RESTRICT;'; + + } + + } + + else + + { + + /*if(isset($model[$key]->components[$new_field]->related_model) ) + {*/ + + //Drop foreignkeyfield + + //Bug, need fixed. + + $query=MySQLClass::webtsys_query('ALTER TABLE `'.$key.'` DROP FOREIGN KEY '.$new_field.'_'.$key.'IDX'); + + //} + + $query=MySQLClass::webtsys_query('alter table `'.$key.'` drop `'.$new_field.'`'); + + echo "Deleting ".$new_field." from ".$key."...\n"; + + } + + } + + $arr_etable[$key]=0; + + } + + //Create Indexes... + + foreach($arr_sql_index as $model_name => $arr_index) + { + foreach($arr_sql_index[$model_name] as $key_data => $sql_index) + { + + echo "---Creating index for ".$key_data." on model ".$model_name."\n"; + + $query=MySQLClass::webtsys_query($sql_index); + + if($arr_sql_set_index[$model_name][$key_data]!='') + { + $query=MySQLClass::webtsys_query($arr_sql_set_index[$model_name][$key_data]); + } + + } + } + + //Create Uniques... + + foreach($arr_sql_unique as $model_name => $arr_index) + { + foreach($arr_sql_unique[$model_name] as $key_data => $sql_index) + { + + echo "---Creating unique for ".$key_data." on model ".$model_name."\n"; + + $query=MySQLClass::webtsys_query($sql_index); + + if($arr_sql_set_unique[$model_name][$key_data]!='') + { + $query=MySQLClass::webtsys_query($arr_sql_set_unique[$model_name][$key_data]); + } + + } + } + + /*foreach($arr_etable as $table => $value) + { + + if($value==1) + { + + $query=MySQLClass::webtsys_query('DROP TABLE `'.$table.'`'); + + echo 'Deleting table '.$table."\n"; + + } + + }*/ + +} + +?> \ No newline at end of file diff --git a/src/Webmodel.php b/src/Webmodel.php index c05ae26..dd69502 100644 --- a/src/Webmodel.php +++ b/src/Webmodel.php @@ -16,10 +16,16 @@ class Webmodel { /** - * folder containing the models + * folder containing the base models folder */ - static public $model_path='app/models'; + static public $model_path='./'; + + /** + * folder containing the models in $model_path + */ + + static public $model_folder='models'; /** * Database hosts array. @@ -261,31 +267,33 @@ class Webmodel { static public function load_model($model) { - + $app_model=$model; - - if(strpos('/', $model)) + + if(strpos($model, '/')) { - + $arr_model=explode('/', $model); - - $app_model=$model[0]; + + $app_model=$arr_model[0]; + + $model=$arr_model[1]; } + + $path_model=Webmodel::$model_path.$app_model.'/'.Webmodel::$model_folder.'/models_'.$model.'.php'; - $path_model=$app_model.'/models_'.$model.'.php'; - - if(is_file(Webmodel::$model_path.'/models_'.$model.'.php')) + if(is_file($path_model)) { - include(Webmodel::$model_path.'/'.$model.'.php'); + include($path_model); - $func_load=$model.'Load'; + $func_load=$model.'ModelLoad'; if(!function_exists($func_load)) { - throw new \Exception('Error: function '.$func_load.' not found in '.Webmodel::$model_path.'/'.$model.'.php'); + throw new \Exception('Error: function '.$func_load.' not found in '.$path_model); } else @@ -299,7 +307,7 @@ class Webmodel { else { - throw new \Exception('Error: model not found in '.Webmodel::$model_path.'/'.$model.'.php'); + throw new \Exception('Error: model not found in '.$path_model); }