Exemplo n.º 1
0
 /**
  * @param AbstractModel $className
  * @return array
  */
 protected final function checkFieldList($className)
 {
     $errors = [];
     // on vérifie d'abord que la table est définie
     $tableName = $className::getTableName();
     if ($tableName === null || !is_string($tableName) || strlen($tableName) == 0) {
         $errors[] = "undefined table name";
     }
     $fieldList = $className::getFieldList();
     if ($fieldList === null) {
         $errors[] = "undefined field list";
     } elseif (!is_array($fieldList)) {
         $errors[] = "field list is not an array";
     } else {
         foreach ($fieldList as $fieldName => $fieldInfos) {
             if (!is_string($fieldName) || strlen($fieldName) == 0) {
                 $errors[] = "undefined field name in field list";
             } else {
                 if (!isset($fieldInfos['type'])) {
                     $errors[] = "undefined field type for field named " . $fieldName;
                 } elseif (!in_array($fieldInfos['type'], AbstractModel::getFieldTypes())) {
                     $errors[] = "unknown field type for field named " . $fieldName . " : " . $fieldInfos['type'];
                 }
                 if (!isset($fieldInfos['required'])) {
                     $fieldList[$fieldName]['required'] = false;
                 } elseif (!is_bool($fieldInfos['required'])) {
                     $errors[] = "invalid required value for field named " . $fieldName . " : " . $fieldInfos['required'];
                 }
                 if (!isset($fieldInfos['size'])) {
                     $fieldList[$fieldName]['size'] = 0;
                 } elseif ($fieldInfos['type'] == 'float' && preg_match('#[0-9]+,[0-9]+#', $fieldInfos['size']) === false) {
                     $errors[] = "invalid size for field named " . $fieldName . " (" . $fieldInfos['type'] . ") : " . $fieldInfos['size'];
                 } elseif ($fieldInfos['type'] != 'float' && !is_int($fieldInfos['size'])) {
                     $errors[] = "size must be integer for field named " . $fieldName . " (" . $fieldInfos['type'] . ") : " . $fieldInfos['size'];
                 }
             }
         }
     }
     $relationList = $className::getRelationList();
     if ($relationList === null) {
         $errors[] = "undefined relation list";
     } elseif (!is_array($relationList)) {
         $errors[] = "relation list is not an array";
     } else {
         foreach ($relationList as $relation) {
             if (!isset($relation['field'])) {
                 $errors[] = "missing field on relation";
             }
             if (!isset($relation['class'])) {
                 $errors[] = "missing class on relation";
             }
             if (!isset($fieldList[$relation['field']])) {
                 $errors[] = "unknown field name in relation " . $relation['field'];
             }
             if (!is_subclass_of($relation['class'], '\\Bixev\\ORM\\AbstractModel')) {
                 $errors[] = "relation is not a model " . $relation['class'];
             }
         }
     }
     return $errors;
 }