diff --git a/lib/Doctrine/I18n.php b/lib/Doctrine/I18n.php new file mode 100644 index 000000000..08b6a526d --- /dev/null +++ b/lib/Doctrine/I18n.php @@ -0,0 +1,114 @@ +. + */ +/** + * Doctrine_I18n + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @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, + ); + + protected $_auditTable; + + public function __construct($options) + { + $this->_options = array_merge($this->_options, $options); + } + + public function buildDefinition(Doctrine_Table $table) + { + $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' => $className); + + $fk = array(); + foreach ((array) $id as $column) { + $def = $table->getDefinitionOf($column); + + unset($def['autoincrement']); + unset($def['sequence']); + unset($def['primary']); + + $col = strtolower(Doctrine::tableize($name) . '_' . $column); + + $def['primary'] = true; + $fk[$col] = $def; + } + + $cols = $table->getColumns(); + + foreach ($cols as $column => $definition) { + if (in_array($column, $this->_options['fields'])) { + $columns[$column] = $definition; + } + } + + $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']); + + $builder = new Doctrine_Import_Builder(); + + $def = $builder->buildDefinition($options, $columns, $relations); + + if ( ! $this->_options['generateFiles']) { + eval($def); + } + return true; + } +}