Ejemplo n.º 1
0
 /**
  * Непосредственное наполнение
  */
 private function doFill($filterName = null)
 {
     $this->LOGGER->info("Loading full content of dir [{}] with [{}] filter.", $this->PATH, PsUtil::toString($filterName));
     $this->PROFILER->start('doFill');
     /*
      * На данный момент у нас все директории собраны, остаётся только пробежаться по ним
      * и взять всё необходимое.
      * При этом нужно выполнить array_values, так как getDirContent возвращает ассоциативный массив,
      * а файлы в директориях могут повторяться.
      */
     $RESULT = array();
     foreach ($this->DIRS as $dirPath) {
         $items = DirManager::inst($dirPath)->getDirContent(null, $filterName);
         $RESULT = array_merge($RESULT, array_values($items));
     }
     $this->LOGGER->info('Loading finished, items count: {}. Taken time: {}sec.', count($RESULT), $this->PROFILER->stop()->getTime());
     $this->LOGGER->info('');
     return $RESULT;
 }
Ejemplo n.º 2
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;
 }