コード例 #1
0
ファイル: ErrorPresenter.php プロジェクト: norbe/AutoUse
	public function actionDefault($exception)
	{
		$application = Environment::getApplication();
		$application->catchExceptions = FALSE;
		if ($this->isAjax()) {
			$this->payload->error = (string)$exception;
			$this->sendPayload();

		} else {
			$this->template->robots = 'noindex,noarchive';
			if ($exception instanceof /*Nette\Application\*/BadRequestException) {

				Environment::getHttpResponse()->setCode($exception->getCode());
				switch($exception->getCode()) {
				case 403:
					$this->template->title = _('403 Permission denied');
					break;
				default:
					Environment::getHttpResponse()->setCode(404);
					$this->template->title = _('404 Not Found');
					break;
				}

			} else {
				Environment::getHttpResponse()->setCode(500);
				$this->template->title = _("Don't recognize error");

				Debug::processException($exception);
			}
		}
	}
コード例 #2
0
 static function tryFetchAll($query)
 {
     try {
         $args = func_get_args();
         return call_user_func_array('dibi::fetchAll', $args);
     } catch (DibiException $e) {
         Debug::processException($e, true);
         throw new DataSourceException("Error in getting data.", 0, $e);
     }
 }
コード例 #3
0
 /**
  * @param  Exception
  * @return void
  */
 public function renderDefault($exception)
 {
     if ($this->isAjax()) {
         // AJAX request? Just note this error in payload.
         $this->payload->error = TRUE;
         $this->terminate();
     } elseif ($exception instanceof BadRequestException) {
         $this->setView('404');
         // load template 404.phtml
     } else {
         $this->setView('500');
         // load template 500.phtml
         Debug::processException($exception);
         // and handle error by Nette\Debug
     }
 }
コード例 #4
0
 /**
  * Data grid model constructor.
  * @param  string  table name
  * @param  string  primary key name
  * @return void
  */
 public function __construct($table = NULL, $primary = NULL)
 {
     parent::__construct($table, $primary);
     if (!isset($this->primary) && isset($this->table)) {
         try {
             $dbInfo = $this->connection->getDatabaseInfo();
             $this->primary = $dbInfo->getTable($this->table)->getPrimaryKey()->getName();
         } catch (Exception $e) {
             Debug::processException($e);
             throw new InvalidArgumentException("Model must have one primary key.");
         }
     }
     if ($this->connection->profiler) {
         $this->connection->getProfiler()->setFile(Environment::expand('%logDir%') . '/sql.log');
     }
 }
コード例 #5
0
ファイル: ErrorPresenter.php プロジェクト: vrana/nette
 /**
  * @return void
  */
 public function renderDefault($exception)
 {
     if ($this->isAjax()) {
         $this->getPayload()->events[] = array('error', $exception->getMessage());
         $this->terminate();
     } else {
         $this->template->robots = 'noindex,noarchive';
         $httpResponse = Environment::getHttpResponse();
         if ($exception instanceof BadRequestException) {
             if (!$httpResponse->isSent()) {
                 $httpResponse->setCode($exception->getCode());
             }
             $this->template->title = '404 Not Found';
             $this->setView('404');
         } else {
             if (!$httpResponse->isSent()) {
                 $httpResponse->setCode(500);
             }
             $this->template->title = '500 Internal Server Error';
             $this->setView('500');
             Debug::processException($exception);
         }
     }
 }
