public function jsonSaveAction() { ignore_user_abort(true); $db = Zend_Registry::get('db'); if ($db) { $db->beginTransaction(); } // zuvor war statt diesem kommentar das $row = $this->_form->getRow(); // drin und wurde bei processInput und validate übergeben, aber die form // weiß selbst das model, deshalb passt NULL // Runtergeschoben wurde das $this->_form->getRow() weil bei der Kwf_User_Form // die row im processInput gefaket wird, da hier ->createUserRow() aufgerufen // wird anstatt ->createRow() und diese dann im _form->getRow() zurück kommt $postData = $this->_form->processInput(null, $this->getRequest()->getParams()); $this->_beforeValidate($postData); $invalid = $this->_form->validate(null, $postData); if ($invalid) { $invalid = Kwf_Form::formatValidationErrors($invalid); throw new Kwf_ClientException(implode("<br />", $invalid)); } $data = $this->_form->prepareSave(null, $postData); $row = $this->_form->getRow(); $insert = false; $primaryKey = $this->_form->getPrimaryKey(); $skip = false; if ($row && $primaryKey) { if (is_array($primaryKey)) { $primaryKey = $primaryKey[1]; } if (!$row->{$primaryKey}) { $insert = true; } if ($insert) { $sessionFormId = new Kwf_Session_Namespace('avoid_reinsert_id'); if ($this->_getParam('avoid_reinsert_id') && isset($sessionFormId->avoid[$this->_getParam('avoid_reinsert_id')])) { $skip = true; } if (!isset($this->_permissions['add']) || !$this->_permissions['add']) { throw new Kwf_Exception('Add is not allowed.'); } if (!$skip) { $this->_beforeInsert($row); } } else { if (!isset($this->_permissions['save']) || !$this->_permissions['save']) { throw new Kwf_Exception('Save is not allowed.'); } } if (!$skip) { $this->_beforeSave($row); } } if (!$skip) { //erst hier unten Berechtigungen überprüfen, damit beforeInsert usw vorher noch ausgeführt //wird und eventuelle Daten gesetzt werden if (!$this->_hasPermissions($row, 'save')) { throw new Kwf_Exception("Save is not allowed for this row."); } $data = $this->_form->save(null, $postData); $this->_form->afterSave(null, $postData); if ($row) { if ($insert) { $this->_afterInsert($row); } $this->_afterSave($row); } if ($db) { $db->commit(); } $this->view->data = $data; $sessionFormId = new Kwf_Session_Namespace('avoid_reinsert_id'); if (!isset($sessionFormId->avoid)) { $avoid = array(); } else { $avoid = $sessionFormId->avoid; } $avoid[$this->_getParam('avoid_reinsert_id')] = $data; $sessionFormId->avoid = $avoid; } else { $this->view->data = $sessionFormId->avoid[$this->_getParam('avoid_reinsert_id')]; } }