Exemplo n.º 1
0
 /**
  * Handle POST requests.
  *
  * @param Alpha\Util\Http\Request $request
  *
  * @return Alpha\Util\Http\Response
  *
  * @throws Alpha\Exception\SecurityException
  *
  * @since 1.0
  */
 public function doPOST($request)
 {
     self::$logger->debug('>>doPOST($request=[' . var_export($request, true) . '])');
     $params = $request->getParams();
     try {
         // check the hidden security fields before accepting the form POST data
         if (!$this->checkSecurityFields()) {
             throw new SecurityException('This page cannot accept post data from remote servers!');
             self::$logger->debug('<<doPOST');
         }
         // ensure that a OID is provided
         if (isset($params['denumOID'])) {
             $BOoid = $params['denumOID'];
         } else {
             throw new IllegalArguementException('Could not load the DEnum object as an denumOID was not supplied!');
         }
         if (isset($params['saveBut'])) {
             try {
                 $this->BO->load($BOoid);
                 // update the object from post data
                 $this->BO->populateFromArray($params);
                 ActiveRecord::begin();
                 $this->BO->save();
                 self::$logger->action('DEnum ' . $this->BO->getOID() . ' saved');
                 // now save the DEnumItems
                 $tmp = new DEnumItem();
                 $denumItems = $tmp->loadItems($this->BO->getID());
                 foreach ($denumItems as $item) {
                     $item->set('value', $params['value_' . $item->getID()]);
                     $item->save();
                     self::$logger->action('DEnumItem ' . $item->getOID() . ' saved');
                 }
                 // handle new DEnumItem if posted
                 if (isset($params['new_value']) && trim($params['new_value']) != '') {
                     $newItem = new DEnumItem();
                     $newItem->set('value', $params['new_value']);
                     $newItem->set('DEnumID', $this->BO->getID());
                     $newItem->save();
                     self::$logger->action('DEnumItem ' . $newItem->getOID() . ' created');
                 }
                 ActiveRecord::commit();
                 $this->setStatusMessage(View::displayUpdateMessage(get_class($this->BO) . ' ' . $this->BO->getID() . ' saved successfully.'));
                 return $this->doGET($request);
             } catch (FailedSaveException $e) {
                 self::$logger->error('Unable to save the DEnum of id [' . $params['oid'] . '], error was [' . $e->getMessage() . ']');
                 ActiveRecord::rollback();
             }
             ActiveRecord::disconnect();
         }
     } catch (SecurityException $e) {
         $this->setStatusMessage(View::displayErrorMessage($e->getMessage()));
         self::$logger->warn($e->getMessage());
     } catch (IllegalArguementException $e) {
         $this->setStatusMessage(View::displayErrorMessage($e->getMessage()));
         self::$logger->error($e->getMessage());
     } catch (RecordNotFoundException $e) {
         self::$logger->warn($e->getMessage());
         $this->setStatusMessage(View::displayErrorMessage('Failed to load the requested item from the database!'));
     }
     $body = View::displayPageHead($this);
     $message = $this->getStatusMessage();
     if (!empty($message)) {
         $body .= $message;
     }
     $body .= View::displayPageFoot($this);
     self::$logger->debug('<<doPOST');
     return new Response(200, $body, array('Content-Type' => 'text/html'));
 }