/** * Непосредственное наполнение */ 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; }
/** * Метод валидирует настройки таблицы, переданные извне */ 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; }