Esempio n. 1
0
 /**
  * Метод валидирует настройки таблицы, переданные извне
  */
 public static function validateTablePropertiesCustom(PsTable $table, array $tableProperties = null)
 {
     $errors = array();
     if ($tableProperties === null) {
         return $errors;
         // Нет настроет - нет проблем:)
     }
     $tableName = $table->getName();
     //Пробегаемся по настройкам, заданным для таблицы и валидируем её
     foreach ($tableProperties as $propName => $propValue) {
         if (!in_array($propName, self::names())) {
             $errors[] = "Настройка {$propName} для таблицы {$tableName} не существует.";
             continue;
             //---
         }
         $prop = self::valueOf($propName);
         /*
          * Таблица
          */
         if ($prop->isTableProperty()) {
             if (!$prop->isAllowedForTable($table)) {
                 $errors[] = "Настройка {$propName} не допустима для таблицы {$tableName}.";
             }
             continue;
             //---
         }
         /*
          * Столец
          */
         if ($prop->isColumnProperty()) {
             if (!$prop->isAllowedForTableColumns($table)) {
                 $errors[] = "Настройка {$propName} не допустима для столбцов таблицы {$tableName}.";
                 continue;
                 //---
             }
             if (!is_array($propValue)) {
                 $errors[] = "Настройка {$propName} для таблицы {$tableName} должна быть задана в виде массива, передано: " . PsUtil::toString($propValue);
                 continue;
                 //---
             }
             foreach ($propValue as $colName) {
                 if (!$table->hasColumn($colName)) {
                     $errors[] = "Настройка {$propName} для столбца {$tableName}.{$colName} некорректна - столбец не существует.";
                 }
             }
             continue;
             //---
         }
         raise_error("Invalid table col property [{$propName}]");
     }
     /*
      * Если мы обнаружили ошибку или таблица не сконфигурирована - возвращаем.
      * Мы не запрещаем, чтобы в db.ini были настройки для несконфигурированной таблицы,
      * но они должны быть корректно описаны.
      */
     if ($errors || !self::TABLE_CONFIGURED()->isTableHasPropertyCustom($tableName, $tableProperties)) {
         return $errors;
         //---
     }
     //Если нет первичного ключа или он является автоинкремент полем - нужен столбец, замещающий ПК
     if (!self::COL_PK()->getColumnsWithPropertyCustom($tableName, $tableProperties)) {
         //Нет альтернативы ПК
         if (!$table->hasPk()) {
             $errors[] = "Таблица {$tableName} не имеет первичного ключа и его альтернативы";
         } else {
             if ($table->isPkAi()) {
                 $errors[] = "Первичный ключ {$tableName}.{$table->getPk()->getName()} является autoincrement полем, и при этом не имеет альтернативы";
             }
         }
     }
     return $errors;
 }