示例#1
0
 /**
  * Deletes resource - deletes model from the database.
  *
  * @param Request $request Current router request.
  *
  * @uses   Helpers\FlashMessage
  * @uses   Core\Helpers\YAML
  *
  * @return void
  */
 public function delete(Request $request)
 {
     if ($request->is('post') || $request->is('xhr') || $request->is('delete')) {
         if ($this->resource->exists()) {
             $this->beforeDelete($request);
             $this->resource->delete();
             $this->afterDelete($request);
         } else {
             if (!$request->is('xhr')) {
                 Helpers\FlashMessage::set($this->labels['errors']['not_exists'], 'danger');
             }
             $request->redirectTo('index');
         }
     } else {
         Core\Router()->response->setHttpResponseCode(403);
     }
 }
示例#2
0
 /**
  * Sets HTTP Response Header by specifying a HTTP code.
  *
  * @param integer $code Valid HTTP Code.
  *
  * @throws \InvalidArgumentException Unknown http status code.
  *
  * @return integer Valid HTTP Code.
  */
 public function setHttpResponseCode($code)
 {
     switch ($code) {
         case 100:
             $text = 'Continue';
             break;
         case 101:
             $text = 'Switching Protocols';
             break;
         case 200:
             $text = 'OK';
             break;
         case 201:
             $text = 'Created';
             break;
         case 202:
             $text = 'Accepted';
             break;
         case 203:
             $text = 'Non-Authoritative Information';
             break;
         case 204:
             $text = 'No Content';
             break;
         case 205:
             $text = 'Reset Content';
             break;
         case 206:
             $text = 'Partial Content';
             break;
         case 300:
             $text = 'Multiple Choices';
             break;
         case 301:
             $text = 'Moved Permanently';
             break;
         case 302:
             $text = 'Moved Temporarily';
             break;
         case 303:
             $text = 'See Other';
             break;
         case 304:
             $text = 'Not Modified';
             break;
         case 305:
             $text = 'Use Proxy';
             break;
         case 400:
             $text = 'Bad Request';
             break;
         case 401:
             $text = 'Unauthorized';
             break;
         case 402:
             $text = 'Payment Required';
             break;
         case 403:
             $text = 'Forbidden';
             break;
         case 404:
             $text = 'Not Found';
             break;
         case 405:
             $text = 'Method Not Allowed';
             break;
         case 406:
             $text = 'Not Acceptable';
             break;
         case 407:
             $text = 'Proxy Authentication Required';
             break;
         case 408:
             $text = 'Request Time-out';
             break;
         case 409:
             $text = 'Conflict';
             break;
         case 410:
             $text = 'Gone';
             break;
         case 411:
             $text = 'Length Required';
             break;
         case 412:
             $text = 'Precondition Failed';
             break;
         case 413:
             $text = 'Request Entity Too Large';
             break;
         case 414:
             $text = 'Request-URI Too Large';
             break;
         case 415:
             $text = 'Unsupported Media Type';
             break;
         case 500:
             $text = 'Internal Server Error';
             break;
         case 501:
             $text = 'Not Implemented';
             break;
         case 502:
             $text = 'Bad Gateway';
             break;
         case 503:
             $text = 'Service Unavailable';
             break;
         case 504:
             $text = 'Gateway Time-out';
             break;
         case 505:
             $text = 'HTTP Version not supported';
             break;
         default:
             throw new \InvalidArgumentException('Unknown http status code "' . htmlentities($code) . '"');
             break;
     }
     $this->addHeader(Core\Router()->request->type() . ' ' . $code . ' ' . $text);
     $GLOBALS['http_response_code'] = $code;
     return $code;
 }
示例#3
0
 /**
  * Redirects the browser to a specified target.
  *
  * @param mixed   $url    Array/String representation of url.
  * @param integer $status Redirect status code according to HTTP specification (301, 302, 303, 307).
  *
  * @access public
  * @uses   Core\Config()
  * @uses   Core\Router()
  * @example
  * <code>
  *  redirectTo(array('action' => 'show', 'id' => 5))
  *  redirectTo('http://www.athlonproduction.com')
  *  redirectTo('back') - Only current controller action name.
  * </code>
  *
  * @return void
  */
 public function redirectTo($url, $status = 302)
 {
     if (is_array($url)) {
         $url = Core\Config()->urls('relative') . Core\Router()->toUrl($url);
     } elseif ($url === 'back') {
         $url = $this->context['_SERVER']['HTTP_REFERER'];
     } elseif (strpos($url, '/') === false) {
         $url = Core\Config()->urls('relative') . Core\Router()->toUrl(array('controller' => $this->controller(), 'action' => $url));
     }
     if (headers_sent() || $this->is('xhr')) {
         echo '<script type="text/javascript">' . "setTimeout(function() { location.href = '{$url}'; }, 0);" . '</script>';
         exit;
     }
     switch ($status) {
         case 301:
             $status = '301 Moved Permanently';
             break;
         case 303:
             $status = '303 See Other';
             break;
         case 307:
             $status = '307 Temporary Redirect';
             break;
         default:
             $status = '302 Found';
             break;
     }
     header($this->type() . ' ' . $status);
     header('Location: ' . str_replace('&amp;', '&', $url));
     exit;
 }