コード例 #6
0
ファイル: Application.php プロジェクト: jaroslavlibal/MDW
 /**
  * Dispatch a HTTP request to a front controller.
  * @return void
  */
 public function run()
 {
     $httpRequest = $this->getHttpRequest();
     $httpResponse = $this->getHttpResponse();
     $httpRequest->setEncoding('UTF-8');
     $httpResponse->setHeader('X-Powered-By', 'Nette Framework');
     if (Environment::getVariable('baseUri') === NULL) {
         Environment::setVariable('baseUri', $httpRequest->getUri()->getBasePath());
     }
     // autostarts session
     $session = $this->getSession();
     if (!$session->isStarted() && $session->exists()) {
         $session->start();
     }
     // check HTTP method
     if ($this->allowedMethods) {
         $method = $httpRequest->getMethod();
         if (!in_array($method, $this->allowedMethods, TRUE)) {
             $httpResponse->setCode(IHttpResponse::S501_NOT_IMPLEMENTED);
             $httpResponse->setHeader('Allow', implode(',', $this->allowedMethods));
             echo '<h1>Method ' . htmlSpecialChars($method) . ' is not implemented</h1>';
             return;
         }
     }
     // dispatching
     $request = NULL;
     $repeatedError = FALSE;
     do {
         try {
             if (count($this->requests) > self::$maxLoop) {
                 throw new ApplicationException('Too many loops detected in application life cycle.');
             }
             if (!$request) {
                 $this->onStartup($this);
                 // default router
                 $router = $this->getRouter();
                 if ($router instanceof MultiRouter && !count($router)) {
                     $router[] = new SimpleRouter(array('presenter' => 'Default', 'action' => 'default'));
                 }
                 // routing
                 $request = $router->match($httpRequest);
                 if (!$request instanceof PresenterRequest) {
                     $request = NULL;
                     throw new BadRequestException('No route for HTTP request.');
                 }
                 if (strcasecmp($request->getPresenterName(), $this->errorPresenter) === 0) {
                     throw new BadRequestException('Invalid request.');
                 }
             }
             $this->requests[] = $request;
             $this->onRequest($this, $request);
             // Instantiate presenter
             $presenter = $request->getPresenterName();
             try {
                 $class = $this->getPresenterLoader()->getPresenterClass($presenter);
                 $request->setPresenterName($presenter);
             } catch (InvalidPresenterException $e) {
                 throw new BadRequestException($e->getMessage(), 404, $e);
             }
             $request->freeze();
             // Execute presenter
             $this->presenter = new $class();
             $response = $this->presenter->run($request);
             // Send response
             if ($response instanceof ForwardingResponse) {
                 $request = $response->getRequest();
                 continue;
             } elseif ($response instanceof IPresenterResponse) {
                 $response->send();
             }
             break;
         } catch (Exception $e) {
             // fault barrier
             if ($this->catchExceptions === NULL) {
                 $this->catchExceptions = Environment::isProduction();
             }
             $this->onError($this, $e);
             if (!$this->catchExceptions) {
                 $this->onShutdown($this, $e);
                 throw $e;
             }
             if ($repeatedError) {
                 $e = new ApplicationException('An error occured while executing error-presenter', 0, $e);
             }
             if (!$httpResponse->isSent()) {
                 $httpResponse->setCode($e instanceof BadRequestException ? $e->getCode() : 500);
             }
             if (!$repeatedError && $this->errorPresenter) {
                 $repeatedError = TRUE;
                 $request = new PresenterRequest($this->errorPresenter, PresenterRequest::FORWARD, array('exception' => $e));
                 // continue
             } else {
                 // default error handler
                 echo "<meta name='robots' content='noindex'>\n\n";
                 if ($e instanceof BadRequestException) {
                     echo "<title>404 Not Found</title>\n\n<h1>Not Found</h1>\n\n<p>The requested URL was not found on this server.</p>";
                 } else {
                     Debug::processException($e, FALSE);
                     echo "<title>500 Internal Server Error</title>\n\n<h1>Server Error</h1>\n\n", "<p>The server encountered an internal error and was unable to complete your request. Please try again later.</p>";
                 }
                 echo "\n\n<hr>\n<small><i>Nette Framework</i></small>";
                 break;
             }
         }
     } while (1);
     $this->onShutdown($this, isset($e) ? $e : NULL);
 }
