72 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package   FOF
 | |
|  * @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
 | |
|  * @license   GNU General Public License version 3, or later
 | |
|  */
 | |
| 
 | |
| namespace  FOF40\Model\DataModel\Behaviour;
 | |
| 
 | |
| defined('_JEXEC') || die;
 | |
| 
 | |
| use FOF40\Event\Observer;
 | |
| use FOF40\Model\DataModel;
 | |
| use JDatabaseQuery;
 | |
| 
 | |
| /**
 | |
|  * FOF model behavior class to updated the modified_by and modified_on fields on newly created records.
 | |
|  *
 | |
|  * This behaviour is added to DataModel by default. If you want to remove it you need to do
 | |
|  * $this->behavioursDispatcher->removeBehaviour('Modified');
 | |
|  *
 | |
|  * @since  3.0
 | |
|  */
 | |
| class Modified extends Observer
 | |
| {
 | |
| 	/**
 | |
| 	 * Add the modified_on and modified_by fields in the fieldsSkipChecks list of the model. We expect them to be empty
 | |
| 	 * so that we can fill them in through this behaviour.
 | |
| 	 *
 | |
| 	 * @param   DataModel  $model
 | |
| 	 */
 | |
| 	public function onBeforeCheck(DataModel &$model)
 | |
| 	{
 | |
| 		$model->addSkipCheckField('modified_on');
 | |
| 		$model->addSkipCheckField('modified_by');
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @param   DataModel  $model
 | |
| 	 * @param   \stdClass  $dataObject
 | |
| 	 */
 | |
| 	public function onBeforeUpdate(DataModel &$model, &$dataObject)
 | |
| 	{
 | |
| 		// Make sure we're not modifying a locked record
 | |
| 		$userId = $model->getContainer()->platform->getUser()->id;
 | |
| 		$isLocked = $model->isLocked($userId);
 | |
| 
 | |
| 		if ($isLocked)
 | |
| 		{
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		// Handle the modified_on field
 | |
| 		if ($model->hasField('modified_on'))
 | |
| 		{
 | |
| 			$model->setFieldValue('modified_on', $model->getContainer()->platform->getDate()->toSql(false, $model->getDbo()));
 | |
| 
 | |
| 			$modifiedOnField = $model->getFieldAlias('modified_on');
 | |
| 			$dataObject->$modifiedOnField = $model->getFieldValue('modified_on');
 | |
| 		}
 | |
| 
 | |
| 		// Handle the modified_by field
 | |
| 		if ($model->hasField('modified_by'))
 | |
| 		{
 | |
| 			$model->setFieldValue('modified_by', $userId);
 | |
| 
 | |
| 			$modifiedByField = $model->getFieldAlias('modified_by');
 | |
| 			$dataObject->$modifiedByField = $model->getFieldValue('modified_by');
 | |
| 		}
 | |
| 	}
 | |
| }
 |