Tipps und Tricks Filter

Nachbilden von onsubmit_beforesave_callback

Im alten Forum tauchte die Frage auf, wie man beim Submit die neuen Daten mit den alten (bei edit) vergleichen kann. Eine Funktion "onsubmit_beforesave_callback" gibt es ja nicht.

Im englischsprachigem Forum kam es zu einer ähnlichen Frage. Daraus nun eine Lösungsmöglichkeit.
1. über onload_callback die alten Werte merken
2. über onsubmit_callback die neuen Werte mit den alten vergleichen

Im Detail könnte das dann so aussehen.

// Config
'config' => array
(
	'dataContainer'               => 'Table',
	'enableVersioning'            => false,
	'closed'                      => true,
	'onload_callback'		 => array
	(
		array('tl_leads', 'cacheStatus'),
	),
	'onsubmit_callback'		  => array
	(
		array('tl_leads', 'checkStatus'),
	),
/**
 * Save a copy of the current status to check if it has changed later
 */
public function cacheStatus($dc)
{
	$row = $this->Database->prepare("SELECT status FROM tl_leads WHERE id=?")
						  ->execute($this->Input->get('id'))
						  ->fetchAssoc();
	
	$this->Session->set('tl_lead.status', $row['status']);
}


/**
 * Check status, if it is "answered", present a mail form
 */
public function checkStatus($dc)
{
	$row = $this->Database->prepare("SELECT * FROM tl_leads WHERE id=?")
						  ->execute($this->Input->get('id'));
	
	if($this->Session->get('tl_lead.status') !== $row->status && $row->status == 'answered')
	{
		$this->Database->prepare("UPDATE tl_leads SET status=? WHERE id=?")
					   ->execute($this->Session->get('tl_lead.status'), $this->Input->get('id'));
	
		$next = (strlen($this->Input->post('saveNclose')) ? 'close' : 'return');
		$this->redirect($this->addToUrl('key=mail&next='.$next));
	}
}