mirror of
https://github.com/claudehohl/Stikked.git
synced 2025-04-26 04:51:08 -05:00
192 lines
5.3 KiB
PHP
192 lines
5.3 KiB
PHP
<?php if (!defined('BASEPATH')) {
|
|
exit('No direct script access allowed');
|
|
}
|
|
|
|
class Theme_assets extends CI_Controller
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->theme = config_item('theme');
|
|
}
|
|
|
|
public function css()
|
|
{
|
|
$css_file = $this->uri->segment(4);
|
|
$css_file = basename($css_file); // Fix LFI Vulnerability
|
|
|
|
if ($css_file == 'fonts') {
|
|
$font_file = $this->uri->segment(5);
|
|
$font_file = basename($font_file);
|
|
|
|
//file path
|
|
$file_path = 'themes/' . $this->theme . '/css/fonts/' . $font_file;
|
|
|
|
if (!file_exists($file_path)) {
|
|
return false;
|
|
}
|
|
$path_parts = pathinfo(dirname(dirname(dirname(__FILE__))) . '/' . $file_path);
|
|
|
|
if ($path_parts['extension'] == "woff") {
|
|
header('Content-type: application/font-woff');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "eot") {
|
|
header('Content-type: application/vnd.ms-fontobject');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "ttf" || $path_parts['extension'] == "ttc") {
|
|
header('Content-type: application/x-font-ttf');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "otf") {
|
|
header('Content-type: font/opentype');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "svg") {
|
|
header('Content-type: image/svg+xml');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "svgz") {
|
|
header("Content-Encoding: gzip");
|
|
header('Content-type: image/svg+xml');
|
|
}
|
|
|
|
//send
|
|
$this->_expires_header(1);
|
|
readfile($file_path);
|
|
} else {
|
|
|
|
//file path
|
|
$file_path = 'themes/' . $this->theme . '/css/' . $css_file;
|
|
|
|
//fallback to default css if view in theme not found
|
|
|
|
if (!file_exists($file_path)) {
|
|
$file_path = 'themes/default/css/' . $css_file;
|
|
}
|
|
|
|
// Double checking file
|
|
|
|
if (!file_exists($file_path)) {
|
|
return false;
|
|
}
|
|
|
|
//send
|
|
header('Content-type: text/css');
|
|
$this->_expires_header(1);
|
|
readfile($file_path);
|
|
}
|
|
}
|
|
|
|
public function fonts()
|
|
{
|
|
$font_file = $this->uri->segment(4);
|
|
|
|
//file path
|
|
$file_path = 'themes/' . $this->theme . '/fonts/' . $font_file;
|
|
|
|
//no fallback to default, since default has no such fonts
|
|
//since no fallbcack, there is no doucle checking for file
|
|
|
|
if (!file_exists($file_path)) {
|
|
return false;
|
|
}
|
|
|
|
//send
|
|
$path_parts = pathinfo(dirname(dirname(dirname(__FILE__))) . '/' . $file_path);
|
|
|
|
if ($path_parts['extension'] == "woff") {
|
|
header('Content-type: application/font-woff');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "eot") {
|
|
header('Content-type: application/vnd.ms-fontobject');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "ttf" || $path_parts['extension'] == "ttc") {
|
|
header('Content-type: application/x-font-ttf');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "otf") {
|
|
header('Content-type: font/opentype');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "svg") {
|
|
header('Content-type: image/svg+xml');
|
|
}
|
|
|
|
if ($path_parts['extension'] == "svgz") {
|
|
header("Content-Encoding: gzip");
|
|
header('Content-type: image/svg+xml');
|
|
}
|
|
$this->_expires_header(1);
|
|
readfile($file_path);
|
|
}
|
|
|
|
public function images()
|
|
{
|
|
$image_file = $this->uri->segment(4);
|
|
$image_file = basename($image_file);
|
|
|
|
//file path
|
|
$file_path = 'themes/' . $this->theme . '/images/' . $image_file;
|
|
|
|
//fallback to default css if view in theme not found
|
|
|
|
if (!file_exists($file_path)) {
|
|
$file_path = 'themes/default/images/' . $image_file;
|
|
}
|
|
|
|
// double checking file
|
|
|
|
if (!file_exists($file_path)) {
|
|
return false;
|
|
}
|
|
|
|
//send
|
|
$size = getimagesize($file_path);
|
|
header('Content-type: ' . $size['mime']);
|
|
$this->_expires_header(30);
|
|
readfile($file_path);
|
|
}
|
|
|
|
public function js()
|
|
{
|
|
|
|
//get js
|
|
$segments = $this->uri->segment_array();
|
|
array_shift($segments);
|
|
array_shift($segments);
|
|
array_shift($segments);
|
|
$js_file = implode('/', $segments);
|
|
$js_file = str_replace('../', '', $js_file);
|
|
|
|
//file path
|
|
$file_path = 'themes/' . $this->theme . '/js/' . $js_file;
|
|
|
|
//fallback to default js if js in theme not found
|
|
|
|
if (!file_exists($file_path)) {
|
|
$file_path = 'themes/default/js/' . $js_file;
|
|
}
|
|
|
|
// return empty string if not found, to not mess up existing JS
|
|
|
|
if (!file_exists($file_path)) {
|
|
header('HTTP/1.1 404 Not Found');
|
|
return '';
|
|
}
|
|
|
|
//send
|
|
header('Content-Type: application/x-javascript; charset=utf-8');
|
|
$this->_expires_header(30);
|
|
readfile($file_path);
|
|
}
|
|
private function _expires_header($days)
|
|
{
|
|
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 60 * 60 * 24 * $days));
|
|
}
|
|
}
|