. */ /** * 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, ); protected $_auditTable; public function __construct($options) { $this->_options = array_merge($this->_options, $options); } public function buildDefinition(Doctrine_Table $table) { if (empty($this->_options['fields'])) { throw new Doctrine_I18n_Exception('Fields not set.'); } $this->_options['className'] = str_replace('%CLASS%', $this->_options['table']->getComponentName(), $this->_options['className']); $name = $table->getComponentName(); if (class_exists($this->_options['className'])) { return false; } $columns = array(); $id = $table->getIdentifier(); $options = array('className' => $this->_options['className']); $fk = array(); foreach ((array) $id as $column) { $def = $table->getDefinitionOf($column); unset($def['autoincrement']); unset($def['sequence']); $fk[$column] = $def; } $cols = $table->getColumns(); foreach ($cols as $column => $definition) { if (in_array($column, $this->_options['fields'])) { $columns[$column] = $definition; $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' => $id, 'onDelete' => 'CASCADE', 'onUpdate' => 'CASCADE')); $columns += $fk; $options = array('className' => $this->_options['className'], 'queryParts' => array('indexBy' => 'lang')); $builder = new Doctrine_Import_Builder(); $def = $builder->buildDefinition($options, $columns, $relations); if ( ! $this->_options['generateFiles']) { eval($def); } $this->_options['pluginTable'] = $table->getConnection()->getTable($this->_options['className']); $this->_options['pluginTable']->bindQueryPart('indexBy', 'lang'); return true; } }