/** * 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); } }
/** * 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; }
/** * 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('&', '&', $url)); exit; }
/** * 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); } } } }
/** * 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(); }
/** * 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; }
} 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(); }