public function isLocked($userId = null)
{
if (!$this->hasField('locked_on') && !$this->hasField('locked_by')) {
return false;
}
$nullDate = $this->getDbo()->getNullDate();
// Get the locked_by / locked_on
$locked_on = $nullDate;
$locked_by = 0;
if ($this->hasField('locked_on')) {
$locked_on = $this->getFieldValue('locked_on', $nullDate);
if (empty($locked_on)) {
$locked_on = $nullDate;
}
}
if ($this->hasField('locked_by')) {
$locked_by = $this->getFieldValue('locked_by', 0);
if (empty($locked_by)) {
$locked_by = 0;
}
}
$allowedUsers = array(0);
if (!empty($userId)) {
$allowedUsers[] = $userId;
}
if (in_array($locked_by, $allowedUsers)) {
return false;
}
return $locked_on != $nullDate;
}
/** * @param DataModel $model * @param \stdClass $dataObject */ public function onBeforeUpdate(&$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'); } }