示例#4
0
 /**
  * Password reset action.
  *
  * @param Request $request Current router request.
  *
  * @return void
  */
 public function reset(Request $request)
 {
     if ($request->is('post')) {
         $this->errors = array();
         $user = new Models\CMSUser();
         if ($this->captcha && !Helpers\Captcha::isValid($this->captcha)) {
             $this->errors['captcha'] = true;
         } elseif (filter_var($request->post('email'), FILTER_VALIDATE_EMAIL) === false) {
             $this->errors['email'] = true;
         } elseif (!($user = Models\CMSUser::find()->where('email = ?', array($request->post('email')))->first())) {
             $this->errors['email'] = true;
         }
         if (!$this->errors) {
             $user->save(array('updated_on' => gmdate('Y-m-d H:i:s')), true);
             $this->name = $user->name;
             $this->password_reset_link = Core\Router()->toFullUrl(array('controller' => 'authentication', 'action' => 'renew', 'id' => sha1($user->password . Core\Config()->USER_AUTH['cookie_salt'] . $user->email)));
             $mailForPasswordReset = array('from' => array(Core\Config()->MAILER['identity']['email'] => Core\Config()->MAILER['identity']['name']), 'to' => array($user->email => $user->name), 'subject' => $this->labels['mails']['reset']['subject'], 'content' => $this->getPartialOutput('authentication/mails/password_reset'));
             Core\Helpers\Mailer::send($mailForPasswordReset);
             Helpers\FlashMessage::set($this->labels['reset']['success'], 'success');
             Core\Session()->remove('authentication_error');
             Core\Session()->remove('captcha');
         } else {
             if ($this->captcha) {
                 Helpers\FlashMessage::set($this->labels['captcha']['error'], 'danger');
             } else {
                 Helpers\FlashMessage::set($this->labels['reset']['error'], 'danger');
             }
             Core\Session()->set('authentication_error', true);
             if (Core\Config()->CAPTCHA['enabled']) {
                 $this->loadCaptcha(Core\Config()->CAPTCHA);
             }
         }
     }
 }
示例#5
0
 /**
  * Regenerates Session ID.
  *
  * You should roll session ID whenever elevation occurs.
  * E.G when a user logs in, the session ID of the session should be changed, since it's importance is changed.
  *
  * @access public
  *
  * @return void
  */
 public function regenerateKey()
 {
     /* Delete associated data */
     $this->destroy();
     $this->killOld();
     Core\Router()->deleteCookie($this->sessionKey);
     /* Starts new session */
     $this->start();
 }
示例#6
0
 /**
  * Assigns common template engine vars.
  *
  * @param Modules\Render\Render $renderer Render module object.
  *
  * @access private
  *
  * @return Modules\Render\Render
  */
 private static function assignVariablesToRender(Modules\Render\Render &$renderer)
 {
     $renderer->set('_mode', Core\Config()->paths('mode'));
     $renderer->set('_registry', Core\Registry());
     $renderer->set('_config', Core\Config());
     $renderer->set('_session', Core\Session());
     $renderer->set('_assets', $renderer->assets());
     $renderer->set('_urls', Core\Config()->urls());
     $renderer->set('_paths', Core\Config()->paths());
     $renderer->set('_request', Core\Router()->request);
     $renderer->set('_get', Core\Router()->request->get());
     $renderer->set('_post', Core\Router()->request->post());
     $renderer->set('_environment', SILLA_ENVIRONMENT);
     return $renderer;
 }
示例#7
0
    }
    if (!Core\Router()->response->hasContent()) {
        Core\Router()->response->setHttpResponseCode(500);
    }
    $message = $e->getMessage() . PHP_EOL . $e->getTraceAsString();
    if ('on' === strtolower(ini_get('display_errors'))) {
        Core\Router()->response->setContent("<pre>{$message}</pre>");
    } else {
        error_log($e->__toString());
    }
}
unset($request, $routes);
/**
 * Output Response headers.
 */
if (!headers_sent() && Core\Router()->response->hasHeaders()) {
    $headers = Core\Router()->response->getHeaders();
    foreach ($headers as $header) {
        if (isset($headers['code']) && $headers['code']) {
            header($header['string'], $header['replace'], $header['code']);
        } else {
            header($header['string'], $header['replace']);
        }
    }
}
/**
 * Output Response content.
 */
if (Core\Router()->response->hasContent()) {
    echo Core\Router()->response->getContent();
}