コード例 #1
0
ファイル: InitValidatorRules.php プロジェクト: meniam/model
 /**
  * @param        $paramArray
  * @param Column $column
  *
  * @return array
  */
 public function prepareValidatorParams($paramArray, Column $column)
 {
     if (!is_array($paramArray)) {
         return $paramArray;
     }
     foreach ($paramArray as $k => $value) {
         switch ((string) $value) {
             case 'COLUMN_CHAR_LENGTH':
                 $value = $column->getCharacterMaximumLength();
                 break;
             case 'COLUMN_ENUM_VALUES':
                 $value = $column->getEnumValuesAsArray();
                 break;
             case 'MAX_VALUE':
                 $value = $column->getMaxValue();
                 break;
             case 'MIN_VALUE':
                 $value = $column->getMinValue();
                 break;
         }
         $paramArray[$k] = $value;
     }
     return $paramArray;
 }
コード例 #2
0
ファイル: Schema.php プロジェクト: meniam/model
 /**
  * @param           $xml
  * @param DbAdapter $db
  * @return Schema
  */
 public static function fromXml($xml, DbAdapter $db)
 {
     if (is_array($xml)) {
         $data = $xml;
     } else {
         $xml = simplexml_load_string($xml);
         $data = json_decode(json_encode((array) $xml), 1);
     }
     $data = Column::prepareXmlArray($data);
     $name = $data['@attributes']['name'];
     $schema = new Schema($db);
     foreach ($data['tables']['table'] as $tableArray) {
         $table = Table::fromXml($tableArray, $schema);
         $schema->addTable($table);
     }
     foreach ($data['tables']['table'] as $tableArray) {
         $indexArrayList = is_int(key($tableArray['indexes']['index'])) ? $tableArray['indexes']['index'] : $tableArray['indexes'];
         $table = $schema->getTable($tableArray['@attributes']['name']);
         foreach ($indexArrayList as $indexArray) {
             $index = AbstractIndex::fromXml($indexArray, $table);
             $table->addIndex($index);
         }
         if (isset($tableArray['links']['link'])) {
             $linkArrayList = is_int(key($tableArray['links']['link'])) ? $tableArray['links']['link'] : $tableArray['links'];
             foreach ($linkArrayList as $linkArray) {
                 $link = AbstractLink::fromXml($linkArray, $table);
                 $table->addLink($link);
             }
         }
     }
     return $schema;
 }
コード例 #3
0
ファイル: AbstractPart.php プロジェクト: meniam/model
 public function getColumntConfig(Column $column)
 {
     $config = $this->getOption('config');
     $configFields = isset($config['fields']) ? $config['fields'] : array();
     $result = array();
     foreach ($configFields as $configField) {
         if (isset($configField['match'])) {
             $isMatched = false;
             foreach ($configField['match'] as $match) {
                 $isMatched = false;
                 if (isset($match['type'])) {
                     $matchTypes = is_array($match['type']) ? $match['type'] : array($match['type']);
                     $isMatched = in_array($column->getColumnType(), $matchTypes);
                 }
                 if (isset($match['regexp'])) {
                     $isMatched = $isMatched && preg_match($match['regexp'], $column->getFullName());
                 }
                 $columnLength = $column->getCharacterMaximumLength() ? $column->getCharacterMaximumLength() : $column->getNumericPrecision();
                 if ($isMatched && isset($match['length'])) {
                     foreach ($match['length'] as $operation => $lengthMatch) {
                         $operation = preg_replace('#\\s+#', '', $operation);
                         switch ($operation) {
                             case '<':
                                 $isMatched = $columnLength < $lengthMatch;
                                 break;
                             case '>':
                                 $isMatched = $columnLength > $lengthMatch;
                                 break;
                             case '>=':
                                 $isMatched = $columnLength >= $lengthMatch;
                                 break;
                             case '<=':
                                 $isMatched = $columnLength <= $lengthMatch;
                                 break;
                             case '==':
                                 $isMatched = $columnLength == $lengthMatch;
                                 break;
                             case '=':
                                 $isMatched = $columnLength == $lengthMatch;
                                 break;
                             default:
                                 $isMatched = false;
                         }
                     }
                 }
                 if ($isMatched) {
                     break;
                 }
             }
             if ($isMatched) {
                 $result = ArrayUtils::merge($result, $configField);
             }
         }
     }
     return $result;
 }
