159 lines
4.1 KiB
PHP
159 lines
4.1 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: sfDoctrineRecord.class.php 5050 2007-09-12 16:13:53Z Jonathan.Wage $
|
|
*/
|
|
|
|
class sfDoctrineRecord extends Doctrine_Record
|
|
{
|
|
public function __toString()
|
|
{
|
|
// if the current object doesn't exist we return nothing
|
|
if (!$this->exists())
|
|
{
|
|
return '-';
|
|
}
|
|
|
|
// we try to guess a column which would give a good description of the object
|
|
foreach (array('name', 'title', 'description', 'id') as $descriptionColumn)
|
|
{
|
|
if ($this->getTable()->hasColumn($descriptionColumn))
|
|
{
|
|
return $this->get($descriptionColumn);
|
|
}
|
|
}
|
|
|
|
return sprintf('No description for object of class "%s"', $this->getTable()->getComponentName());
|
|
}
|
|
|
|
// FIXME: All code should be updated to use the new identifier() method directly
|
|
public function obtainIdentifier()
|
|
{
|
|
return $this->identifier();
|
|
}
|
|
|
|
public function set($name, $value, $load = true)
|
|
{
|
|
// ucfirst() is used instead of camelize() to be compatible with older version of Doctrine
|
|
$filterMethod = 'filterSet'.ucfirst($name);
|
|
|
|
if (method_exists($this, $filterMethod))
|
|
{
|
|
$value = $this->$filterMethod($value);
|
|
}
|
|
|
|
$setterMethod = 'set'.sfInflector::camelize($name);
|
|
|
|
return method_exists($this, $setterMethod) ? $this->$setterMethod($value) : parent::set($name, $value, $load);
|
|
}
|
|
|
|
public function get($name, $load = true)
|
|
{
|
|
$getterMethod = 'get'.sfInflector::camelize($name);
|
|
|
|
$value = method_exists($this, $getterMethod) ? $this->$getterMethod() : parent::get($name, $load);
|
|
|
|
// ucfirst() is used instead of camelize() to be compatible with older version of Doctrine
|
|
$filterMethod = 'filterGet'.ucfirst($name);
|
|
|
|
if (method_exists($this, $filterMethod))
|
|
{
|
|
$value = $this->$filterMethod($value);
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
function rawSet($name, $value, $load = true)
|
|
{
|
|
return parent::set($name, $value, $load);
|
|
}
|
|
|
|
function rawGet($name)
|
|
{
|
|
return parent::rawGet($name);
|
|
}
|
|
|
|
public function __call($m, $a)
|
|
{
|
|
try {
|
|
$verb = substr($m, 0, 3);
|
|
|
|
if ($verb == 'set' || $verb == 'get')
|
|
{
|
|
$camelColumn = substr($m, 3);
|
|
|
|
if (in_array($camelColumn, array_keys($this->getTable()->getRelations())))
|
|
{
|
|
// the column is actually a class name
|
|
$column = $camelColumn;
|
|
}
|
|
else
|
|
{
|
|
// the relation was not found
|
|
$column = sfInflector::underscore($camelColumn);
|
|
}
|
|
|
|
if ($verb == 'get')
|
|
{
|
|
return $this->get($column);
|
|
}
|
|
else // $verb must be 'set'...
|
|
{
|
|
return $this->set($column, $a[0]);
|
|
}
|
|
}
|
|
} catch(Exception $e) {
|
|
return parent::__call($m, $a);
|
|
}
|
|
}
|
|
|
|
// added for compatibility with the _get_options_from_objects helper
|
|
public function getPrimaryKey()
|
|
{
|
|
return $this->obtainIdentifier();
|
|
}
|
|
|
|
// to check for the existence of a record
|
|
public function has($name)
|
|
{
|
|
return $this->get($name)->exists();
|
|
}
|
|
|
|
// Hook to update created_at and updated_at fields on record insert
|
|
public function preInsert($event)
|
|
{
|
|
// Set created_at and update_at to now, if they exist in this record
|
|
$now = date("Y-m-d H:i:s", time());
|
|
if ($this->getTable()->hasColumn('created_at'))
|
|
{
|
|
$this->rawSet('created_at', $now);
|
|
}
|
|
if ($this->getTable()->hasColumn('updated_at'))
|
|
{
|
|
$this->rawSet('updated_at', $now);
|
|
}
|
|
}
|
|
|
|
// Hook to update updated_at field on record update
|
|
public function preUpdate($event)
|
|
{
|
|
// Set update_at to now, if it exists in this record
|
|
$now = date("Y-m-d H:i:s", time());
|
|
if ($this->getTable()->hasColumn('updated_at'))
|
|
{
|
|
$this->rawSet('updated_at', $now);
|
|
}
|
|
}
|
|
}
|