. */ /** * Doctrine_I18n * * @package Doctrine * @subpackage I18n * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_I18n extends Doctrine_Plugin { protected $_options = array( 'className' => '%CLASS%Translation', 'fields' => array(), 'generateFiles' => false, 'table' => false, 'pluginTable' => false, 'children' => array(), ); /** * __construct * * @param string $options * @return void */ public function __construct($options) { $this->_options = array_merge($this->_options, $options); } /** * buildDefinition * * @param object $Doctrine_Table * @return void */ public function buildDefinition() { if (empty($this->_options['fields'])) { throw new Doctrine_I18n_Exception('Fields not set.'); } $name = $this->_options['table']->getComponentName(); $columns = array(); $options = array('className' => $this->_options['className']); $fk = $this->buildForeignKeys($this->_options['table']); $cols = $this->_options['table']->getColumns(); foreach ($cols as $column => $definition) { if (in_array($column, $this->_options['fields'])) { $columns[$column] = $definition; $this->_options['table']->removeColumn($column); } } $columns['lang'] = array('type' => 'string', 'length' => 2, 'fixed' => true, 'primary' => true); $local = (count($fk) > 1) ? array_keys($fk) : key($fk); $relations = array($name => array('local' => $local, 'foreign' => $this->_options['table']->getIdentifier(), 'onDelete' => 'CASCADE', 'onUpdate' => 'CASCADE')); $columns += $fk; $options = array('className' => $this->_options['className'], 'queryParts' => array('indexBy' => 'lang')); $this->generateClass($options, $columns, $relations); $this->_options['pluginTable'] = $this->_options['table']->getConnection()->getTable($this->_options['className']); $this->_options['pluginTable']->bindQueryPart('indexBy', 'lang'); $this->generateChildDefinitions(); return true; } }