Source of file PropelTypeGuesser.php
Size: 6,325 Bytes - Last Modified: 2013-07-17T08:22:21+02:00
/home/theseer/Downloads/Symfony/vendor/symfony/symfony/src/Symfony/Bridge/Propel1/Form/PropelTypeGuesser.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bridge\Propel1\Form; use Symfony\Component\Form\FormTypeGuesserInterface; use Symfony\Component\Form\Guess\Guess; use Symfony\Component\Form\Guess\TypeGuess; use Symfony\Component\Form\Guess\ValueGuess; /** * Propel Type guesser. * * @author Fabien Potencier <fabien@symfony.com> */ class PropelTypeGuesser implements FormTypeGuesserInterface { private $cache = array(); /** * {@inheritDoc} */ public function guessType($class, $property) { if (!$table = $this->getTable($class)) { return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE); } foreach ($table->getRelations() as $relation) { if (in_array($relation->getType(), array(\RelationMap::MANY_TO_ONE, \RelationMap::ONE_TO_MANY))) { if ($property == $relation->getForeignTable()->getName()) { return new TypeGuess('model', array( 'class' => $relation->getForeignTable()->getClassName(), 'multiple' => \RelationMap::MANY_TO_ONE === $relation->getType() ? false : true, ), Guess::HIGH_CONFIDENCE); } } elseif ($relation->getType() === \RelationMap::MANY_TO_MANY) { if (strtolower($property) == strtolower($relation->getPluralName())) { return new TypeGuess('model', array( 'class' => $relation->getLocalTable()->getClassName(), 'multiple' => true, ), Guess::HIGH_CONFIDENCE); } } } if (!$column = $this->getColumn($class, $property)) { return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE); } switch ($column->getType()) { case \PropelColumnTypes::BOOLEAN: case \PropelColumnTypes::BOOLEAN_EMU: return new TypeGuess('checkbox', array(), Guess::HIGH_CONFIDENCE); case \PropelColumnTypes::TIMESTAMP: case \PropelColumnTypes::BU_TIMESTAMP: return new TypeGuess('datetime', array(), Guess::HIGH_CONFIDENCE); case \PropelColumnTypes::DATE: case \PropelColumnTypes::BU_DATE: return new TypeGuess('date', array(), Guess::HIGH_CONFIDENCE); case \PropelColumnTypes::TIME: return new TypeGuess('time', array(), Guess::HIGH_CONFIDENCE); case \PropelColumnTypes::FLOAT: case \PropelColumnTypes::REAL: case \PropelColumnTypes::DOUBLE: case \PropelColumnTypes::DECIMAL: return new TypeGuess('number', array(), Guess::MEDIUM_CONFIDENCE); case \PropelColumnTypes::TINYINT: case \PropelColumnTypes::SMALLINT: case \PropelColumnTypes::INTEGER: case \PropelColumnTypes::BIGINT: case \PropelColumnTypes::NUMERIC: return new TypeGuess('integer', array(), Guess::MEDIUM_CONFIDENCE); case \PropelColumnTypes::ENUM: case \PropelColumnTypes::CHAR: if ($column->getValueSet()) { //check if this is mysql enum $choices = $column->getValueSet(); $labels = array_map('ucfirst', $choices); return new TypeGuess('choice', array('choices' => array_combine($choices, $labels)), Guess::MEDIUM_CONFIDENCE); } case \PropelColumnTypes::VARCHAR: return new TypeGuess('text', array(), Guess::MEDIUM_CONFIDENCE); case \PropelColumnTypes::LONGVARCHAR: case \PropelColumnTypes::BLOB: case \PropelColumnTypes::CLOB: case \PropelColumnTypes::CLOB_EMU: return new TypeGuess('textarea', array(), Guess::MEDIUM_CONFIDENCE); default: return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE); } } /** * {@inheritDoc} */ public function guessRequired($class, $property) { if ($column = $this->getColumn($class, $property)) { return new ValueGuess($column->isNotNull(), Guess::HIGH_CONFIDENCE); } } /** * {@inheritDoc} */ public function guessMaxLength($class, $property) { if ($column = $this->getColumn($class, $property)) { if ($column->isText()) { return new ValueGuess($column->getSize(), Guess::HIGH_CONFIDENCE); } switch ($column->getType()) { case \PropelColumnTypes::FLOAT: case \PropelColumnTypes::REAL: case \PropelColumnTypes::DOUBLE: case \PropelColumnTypes::DECIMAL: return new ValueGuess(null, Guess::MEDIUM_CONFIDENCE); } } } /** * {@inheritDoc} */ public function guessPattern($class, $property) { if ($column = $this->getColumn($class, $property)) { switch ($column->getType()) { case \PropelColumnTypes::FLOAT: case \PropelColumnTypes::REAL: case \PropelColumnTypes::DOUBLE: case \PropelColumnTypes::DECIMAL: return new ValueGuess(null, Guess::MEDIUM_CONFIDENCE); } } } protected function getTable($class) { if (isset($this->cache[$class])) { return $this->cache[$class]; } if (class_exists($queryClass = $class.'Query')) { $query = new $queryClass(); return $this->cache[$class] = $query->getTableMap(); } } protected function getColumn($class, $property) { if (isset($this->cache[$class.'::'.$property])) { return $this->cache[$class.'::'.$property]; } $table = $this->getTable($class); if ($table && $table->hasColumn($property)) { return $this->cache[$class.'::'.$property] = $table->getColumn($property); } } } |