Added new fields type and added many improvenments to fields creation

This commit is contained in:
Antonio de la Rosa 2016-09-01 18:45:11 +02:00
parent 8c8df9eb9b
commit ee83acf576
7 changed files with 113 additions and 17 deletions

View file

@ -64,6 +64,23 @@ function padminConsole($options)
WebModel::load_model($options['model']); WebModel::load_model($options['model']);
//Load classes not defined in Webmodel::$model
$arr_classes=get_declared_classes();
foreach($arr_classes as $class)
{
if(get_parent_class($class)==='PhangoApp\PhaModels\Webmodel')
{
Webmodel::$model[strtolower($class)]=new $class();
}
}
try { try {
@ -290,7 +307,7 @@ function update_table()
$id_table_related=Webmodel::load_id_model_related(Webmodel::$model[$key]->components[$field], Webmodel::$model); $id_table_related=Webmodel::load_id_model_related(Webmodel::$model[$key]->components[$field], Webmodel::$model);
Webmodel::$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;'; Webmodel::$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 CASCADE ON UPDATE CASCADE;';
} }
@ -364,7 +381,7 @@ function update_table()
$id_table_related=Webmodel::load_id_model_related(Webmodel::$model[$key]->components[$new_field], Webmodel::$model); $id_table_related=Webmodel::load_id_model_related(Webmodel::$model[$key]->components[$new_field], Webmodel::$model);
Webmodel::$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;'; Webmodel::$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 CASCADE ON UPDATE CASCADE;';
} }

View file

