Ejemplo n.º 1
0
Archivo: model.php Proyecto: soanni/mvc
 public function getColumns()
 {
     if (empty($this->_columns)) {
         $primaries = 0;
         $columns = array();
         $class = get_class($this);
         $types = $this->_types;
         $inspector = new Inspector($this);
         $properties = $inspector->getClassProperties();
         $first = function ($array, $key) {
             if (!empty($array[$key]) && count($array[$key]) == 1) {
                 return $array[$key][0];
             }
             return null;
         };
         foreach ($properties as $property) {
             $propertyMeta = $inspector->getPropertyMeta($property);
             if (!empty($propertyMeta['@column'])) {
                 $name = preg_replace("#^_#", '', $property);
                 $primary = !empty($propertyMeta['@primary']);
                 $type = $first($propertyMeta, '@type');
                 $length = $first($propertyMeta, '@length');
                 $index = !empty($propertyMeta['@index']);
                 $readwrite = !empty($propertyMeta['@readwrite']);
                 $read = !empty($propertyMeta['@read']) || $readwrite;
                 $write = !empty($propertyMeta['@write']) || $readwrite;
                 $validate = !empty($propertyMeta['@validate']) ? $propertyMeta['@validate'] : false;
                 $label = $first($propertyMeta, '@label');
                 if (!in_array($type, $types)) {
                     throw new Exception\Type("{$type} is not a valid type");
                 }
                 if ($primary) {
                     $primaries++;
                 }
                 $columns[$name] = array('raw' => $property, 'name' => $name, 'primary' => $primary, 'type' => $type, 'length' => $length, 'index' => $index, 'read' => $read, 'write' => $write, 'validate' => $validate, 'label' => $label);
             }
         }
         if ($primaries !== 1) {
             throw new Exception\Primary("{$class} must have exactly one @primary column");
         }
         $this->_columns = $columns;
     }
     return $this->_columns;
 }
Ejemplo n.º 2
0
 /**
  * Returns an associative array of column data.
  * @return type
  * @throws Exception\Type
  * @throws Exception\Primary
  */
 public function getColumns()
 {
     if (empty($_columns)) {
         $primaries = 0;
         $columns = array();
         $class = get_class($this);
         $types = $this->types;
         $inspector = new Inspector($this);
         $properties = $inspector->getClassProperties();
         $first = function ($array, $key) {
             if (!empty($array[$key]) && sizeof($array[$key]) == 1) {
                 return $array[$key][0];
             }
             return null;
         };
         $decimal = function ($array, $key) {
             if (!empty($array[$key]) && sizeof($array[$key]) == 2) {
                 return implode(",", $array[$key]);
             }
             return null;
         };
         foreach ($properties as $property) {
             $propertyMeta = $inspector->getPropertyMeta($property);
             if (!empty($propertyMeta["@column"])) {
                 $name = preg_replace("#^_#", "", $property);
                 $primary = !empty($propertyMeta["@primary"]);
                 $type = $first($propertyMeta, "@type");
                 switch ($type) {
                     case "decimal":
                         $length = $decimal($propertyMeta, "@length");
                         break;
                     default:
                         $length = $first($propertyMeta, "@length");
                         break;
                 }
                 $index = !empty($propertyMeta["@index"]);
                 $uindex = !empty($propertyMeta["@uindex"]);
                 $readwrite = !empty($propertyMeta["@readwrite"]);
                 $read = !empty($propertyMeta["@read"]) || $readwrite;
                 $write = !empty($propertyMeta["@write"]) || $readwrite;
                 $validate = !empty($propertyMeta["@validate"]) ? $propertyMeta["@validate"] : false;
                 $label = $first($propertyMeta, "@label");
                 if (!in_array($type, $types)) {
                     throw new Exception\Type("{$type} is not a valid type");
                 }
                 if ($primary) {
                     $primaries++;
                 }
                 $columns[$name] = array("raw" => $property, "name" => $name, "primary" => $primary, "type" => $type, "length" => $length, "index" => $index, "uindex" => $uindex, "read" => $read, "write" => $write, "validate" => $validate, "label" => $label);
             }
         }
         if ($primaries !== 1) {
             throw new Exception\Primary("{$class} must have exactly one @primary column");
         }
         $this->_columns = $columns;
     }
     return $this->_columns;
 }
Ejemplo n.º 3
0
 /**
  * Return property metadata for any designated 
  * with the @column flag. Includes a test for valid type
  * @return array Column metadata
  */
 public function getColumns()
 {
     if (empty($_columns)) {
         $primaries = 0;
         $columns = array();
         $class = get_class($this);
         $types = $this->types;
         // Create Inspector instance to allow reading of metadata
         $inspector = new Inspector($this);
         $properties = $inspector->getClassProperties();
         // Utility function to return the first item in a metadata array,
         // i.e., The value of the length flag
         $first = function ($array, $key) {
             if (!empty($array[$key]) && count($array[$key]) == 1) {
                 return $array[$key][0];
             }
             return null;
         };
         // Loop through all properties in the model
         foreach ($properties as $property) {
             $propertyMeta = $inspector->getPropertyMeta($property);
             // Select only those with the @column flag and
             // retrieve metadata
             if (!empty($propertyMeta["@column"])) {
                 $name = preg_replace("#^_#", "", $property);
                 $primary = !empty($propertyMeta["@primary"]);
                 $type = $first($propertyMeta, "@type");
                 $length = $first($propertyMeta, "@length");
                 $index = !empty($propertyMeta["@index"]);
                 $readwrite = !empty($propertyMeta["@readwrite"]);
                 $read = !empty($propertyMeta["@read"]) || $readwrite;
                 $write = !empty($propertyMeta["@write"]) || $readwrite;
                 // Not a valid property type so throw an error
                 if (!in_array($type, $types)) {
                     throw new \Exception("{$type} is not a valid column type", 500);
                 }
                 if ($primary) {
                     $primaries++;
                 }
                 $columns[$name] = array("raw" => $property, "name" => $name, "primary" => $primary, "type" => $type, "length" => $length, "index" => $index, "read" => $read, "write" => $write);
             }
         }
         // More than one primary column so throw an error
         if ($primaries !== 1) {
             throw new \Exception("{$class} must have exactly one @primary column", 500);
         }
         $this->_columns = $columns;
     }
     return $this->_columns;
 }