From 00a9d3a0575deb0a9c42c9e2b622f70ce6697586 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sun, 14 Apr 2013 17:43:06 +1000 Subject: [PATCH] Added default 404 page --- application/bootstrap.php | 11 ----- application/classes/Controller/Media.php | 52 ++++++++++++++++++++ application/classes/HTTP/Exception/404.php | 18 ++++--- application/classes/URL.php | 54 --------------------- application/config/config.php | 2 +- application/media/img/404.jpg | Bin 0 -> 25762 bytes application/views/404.php | 13 +++++ 7 files changed, 76 insertions(+), 74 deletions(-) create mode 100644 application/classes/Controller/Media.php delete mode 100644 application/classes/URL.php create mode 100644 application/media/img/404.jpg create mode 100644 application/views/404.php diff --git a/application/bootstrap.php b/application/bootstrap.php index 143e83e..6dc6352 100644 --- a/application/bootstrap.php +++ b/application/bootstrap.php @@ -120,17 +120,6 @@ Kohana::modules(array( // 'userguide' => SMDPATH.'userguide', // User guide and API documentation )); -/** - * Enable specalised interfaces - */ -Route::set('sections', '/(/(/(/)))', - array( - 'directory' => '('.implode('|',array_values(URL::$method_directory)).')' - )) - ->defaults(array( - 'action' => 'index', - )); - // Static file serving (CSS, JS, images) Route::set('default/media', 'media(/)', array('file' => '.+')) ->defaults(array( diff --git a/application/classes/Controller/Media.php b/application/classes/Controller/Media.php new file mode 100644 index 0000000..416be47 --- /dev/null +++ b/application/classes/Controller/Media.php @@ -0,0 +1,52 @@ +request->param('file'); + + // Find the file extension + $ext = pathinfo($file,PATHINFO_EXTENSION); + + // Remove the extension from the filename + $file = substr($file,0,-(strlen($ext)+1)); + $f = ''; + + // If our file is pathed with session, our file is in our session. + if ($fd = Session::instance()->get_once($this->request->param('file'))) { + $this->response->body($fd); + + // If not found try a default media file + } elseif ($f = Kohana::find_file('media',$file,$ext)) { + // Send the file content as the response + $this->response->body(file_get_contents($f)); + + } else { + // Return a 404 status + $this->response->status(404); + } + + // Generate and check the ETag for this file + $this->check_cache(sha1($this->response->body())); + + // Set the proper headers to allow caching + $this->response->headers('Content-Type',File::mime_by_ext($ext)); + $this->response->headers('Content-Length',(string)$this->response->content_length()); + $this->response->headers('Last-Modified',date('r',$f ? filemtime($f) : time())); + } +} +?> diff --git a/application/classes/HTTP/Exception/404.php b/application/classes/HTTP/Exception/404.php index 9651d3d..88279de 100644 --- a/application/classes/HTTP/Exception/404.php +++ b/application/classes/HTTP/Exception/404.php @@ -31,25 +31,27 @@ class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 { // Prepare the response object. $response = Response::factory(); - $redirect = $ro->redirect ? trim($ro->redirect) : Kohana::$config->load('config')->defaultfile; // Process our redirection options - if (is_null($redirect) OR ! trim($redirect)) { - return parent::get_response(); - - } elseif (preg_match('/^http[s]?:\/\//',$redirect)) { + if (preg_match('/^http[s]?:\/\//',$ro->redirect)) { $response->status(302); - $response->headers('Location',$redirect); + $response->headers('Location',$ro->redirect); - } elseif (preg_match('/^file:\/\/(.*)$/',$redirect,$matches) AND file_exists($matches[1])) { + } elseif (preg_match('/^file:\/\/(.*)$/',$ro->redirect,$matches) AND file_exists($matches[1])) { $response->status(200); - $response->body(file_get_contents($redirect)); + $response->body(file_get_contents($matches[1])); HTTP::check_cache($this->request(),$response,sha1($response->body())); $response->headers('Content-Type',File::mime_by_ext(pathinfo($matches[1],PATHINFO_EXTENSION))); $response->headers('Content-Length',(string)$response->content_length()); $response->headers('Last-Modified',date('r',$matches[1] ? filemtime($matches[1]) : time())); + + } else { + $response->status(404); + $response->body(View::factory('404')); + + HTTP::check_cache($this->request(),$response,sha1($response->body())); } return $response; diff --git a/application/classes/URL.php b/application/classes/URL.php deleted file mode 100644 index 56f0f60..0000000 --- a/application/classes/URL.php +++ /dev/null @@ -1,54 +0,0 @@ -'a', - 'affiliate'=>'affiliate', // @todo To retire - 'reseller'=>'r', - 'task'=>'task', - 'user'=>'u', - ); - - /** - * Wrapper to provide a URL::site() link based on function - */ - public static function link($dir,$src,$site=FALSE) { - if (! $dir) - return $src; - - if (! array_key_exists($dir,URL::$method_directory)) - throw new Kohana_Exception('Unknown directory :dir for :src',array(':dir'=>$dir,':src'=>$src)); - - $x = URL::$method_directory[$dir].'/'.$src; - - return $site ? URL::site($x) : $x; - } - - /** - * Function to reveal the real directory for a URL - */ - public static function dir($dir) { - // Quick check if we can do something here - if (! in_array(strtolower($dir),URL::$method_directory)) - return $dir; - - // OK, we can, find it. - foreach (URL::$method_directory as $k=>$v) - if (strtolower($dir) == $v) - return ucfirst($k); - - // If we get here, we didnt have anything. - return $dir; - } -} -?> diff --git a/application/config/config.php b/application/config/config.php index a02f1bb..fe247cd 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -9,8 +9,8 @@ * @copyright (c) 2010-2013 Deon George * @license http://dev.leenooks.net/license.html */ + return array( - 'defaultfile' => 'file:///var/www/html/index.html', 'cache_type' => 'file', 'date_format' => 'd-M-Y', ); diff --git a/application/media/img/404.jpg b/application/media/img/404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..091f185db3224edc48478fc757543a1d697234b2 GIT binary patch literal 25762 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 G#{VDIc;U$a literal 0 HcmV?d00001 diff --git a/application/views/404.php b/application/views/404.php new file mode 100644 index 0000000..94adc7d --- /dev/null +++ b/application/views/404.php @@ -0,0 +1,13 @@ + + + + Not Found + + + + + Not Found + +