/sbweb/sbweb_logica/lib/symfony/plugins/sfPropelPlugin/lib/generator/sfPropelFormFilterGenerator.class.php
PHP | 296 lines | 203 code | 33 blank | 60 comment | 23 complexity | 1f98da1d429f7a8bd85dcaba93c5da2f MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-3.0
- <?php
-
- /*
- * This file is part of the symfony package.
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- /**
- * Propel filter form generator.
- *
- * This class generates a Propel filter forms.
- *
- * @package symfony
- * @subpackage generator
- * @author Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version SVN: $Id: sfPropelFormFilterGenerator.class.php 15134 2009-01-31 19:30:35Z Kris.Wallsmith $
- */
- class sfPropelFormFilterGenerator extends sfPropelFormGenerator
- {
- /**
- * Initializes the current sfGenerator instance.
- *
- * @param sfGeneratorManager $generatorManager A sfGeneratorManager instance
- */
- public function initialize(sfGeneratorManager $generatorManager)
- {
- parent::initialize($generatorManager);
-
- $this->setGeneratorClass('sfPropelFormFilter');
- }
-
- /**
- * Generates classes and templates in cache.
- *
- * @param array $params The parameters
- *
- * @return string The data to put in configuration cache
- */
- public function generate($params = array())
- {
- $this->params = $params;
-
- if (!isset($this->params['connection']))
- {
- throw new sfParseException('You must specify a "connection" parameter.');
- }
-
- if (!isset($this->params['model_dir_name']))
- {
- $this->params['model_dir_name'] = 'model';
- }
-
- if (!isset($this->params['filter_dir_name']))
- {
- $this->params['filter_dir_name'] = 'filter';
- }
-
- $this->loadBuilders();
-
- $this->dbMap = Propel::getDatabaseMap($this->params['connection']);
-
- // create the project base class for all forms
- $file = sfConfig::get('sf_lib_dir').'/filter/base/BaseFormFilterPropel.class.php';
- if (!file_exists($file))
- {
- if (!is_dir(sfConfig::get('sf_lib_dir').'/filter/base'))
- {
- mkdir(sfConfig::get('sf_lib_dir').'/filter/base', 0777, true);
- }
-
- file_put_contents($file, $this->evalTemplate('sfPropelFormFilterBaseTemplate.php'));
- }
-
- // create a form class for every Propel class
- foreach ($this->dbMap->getTables() as $tableName => $table)
- {
- $this->table = $table;
-
- // find the package to store filter forms in the same directory as the model classes
- $packages = explode('.', constant(constant($table->getClassname().'::PEER').'::CLASS_DEFAULT'));
- array_pop($packages);
- if (false === $pos = array_search($this->params['model_dir_name'], $packages))
- {
- throw new InvalidArgumentException(sprintf('Unable to find the model dir name (%s) in the package %s.', $this->params['model_dir_name'], constant(constant($table->getClassname().'::PEER').'::CLASS_DEFAULT')));
- }
- $packages[$pos] = $this->params['filter_dir_name'];
- $baseDir = sfConfig::get('sf_root_dir').'/'.implode(DIRECTORY_SEPARATOR, $packages);
-
- if (!is_dir($baseDir.'/base'))
- {
- mkdir($baseDir.'/base', 0777, true);
- }
-
- file_put_contents($baseDir.'/base/Base'.$table->getClassname().'FormFilter.class.php', $this->evalTemplate('sfPropelFormFilterGeneratedTemplate.php'));
- if (!file_exists($classFile = $baseDir.'/'.$table->getClassname().'FormFilter.class.php'))
- {
- file_put_contents($classFile, $this->evalTemplate('sfPropelFormFilterTemplate.php'));
- }
- }
- }
-
- /**
- * Returns a sfWidgetForm class name for a given column.
- *
- * @param ColumnMap $column A ColumnMap object
- *
- * @return string The name of a subclass of sfWidgetForm
- */
- public function getWidgetClassForColumn(ColumnMap $column)
- {
- switch ($column->getType())
- {
- case PropelColumnTypes::BOOLEAN:
- $name = 'Choice';
- break;
- case PropelColumnTypes::DATE:
- case PropelColumnTypes::TIME:
- case PropelColumnTypes::TIMESTAMP:
- $name = 'FilterDate';
- break;
- default:
- $name = 'FilterInput';
- }
-
- if ($column->isForeignKey())
- {
- $name = 'PropelChoice';
- }
-
- return sprintf('sfWidgetForm%s', $name);
- }
-
- /**
- * Returns a PHP string representing options to pass to a widget for a given column.
- *
- * @param ColumnMap $column A ColumnMap object
- *
- * @return string The options to pass to the widget as a PHP string
- */
- public function getWidgetOptionsForColumn(ColumnMap $column)
- {
- $options = array();
-
- $withEmpty = sprintf('\'with_empty\' => %s', $column->isNotNull() ? 'false' : 'true');
- switch ($column->getType())
- {
- case PropelColumnTypes::BOOLEAN:
- $options[] = "'choices' => array('' => 'yes or no', 1 => 'yes', 0 => 'no')";
- break;
- case PropelColumnTypes::DATE:
- case PropelColumnTypes::TIME:
- case PropelColumnTypes::TIMESTAMP:
- $options[] = "'from_date' => new sfWidgetFormDate(), 'to_date' => new sfWidgetFormDate()";
- $options[] = $withEmpty;
- break;
- }
-
- if ($column->isForeignKey())
- {
- $options[] = sprintf('\'model\' => \'%s\', \'add_empty\' => true', $this->getForeignTable($column)->getClassname());
-
- $refColumn = $this->getForeignTable($column)->getColumn($column->getRelatedColumnName());
- if (!$refColumn->isPrimaryKey())
- {
- $options[] = sprintf('\'key_method\' => \'get%s\'', $refColumn->getPhpName());
- }
- }
-
- return count($options) ? sprintf('array(%s)', implode(', ', $options)) : '';
- }
-
- /**
- * Returns a sfValidator class name for a given column.
- *
- * @param ColumnMap $column A ColumnMap object
- *
- * @return string The name of a subclass of sfValidator
- */
- public function getValidatorClassForColumn(ColumnMap $column)
- {
- switch ($column->getType())
- {
- case PropelColumnTypes::BOOLEAN:
- $name = 'Choice';
- break;
- case PropelColumnTypes::DOUBLE:
- case PropelColumnTypes::FLOAT:
- case PropelColumnTypes::NUMERIC:
- case PropelColumnTypes::DECIMAL:
- case PropelColumnTypes::REAL:
- $name = 'Number';
- break;
- case PropelColumnTypes::INTEGER:
- case PropelColumnTypes::SMALLINT:
- case PropelColumnTypes::TINYINT:
- case PropelColumnTypes::BIGINT:
- $name = 'Integer';
- break;
- case PropelColumnTypes::DATE:
- case PropelColumnTypes::TIME:
- case PropelColumnTypes::TIMESTAMP:
- $name = 'DateRange';
- break;
- default:
- $name = 'Pass';
- }
-
- if ($column->isPrimaryKey() || $column->isForeignKey())
- {
- $name = 'PropelChoice';
- }
-
- return sprintf('sfValidator%s', $name);
- }
-
- /**
- * Returns a PHP string representing options to pass to a validator for a given column.
- *
- * @param ColumnMap $column A ColumnMap object
- *
- * @return string The options to pass to the validator as a PHP string
- */
- public function getValidatorOptionsForColumn(ColumnMap $column)
- {
- $options = array('\'required\' => false');
-
- if ($column->isForeignKey())
- {
- $options[] = sprintf('\'model\' => \'%s\', \'column\' => \'%s\'', $this->getForeignTable($column)->getClassname(), strtolower($column->getRelatedColumnName()));
- }
- else if ($column->isPrimaryKey())
- {
- $options[] = sprintf('\'model\' => \'%s\', \'column\' => \'%s\'', $column->getTable()->getClassname(), strtolower($column->getColumnName()));
- }
- else
- {
- switch ($column->getType())
- {
- case PropelColumnTypes::BOOLEAN:
- $options[] = "'choices' => array('', 1, 0)";
- break;
- case PropelColumnTypes::DATE:
- case PropelColumnTypes::TIME:
- case PropelColumnTypes::TIMESTAMP:
- $options[] = "'from_date' => new sfValidatorDate(array('required' => false)), 'to_date' => new sfValidatorDate(array('required' => false))";
- break;
- }
- }
-
- return count($options) ? sprintf('array(%s)', implode(', ', $options)) : '';
- }
-
- public function getValidatorForColumn($column)
- {
- $format = 'new %s(%s)';
- if (in_array($class = $this->getValidatorClassForColumn($column), array('sfValidatorInteger', 'sfValidatorNumber')))
- {
- $format = 'new sfValidatorSchemaFilter(\'text\', new %s(%s))';
- }
-
- return sprintf($format, $class, $this->getValidatorOptionsForColumn($column));
- }
-
- public function getType(ColumnMap $column)
- {
- if ($column->isForeignKey())
- {
- return 'ForeignKey';
- }
-
- switch ($column->getType())
- {
- case PropelColumnTypes::BOOLEAN:
- return 'Boolean';
- case PropelColumnTypes::DATE:
- case PropelColumnTypes::TIME:
- case PropelColumnTypes::TIMESTAMP:
- return 'Date';
- case PropelColumnTypes::DOUBLE:
- case PropelColumnTypes::FLOAT:
- case PropelColumnTypes::NUMERIC:
- case PropelColumnTypes::DECIMAL:
- case PropelColumnTypes::REAL:
- case PropelColumnTypes::INTEGER:
- case PropelColumnTypes::SMALLINT:
- case PropelColumnTypes::TINYINT:
- case PropelColumnTypes::BIGINT:
- return 'Number';
- default:
- return 'Text';
- }
- }
- }