You have to create the Listener :
<?php
class Doctrine_Template_Listener_Usertraceable extends
Doctrine_Record_Listener {
/**
*
* @var string
*/
protected $_options = array();
/**
* __construct
*
* @param string $options
* @return void
*/
public function __construct(array $options)
{
$this->_options = $options;
}
/**
*
* @param Doctrine_Event $event
* @return void
*/
public function preInsert(Doctrine_Event $event)
{
$guard_user = sfContext::getInstance()->getUser()->getGuardUser();
if ( ! $this->_options['created']['disabled']) {
$createdName =
$event->getInvoker()->getTable()->getFieldName($this->_options['created']['name']);
$modified = $event->getInvoker()->getModified();
if ( ! isset($modified[$createdName])) {
$event->getInvoker()->$createdName = $guard_user;
}
}
if ( ! $this->_options['updated']['disabled']) {
$updatedName =
$event->getInvoker()->getTable()->getFieldName($this->_options['updated']['name']);
$modified = $event->getInvoker()->getModified();
if ( ! isset($modified[$updatedName])) {
$event->getInvoker()->$updatedName = $guard_user;
}
}
}
/**
*
* @param Doctrine_Event $evet
* @return void
*/
public function preUpdate(Doctrine_Event $event)
{
$guard_user = sfContext::getInstance()->getUser()->getGuardUser();
if ( ! $this->_options['updated']['disabled']) {
$updatedName =
$event->getInvoker()->getTable()->getFieldName($this->_options['updated']['name']);
$modified = $event->getInvoker()->getModified();
if ( ! isset($modified[$updatedName])) {
$event->getInvoker()->$updatedName = $guard_user;
}
}
}
/**
* Set the updated field for dql update queries
*
* @param Doctrine_Event $evet
* @return void
*/
public function preDqlUpdate(Doctrine_Event $event)
{
$guard_user = sfContext::getInstance()->getUser()->getGuardUser();
if ( ! $this->_options['updated']['disabled']) {
$params = $event->getParams();
$updatedName =
$event->getInvoker()->getTable()->getFieldName($this->_options['updated']['name']);
$field = $params['alias'] . '.' . $updatedName;
$query = $event->getQuery();
if ( ! $query->contains($field)) {
$query->set($field, '?', $guard_user);
}
}
}
}
?>
2009/6/26 juro <[email protected]>
>
> Hi,
> using the sfDoctrineGuardPlugin, I have created a new Doctrine
> behaviour/template (similar to the Timestampable behaviour). This
> creates two fields created_by and updated_by that *should* be foreign
> keys to the sfGuardUser.id field. Currently the behaviour creates the
> fields but not the relationships. Can anyone check why not?
>
> juro
>
>
> <?php
> /**
> * Doctrine Template that creates two fields created_by and updated_by
> * @author: Roland Jungwirth
> * @version: 0.9
> */
> class Doctrine_Template_Usertraceable extends Doctrine_Template
> {
> /* Array of Timestampable options
> *
> * @var string
> */
> protected $_options = array('created' => array('name' =>
> 'created_by',
> 'type' =>
> 'integer',
> 'length' =>
> 4,
> 'disabled' =>
> false,
> 'options' =>
> array()),
> 'updated' => array('name' =>
> 'updated_by',
> 'type' =>
> 'integer',
> 'length' =>
> 4,
> 'disabled' =>
> false,
> 'options' =>
> array()));
>
> public function setTableDefinition()
> {
> if( ! $this->_options['created']['disabled']) {
> $this->hasColumn($this->_options['created']['name'], $this-
> >_options['created']['type'], 4, $this->_options['created']
> ['options']);
> }
>
> if( ! $this->_options['updated']['disabled']) {
> $this->hasColumn($this->_options['updated']['name'], $this-
> >_options['updated']['type'], 4, $this->_options['updated']
> ['options']);
> }
> }
>
> public function setUp()
> {
> $this->hasOne('sfGuardUser as CreatedBy', array('local' => $this-
> >_options['created']['name'], 'foreign' => 'id'));
> $this->hasOne('sfGuardUser as UpdatedBy', array('local' => $this-
> >_options['updated']['name'], 'foreign' => 'id'));
> }
> }
> ?>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---