Dotclear

source: inc/load_theme_file.php @ 1056:b67f949a98f8

Revision 1056:b67f949a98f8, 2.8 KB checked in by JcDenis, 13 years ago (diff)
  • Twig know loaded in dcCore
  • Admin context now loaded in admin prepend and avavailable under $_ctx
  • Copy admin theme features in default-templates
  • New URL argument to serve theme file as ?tf=my_theme_file
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13// TODO: Fix loose of relative path in CSS
14
15# Check if config file exists
16if (isset($_SERVER['DC_RC_PATH'])) {
17     $zc_conf_file = $_SERVER['DC_RC_PATH'];
18} elseif (isset($_SERVER['REDIRECT_DC_RC_PATH'])) {
19     $zc_conf_file = $_SERVER['REDIRECT_DC_RC_PATH'];
20} else {
21     $zc_conf_file = dirname(__FILE__).'/config.php';
22}
23
24if (!is_file($zc_conf_file)) {
25     trigger_error('Unable to open config file',E_USER_ERROR);
26     exit;
27}
28unset($zc_conf_file);
29
30# Start Dotclear core (required to load template engine and find paths)
31require_once dirname(__FILE__).'/prepend.php';
32
33# No request
34if (empty($_GET['tf'])) {
35     header('Content-Type: text/plain');
36     http::head(404,'Not Found');
37     exit;
38}
39
40# Add default templates path
41if (defined('DC_CONTEXT_ADMIN')) {
42
43     # Set admin context
44     $_ctx = new dcAdminContext($core);
45     $core->tpl->addExtension($_ctx);
46     $core->tpl->getLoader()->addPath(dirname(__FILE__).'/admin/default-templates');
47     
48     // TODO: Find a better way to add plugins templates paths
49     # --BEHAVIOR-- adminPrepend
50     $core->callBehavior('adminPrepend',$core,$_ctx);
51}
52else {
53     // TODO: dcPublicContext ...
54     //$core->tpl->getLoader()->addPath(dirname(__FILE__).'/public/default-templates');
55}
56
57# Clean up requested filename
58$f = path::clean($_GET['tf']);
59
60# Find templates paths then plugins paths
61$paths = $core->tpl->getLoader()->getPaths();
62rsort($paths); // read default-templates last
63/*
64// TODO: Find a better way to add plugins templates paths
65$plugins_paths = array_reverse(explode(PATH_SEPARATOR,DC_PLUGINS_ROOT));
66$paths = array_merge($paths,$plugins_paths);
67//*/
68
69# Check all paths to see if file exists
70foreach ($paths as $path) {
71     $file = path::real($path.'/'.$f);
72     
73     if ($file !== false) {
74          break;
75     }
76}
77unset($paths);
78
79# Can't find requested file
80if ($file === false || !is_file($file) || !is_readable($file)) {
81     header('Content-Type: text/plain');
82     http::head(404,'Not Found');
83     exit;
84}
85
86# Limit type of files to serve
87$allow_types = array('png','jpg','jpeg','gif','css','js','swf');
88
89# File extension is not allowed
90if (!in_array(files::getExtension($file),$allow_types)) {
91     header('Content-Type: text/plain');
92     http::head(404,'Not Found');
93     exit;
94}
95
96# Display file
97http::$cache_max_age = 7200;
98http::cache(array_merge(array($file),get_included_files()));
99
100header('Content-Type: '.files::getMimeType($file));
101header('Content-Length: '.filesize($file));
102readfile($file);
103exit;
104?>
Note: See TracBrowser for help on using the repository browser.

Sites map