summaryrefslogtreecommitdiffstats
path: root/ldap-site-mngmt/webinterface/class.FastTemplate.php
diff options
context:
space:
mode:
Diffstat (limited to 'ldap-site-mngmt/webinterface/class.FastTemplate.php')
-rw-r--r--ldap-site-mngmt/webinterface/class.FastTemplate.php768
1 files changed, 768 insertions, 0 deletions
diff --git a/ldap-site-mngmt/webinterface/class.FastTemplate.php b/ldap-site-mngmt/webinterface/class.FastTemplate.php
new file mode 100644
index 00000000..d048ee5c
--- /dev/null
+++ b/ldap-site-mngmt/webinterface/class.FastTemplate.php
@@ -0,0 +1,768 @@
+<?
+################################################
+#### Angepasst an PHP4 von ####
+#### Timothy Burk - Webdesign & PC-Service ####
+#### info@tburk.com ####
+################################################
+/*
+ CVS Revision. 1.1.0
+*/
+
+/*
+ eine weitere kleine Anpassung von Thomas Nunninger betrifft das append in der
+ parse-Funktion. Bei error_reporting(E_ALL) erschien sonst beim ersten Anhängen
+ an eine noch nicht vorhandene Variable eine Fehlermeldung.
+*/
+
+class FastTemplate {
+
+ var $FILELIST = array(); // Holds the array of filehandles
+ // FILELIST[HANDLE] == "fileName"
+
+ var $DYNAMIC = array(); // Holds the array of dynamic
+ // blocks, and the fileHandles they
+ // live in.
+
+ var $PARSEVARS = array(); // Holds the array of Variable
+ // handles.
+ // PARSEVARS[HANDLE] == "value"
+
+ var $LOADED = array(); // We only want to load a template
+ // once - when it's used.
+ // LOADED[FILEHANDLE] == 1 if loaded
+ // undefined if not loaded yet.
+
+ var $HANDLE = array(); // Holds the handle names assigned
+ // by a call to parse()
+
+ var $ROOT = ""; // Holds path-to-templates
+
+ var $WIN32 = false; // Set to true if this is a WIN32 server
+
+ var $ERROR = ""; // Holds the last error message
+
+ var $LAST = ""; // Holds the HANDLE to the last
+ // template parsed by parse()
+
+ var $STRICT = true; // Strict template checking.
+ // Unresolved vars in templates will
+ // generate a warning when found.
+
+// ************************************************************
+
+ function FastTemplate ($pathToTemplates = "")
+ {
+ global $php_errormsg;
+
+ if(!empty($pathToTemplates))
+ {
+ $this->set_root($pathToTemplates);
+ }
+
+ } // end (new) FastTemplate ()
+
+
+// ************************************************************
+// All templates will be loaded from this "root" directory
+// Can be changed in mid-process by re-calling with a new
+// value.
+
+ function set_root ($root)
+ {
+ $trailer = substr($root,-1);
+
+ if(!$this->WIN32)
+ {
+ if( (ord($trailer)) != 47 )
+ {
+ $root = "$root".chr(47);
+ }
+
+ if(is_dir($root))
+ {
+ $this->ROOT = $root;
+ }
+ else
+ {
+ $this->ROOT = "";
+ $this->error("Specified ROOT dir [$root] is not a directory");
+ }
+ }
+ else
+ {
+ // WIN32 box - no testing
+ if( (ord($trailer)) != 92 )
+ {
+ $root = "$root".chr(92);
+ }
+ $this->ROOT = $root;
+ }
+
+ } // End set_root()
+
+
+// **************************************************************
+// Calculates current microtime
+// I throw this into all my classes for benchmarking purposes
+// It's not used by anything in this class and can be removed
+// if you don't need it.
+
+
+ function utime ()
+ {
+ $time = explode( " ", microtime());
+ $usec = (double)$time[0];
+ $sec = (double)$time[1];
+ return $sec + $usec;
+ }
+
+// **************************************************************
+// Strict template checking, if true sends warnings to STDOUT when
+// parsing a template with undefined variable references
+// Used for tracking down bugs-n-such. Use no_strict() to disable.
+
+ function strict ()
+ {
+ $this->STRICT = true;
+ }
+
+// ************************************************************
+// Silently discards (removes) undefined variable references
+// found in templates
+
+ function no_strict ()
+ {
+ $this->STRICT = false;
+ }
+
+// ************************************************************
+// A quick check of the template file before reading it.
+// This is -not- a reliable check, mostly due to inconsistencies
+// in the way PHP determines if a file is readable.
+
+ function is_safe ($filename)
+ {
+ if(!file_exists($filename))
+ {
+ $this->error("[$filename] does not exist",0);
+ return false;
+ }
+ return true;
+ }
+
+// ************************************************************
+// Grabs a template from the root dir and
+// reads it into a (potentially REALLY) big string
+
+ function get_template ($template)
+ {
+ if(empty($this->ROOT))
+ {
+ $this->error("Cannot open template. Root not valid.",1);
+ return false;
+ }
+
+ $filename = "$this->ROOT"."$template";
+
+ $contents = implode("",(@file($filename)));
+ if( (!$contents) or (empty($contents)) )
+ {
+ $this->error("get_template() failure: [$filename] $php_errormsg",1);
+ }
+
+ return $contents;
+
+ } // end get_template
+
+// ************************************************************
+// Prints the warnings for unresolved variable references
+// in template files. Used if STRICT is true
+
+ function show_unknowns ($Line)
+ {
+ $unknown = array();
+ if (ereg("({[A-Z0-9_]+})",$Line,$unknown))
+ {
+ $UnkVar = $unknown[1];
+ if(!(empty($UnkVar)))
+ {
+ @error_log("[FastTemplate] Warning: no value found for variable: $UnkVar ",0);
+ }
+ }
+ } // end show_unknowns()
+
+// ************************************************************
+// This routine get's called by parse() and does the actual
+// {VAR} to VALUE conversion within the template.
+
+ function parse_template ($template, $tpl_array)
+ {
+ while ( list ($key,$val) = each ($tpl_array) )
+ {
+ if (!(empty($key)))
+ {
+ if(gettype($val) != "string")
+ {
+ settype($val,"string");
+ }
+
+ $template = ereg_replace("\{$key}","$val","$template");
+ //$template = str_replace("\{$key}","$val","$template");
+ }
+ }
+
+ if(!$this->STRICT)
+ {
+ // Silently remove anything not already found
+
+ $template = ereg_replace("\{([A-Z0-9_]+)}","",$template);
+ }
+ else
+ {
+ // Warn about unresolved template variables
+ if (ereg("(\{[A-Z0-9_]+})",$template))
+ {
+ $unknown = split("\n",$template);
+ while (list ($Element,$Line) = each($unknown) )
+ {
+ $UnkVar = $Line;
+ if(!(empty($UnkVar)))
+ {
+ $this->show_unknowns($UnkVar);
+ }
+ }
+ }
+ }
+ return $template;
+
+ } // end parse_template();
+
+// ************************************************************
+// The meat of the whole class. The magic happens here.
+
+ function parse ( $ReturnVar, $FileTags )
+ {
+ $append = false;
+ $this->LAST = $ReturnVar;
+ $this->HANDLE[$ReturnVar] = 1;
+
+ if (gettype($FileTags) == "array")
+ {
+ unset($this->$ReturnVar); // Clear any previous data
+
+ while ( list ( $key , $val ) = each ( $FileTags ) )
+ {
+ if ( (!isset($this->$val)) || (empty($this->$val)) )
+ {
+ $this->LOADED["$val"] = 1;
+ if(isset($this->DYNAMIC["$val"]))
+ {
+ $this->parse_dynamic($val,$ReturnVar);
+ }
+ else
+ {
+ $fileName = $this->FILELIST["$val"];
+ $this->$val = $this->get_template($fileName);
+ }
+ }
+
+ // Array context implies overwrite
+
+ $this->$ReturnVar = $this->parse_template($this->$val,$this->PARSEVARS);
+
+ // For recursive calls.
+
+ $this->assign( array( $ReturnVar => $this->$ReturnVar ) );
+
+ }
+ } // end if FileTags is array()
+ else
+ {
+ // FileTags is not an array
+
+ $val = $FileTags;
+
+ if( (substr($val,0,1)) == '.' )
+ {
+ // Append this template to a previous ReturnVar
+
+ $append = true;
+ $val = substr($val,1);
+ }
+
+ if ( (!isset($this->$val)) || (empty($this->$val)) )
+ {
+ $this->LOADED["$val"] = 1;
+ if(isset($this->DYNAMIC["$val"]))
+ {
+ $this->parse_dynamic($val,$ReturnVar);
+ }
+ else
+ {
+ $fileName = $this->FILELIST["$val"];
+ $this->$val = $this->get_template($fileName);
+ }
+ }
+
+ if($append)
+ {
+ // Thomas> auch hier append korrigiert
+ if (isset($this->$ReturnVar)) {
+ $this->$ReturnVar .= $this->parse_template($this->$val,$this->PARSEVARS);
+ } else {
+ $this->$ReturnVar = $this->parse_template($this->$val,$this->PARSEVARS);
+ }
+ }
+ else
+ {
+ $this->$ReturnVar = $this->parse_template($this->$val,$this->PARSEVARS);
+ }
+
+ // For recursive calls.
+
+ $this->assign(array( $ReturnVar => $this->$ReturnVar) );
+
+ }
+ return;
+ } // End parse()
+
+
+// ************************************************************
+
+ function FastPrint ( $template = "" )
+ {
+ if(empty($template))
+ {
+ $template = $this->LAST;
+ }
+
+ if( (!(isset($this->$template))) || (empty($this->$template)) )
+ {
+ $this->error("Nothing parsed, nothing printed",0);
+ return;
+ }
+ else
+ {
+ print $this->$template;
+ }
+ return;
+ }
+
+// ************************************************************
+
+ function fetch ( $template = "" )
+ {
+ if(empty($template))
+ {
+ $template = $this->LAST;
+ }
+ if( (!(isset($this->$template))) || (empty($this->$template)) )
+ {
+ $this->error("Nothing parsed, nothing printed",0);
+ return "";
+ }
+
+ return($this->$template);
+ }
+
+
+// ************************************************************
+
+ function define_dynamic ($Macro, $ParentName)
+ {
+ // A dynamic block lives inside another template file.
+ // It will be stripped from the template when parsed
+ // and replaced with the {$Tag}.
+
+ $this->DYNAMIC["$Macro"] = $ParentName;
+ return true;
+ }
+
+// ************************************************************
+
+ function parse_dynamic ($Macro,$MacroName)
+ {
+ // The file must already be in memory.
+
+ $ParentTag = $this->DYNAMIC["$Macro"];
+ // Thomas> in Folgezeile !isset($this->$ParentTag eingefügt
+ if( (!isset($this->$ParentTag) || !$this->$ParentTag) or (empty($this->$ParentTag)) )
+ {
+ $fileName = $this->FILELIST[$ParentTag];
+ $this->$ParentTag = $this->get_template($fileName);
+ $this->LOADED[$ParentTag] = 1;
+ }
+ if($this->$ParentTag)
+ {
+ $template = $this->$ParentTag;
+ $DataArray = split("\n",$template);
+ $newMacro = "";
+ $newParent = "";
+ $outside = true;
+ $start = false;
+ $end = false;
+ while ( list ($lineNum,$lineData) = each ($DataArray) )
+ {
+ $lineTest = trim($lineData);
+ if("<!-- BEGIN DYNAMIC BLOCK: $Macro -->" == "$lineTest" )
+ {
+ $start = true;
+ $end = false;
+ $outside = false;
+ }
+ if("<!-- END DYNAMIC BLOCK: $Macro -->" == "$lineTest" )
+ {
+ $start = false;
+ $end = true;
+ $outside = true;
+ }
+ if( (!$outside) and (!$start) and (!$end) )
+ {
+ $newMacro .= "$lineData\n"; // Restore linebreaks
+ }
+ if( ($outside) and (!$start) and (!$end) )
+ {
+ $newParent .= "$lineData\n"; // Restore linebreaks
+ }
+ if($end)
+ {
+ $newParent .= "\{$MacroName}\n";
+ }
+ // Next line please
+ if($end) { $end = false; }
+ if($start) { $start = false; }
+ } // end While
+
+ $this->$Macro = $newMacro;
+ $this->$ParentTag = $newParent;
+ return true;
+
+ } // $ParentTag NOT loaded - MAJOR oopsie
+ else
+ {
+ @error_log("ParentTag: [$ParentTag] not loaded!",0);
+ $this->error("ParentTag: [$ParentTag] not loaded!",0);
+ }
+ return false;
+ }
+
+// ************************************************************
+// Strips a DYNAMIC BLOCK from a template.
+
+ function clear_dynamic ($Macro="")
+ {
+ if(empty($Macro)) { return false; }
+
+ // The file must already be in memory.
+
+ $ParentTag = $this->DYNAMIC["$Macro"];
+
+ if( (!$this->$ParentTag) or (empty($this->$ParentTag)) )
+ {
+ $fileName = $this->FILELIST[$ParentTag];
+ $this->$ParentTag = $this->get_template($fileName);
+ $this->LOADED[$ParentTag] = 1;
+ }
+
+ if($this->$ParentTag)
+ {
+ $template = $this->$ParentTag;
+ $DataArray = split("\n",$template);
+ $newParent = "";
+ $outside = true;
+ $start = false;
+ $end = false;
+ while ( list ($lineNum,$lineData) = each ($DataArray) )
+ {
+ $lineTest = trim($lineData);
+ if("<!-- BEGIN DYNAMIC BLOCK: $Macro -->" == "$lineTest" )
+ {
+ $start = true;
+ $end = false;
+ $outside = false;
+ }
+ if("<!-- END DYNAMIC BLOCK: $Macro -->" == "$lineTest" )
+ {
+ $start = false;
+ $end = true;
+ $outside = true;
+ }
+ if( ($outside) and (!$start) and (!$end) )
+ {
+ $newParent .= "$lineData\n"; // Restore linebreaks
+ }
+ // Next line please
+ if($end) { $end = false; }
+ if($start) { $start = false; }
+ } // end While
+
+ $this->$ParentTag = $newParent;
+ return true;
+
+ } // $ParentTag NOT loaded - MAJOR oopsie
+ else
+ {
+ @error_log("ParentTag: [$ParentTag] not loaded!",0);
+ $this->error("ParentTag: [$ParentTag] not loaded!",0);
+ }
+ return false;
+ }
+
+
+// ************************************************************
+
+ function define ($fileList)
+ {
+ while ( list ($FileTag,$FileName) = each ($fileList) )
+ {
+ $this->FILELIST["$FileTag"] = $FileName;
+ }
+ return true;
+ }
+
+// ************************************************************
+
+ function clear_parse ( $ReturnVar = "")
+ {
+ $this->clear($ReturnVar);
+ }
+
+// ************************************************************
+
+ function clear ( $ReturnVar = "" )
+ {
+ // Clears out hash created by call to parse()
+
+ if(!empty($ReturnVar))
+ {
+ if( (gettype($ReturnVar)) != "array")
+ {
+ unset($this->$ReturnVar);
+ return;
+ }
+ else
+ {
+ while ( list ($key,$val) = each ($ReturnVar) )
+ {
+ unset($this->$val);
+ }
+ return;
+ }
+ }
+
+ // Empty - clear all of them
+
+ while ( list ( $key,$val) = each ($this->HANDLE) )
+ {
+ $KEY = $key;
+ unset($this->$KEY);
+ }
+ return;
+
+ } // end clear()
+
+// ************************************************************
+
+ function clear_all ()
+ {
+ $this->clear();
+ $this->clear_assign();
+ $this->clear_define();
+ $this->clear_tpl();
+
+ return;
+
+ } // end clear_all
+
+// ************************************************************
+
+ function clear_tpl ($fileHandle = "")
+ {
+ if(empty($this->LOADED))
+ {
+ // Nothing loaded, nothing to clear
+
+ return true;
+ }
+ if(empty($fileHandle))
+ {
+ // Clear ALL fileHandles
+
+ while ( list ($key, $val) = each ($this->LOADED) )
+ {
+ unset($this->$key);
+ }
+ unset($this->LOADED);
+
+ return true;
+ }
+ else
+ {
+ if( (gettype($fileHandle)) != "array")
+ {
+ if( (isset($this->$fileHandle)) || (!empty($this->$fileHandle)) )
+ {
+ unset($this->LOADED[$fileHandle]);
+ unset($this->$fileHandle);
+ return true;
+ }
+ }
+ else
+ {
+ while ( list ($Key, $Val) = each ($fileHandle) )
+ {
+ unset($this->LOADED[$Key]);
+ unset($this->$Key);
+ }
+ return true;
+ }
+ }
+
+ return false;
+
+ } // end clear_tpl
+
+// ************************************************************
+
+ function clear_define ( $FileTag = "" )
+ {
+ if(empty($FileTag))
+ {
+ unset($this->FILELIST);
+ return;
+ }
+
+ if( (gettype($Files)) != "array")
+ {
+ unset($this->FILELIST[$FileTag]);
+ return;
+ }
+ else
+ {
+ while ( list ( $Tag, $Val) = each ($FileTag) )
+ {
+ unset($this->FILELIST[$Tag]);
+ }
+ return;
+ }
+ }
+
+// ************************************************************
+// Aliased function - used for compatibility with CGI::FastTemplate
+ /* function clear_parse ()
+ {
+ $this->clear_assign();
+ } */
+
+// ************************************************************
+// Clears all variables set by assign()
+
+ function clear_assign ()
+ {
+ if(!(empty($this->PARSEVARS)))
+ {
+ while(list($Ref,$Val) = each ($this->PARSEVARS) )
+ {
+ unset($this->PARSEVARS["$Ref"]);
+ }
+ }
+ }
+
+// ************************************************************
+
+ function clear_href ($href)
+ {
+ if(!empty($href))
+ {
+ if( (gettype($href)) != "array")
+ {
+ unset($this->PARSEVARS[$href]);
+ return;
+ }
+ else
+ {
+ while (list ($Ref,$val) = each ($href) )
+ {
+ unset($this->PARSEVARS[$Ref]);
+ }
+ return;
+ }
+ }
+ else
+ {
+ // Empty - clear them all
+
+ $this->clear_assign();
+ }
+ return;
+ }
+
+// ************************************************************
+
+ function assign ($tpl_array, $trailer="")
+ {
+ if(gettype($tpl_array) == "array")
+ {
+ while ( list ($key,$val) = each ($tpl_array) )
+ {
+ if (!(empty($key)))
+ {
+ // Empty values are allowed
+ // Empty Keys are NOT
+
+ $this->PARSEVARS["$key"] = $val;
+ }
+ }
+ }
+ else
+ {
+ // Empty values are allowed in non-array context now.
+ if (!empty($tpl_array))
+ {
+ $this->PARSEVARS["$tpl_array"] = $trailer;
+ }
+ }
+ }
+
+// ************************************************************
+// Return the value of an assigned variable.
+// Christian Brandel cbrandel@gmx.de
+
+ function get_assigned($tpl_name = "")
+ {
+ if(empty($tpl_name)) { return false; }
+ if(isset($this->PARSEVARS["$tpl_name"]))
+ {
+ return ($this->PARSEVARS["$tpl_name"]);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+// ************************************************************
+
+ function error ($errorMsg, $die = 0)
+ {
+ $this->ERROR = $errorMsg;
+ echo "ERROR: $this->ERROR <BR> \n";
+ if ($die == 1)
+ {
+ exit;
+ }
+
+ return;
+
+ } // end error()
+
+
+// ************************************************************
+
+
+
+// ************************************************************
+
+} // End class.FastTemplate.php3
+
+?>