コード例 #7
0
 /**
  * Dispatch a HTTP request to a front controller.
  */
 public function run()
 {
     $httpRequest = $this->getHttpRequest();
     $httpResponse = $this->getHttpResponse();
     $httpRequest->setEncoding('UTF-8');
     $httpResponse->setHeader('X-Powered-By', 'Nette Framework');
     if (Environment::getVariable('baseUri') === NULL) {
         Environment::setVariable('baseUri', $httpRequest->getUri()->basePath);
     }
     // check HTTP method
     $method = $httpRequest->getMethod();
     if ($this->allowedMethods) {
         if (!in_array($method, $this->allowedMethods, TRUE)) {
             $httpResponse->setCode(IHttpResponse::S501_NOT_IMPLEMENTED);
             $httpResponse->setHeader('Allow', implode(',', $this->allowedMethods));
             $method = htmlSpecialChars($method);
             die("<h1>Method {$method} is not implemented</h1>");
         }
     }
     // dispatching
     $request = NULL;
     $hasError = FALSE;
     do {
         try {
             if (count($this->requests) > self::$maxLoop) {
                 throw new ApplicationException('Too many loops detected in application life cycle.');
             }
             if (!$request) {
                 $this->onStartup($this);
                 // default router
                 $router = $this->getRouter();
                 if ($router instanceof MultiRouter && !count($router)) {
                     $router[] = new SimpleRouter(array('presenter' => 'Default', 'action' => 'default'));
                 }
                 // routing
                 $request = $router->match($httpRequest);
                 if (!$request instanceof PresenterRequest) {
                     $request = NULL;
                     throw new BadRequestException('No route for HTTP request.');
                 }
                 if (strcasecmp($request->getPresenterName(), $this->errorPresenter) === 0) {
                     throw new BadRequestException('Invalid request.');
                 }
             }
             $this->requests[] = $request;
             $this->onRequest($this, $request);
             // Instantiate presenter
             $presenter = $request->getPresenterName();
             try {
                 $class = $this->getPresenterLoader()->getPresenterClass($presenter);
                 $request->modify('name', $presenter);
             } catch (InvalidPresenterException $e) {
                 throw new BadRequestException($e->getMessage(), 404, $e);
             }
             $this->presenter = new $class($request);
             // Instantiate topmost service locator
             $this->presenter->setServiceLocator(new ServiceLocator($this->serviceLocator));
             // Execute presenter
             $this->presenter->run();
             break;
         } catch (RedirectingException $e) {
             // not error, presenter redirects to new URL
             $httpResponse->redirect($e->getUri(), $e->getCode());
             break;
         } catch (ForwardingException $e) {
             // not error, presenter forwards to new request
             $request = $e->getRequest();
         } catch (AbortException $e) {
             // not error, application is correctly terminated
             unset($e);
             break;
         } catch (Exception $e) {
             // fault barrier
             if ($this->catchExceptions === NULL) {
                 $this->catchExceptions = Environment::isProduction();
             }
             if (!$this->catchExceptions) {
                 throw $e;
             }
             $this->onError($this, $e);
             if ($hasError) {
                 $e = new ApplicationException('An error occured while executing error-presenter', 0, $e);
             } elseif ($this->errorPresenter) {
                 $hasError = TRUE;
                 $request = new PresenterRequest($this->errorPresenter, PresenterRequest::FORWARD, array('exception' => $e));
                 continue;
             }
             if ($e instanceof BadRequestException) {
                 if (!$httpResponse->isSent()) {
                     $httpResponse->setCode($e->getCode());
                 }
                 echo "<title>404 Not Found</title>\n\n<h1>Not Found</h1>\n\n<p>The requested URL was not found on this server.</p>";
                 break;
             } else {
                 if (!$httpResponse->isSent()) {
                     $httpResponse->setCode(500);
                 }
                 Debug::processException($e, FALSE);
                 echo "<title>500 Internal Server Error</title>\n\n<h1>Server Error</h1>\n\n", "<p>The server encountered an internal error and was unable to complete your request. Please try again later.</p>";
                 break;
             }
         }
     } while (1);
     $this->onShutdown($this, isset($e) ? $e : NULL);
 }
コード例 #8
0
ファイル: UserPresenter.php プロジェクト: jaroslavlibal/MDW
 public function actionUserDelete($id)
 {
     $this->access();
     $pom = $this->user->getIdentity();
     //jestliže chceme smazat sami sebe - vyhodíme hlášku a přesměrujeme
     if ($pom->id == $id) {
         $this->flashMessage("Nemůžete smazat sám sebe.");
         $this->redirect('User:default');
     } else {
         try {
             UsersModel::delUser($id);
             $this->flashMessage("Uživatel byl úspěšně smazán.");
             dibi::query('COMMIT');
         } catch (Exception $e) {
             dibi::query('ROLLBACK');
             Debug::processException($e);
             $this->flashMessage(ERROR_MESSAGE . " Error description: " . $e->getMessage(), 'error');
         }
         $this->redirect('User:default');
     }
 }
コード例 #9
0
ファイル: TicketPresenter.php プロジェクト: jaroslavlibal/MDW
 function ReplyFormProcess(Form $form)
 {
     $data = $form->getValues();
     // vezmeme data z formuláře
     $data['time'] = time();
     $data['name'] = $this->user->getidentity()->firstName . " " . $this->user->getidentity()->surname;
     if ($data['internal'] == 1) {
         $data['type'] = 2;
     } else {
         $data['type'] = 1;
     }
     try {
         TicketsModel::addReply($data);
         dibi::query('COMMIT');
         if ($data['internal'] == 0) {
             // TODO: Odeslání mailu
             $this->flashMessage("Odeslání mailu autorovi tiketu bude doprogramováno později.");
         }
     } catch (Exception $e) {
         dibi::query('ROLLBACK');
         Debug::processException($e);
         $this->flashMessage(ERROR_MESSAGE . " Error description: " . $e->getMessage(), 'error');
     }
     $this->flashMessage("Odpověď/interní poznámka byla úspěšně uložena.");
     $this->redirect('Ticket:showTicket', $data['tiket']);
 }