<?php defined('SYSPATH') or die('No direct access allowed.'); /** * This class provides access to rendering media items (javascript, images and css). * * @package lnApp * @subpackage Page/Media * @category Controllers * @author Deon George * @copyright (c) 2010 Deon George * @license http://dev.leenooks.net/license.html */ abstract class lnApp_Controller_Media extends Controller { /** * This action will render all the media related files for a page * * @return void */ final public function action_get() { // Get the file path from the request $file = $this->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); // First try and find media files for the theme-site_id } elseif ($f = Kohana::find_file($x=sprintf('media/site/%s/theme/%s',Config::siteid(),Config::theme()),$file,$ext)) { // Send the file content as the response $this->response->body(file_get_contents($f)); // Try and find media files for the site_id } elseif ($f = Kohana::find_file(sprintf('media/site/%s',Config::siteid()),$file,$ext)) { // Send the file content as the response $this->response->body(file_get_contents($f)); // 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->response->check_cache(NULL,$this->request); // 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())); } } ?>