/** * Признак readonly */ public function isReadonly() { return $this->isProperty(PsTableColumnProps::COL_READONLY()); }
/** * Метод валидирует текущие настройки таблицы из db.ini. */ public function getConfigErrors() { return PsTableColumnProps::validateTableProperties($this); }
/** * Метод формирует сщвуржимое db.ini файла для развёрнутой схемы. * * За основу берутся текущие натсройки db.ini, которые могут быть расширены * или сокращены (если таблица удалена из схемы). * * @param string $scope - тип развёрнутой схемы. * Она может быть развёрнута, как SDK или как проектная. * Считаем, что в схему могли как добавиться новые таблицы, * так и кол-во таблиц в схеме могло быть сокращено. * @return array - настройки таблиц для db.ini */ public static function makeDbIniForSchema($scope, array $dbTables) { /* * Список таблиц SDK можно получить из db.ini, так как если мы работаем по SDK, * то нужно взять старые настройки и порядок таблиц. * Если же мы работаем по проектному скоупу, то db.ini для SDK уже актуален. */ $sdkTableNames = DbIni::getSdkTables(); $settings = array(); switch ($scope) { case ENTITY_SCOPE_SDK: foreach ($sdkTableNames as $tableName) { if (!array_key_exists($tableName, $dbTables)) { //Таблица была исключена из схемы continue; //--- } $table = array_get_value_unset($tableName, $dbTables); $settings[$tableName] = array(); /* @var $property PsTableColumnProps */ foreach (PsTableColumnProps::getAllowedTableProperties($table) as $propName => $property) { $settings[$tableName][$propName] = $table->isProperty($property); } /* @var $property PsTableColumnProps */ foreach (PsTableColumnProps::getAllowedColumnProperties($table) as $propName => $property) { /* @var $col PsTableColumn */ foreach ($table->getColumns() as $colName => $col) { if ($col->isProperty($property)) { $settings[$tableName][$propName][] = $colName; } } } } /* * Добавляем несконфигурированные таблицы */ foreach ($dbTables as $tableName => $table) { $settings[$tableName] = array(); /* @var $property PsTableColumnProps */ foreach (PsTableColumnProps::getAllowedTableProperties($dbTables[$tableName]) as $propName => $property) { $settings[$tableName][$propName] = false; } } break; case ENTITY_SCOPE_PROJ: //Сразу удаляем из списка все таблицы SDK array_remove_keys($dbTables, $sdkTableNames); foreach (DbIni::getProjectTables() as $tableName) { if (!array_key_exists($tableName, $dbTables)) { //Таблица была исключена из схемы или перенесена в SDK continue; //--- } $table = array_get_value_unset($tableName, $dbTables); $settings[$tableName] = array(); /* @var $property PsTableColumnProps */ foreach (PsTableColumnProps::getAllowedTableProperties($table) as $propName => $property) { $settings[$tableName][$propName] = $table->isProperty($property); } /* @var $property PsTableColumnProps */ foreach (PsTableColumnProps::getAllowedColumnProperties($table) as $propName => $property) { /* @var $col PsTableColumn */ foreach ($table->getColumns() as $colName => $col) { if ($col->isProperty($property)) { $settings[$tableName][$propName][] = $colName; } } } } /* * Не добавляем несконфигурированные таблицы, так как для проектных * таблиц мы не требуем полного перечисления в db.ini */ break; default: raise_error("Unknown scope [{$scope}]"); } return $settings; }