コード例 #4
0
ファイル: AbstractLink.php プロジェクト: meniam/model
 /**
  * Создать экземпляр из XMl
  *
  * @param                             $xml
  * @param \Model\Cluster\Schema\Table $table
  * @throws \Model\Exception\ErrorException
  * @return AbstractLink
  */
 public static function fromXml($xml, Table $table)
 {
     if (is_array($xml)) {
         $data = $xml;
     } else {
         $xml = simplexml_load_string($xml);
         $data = json_decode(json_encode((array) $xml), 1);
     }
     $data = Column::prepareXmlArray($data);
     switch (strtolower($data['type'])) {
         case 'onetoone':
             $type = self::LINK_TYPE_ONE_TO_ONE;
             break;
         case 'onetomany':
             $type = self::LINK_TYPE_ONE_TO_MANY;
             break;
         case 'manytoone':
             $type = self::LINK_TYPE_MANY_TO_ONE;
             break;
         case 'manytomany':
             $type = self::LINK_TYPE_MANY_TO_MANY;
             break;
     }
     $type = '\\' . $type;
     $schema = $table->getSchema();
     $localColumn = $schema->getTable($data['local_table'])->getColumn($data['local_column']);
     $foreignColumn = $schema->getTable($data['foreign_table'])->getColumn($data['foreign_column']);
     if (!$localColumn) {
         throw new ErrorException('Local column not found');
     }
     if (!$foreignColumn) {
         throw new ErrorException('Foreign column not found');
     }
     if (isset($data['rule_update'])) {
         if (empty($data['rule_update'])) {
             $data['rule_update'] = null;
         }
     }
     if (isset($data['rule_delete'])) {
         if (empty($data['rule_delete'])) {
             $data['rule_delete'] = null;
         }
     }
     if (isset($data['link_table'])) {
         $linkTableLocalColumn = $schema->getTable($data['link_table'])->getColumn($data['link_table_local_column']);
         $linkTableForeignColumn = $schema->getTable($data['link_table'])->getColumn($data['link_table_foreign_column']);
         if (!$linkTableLocalColumn) {
             throw new ErrorException('Link table Local column not found');
         }
         if (!$linkTableForeignColumn) {
             throw new ErrorException('Link table Foreign column not found');
         }
         $link = new $type($localColumn, $foreignColumn, $data['rule_delete'], $data['rule_update'], $linkTableLocalColumn, $linkTableForeignColumn);
     } else {
         $link = new $type($localColumn, $foreignColumn, $data['rule_delete'], $data['rule_update']);
     }
     return $link;
 }
コード例 #5
0
ファイル: AbstractIndex.php プロジェクト: meniam/model
 /**
  * @param                             $xml
  * @param \Model\Cluster\Schema\Table $table
  * @return mixed
  * @throws \Model\Exception\ErrorException
  */
 public static function fromXml($xml, Table $table)
 {
     if (is_array($xml)) {
         $data = $xml;
     } else {
         $xml = simplexml_load_string($xml);
         $data = json_decode(json_encode((array) $xml), 1);
     }
     $data = Column::prepareXmlArray($data);
     $columnArray = array_map('trim', explode(',', $data['@attributes']['columns']));
     $columns = array();
     foreach ($columnArray as $column) {
         $col = $table->getColumn($column);
         if (!$col) {
             throw new \Model\Exception\ErrorException('Column ' . $column . ' not found');
         }
         $columns[] = $col;
     }
     switch (strtolower($data['@attributes']['type'])) {
         case 'primary':
             $type = self::TYPE_PRIMARY;
             break;
         case 'unique':
             $type = self::TYPE_UNIQUE;
             break;
         case 'key':
             $type = self::TYPE_KEY;
             break;
     }
     return new $type($data['@attributes']['name'], $columns);
 }
コード例 #6
0
ファイル: Table.php プロジェクト: meniam/model
 /**
  * @param Column $column
  * @return $this
  */
 public function addColumn(Column $column)
 {
     $this->_columnByNameRegistry[$column->getName()] = $column;
     $this[] = $column;
     return $this;
 }