0));
SDV($LocalCSSDir, 'pub/css');
SDV($LocalCSSDirUrl, '$PubDirUrl/css');
## from skinchange.php
if (IsEnabled($EnableAutoSkinList, 0) || isset($PageSkinList)) {
SDV($SkinCookie, $CookiePrefix.'setskin');
SDV($SkinCookieExpires, $Now+60*60*24*365);
if (isset($_COOKIE[$SkinCookie])) $sk = $_COOKIE[$SkinCookie];
if (isset($_GET['setskin'])) {
$sk = $_GET['setskin'];
pmsetcookie($SkinCookie, $sk, $SkinCookieExpires, '/');
if(@$EnableIMSCaching) {
SDV($IMSCookie, $CookiePrefix.'imstime');
pmsetcookie($IMSCookie, '', $Now -3600, '/');
$EnableIMSCaching = 0;
}
}
if (isset($_GET['skin'])) $sk = $_GET['skin'];
## If $EnableAutoSkinList is set, then we accept any skin that
## exists in pub/skins/ or $FarmD/pub/skins/ .
if (IsEnabled($EnableAutoSkinList, 0)
&& @$sk && preg_match('/^[-\\w]+$/', $sk)
&& (is_dir("pub/skins/$sk") || is_dir("$FarmD/pub/skins/$sk")))
$Skin = $sk;
## If there's a specific mapping in $PageSkinList, we use it no
## matter what.
if (@$PageSkinList[$sk]) $Skin = $PageSkinList[$sk];
}
# $PageTemplateFmt is deprecated
if (isset($PageTemplateFmt)) LoadPageTemplate($pagename,$PageTemplateFmt);
else {
$x = array_merge((array)@$ActionSkin[$action], (array)$Skin);
SetSkin($pagename, $x);
}
SDV($PageCSSListFmt,array(
"$LocalCSSDir/local.css" => "$LocalCSSDirUrl/local.css",
"$LocalCSSDir/{\$Group}.css" => "$LocalCSSDirUrl/{\$Group}.css",
"$LocalCSSDir/{\$FullName}.css" => "$LocalCSSDirUrl/{\$FullName}.css"));
foreach((array)$PageCSSListFmt as $k=>$v)
if (file_exists(FmtPageName($k,$pagename)))
$HTMLHeaderFmt[] = "\n";
if(IsEnabled($WikiPageCSSFmt, false))
InsertWikiPageCSS($pagename, $WikiPageCSSFmt);
# SetSkin changes the current skin to the first available skin from
# the $skin array.
function SetSkin($pagename, $skin) {
global $Skin, $SkinLibDirs, $SkinDir, $SkinDirUrl,
$IsTemplateLoaded, $PubDirUrl, $FarmPubDirUrl, $FarmD, $GCount;
SDV($SkinLibDirs, array(
"./pub/skins/\$Skin" => "$PubDirUrl/skins/\$Skin",
"$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin"));
foreach((array)$skin as $sfmt) {
$Skin = FmtPageName($sfmt, $pagename); $GCount = 0;
foreach($SkinLibDirs as $dirfmt => $urlfmt) {
$SkinDir = FmtPageName($dirfmt, $pagename);
if (is_dir($SkinDir))
{ $SkinDirUrl = FmtPageName($urlfmt, $pagename); break 2; }
}
}
if (!is_dir($SkinDir)) {
unset($Skin);
Abort("?unable to find skin from list ".implode(' ',(array)$skin));
}
$IsTemplateLoaded = 0;
if (file_exists("$SkinDir/$Skin.php"))
include_once("$SkinDir/$Skin.php");
else if (file_exists("$SkinDir/skin.php"))
include_once("$SkinDir/skin.php");
if ($IsTemplateLoaded) return;
if (file_exists("$SkinDir/$Skin.tmpl"))
LoadPageTemplate($pagename, "$SkinDir/$Skin.tmpl");
else if (file_exists("$SkinDir/skin.tmpl"))
LoadPageTemplate($pagename, "$SkinDir/skin.tmpl");
else if (($dh = opendir($SkinDir))) {
while (($fname = readdir($dh)) !== false) {
if ($fname[0] == '.') continue;
if (substr($fname, -5) != '.tmpl') continue;
if ($IsTemplateLoaded)
Abort("?unable to find unique template in $SkinDir");
LoadPageTemplate($pagename, "$SkinDir/$fname");
}
closedir($dh);
}
if (!$IsTemplateLoaded) Abort("Unable to load $Skin template", 'skin');
}
function cb_includeskintemplate($m) {
global $SkinDir, $pagename;
$x = preg_split('/\\s+/', $m[1], -1, PREG_SPLIT_NO_EMPTY);
for ($i=0; $i\n");
SDV($PageTextEndFmt, "\n");
SDV($SkinDirectivesPattern,
"[[<]!--((?:wiki|file|function|markup):.*?)--[]>]");
$sddef = array('PageEditFmt' => 0);
$k = implode('', file(FmtPageName($tfilefmt, $pagename)));
if(IsEnabled($HTMLTitleFmt, 0)) {
$k = preg_replace('!()(.*?)()!si', "$1{$HTMLTitleFmt}$3", $k, 1);
}
for ($i=0; $i]/i',
'cb_includeskintemplate', $k);
}
if (IsEnabled($EnableSkinDiag, 0)) {
if (!preg_match('//i', $k))
Abort("Skin template missing <!--HTMLHeader-->", 'htmlheader');
if (!preg_match('//i', $k))
Abort("Skin template missing <!--HTMLFooter-->", 'htmlheader');
}
$sect = preg_split(
'#[[<]!--(/?(?:Page[A-Za-z]+Fmt|(?:HT|X)ML(?:Head|Foot)er|HeaderText|PageText).*?)--[]>]#',
$k, 0, PREG_SPLIT_DELIM_CAPTURE);
$TmplFmt['Start'] = array_merge(array('headers:'),
preg_split("/$SkinDirectivesPattern/s",
array_shift($sect),0,PREG_SPLIT_DELIM_CAPTURE));
$TmplFmt['End'] = array($PageTextEndFmt);
$ps = 'Start';
while (count($sect)>0) {
$k = array_shift($sect);
$v = preg_split("/$SkinDirectivesPattern/s",
array_shift($sect),0,PREG_SPLIT_DELIM_CAPTURE);
$TmplFmt[$ps][] = "";
if ($k[0] == '/')
{ $TmplFmt[$ps][] = (count($v) > 1) ? $v : $v[0]; continue; }
@list($var, $sd) = explode(' ', $k, 2);
$GLOBALS[$var] = (count($v) > 1) ? $v : $v[0];
if ($sd > '') $sddef[$var] = $sd;
if ($var == 'PageText') { $ps = 'End'; }
if ($var == 'HTMLHeader' || $var == 'XMLHeader')
$TmplFmt[$ps][] = &$HTMLHeaderFmt;
if ($var == 'HTMLFooter' || $var == 'XMLFooter')
$TmplFmt[$ps][] = &$HTMLFooterFmt;
## deprecated, 2.1.16
if ($var == 'HeaderText') { $TmplFmt[$ps][] = &$HTMLHeaderFmt; }
$TmplFmt[$ps][$var] =& $GLOBALS[$var];
}
array_push($TmplFmt['Start'], $PageTextStartFmt);
$PageStartFmt = 'function:PrintSkin Start';
$PageEndFmt = 'function:PrintSkin End';
$IsTemplateLoaded = 1;
SDVA($TmplDisplay, $sddef);
}
# This function is called to print a portion of the skin template
# according to the settings in $TmplDisplay.
function PrintSkin($pagename, $arg) {
global $TmplFmt, $TmplDisplay;
foreach ($TmplFmt[$arg] as $k => $v)
if (!isset($TmplDisplay[$k]) || $TmplDisplay[$k])
PrintFmt($pagename, $v);
}
# This function parses a wiki page like Site.LocalCSS
# and inserts CSS rules specific to the current page.
# Based on Cookbook:LocalCSS by Petko Yotov
function InsertWikiPageCSS($pagename, $fmt) {
global $HTMLStylesFmt, $EnableSelfWikiPageCSS, $WikiPageCSSVars;
SDV($WikiPageCSSVars,array('FarmPubDirUrl','PubDirUrl','Skin','action','SkinDirUrl'));
$stylepagename = FmtPageName($fmt, $pagename);
if ($stylepagename == $pagename &&
!IsEnabled($EnableSelfWikiPageCSS, 0)) return;
if ($stylepagename == $pagename && @$_POST['text'])
$text = stripmagic($_POST['text']);
else {
$p = ReadPage($stylepagename, READPAGE_CURRENT);
$text = @$p['text'];
}
if (!$text) return;
$text = str_replace(array("\r",'$','<','$='),array('','$','<','$='), $text);
$varray = array();
# global PHP variables as @variables
foreach($WikiPageCSSVars as $var) $varray["@$var"] = $GLOBALS[$var];
# get @variables from page
if (preg_match_all("/^\\s*(@\\w+):\\s*(.*?)\\s*$/m", $text, $vars) )
foreach($vars[1] as $k=>$varname) $varray[$varname] = trim($vars[2][$k]);
# expand nested @variables
for ($i=0; $i<10; $i++) $text = strtr($text, $varray);
# process snippets
if (preg_match_all("/\\[@\\s*([^\\/!\\s]+)\n(.*?)\\s*@\\]/s", $text, $matches, PREG_SET_ORDER) )
foreach($matches as $a)
if (count(MatchPageNames($pagename, trim($a[1]))))
@$HTMLStylesFmt['WikiPageCSS'] .= trim($a[2]);
}