diff --git a/inc/template.php b/inc/template.php index 4f4ba9813f42e3f1c18640ed1208cb7e3931e267..cc9d4f9f446727659e2486bc9403773ae26cec29 100644 --- a/inc/template.php +++ b/inc/template.php @@ -312,11 +312,11 @@ function tpl_metaheaders($alt=true){ // load stylesheets $head['link'][] = array('rel'=>'stylesheet', 'media'=>'all', 'type'=>'text/css', - 'href'=>DOKU_BASE.'lib/exe/css.php?s=all'); + 'href'=>DOKU_BASE.'lib/exe/css.php?s=all&t='.$conf['template']); $head['link'][] = array('rel'=>'stylesheet', 'media'=>'screen', 'type'=>'text/css', - 'href'=>DOKU_BASE.'lib/exe/css.php'); + 'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template']); $head['link'][] = array('rel'=>'stylesheet', 'media'=>'print', 'type'=>'text/css', - 'href'=>DOKU_BASE.'lib/exe/css.php?s=print'); + 'href'=>DOKU_BASE.'lib/exe/css.php?s=print&t='.$conf['template']); // load javascript $js_edit = ($ACT=='edit' || $ACT=='preview' || $ACT=='recover' || $ACT=='wordblock' ) ? 1 : 0; diff --git a/lib/exe/css.php b/lib/exe/css.php index e550ab206c8876fc66831c079ebb76b09e39d4a8..11ae2e828bb2cda204470d01df09a147efb8605f 100644 --- a/lib/exe/css.php +++ b/lib/exe/css.php @@ -41,15 +41,24 @@ function css_out(){ break; } + $tpl = trim(preg_replace('/[^\w]+/','',$_REQUEST['t'])); + if($tpl){ + $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/'; + $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/'; + }else{ + $tplinc = DOKU_TPLINC; + $tpldir = DOKU_TPL; + } + // The generated script depends on some dynamic options - $cache = getCacheName('styles'.DOKU_BASE.$conf['template'].$style,'.css'); + $cache = getCacheName('styles'.DOKU_BASE.$tplinc.$style,'.css'); // load template styles $tplstyles = array(); - if(@file_exists(DOKU_TPLINC.'style.ini')){ - $ini = parse_ini_file(DOKU_TPLINC.'style.ini',true); + if(@file_exists($tplinc.'style.ini')){ + $ini = parse_ini_file($tplinc.'style.ini',true); foreach($ini['stylesheets'] as $file => $mode){ - $tplstyles[$mode][DOKU_TPLINC.$file] = DOKU_TPL; + $tplstyles[$mode][$tplinc.$file] = $tpldir; } } @@ -80,7 +89,7 @@ function css_out(){ // check cache age & handle conditional request header('Cache-Control: public, max-age=3600'); header('Pragma: public'); - if(css_cacheok($cache,array_keys($files))){ + if(css_cacheok($cache,array_keys($files),$tplinc)){ http_conditionalRequest(filemtime($cache)); if($conf['allowdebug']) header("X-CacheUsed: $cache"); readfile($cache); @@ -106,7 +115,7 @@ function css_out(){ ob_end_clean(); // apply style replacements - $css = css_applystyle($css); + $css = css_applystyle($css,$tplinc); // compress whitespace and comments if($conf['compress']){ @@ -125,7 +134,7 @@ function css_out(){ * * @author Andreas Gohr <andi@splitbrain.org> */ -function css_cacheok($cache,$files){ +function css_cacheok($cache,$files,$tplinc){ if($_REQUEST['purge']) return false; //support purge request $ctime = @filemtime($cache); @@ -134,7 +143,7 @@ function css_cacheok($cache,$files){ // some additional files to check $files[] = DOKU_CONF.'dokuwiki.php'; $files[] = DOKU_CONF.'local.php'; - $files[] = DOKU_TPLINC.'style.ini'; + $files[] = $tplinc.'style.ini'; $files[] = __FILE__; // now walk the files @@ -152,9 +161,9 @@ function css_cacheok($cache,$files){ * * @author Andreas Gohr <andi@splitbrain.org> */ -function css_applystyle($css){ - if(@file_exists(DOKU_TPLINC.'style.ini')){ - $ini = parse_ini_file(DOKU_TPLINC.'style.ini',true); +function css_applystyle($css,$tplinc){ + if(@file_exists($tplinc.'style.ini')){ + $ini = parse_ini_file($tplinc.'style.ini',true); $css = strtr($css,$ini['replacements']); } return $css;