1
0
mirror of synced 2024-12-16 08:06:02 +03:00
doctrine2/website/plugins/sfDoctrinePlugin/lib/sfDoctrineRecordI18n.class.php
2007-09-12 21:56:14 +00:00

172 lines
3.7 KiB
PHP

<?php
/*
* This file is part of the sfDoctrine package.
* (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @package symfony.plugins
* @subpackage sfDoctrine
* @author Olivier Verdier <Olivier.Verdier@gmail.com>
* @version SVN: $Id: sfDoctrineRecordI18n.class.php 4498 2007-06-30 20:18:01Z mahono $
*/
class sfDoctrineRecordI18n extends sfDoctrineRecord
{
protected
$cultureName = '',
$i18nColumns = null,
$i18nTable = '',
$culture = null;
public function setCulture($newCulture)
{
$this->culture = $newCulture;
}
public function getCulture()
{
// lazily set the culture to the current user's one
if (!$this->culture)
{
$this->culture = sfContext::getInstance()->getUser()->getCulture();
}
return $this->culture;
}
public function getI18nTable()
{
return $this->getTable()->getConnection()->getTable($this->i18nTable);
}
public function getCurrentI18nObject($create = false)
{
return $this->getI18nObjectForCulture($this->getCulture(), $create);
}
public function getI18nObjectForCulture($culture, $create)
{
if (empty($this->i18nTable))
{
$this->setUp();
}
$coll = parent::get($this->i18nTable);
if (isset($coll[$culture]))
{
return $coll[$culture];
}
// the i18n object does not exist
if ($create)
{
$obj = $this->getI18nTable()->create();
$obj->set($this->cultureName, $culture);
$coll->add($obj);
return $obj;
}
return null; // not found and not created
}
protected function hasI18nTable($i18nTableName, $cultureName)
{
$this->i18nTable = $i18nTableName;
$i18nTable = $this->getI18nTable();
$i18nTable->setAttribute(Doctrine::ATTR_COLL_KEY, $cultureName);
$columns = $i18nTable->getColumns();
$this->cultureName = $cultureName;
unset($columns[$cultureName]);
$pks = $i18nTable->getPrimaryKeys();
foreach($pks as $pk)
{
unset($columns[$pk]);
}
$this->i18nColumns = array_keys($columns);
}
// we need this function in order to be sure that setUp has been called
protected function getI18nColumns()
{
if (is_null($this->i18nColumns))
{
$this->setUp();
}
return $this->i18nColumns;
}
public function get($name, $load = true)
{
// check if $name is i18n
if (in_array($name, $this->getI18nColumns()))
{
if ($obj = $this->getCurrentI18nObject())
{
return $obj->get($name, $load);
}
else
{
return null;
}
}
return parent::get($name, $load);
}
public function set($name, $value, $load = true)
{
if (in_array($name, $this->getI18nColumns()))
{
$obj = $this->getCurrentI18nObject(true);
$obj->set($name, $value, $load);
}
else
{
parent::set($name, $value, $load);
}
}
public function contains($name)
{
$i18n = $this->getCurrentI18nObject();
return $i18n ? $i18n->contains($name) : parent::contains($name);
}
public function getData()
{
$i18n = $this->getCurrentI18nObject();
$i18nData = $i18n ? $i18n->getData() : array();
$data = parent::getData();
return array_merge($data, $i18nData);
}
/**
* @return integer the number of columns in this record
*/
public function count()
{
$data = $this->getData();
return count($data);
}
public function toArray()
{
$array = parent::toArray();
$i18n = $this->getCurrentI18nObject();
$i18nArray = $i18n ? $i18n->toArray() : array();
return array_merge($array, $i18nArray);
}
}