@ -4,9 +4,22 @@ namespace PhangoApp\PhaModels\CoreFields;
/** /**
* *
* Class for create json strings with values
*
*/ */
class ArrayField extends SerializeField { class ArrayField extends SerializeField {
public $key_value='';
public function __construct($related_type, $key_value='')
{
parent::__construct($related_type);
$this->key_value=$key_value;
}
/** /**
* This function is used for show the value on a human format * This function is used for show the value on a human format
@ -15,7 +28,7 @@ class ArrayField extends SerializeField {
public function show_formatted($value, $key_value='') public function show_formatted($value, $key_value='')
{ {
$real_value=unserialize($value); $real_value=json_decode($value, true);
if($key_value==='') if($key_value==='')
{ {
@ -24,10 +37,10 @@ class ArrayField extends SerializeField {
} }
else else
if(isset($real_value[$key_value])) if(isset($real_value[$this->key_value]))
{ {
return $real_value[$key_value]; return $real_value[$this->key_value];
} }
@ -35,4 +48,4 @@ class ArrayField extends SerializeField {
} }
?> ?>

View file

@ -0,0 +1,23 @@
<?php
/**
* BigIntegerfield is a field for big integers values.
*
*/
namespace PhangoApp\PhaModels\CoreFields;
use PhangoApp\PhaUtils\Utils;
use PhangoApp\PhaI18n\I18n;
class BigIntegerField extends IntegerField {
function get_type_sql()
{
return 'BIGINT('.$this->size.') NOT NULL DEFAULT "0"';
}
}
?>

View file

@ -25,7 +25,7 @@ class ForeignKeyField extends IntegerField{
public $fields_related_model; public $fields_related_model;
public $name_field_to_field; public $name_field_to_field;
function __construct($related_model, $size=11, $default_id=0, $name_field='', $name_value='') function __construct($related_model, $size=11, $default_id=0, $name_field='', $select_fields=[])
{ {
$this->size=$size; $this->size=$size;
@ -33,14 +33,14 @@ class ForeignKeyField extends IntegerField{
$this->related_model=$related_model; $this->related_model=$related_model;
$this->container_model=$this->related_model->name; $this->container_model=$this->related_model->name;
//Fields obtained from related_model if you make a query... //Fields obtained from related_model if you make a query...
$this->fields_related_model=array(); $this->fields_related_model=$select_fields;
//Representative field for related model... //Representative field for related model...
$this->name_field_to_field=$name_field; $this->name_field_to_field=$name_field;
$this->default_id=$default_id; $this->default_id=$default_id;
$this->quot_open=''; $this->quot_open='';
$this->quot_close=''; $this->quot_close='';
$this->protected=0; $this->protected=0;
$this->parameters=array($this->related_model, $name_field, $name_value); $this->parameters=array($this->related_model, $name_field);
} }

View file

@ -12,15 +12,28 @@ class ParentField extends IntegerField{
//field related in the model... //field related in the model...
public $parent_model=''; public $parent_model='';
function __construct($size=11, $parent_model, $name_field='', $name_value='') function __construct($size=11, $name_field='', $name_value='')
{ {
$this->parent_model=$parent_model; //You need define directly if you dont declare an instance class in a model
//$this->parent_model=$parent_model;
$this->size=$size; $this->size=$size;
$this->form='PhangoApp\PhaModels\Forms\SelectModelForm'; $this->name_field=$name_field;
$this->parameters=array($this->parent_model, $name_field, $name_value); $this->name_value=$name_value;
} }
function after_register()
{
$this->parent_model=$this->model_instance;
$this->form='PhangoApp\PhaModels\Forms\SelectModelForm';
$this->parameters=array($this->parent_model, $this->name_field, $this->name_value);
}
function check($value) function check($value)
{ {

View file

@ -154,6 +154,19 @@ class PhangoField {
}
/**
* Method used for make things after of register in the model
*
*
*/
function after_register()
{
} }
/** /**
@ -219,4 +232,4 @@ class PhangoField {
} }
?> ?>

View file

@ -430,11 +430,18 @@ class Webmodel {
* *
*/ */
public function __construct($name_model, $cache=0, $type_cache='PhangoApp\PhaModels\Cache::file_cache') public function __construct($name_model='', $cache=0, $type_cache='PhangoApp\PhaModels\Cache::file_cache')
{ {
//Webmodel::$root_model='app/'.$name_model.'/'.Webmodel::$model_path; //Webmodel::$root_model='app/'.$name_model.'/'.Webmodel::$model_path;
if($name_model=='')
{
$name_model=strtolower(get_class($this));
}
$this->name=$name_model; $this->name=$name_model;
$this->idmodel='Id'.ucfirst($this->name); $this->idmodel='Id'.ucfirst($this->name);
$this->components[$this->idmodel]=new PrimaryField(); $this->components[$this->idmodel]=new PrimaryField();
@ -457,13 +464,22 @@ class Webmodel {
Webmodel::$model[$name_model]=&$this; Webmodel::$model[$name_model]=&$this;
Webmodel::$m->$name_model=&Webmodel::$model[$name_model]; Webmodel::$m->$name_model=&Webmodel::$model[$name_model];
$this->load_components();
} }
/** /**
* * Method for load fields from a method called load_components
* *
*/ */
public function load_components()
{
}
/** /**
* Method for load models from a project. * Method for load models from a project.
@ -1670,7 +1686,7 @@ class Webmodel {
//'Id'.ucfirst($this->components[$field]->related_model); //'Id'.ucfirst($this->components[$field]->related_model);
Webmodel::$arr_sql_set_index[$this->name][$field]='ALTER TABLE `'.$this->name.'` ADD CONSTRAINT `'.$field.'_'.$this->name.'IDX` FOREIGN KEY ( `'.$field.'` ) REFERENCES `'.$table_related.'` (`'.$id_table_related.'`) ON DELETE RESTRICT ON UPDATE RESTRICT;'; Webmodel::$arr_sql_set_index[$this->name][$field]='ALTER TABLE `'.$this->name.'` ADD CONSTRAINT `'.$field.'_'.$this->name.'IDX` FOREIGN KEY ( `'.$field.'` ) REFERENCES `'.$table_related.'` (`'.$id_table_related.'`) ON DELETE CASCADE ON UPDATE CASCADE;';
} }
} }
@ -2258,6 +2274,7 @@ class Webmodel {
$this->components[$name]->required=$required; $this->components[$name]->required=$required;
$this->components[$name]->set_relationships(); $this->components[$name]->set_relationships();
$this->components[$name]->after_register();
} }