uw Thu Jan 18 12:52:33 2001 EDT
Modified files:
/php4/pear/HTML ITX.php
Log:
Current version from the PHPLib CVS. Converted Tabs to spaces.
Error handling must be pearified.
Index: php4/pear/HTML/ITX.php
diff -u php4/pear/HTML/ITX.php:1.1 php4/pear/HTML/ITX.php:1.2
--- php4/pear/HTML/ITX.php:1.1 Wed Jan 17 08:15:17 2001
+++ php4/pear/HTML/ITX.php Thu Jan 18 12:52:33 2001
@@ -13,14 +13,11 @@
// | obtain it through the world-wide-web, please send a note to |
// | [EMAIL PROTECTED] so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
-// | Authors: Ulf Wendel <[EMAIL PROTECTED]> |
+// | Authors: Ulf Wendel <[EMAIL PROTECTED]> |
// +----------------------------------------------------------------------+
//
-// $Id: ITX.php,v 1.1 2001/01/17 16:15:17 sbergmann Exp $
+// $Id: ITX.php,v 1.2 2001/01/18 20:52:33 uw Exp $
//
-
-require_once "HTML/IT.php";
-
/**
* Integrated Template Extension - ITX
*
@@ -33,283 +30,627 @@
* Note that you can replace an existing block and add new blocks add runtime.
* Adding new blocks means changing a variable placeholder to a block.
*
-* @author Ulf Wendel <[EMAIL PROTECTED]>
-* @access public
-* @version $ID: $
-* @package PHPDoc
+* @author Ulf Wendel <[EMAIL PROTECTED]>
+* @access public
+* @version $Id: ITX.php,v 1.2 2001/01/18 20:52:33 uw Exp $
*/
class IntegratedTemplateExtension extends IntegratedTemplate {
+
+ /**
+ * Array with all warnings.
+ * @var array
+ * @access public
+ * @see $printWarning, $haltOnWarning, warning()
+ */
+ var $warn = array();
+
+ /**
+ * Print warnings?
+ * @var array
+ * @access public
+ * @see $haltOnWarning, $warn, warning()
+ */
+ var $printWarning = false;
+
+ /**
+ * Call die() on warning?
+ * @var boolean
+ * @access public
+ * @see $warn, $printWarning, warning()
+ */
+ var $haltOnWarning = false;
+
+ /**
+ * RegExp used to test for a valid blockname.
+ * @var string
+ */
+ var $checkblocknameRegExp = "";
+
+ /**
+ * Functionnameprefix used when searching function calls in the template.
+ * @var string
+ */
+ var $functionPrefix = "func_";
+
+ /**
+ * Functionname RegExp.
+ * @var string
+ */
+ var $functionnameRegExp = "[_a-zA-Z]+[A-Za-z_0-9]*";
+
+ /**
+ * RegExp used to grep function calls in the template.
+ *
+ * The variable gets set by the constructor.
+ *
+ * @var string
+ * @see IntegratedTemplateExtension()
+ */
+ var $functionRegExp = "";
+
+ /**
+ * List of functions found in the template.
+ *
+ * @var array
+ */
+ var $functions = array();
+
+ /**
+ * List of callback functions specified by the user.
+ *
+ * @var array
+ */
+ var $callback = array();
+
+ /**
+ * Builds some complex regexps and calls the constructor of the parent class.
+ *
+ * Make sure that you call this constructor if you derive you own
+ * template class from this one.
+ *
+ * @see IntegratedTemplate()
+ */
+ function IntegratedTemplateExtension($root = "") {
+
+ $this->checkblocknameRegExp = "@" . $this->blocknameRegExp . "@";
+ $this->functionRegExp = "@" . $this->functionPrefix . "(" .
+$this->functionnameRegExp . ")\s*\(@sm";
+
+ $this->IntegratedTemplate($root);
+
+
+ } // end func constructor
+
+ function init() {
+
+ $this->free();
+ $this->buildFunctionlist();
+ $this->findBlocks($this->template);
+ $this->buildBlockvariablelist();
+
+ } // end func init
+
+
+ /**
+ * Replaces an existing block with new content. Warning: not implemented yet.
+ *
+ * The Replacement does not affect previously added variables. All data is cached.
+ * In case the new block does contain less or other variable placeholder the
+previously
+ * passed data that is no longer referenced will be deleted. The internal list
+ * of allowed variables gets updated as well.
+ *
+ * In case the original block contains other blocks it must eighter have
+placeholder
+ * for the inner blocks or contain them. If you want to use placeholder the
+placeholder must
+ * look like openingDelimiter."__".blockname."__".closingDelimiter .
+ *
+ * Due to the cache updates replaceBlock() and replaceBlockfile() are "expensive"
+operations
+ * which means extensive usage will slow down your script. So try to avoid them
+and if
+ * you can't do so try to use them before you pass lots of variables to the block
+you're
+ * replacing.
+ *
+ * @param string Blockname
+ * @param string Blockcontent
+ * @return boolean
+ * @see replaceBlockfile(), addBlock(), addBlockfile()
+ * @access public
+ */
+ function replaceBlock($block, $template) {
+ if (!isset($this->blocklist[$block])) {
+ $this->halt("The block '$block' does not exist in the template and thus
+it can't be replaced.", __FILE__, __LINE__);
+ return false;
+ }
+ if (""==$template) {
+ $this->halt("No block content given.", __FILE__, __LINE__);
+ return false;
+ }
+
+ print "This function has not been coded yet.";
+
+ // find inner blocks
+ // add to variablelist
+ // compare variable list
+ // update caches
+
+ return true;
+ } // end func replaceBlock
+
+ /**
+ * Replaces an existing block with new content from a file. Warning: not
+implemented yet.
+ * @brother replaceBlock()
+ * @param string Blockname
+ * @param string Name of the file that contains the blockcontent
+ */
+ function replaceBlockfile($block, $filename) {
+ return $this->replaceBlock($block, $this->getFile($filename));
+ } // end func replaceBlockfile
+
+ /**
+ * Adds a block to the template changing a variable placeholder to a block
+placeholder.
+ *
+ * Add means "replace a variable placeholder by a new block".
+ * This is different to PHPLibs templates. The function loads a
+ * block, creates a handle for it and assigns it to a certain
+ * variable placeholder. To to the same with PHPLibs templates you would
+ * call set_file() to create the handle and parse() to assign the
+ * parsed block to a variable. By this PHPLibs templates assume that you tend
+ * to assign a block to more than one one placeholder. To assign a parsed block
+ * to more than only the placeholder you specify in this function you have
+ * to use a combination of getBlock() and setVariable().
+ *
+ * As no updates to cached data is necessary addBlock() and addBlockfile()
+ * are rather "cheap" meaning quick operations.
+ *
+ * The block content must not start with <!-- BEGIN blockname --> and end with
+ * <!-- END blockname --> this would cause overhead and produce an error.
+ *
+ * @param string Name of the variable placeholder, the name must be unique
+within the template.
+ * @param string Name of the block to be added
+ * @param string Content of the block
+ * @return boolean
+ * @see addBlockfile()
+ * @access public
+ */
+ function addBlock($placeholder, $blockname, $template) {
+
+ // Don't trust any user even if it's a programmer or yourself...
+ if ("" == $placeholder) {
+
+ $this->halt("No variable placeholder given.", __FILE__, __LINE__);
+ return false;
+
+ } else if ("" == $blockname || !preg_match($this->checkblocknameRegExp,
+$blockname) ) {
+
+ print $this->checkblocknameRegExp;
+ $this->halt("No or invalid blockname '$blockname' given.", __FILE__,
+__LINE__);
+ return false;
+
+ } else if ("" == $template) {
+
+ $this->halt("No block content given.", __FILE__, __LINE__);
+ return false;
+
+ } else if (isset($this->blocklist[$blockname])) {
+
+ $this->halt("The block already exists.", __FILE__, __LINE__);
+ return false;
+
+ }
+
+ // Hmm, we should do some more tests.
+ $parents = $this->findPlaceholderBlocks($placeholder);
+ if (0 == count($parents)) {
+
+ $this->halt("The variable placeholder '$placeholder' was not found in the
+template.", __FILE__, __LINE__);
+ return false;
+
+ } else if ( count($parents) > 1 ) {
+
+ reset($parents);
+ while (list($k, $parent) = each($parents))
+ $msg .= "$parent, ";
+ $msg = substr($parent, -2);
+
+ $this->halt("The variable placeholder '$placeholder' must be unique,
+found in multiple blocks '$msg'.", __FILE__, __LINE__);
+ return false;
+
+ }
+
+ $template = "<!-- BEGIN $blockname -->" . $template . "<!-- END $blockname
+-->";
+ $this->findBlocks($template);
+ if ($this->flagBlocktrouble)
+ return false; // findBlocks() already throws an exception
+
+ $this->blockinner[$parents[0]][] = $blockname;
+ $this->blocklist[$parents[0]] = preg_replace( "@" . $this->openingDelimiter
+. $placeholder . $this->closingDelimiter . "@",
+ $this->openingDelimiter .
+"__" . $blockname . "__" . $this->closingDelimiter,
+ $this->blocklist[$parents[0]]
+ );
+
+
+ $this->deleteFromBlockvariablelist($parents[0], $placeholder);
+ $this->updateBlockvariablelist($blockname);
+
+ return true;
+ } // end func addBlock
+
+ /**
+ * Adds a block taken from a file to the template changing a variable placeholder
+to a block placeholder.
+ *
+ * @param string Name of the variable placeholder to be converted
+ * @param string Name of the block to be added
+ * @param string File that contains the block
+ * @brother addBlock()
+ */
+ function addBlockfile($placeholder, $blockname, $filename) {
+ return $this->addBlock($placeholder, $blockname, $this->getFile($filename));
+ } // end func addBlockfile
+
+ /**
+ * Returns the name of the (first) block that contains the specified placeholder.
+ *
+ * @param string Name of the placeholder you're searching
+ * @param string Name of the block to scan. If left out (default) all blocks
+are scanned.
+ * @return string Name of the (first) block that contains the specified
+placeholder.
+ * If the placeholder was not found or an error occured an empty
+string is returned.
+ * @access public
+ */
+ function placeholderExists($placeholder, $block = "") {
+
+ if ("" == $placeholder) {
+ $this->halt("No placeholder name given.", __FILE__, __LINE__);
+ return "";
+ }
+
+ if ("" != $block && !isset($this->blocklist[$block])) {
+ $this->halt("Unknown block '$block'.", __FILE__, __LINE__);
+ return "";
+ }
+
+
+ // name of the block where the given placeholder was found
+ $found = "";
+
+ if ("" != $block) {
+
+ if (is_array($variables = $this->blockvariables[$block])) {
+
+ // search the value in the list of blockvariables
+ reset($variables);
+ while (list($k, $variable) = each($variables))
+ if ($variable == $placeholder) {
+ $found = $block;
+ break;
+ }
+
+ }
+
+ } else {
+
+ // search all blocks and return the name of the first block that
+ // contains the placeholder
+ reset($this->blockvariables);
+ while (list($blockname, $variables) = each($this->blockvariables)) {
+
+ reset($variables);
+ while (list($k, $variable) = each($variables))
+ if ($variable == $placeholder) {
+ $found = $blockname;
+ break 2;
+ }
+
+ }
+
+ }
+
+ return $found;
+ } // end func placeholderExists
+
+ /**
+ * Checks the list of function calls in the template and calls their callback
+function.
+ *
+ * @access public
+ */
+ function performCallback() {
+
+ reset($this->functions);
+ while (list($func_id, $function) = each($this->functions)) {
+
+ if (isset($this->callback[$function["name"]])) {
+
+ if ("" != $this->callback[$function["name"]]["object"])
+ $this->setFunctioncontent($func_id,
+ call_user_method(
+
+$this->callback[$function["name"]]["function"],
+
+$GLOBALS[$this->callback[$function["name"]]["object"]],
+ $function["args"]
+ )
+ );
+ else
+ $this->setFunctioncontent( $func_id,
+ call_user_func(
+
+$this->callback[$function["name"]]["function"],
+ $function["args"]
+ )
+ );
+
+ }
+
+ }
+
+ } // end func performCallback
+
+ /**
+ * Returns a list of all function calls in the current template.
+ *
+ * @return array
+ * @access public
+ */
+ function getFunctioncalls() {
+
+ return $this->functions;
+
+ } // end func getFunctioncalls
+
+ /**
+ * Replaces a function call with the given replacement.
+ *
+ * @param int Function ID
+ * @param string Replacement
+ * @access public
+ */
+ function setFunctioncontent($functionID, $replacement) {
+
+ $this->variableCache["__function" . $functionID . "__"] = $replacement;
+
+ } // end func setFunctioncontent
+
+ /**
+ * Sets a callback function.
+ *
+ * @param string Function name in the template
+ * @param string Name of the callback function
+ * @param string Name of the callback object
+ * @return boolean False on failure.
+ * @access public
+ */
+ function setCallbackFunction($tplfunction, $callbackfunction, $callbackobject =
+"") {
+
+ if ("" == $tplfunction || "" == $callbackfunction) {
+ $this->halt("No template function ('$tplfunction') and/or no callback
+function ('$callback') given.", __FILE__, __LINE__);
+ return false;
+ }
+
+ $this->callback[$tplfunction] = array(
+ "function" => $callbackfunction,
+ "object" => $callbackobject
+ );
+
+ return true;
+ } // end func setCallbackFunction
+
+ /**
+ * Sets the Callback function lookup table
+ *
+ * @param array function table - array[templatefunction] = array( "function"
+=> userfunction, "object" => userobject )
+ * @access public
+ */
+ function setCallbackFuntiontable($functions) {
+
+ $this->callback = $functions;
+
+ } // end func setCallbackFunctiontable
+
+ /**
+ * Returns a list of blocknames in the template.
+ *
+ * @return array [blockname => blockname]
+ * @access public
+ * @see blockExists()
+ */
+ function getBlocklist() {
+
+ $blocklist = array();
+ foreach ($this->blocklist as $block => $content)
+ $blocklist[$block] = $block;
+
+ return $blocklist;
+ } // end func getBlocklist
+
+ /**
+ * Checks wheter a block exists.
+ *
+ * @param string
+ * @return boolean
+ * @access public
+ * @see getBlocklist()
+ */
+ function blockExists($blockname) {
+ return isset($this->blocklist[$blockname]);
+ } // end func blockExists
+
+ /**
+ * Returns a list of variables of a block.
+ *
+ * @param string Blockname
+ * @return array [varname => varname]
+ * @access public
+ * @see BlockvariableExists()
+ */
+ function getBlockvariables($block) {
+ if (!isset($this->blockvariables[$block]))
+ return array();
+
+ $variables = array();
+ foreach ($this->blockvariables as $variable => $v)
+ $variables[$variable] = $variable;
+
+ return $variables;
+ } // end func getBlockvariables
+
+ /**
+ * Checks wheter a block variable exists.
+ *
+ * @param string Blockname
+ * @param string Variablename
+ * @return boolean
+ * @access public
+ * @see getBlockvariables()
+ */
+ function BlockvariableExists($block, $variable) {
+ return isset($this->blockvariables[$block][$variable]);
+ } // end func BlockvariableExists
+
+ /**
+ * Builds a functionlist from the template.
+ */
+ function buildFunctionlist() {
+
+ $this->functions = array();
+
+ $template = $this->template;
+ $num = 0;
+
+ while (preg_match($this->functionRegExp, $template, $regs)) {
+
+ $pos = strpos($template, $regs[0]);
+ $template = substr($template, $pos + strlen($regs[0]));
+
+ $head = $this->getValue($template, ")");
+ $args = array();
+
+ $this->template = str_replace($regs[0] . $head . ")", "{__function" .
+$num . "__}", $this->template);
+ $template = str_replace($regs[0] . $head . ")", "{__function" . $num .
+"__}", $template);
+
+ while ("" != $head && $arg = $this->getValue($head, ",")) {
+ $args[] = trim($arg);
+ if ($arg == $head)
+ break;
+ $head = substr($head, strlen($arg) + 1);
+ }
+
+ $this->functions[$num++] = array(
+ "name" => $regs[1],
+ "args" => $args
+ );
+ }
+
+ } // end func buildFunctionlist
+
+
+ function getValue($code, $delimiter) {
+ if ("" == $code)
+ return "";
+
+ if (!is_array($delimiter))
+ $delimiter = array( $delimiter => true );
+
+ $len = strlen($code);
+ $enclosed = false;
+ $enclosed_by = "";
+
+ if (isset($delimiter[$code[0]])) {
+
+ $i = 1;
+
+ } else {
+
+ for ($i = 0; $i < $len; ++$i) {
+
+ $char = $code[$i];
+
+ if (('"' == $char || "'" == $char) && ($char == $enclosed_by || "" ==
+$enclosed_by) && (0 == $i || ($i > 0 && "\\" != $code[$i - 1]))) {
+
+ if (!$enclosed)
+ $enclosed_by = $char;
+ else
+ $enclosed_by = "";
+
+ $enclosed = !$enclosed;
+
+ }
+ if (!$enclosed && isset($delimiter[$char]))
+ break;
+
+ }
+
+ }
+
+ return substr($code, 0, $i);
+ } // end func getValue
+
+
+ /**
+ * Deletes one or many variables from the block variable list.
+ *
+ * @param string Blockname
+ * @param mixed Name of one variable or array of variables ( array (
+name => true ) ) to be stripped.
+ */
+ function deleteFromBlockvariablelist($block, $variables) {
+
+ if (!is_array($variables))
+ $variables = array($variables => true);
+
+ reset($this->blockvariables[$block]);
+ while (list($k, $varname) = each($this->blockvariables[$block]))
+ if (isset($variables[$varname]))
+ unset($this->blockvariables[$block][$k]);
+
+ } // end deleteFromBlockvariablelist
+
+ /**
+ * Updates the variable list of a block.
+ *
+ * @param string Blockname
+ */
+ function updateBlockvariablelist($block) {
+
+ preg_match_all( $this->variablesRegExp, $this->blocklist[$block], $regs );
+ $this->blockvariables[$block] = $regs[1];
+
+ } // end func updateBlockvariablelist
+
+ /**
+ * Returns an array of blocknames where the given variable placeholder is used.
+ *
+ * @param string Variable placeholder
+ * @return array $parents parents[0..n] = blockname
+ */
+ function findPlaceholderBlocks($variable) {
+
+ $parents = array();
+
+ reset($this->blocklist);
+ while (list($blockname, $content) = each($this->blocklist)) {
+
+ reset($this->blockvariables[$blockname]);
+ while (list($k, $varname) = each($this->blockvariables[$blockname]))
+ if ($variable == $varname)
+ $parents[] = $blockname;
+ }
+
+ return $parents;
+ } // end func findPlaceholderBlocks
+
+ /**
+ * Handles warnings, saves them to $warn and prints them or calls die() depending
+on the flags
+ * @param string Warning
+ * @param string File where the warning occured
+ * @param int Linenumber where the warning occured
+ * @see $warn, $printWarning, $haltOnWarning
+ */
+ function warning($message, $file="", $line=0) {
+
+ $message = sprintf("IntegratedTemplateExtension Warning: %s [File: %s, Line:
+%d]",
+ $message,
+ $file,
+ $line );
- /**
- * Array with all warnings.
- * @var array
- * @access public
- * @see $printWarning, $haltOnWarning, warning()
- */
- var $warn = array();
-
- /**
- * Print warnings?
- * @var array
- * @access public
- * @see $haltOnWarning, $warn, warning()
- */
- var $printWarning = false;
-
- /**
- * Call die() on warning?
- * @var boolean
- * @access public
- * @see $warn, $printWarning, warning()
- */
- var $haltOnWarning = false;
-
- /**
- * RegExp used to test for a valid blockname.
- * @var string
- */
- var $checkblocknameRegExp = "";
-
- /**
- * Builds some complex regexps and calls the constructor of the parent class.
- *
- * Make sure that you call this constructor if you derive you own
- * template class from this one.
- *
- * @see IntegratedTemplate()
- */
- function IntegratedTemplateExtension() {
-
- $this->checkblocknameRegExp = "@".$this->blocknameRegExp."@";
- $this->IntegratedTemplate();
-
- } // end func IntegratedTemplateExtension
-
- /**
- * Replaces an existing block with new content. Warning: not implemented yet.
- *
- * The Replacement does not affect previously added variables. All data is
cached.
- * In case the new block does contain less or other variable placeholder the
previously
- * passed data that is no longer referenced will be deleted. The internal list
- * of allowed variables gets updated as well.
- *
- * In case the original block contains other blocks it must eighter have
placeholder
- * for the inner blocks or contain them. If you want to use placeholder the
placeholder must
- * look like openingDelimiter."__".blockname."__".closingDelimiter .
- *
- * Due to the cache updates replaceBlock() and replaceBlockfile() are
"expensive" operations
- * which means extensive usage will slow down your script. So try to avoid them
and if
- * you can't do so try to use them before you pass lots of variables to the
block you're
- * replacing.
- *
- * @param string Blockname
- * @param string Blockcontent
- * @return boolean
- * @see replaceBlockfile(), addBlock(), addBlockfile()
- * @access public
- */
- function replaceBlock($block, $template) {
- if (!isset($this->blocklist[$block])) {
- $this->halt("The block '$block' does not exist in the template
and thus it can't be replaced.", __FILE__, __LINE__);
- return false;
- }
- if (""==$template) {
- $this->halt("No block content given.", __FILE__, __LINE__);
- return false;
- }
-
- print "This function has not been coded yet.";
-
- // find inner blocks
- // add to variablelist
- // compare variable list
- // update caches
-
- return true;
- } // end func replaceBlock
-
- /**
- * Replaces an existing block with new content from a file. Warning: not
implemented yet.
- * @brother replaceBlock()
- * @param string Blockname
- * @param string Name of the file that contains the blockcontent
- */
- function replaceBlockfile($block, $filename) {
- return $this->replaceBlock($block, $this->getFile($filename));
- } // end func replaceBlockfile
-
- /**
- * Adds a block to the template changing a variable placeholder to a block
placeholder.
- *
- * Add means "replace a variable placeholder by a new block".
- * This is different to PHPLibs templates. The function loads a
- * block, creates a handle for it and assigns it to a certain
- * variable placeholder. To to the same with PHPLibs templates you would
- * call set_file() to create the handle and parse() to assign the
- * parsed block to a variable. By this PHPLibs templates assume that you tend
- * to assign a block to more than one one placeholder. To assign a parsed block
- * to more than only the placeholder you specify in this function you have
- * to use a combination of getBlock() and setVariable().
- *
- * As no updates to cached data is necessary addBlock() and addBlockfile()
- * are rather "cheap" meaning quick operations.
- *
- * The block content must not start with <!-- BEGIN blockname --> and end with
- * <!-- END blockname --> this would cause overhead and produce an error.
- *
- * @param string Name of the variable placeholder, the name must be
unique within the template.
- * @param string Name of the block to be added
- * @param string Content of the block
- * @return boolean
- * @see addBlockfile()
- * @access public
- */
- function addBlock($placeholder, $blockname, $template) {
-
- // Don't trust any user even if it's a programmer or yourself...
- if (""==$placeholder) {
-
- $this->halt("No variable placeholder given.", __FILE__,
__LINE__);
- return false;
-
- } else if (""==$blockname ||
!preg_match($this->checkblocknameRegExp, $blockname) ) {
-
- print $this->checkblocknameRegExp;
- $this->halt("No or invalid blockname '$blockname' given.",
__FILE__, __LINE__);
- return false;
-
- } else if (""==$template) {
-
- $this->halt("No block content given.", __FILE__, __LINE__);
- return false;
-
- } else if (isset($this->blocklist[$blockname])) {
-
- $this->halt("The block already exists.", __FILE__, __LINE__);
- return false;
-
- }
-
- // Hmm, we should do some more tests.
- $parents = $this->findPlaceholderBlocks($placeholder);
- if (0==count($parents)) {
-
- $this->halt("The variable placeholder '$placeholder' was not
found in the template.", __FILE__, __LINE__);
- return false;
-
- } else if ( count($parents)>1 ) {
-
- reset($parents);
- while (list($k, $parent)=each($parents))
- $msg.= "$parent, ";
- $msg = substr($parent, -2);
-
- $this->halt("The variable placeholder '$placeholder' must be
unique, found in multiple blocks '$msg'.", __FILE__, __LINE__);
- return false;
-
- }
-
- $template = "<!-- BEGIN $blockname -->".$template."<!-- END $blockname
-->";
- $this->findBlocks($template);
- if ($this->flagBlocktrouble)
- return false; // findBlocks() already throws an exception
-
- $this->blockinner[$parents[0]][] = $blockname;
- $this->blocklist[$parents[0]] = preg_replace(
"@".$this->openingDelimiter.$placeholder.$this->closingDelimiter."@",
-
$this->openingDelimiter."__".$blockname."__".$this->closingDelimiter,
-
$this->blocklist[$parents[0]]
-
);
-
- $this->deleteFromBlockvariablelist($parents[0], $placeholder);
- $this->updateBlockvariablelist($blockname);
-
- return true;
- } // end func addBlock
-
- /**
- * Adds a block taken from a file to the template changing a variable
placeholder to a block placeholder.
- *
- * @param string Name of the variable placeholder to be
converted
- * @param string Name of the block to be added
- * @param string File that contains the block
- * @brother addBlock()
- */
- function addBlockfile($placeholder, $blockname, $filename) {
- return $this->addBlock($placeholder, $blockname,
$this->getFile($filename));
- } // end func addBlockfile
-
- /**
- * Deletes one or many variables from the block variable list.
- * @param string Blockname
- * @param mixed Name of one variable or array of variables (
array ( name => true ) ) to be stripped.
- */
- function deleteFromBlockvariablelist($block, $variables) {
-
- if (!is_array($variables))
- $variables = array( $variables => true);
-
- reset($this->blockvariables[$block]);
- while (list($k, $varname)=each($this->blockvariables[$block]))
- if (isset($variables[$varname]))
- unset($this->blockvariables[$block][$k]);
-
- } // end deleteFromBlockvariablelist
-
- /**
- * Updates the variable list of a block.
- * @param string Blockname
- */
- function updateBlockvariablelist($block) {
-
- preg_match_all( $this->variablesRegExp, $this->blocklist[$block],
$regs );
- $this->blockvariables[$block] = $regs[1];
-
- } // end func updateBlockvariablelist
-
- /**
- * Returns an array of blocknames where the given variable placeholder is used.
- * @param string Variable placeholder
- * @return array $parents parents[0..n] = blockname
- */
- function findPlaceholderBlocks($variable) {
-
- $parents = array();
-
- reset($this->blocklist);
- while (list($blockname, $content)=each($this->blocklist)) {
-
- reset($this->blockvariables[$blockname]);
- while (list($k,
$varname)=each($this->blockvariables[$blockname]))
- if ($variable == $varname)
- $parents[] = $blockname;
- }
-
- return $parents;
- } // end func findPlaceholderBlocks
-
- /**
- * Handles warnings, saves them to $warn and prints them or calls die()
depending on the flags
- * @param string Warning
- * @param string File where the warning occured
- * @param int Linenumber where thr warning occured
- * @see $warn, $printWarning, $haltOnWarning
- */
- function warning($message, $file="", $line=0) {
-
- $message = sprintf("IntegratedTemplateExtension Warning: %s [File: %s,
Line: %d]",
-
$message,
-
$file,
-
$line );
-
- $this->warn[] = $message;
-
- if ($this->printWarning)
- print $message;
-
- if ($this->haltOnError)
- die($message);
-
- } // end func warning
-
+ $this->warn[] = $message;
+
+ if ($this->printWarning)
+ print $message;
+
+ if ($this->haltOnError)
+ die($message);
+
+ } // end func warning
+
} // end class IntegratedTemplateExtension
?>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]