/** * @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; }