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));
}
}
