Exemplo n.º 1
0
 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')];
     }
 }