コード例 #1
0
ファイル: ExcelController.php プロジェクト: alphadevx/alpha
 /**
  * Loads the BO indicated in the GET request and handles the conversion to Excel.
  *
  * @param Alpha\Util\Http\Request $request
  *
  * @return Alpha\Util\Http\Response
  *
  * @throws Alpha\Exception\ResourceNotFoundException
  *
  * @since 1.0
  */
 public function doGet($request)
 {
     self::$logger->debug('>>doGet(request=[' . var_export($request, true) . '])');
     $params = $request->getParams();
     $body = '';
     try {
         if (isset($params['ActiveRecordType'])) {
             $ActiveRecordType = $params['ActiveRecordType'];
             $className = "Alpha\\Model\\{$ActiveRecordType}";
             if (class_exists($className)) {
                 $this->BO = new $className();
             } else {
                 throw new IllegalArguementException('No ActiveRecord available to render!');
             }
             // the name of the file download
             if (isset($params['ActiveRecordOID'])) {
                 $fileName = $this->BO->getTableName() . '-' . $params['ActiveRecordOID'];
             } else {
                 $fileName = $this->BO->getTableName();
             }
             $response = new Response(200);
             // header info for browser
             $response->setHeader('Content-Type', 'application/vnd.ms-excel');
             $response->setHeader('Content-Disposition', 'attachment; filename=' . $fileName . '.xls');
             $response->setHeader('Pragma', 'no-cache');
             $response->setHeader('Expires', '0');
             // handle a single BO
             if (isset($params['ActiveRecordOID'])) {
                 $this->BO->load($params['ActiveRecordOID']);
                 ActiveRecord::disconnect();
                 $convertor = new ActiveRecord2Excel($this->BO);
                 $body .= $convertor->render();
             } else {
                 // handle all BOs of this type
                 $BOs = $BO->loadAll();
                 ActiveRecord::disconnect();
                 $first = true;
                 foreach ($BOs as $BO) {
                     $convertor = new ActiveRecord2Excel($BO);
                     if ($first) {
                         $body .= $convertor->render(true);
                         $first = false;
                     } else {
                         $body .= $convertor->render(false);
                     }
                 }
             }
         } else {
             throw new IllegalArguementException('No ActiveRecordType parameter available for ViewExcel controller!');
         }
     } catch (RecordNotFoundException $e) {
         self::$logger->error($e->getMessage());
         throw new ResourceNotFoundException($e->getMessage());
     } catch (IllegalArguementException $e) {
         self::$logger->error($e->getMessage());
         throw new ResourceNotFoundException($e->getMessage());
     }
     self::$logger->debug('<<__doGet');
     $response->setBody($body);
     return $response;
 }
コード例 #2
0
 /**
  * Method to handle DELETE requests.
  *
  * @param Alpha\Util\Http\Request $request
  *
  * @throws Alpha\Exception\IllegalArguementException
  * @throws Alpha\Exception\SecurityException
  *
  * @return Alpha\Util\Http\Response
  *
  * @since 2.0
  */
 public function doDELETE($request)
 {
     self::$logger->debug('>>doDELETE(request=[' . var_export($request, true) . '])');
     $config = ConfigProvider::getInstance();
     $params = $request->getParams();
     $accept = $request->getAccept();
     try {
         // check the hidden security fields before accepting the form data
         if (!$this->checkSecurityFields()) {
             throw new SecurityException('This page cannot accept data from remote servers!');
         }
         if (isset($params['ActiveRecordType'])) {
             $ActiveRecordType = urldecode($params['ActiveRecordType']);
         } else {
             throw new IllegalArguementException('No ActiveRecord available to edit!');
         }
         if (class_exists($ActiveRecordType)) {
             $record = new $ActiveRecordType();
         } else {
             throw new IllegalArguementException('No ActiveRecord [' . $ActiveRecordType . '] available to edit!');
         }
         // 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!');
         }
         $record->load($params['ActiveRecordOID']);
         ActiveRecord::begin();
         $record->delete();
         ActiveRecord::commit();
         ActiveRecord::disconnect();
         self::$logger->action('Deleted ' . $ActiveRecordType . ' instance with OID ' . $params['ActiveRecordOID']);
         if ($accept == 'application/json') {
             $response = new Response(200);
             $response->setHeader('Content-Type', 'application/json');
             $response->setBody(json_encode(array('message' => 'deleted')));
         } else {
             $response = new Response(301);
             if (isset($params['statusMessage'])) {
                 $this->setStatusMessage(View::displayUpdateMessage($params['statusMessage']));
             } else {
                 $this->setStatusMessage(View::displayUpdateMessage('Deleted'));
             }
             if ($this->getNextJob() != '') {
                 $response->redirect($this->getNextJob());
             } else {
                 if ($this->request->isSecureURI()) {
                     $response->redirect(FrontController::generateSecureURL('act=Alpha\\Controller\\ActiveRecordController&ActiveRecordType=' . $ActiveRecordType . '&start=0&limit=' . $config->get('app.list.page.amount')));
                 } else {
                     $response->redirect($config->get('app.url') . '/records/' . $params['ActiveRecordType']);
                 }
             }
         }
     } catch (SecurityException $e) {
         self::$logger->warn($e->getMessage());
         throw new ResourceNotAllowedException($e->getMessage());
     } catch (RecordNotFoundException $e) {
         self::$logger->warn($e->getMessage());
         throw new ResourceNotFoundException('The item that you have requested cannot be found!');
     } catch (AlphaException $e) {
         self::$logger->error($e->getMessage());
         ActiveRecord::rollback();
     }
     self::$logger->debug('<<doDELETE');
     return $response;
 }
