/sbweb/sbweb_logica/lib/symfony/plugins/sfPropelPlugin/lib/widget/sfWidgetFormPropelChoice.class.php
PHP | 108 lines | 53 code | 12 blank | 43 comment | 4 complexity | 828dd6ff8f35f1f9e1d9d10f3ff1d588 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.
- */
-
- /**
- * sfWidgetFormPropelChoice represents a choice widget for a model.
- *
- * @package symfony
- * @subpackage widget
- * @author Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version SVN: $Id: sfWidgetFormPropelChoice.class.php 12803 2008-11-09 07:26:18Z fabien $
- */
- class sfWidgetFormPropelChoice extends sfWidgetFormChoice
- {
- /**
- * @see sfWidget
- */
- public function __construct($options = array(), $attributes = array())
- {
- $options['choices'] = new sfCallable(array($this, 'getChoices'));
-
- parent::__construct($options, $attributes);
- }
-
- /**
- * Constructor.
- *
- * Available options:
- *
- * * model: The model class (required)
- * * add_empty: Whether to add a first empty value or not (false by default)
- * If the option is not a Boolean, the value will be used as the text value
- * * method: The method to use to display object values (__toString by default)
- * * key_method: The method to use to display the object keys (getPrimaryKey by default)
- * * order_by: An array composed of two fields:
- * * The column to order by the results (must be in the PhpName format)
- * * asc or desc
- * * criteria: A criteria to use when retrieving objects
- * * connection: The Propel connection to use (null by default)
- * * multiple: true if the select tag must allow multiple selections
- * * peer_method: The peer method to use to fetch objects
- *
- * @see sfWidgetFormSelect
- */
- protected function configure($options = array(), $attributes = array())
- {
- $this->addRequiredOption('model');
- $this->addOption('add_empty', false);
- $this->addOption('method', '__toString');
- $this->addOption('key_method', 'getPrimaryKey');
- $this->addOption('order_by', null);
- $this->addOption('criteria', null);
- $this->addOption('connection', null);
- $this->addOption('multiple', false);
- $this->addOption('peer_method', 'doSelect');
-
- parent::configure($options, $attributes);
- }
-
- /**
- * Returns the choices associated to the model.
- *
- * @return array An array of choices
- */
- public function getChoices()
- {
- $choices = array();
- if (false !== $this->getOption('add_empty'))
- {
- $choices[''] = true === $this->getOption('add_empty') ? '' : $this->getOption('add_empty');
- }
-
- $class = constant($this->getOption('model').'::PEER');
-
- $criteria = is_null($this->getOption('criteria')) ? new Criteria() : clone $this->getOption('criteria');
- if ($order = $this->getOption('order_by'))
- {
- $method = sprintf('add%sOrderByColumn', 0 === strpos(strtoupper($order[1]), 'ASC') ? 'Ascending' : 'Descending');
- $criteria->$method(call_user_func(array($class, 'translateFieldName'), $order[0], BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME));
- }
- $objects = call_user_func(array($class, $this->getOption('peer_method')), $criteria, $this->getOption('connection'));
-
- $methodKey = $this->getOption('key_method');
- if (!method_exists($this->getOption('model'), $methodKey))
- {
- throw new RuntimeException(sprintf('Class "%s" must implement a "%s" method to be rendered in a "%s" widget', $this->getOption('model'), $methodKey, __CLASS__));
- }
-
- $methodValue = $this->getOption('method');
- if (!method_exists($this->getOption('model'), $methodValue))
- {
- throw new RuntimeException(sprintf('Class "%s" must implement a "%s" method to be rendered in a "%s" widget', $this->getOption('model'), $methodValue, __CLASS__));
- }
-
- foreach ($objects as $object)
- {
- $choices[$object->$methodKey()] = $object->$methodValue();
- }
-
- return $choices;
- }
- }