In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

EventHandler:OnBeforeItemUpdate

From In-Portal Developers Guide

Jump to: navigation, search
События, которые изменяют данные События, которые изменяют данные
Статьи в этой категории

Данное событие позволяет выполнить дополнительные действия до сохранения изменённой записи в базу данных. Это событие вызывается до того, как выполняется проверка (validation) значений в полях объекта.

Contents

Вызывается из событий

Данное событие косвенно вызывается из событий, изменяющих (созданные ранее) записи: OnUpdate, OnPreSave. Все ранее упомянутые события в свою очередь вызывают метод kDBItem::Update, который при помощи метода kDBItem::raiseEvent вызывает данное событие. Более детально это продемонстрировано ниже:

OnUpdate -> kDBItem::Update -> kDBItem::raiseEvent

Входные параметры

название описание
id (int) ID той записи, которая будет в последствии сохранена в базу данных.

Потенциальное применение

Данное событие можно использовать для

  • выполнения дополнительных проверок значений полей объекта;
  • установки значений полей, которые не доступны на форме редактирования;
  • запрета изменения записи в базе данных.

Ниже будет приведён пример, в котором показано как можно использовать все описанные приёмы.

function OnBeforeItemUpdate(&$event)
{
	parent::OnBeforeItemUpdate($event);
 
	$object =& $event->getObject();
	/* @var $object kDBItem */
 
	if ($object->GetDBField('Name') != 'John') {
		// если значение поля Name не равно John, то показывать специфическую (не стандартную) ошибку
		$object->SetError('Name', 'invalid_name', 'la_error_OnlyJohnsAllowed');
	}
 
	// запоминание времени изменения записи
	$now = adodb_mktime();
	$object->SetDBField('ModifiedOn_date', $now);
	$object->SetDBField('ModifiedOn_time', $now);
 
	if ($object->GetDBField('Status') != STATUS_ACTIVE) {
		// можно изменять только активные записи
		$event->status = erFAIL;
	}
}

Ограничения

Если статус события ($event->status), по его завершении, не будет равен erSUCCESS, то событие OnAfterItemUpdate вызвано не будет и запись не будет изменена в базе данных.