コード例 #3
0
ファイル: ResponseTest.php プロジェクト: alphadevx/alpha
 /**
  * Testing the setting of content length.
  */
 public function testGetContentLength()
 {
     $response = new Response(200, '12345');
     $this->assertEquals(5, $response->getContentLength(), 'Testing the setting of content length');
     $response->setBody('1234567890');
     $this->assertEquals(10, $response->getContentLength(), 'Testing the setting of content length');
 }
コード例 #4
0
ファイル: FeedController.php プロジェクト: alphadevx/alpha
 /**
  * Handle GET requests.
  *
  * @param Alpha\Util\Http\Request $request
  *
  * @return Alpha\Util\Http\Response
  *
  * @since 1.0
  *
  * @throws Alpha\Exception\ResourceNotFoundException
  */
 public function doGET($request)
 {
     self::$logger->debug('>>doGET($request=[' . var_export($request, true) . '])');
     $config = ConfigProvider::getInstance();
     $params = $request->getParams();
     $response = new Response(200);
     try {
         if (isset($params['ActiveRecordType'])) {
             $ActiveRecordType = urldecode($params['ActiveRecordType']);
         } else {
             throw new IllegalArguementException('ActiveRecordType not specified to generate feed!');
         }
         if (isset($params['type'])) {
             $type = $params['type'];
         } else {
             throw new IllegalArguementException('No feed type specified to generate feed!');
         }
         if (class_exists($ActiveRecordType)) {
             $this->ActiveRecordType = $ActiveRecordType;
         } else {
             throw new IllegalArguementException('No ActiveRecord available to render!');
         }
         $this->type = $type;
         $this->setup();
         switch ($type) {
             case 'RSS2':
                 $feed = new RSS2($this->ActiveRecordType, $this->title, str_replace('&', '&amp;', $request->getURI()), $this->description);
                 $feed->setFieldMappings($this->fieldMappings[0], $this->fieldMappings[1], $this->fieldMappings[2], $this->fieldMappings[3]);
                 $response->setHeader('Content-Type', 'application/rss+xml');
                 break;
             case 'RSS':
                 $feed = new RSS($this->ActiveRecordType, $this->title, str_replace('&', '&amp;', $request->getURI()), $this->description);
                 $feed->setFieldMappings($this->fieldMappings[0], $this->fieldMappings[1], $this->fieldMappings[2], $this->fieldMappings[3]);
                 $response->setHeader('Content-Type', 'application/rss+xml');
                 break;
             case 'Atom':
                 $feed = new Atom($this->ActiveRecordType, $this->title, str_replace('&', '&amp;', $request->getURI()), $this->description);
                 $feed->setFieldMappings($this->fieldMappings[0], $this->fieldMappings[1], $this->fieldMappings[2], $this->fieldMappings[3], $this->fieldMappings[4]);
                 if ($config->get('feeds.atom.author') != '') {
                     $feed->addAuthor($config->get('feeds.atom.author'));
                 }
                 $response->setHeader('Content-Type', 'application/atom+xml');
                 break;
         }
         // now add the twenty last items (from newest to oldest) to the feed, and render
         $feed->loadBOs(20, $this->sortBy);
         $response->setBody($feed->render());
         // log the request for this news feed
         $feedLog = new LogProviderFile();
         $feedLog->setPath($config->get('app.file.store.dir') . 'logs/feeds.log');
         $feedLog->writeLine(array($this->ActiveRecordType, $this->type, date('Y-m-d H:i:s'), $request->getUserAgent(), $request->getIP()));
     } catch (IllegalArguementException $e) {
         self::$logger->error($e->getMessage());
         throw new ResourceNotFoundException($e->getMessage());
     }
     self::$logger->debug('<<doGet');
     return $response;
 }
コード例 #5
0
ファイル: Controller.php プロジェクト: alphadevx/alpha
 /**
  * Method to return an access error for trespassing users.  HTTP response header code will be 403.
  *
  * @return Alpha\Util\Http\Response
  *
  * @since 1.0
  */
 public function accessError()
 {
     self::$logger->debug('>>accessError()');
     if (method_exists($this, 'before_accessError_callback')) {
         $this->before_accessError_callback();
     }
     $config = ConfigProvider::getInstance();
     $sessionProvider = $config->get('session.provider.name');
     $session = SessionProviderFactory::getInstance($sessionProvider);
     if ($session->get('currentUser') !== false) {
         self::$logger->warn('The user [' . $session->get('currentUser')->get('email') . '] attempted to access the resource [' . $this->request->getURI() . '] but was denied due to insufficient rights');
     } else {
         self::$logger->warn('An unknown user attempted to access the resource [' . $this->request->getURI() . '] but was denied due to insufficient rights');
     }
     $response = new Response(403);
     $response->setBody(View::renderErrorPage(403, 'You do not have the correct access rights to view this page.  If you have not logged in yet, try going back to the home page and logging in from there.'));
     if (method_exists($this, 'after_accessError_callback')) {
         $this->after_accessError_callback();
     }
     self::$logger->debug('<<accessError');
     return $response;
 }