Login   Register  
PHP Classes
elePHPant
Icontem

File: templates/template.inc

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of MARY Matthieu  >  Audio_Playlist  >  templates/template.inc  >  Download  
File: templates/template.inc
Role: Configuration script
Content type: text/plain
Description: template motor (base on phpLib)
Class: Audio_Playlist
Create play list files in multiple formats
Author: By
Last change: fix some php5 notices
Date: 2007-06-29 09:19
Size: 9,651 bytes
 

Contents

Class file image Download
<?php
/**
 * $Id: template.inc 1593 2007-05-03 20:10:33Z matthieu $
 */
/**
 * Session Management for PHP3
 *
 * @Copyright 1999-2000 NetUSE GmbH
 *                    Kristian Koehntopp
 *
 *
 * @package template
 *
 */
class Template {
  private 
$classname "Template";

  
/* if set, echo assignments */
  
public $debug     false;

  
/* $file[handle] = "filename"; */
  
private $file  = array();

  
/* relative filenames are relative to this pathname */
  
private $root   "";

  
/* $varkeys[key] = "key"; $varvals[key] = "value"; */
  
private $varkeys = array();
  private 
$varvals = array();

  
/* "remove"  => remove undefined variables
   * "comment" => replace undefined variables with comments
   * "keep"    => keep undefined variables
   */
  
private $unknowns "remove";

  
/* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
  
private $halt_on_error  "yes";

  
/* last error message is retained here */
  
private $last_error     "";


  
/***************************************************************************/
  /* public: Constructor.
   * root:     template directory.
   * unknowns: how to handle unknown variables.
   */
  
public function __construct($root "."$unknowns "remove") {
    
$this->set_root($root);
    
$this->set_unknowns($unknowns);
  }

  
/* public: setroot(pathname $root)
   * root:   new template directory.
   */
  
public function set_root($root) {
    if (!
is_dir($root)) {
      
$this->halt("set_root: $root is not a directory.");
      return 
false;
    }

    
$this->root $root;
    return 
true;
  }

  
/* public: set_unknowns(enum $unknowns)
   * unknowns: "remove", "comment", "keep"
   *
   */
  
public function set_unknowns($unknowns "keep") {
    
$this->unknowns $unknowns;
  }

  
/* public: set_file(array $filelist)
   * filelist: array of handle, filename pairs.
   *
   * public: set_file(string $handle, string $filename)
   * handle: handle for a filename,
   * filename: name of template file
   */
  
public function set_file($handle$filename "") {
    if (!
is_array($handle)) {
      if (
$filename == "") {
        
$this->halt("set_file: For handle $handle filename is empty.");
        return 
false;
      }
      
$this->file[$handle] = $this->filename($filename);
    } else {
      
reset($handle);
      while(list(
$h$f) = each($handle)) {
        
$this->file[$h] = $this->filename($f);
      }
    }
  }

  
/* public: set_block(string $parent, string $handle, string $name = "")
   * extract the template $handle from $parent,
   * place variable {$name} instead.
   */
  
public function set_block($parent$handle$name "") {
    if (!
$this->loadfile($parent)) {
      
$this->halt("subst: unable to load $parent.");
      return 
false;
    }
    if (
$name == "")
      
$name $handle;

    
$str $this->get_var($parent);
    
//$reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
    
$reg "/<!--\s+BEGIN $handle\s+-->(.*)<!--\s+END $handle\s+-->/sm";
    
preg_match_all($reg$str$m);
    
$str preg_replace($reg"{" "$name}"$str);
    
$this->set_var($handle$m[1][0]);
    
$this->set_var($parent$str);
  }

  
/* public: set_var(array $values)
   * values: array of variable name, value pairs.
   *
   * public: set_var(string $varname, string $value)
   * varname: name of a variable that is to be defined
   * value:   value of that variable
   */
  
public function set_var($varname$value "") {
    if (!
is_array($varname)) {
      if (!empty(
$varname))
        if (
$this->debug) print "scalar: set *$varname* to *$value*<br>\n";
        
$this->varkeys[$varname] = "/".$this->varname($varname)."/";
        
$this->varvals[$varname] = $value;
    } else {
      
reset($varname);
      while(list(
$k$v) = each($varname)) {
        if (!empty(
$k))
          if (
$this->debug) print "array: set *$k* to *$v*<br>\n";
          
$this->varkeys[$k] = "/".$this->varname($k)."/";
          
$this->varvals[$k] = $v;
      }
    }
  }

  
/* public: subst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  
public function subst($handle) {
    if (!
$this->loadfile($handle)) {
      
$this->halt("subst: unable to load $handle.");
      return 
false;
    }

    
$str $this->get_var($handle);
    
$str = @preg_replace($this->varkeys$this->varvals$str);
    return 
$str;
  }

  
/* public: psubst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  
public function psubst($handle) {
    print 
$this->subst($handle);

    return 
false;
  }

  
/* public: parse(string $target, string $handle, boolean append)
   * public: parse(string $target, array  $handle, boolean append)
   * target: handle of variable to generate
   * handle: handle of template to substitute
   * append: append to target handle
   */
  
public function parse($target$handle$append false) {
    if (!
is_array($handle)) {
      
$str $this->subst($handle);
      if (
$append) {
        
$this->set_var($target$this->get_var($target) . $str);
      } else {
        
$this->set_var($target$str);
      }
    } else {
      
reset($handle);
      while(list(
$i$h) = each($handle)) {
        
$str $this->subst($h);
        
$this->set_var($target$str);
      }
    }

    return 
$str;
  }

  public function 
pparse($target$handle$append false) {
    print 
$this->parse($target$handle$append);
    return 
false;
  }

  
/* public: get_vars()
   */
  
public function get_vars() {
    
reset($this->varkeys);
    while(list(
$k$v) = each($this->varkeys)) {
      
$result[$k] = $this->varvals[$k];
    }

    return 
$result;
  }

  
/* public: get_var(string varname)
   * varname: name of variable.
   *
   * public: get_var(array varname)
   * varname: array of variable names
   */
  
public function get_var($varname) {
    if (!
is_array($varname)) {
      return 
$this->varvals[$varname];
    } else {
      
reset($varname);
      while(list(
$k$v) = each($varname)) {
        
$result[$k] = $this->varvals[$k];
      }

      return 
$result;
    }
  }

  
/* public: get_undefined($handle)
   * handle: handle of a template.
   */
  
public function get_undefined($handle) {
    if (!
$this->loadfile($handle)) {
      
$this->halt("get_undefined: unable to load $handle.");
      return 
false;
    }

    
preg_match_all("/\{([^}]+)\}/"$this->get_var($handle), $m);
    
$m $m[1];
    if (!
is_array($m))
      return 
false;

    
reset($m);
    while(list(
$k$v) = each($m)) {
      if (!isset(
$this->varkeys[$v]))
        
$result[$v] = $v;
    }

    if (
count($result))
      return 
$result;
    else
      return 
false;
  }

  
/* public: finish(string $str)
   * str: string to finish.
   */
  
public function finish($str) {
    switch (
$this->unknowns) {
      case 
"keep":
      break;

      case 
"remove":
        
$str preg_replace('/{[^ \t\r\n}]+}/'""$str);
      break;

      case 
"comment":
        
$str preg_replace('/{([^ \t\r\n}]+)}/'"<!-- Template $handle: Variable \\1 undefined -->"$str);
      break;
    }

    return 
$str;
  }

  
/* public: p(string $varname)
   * varname: name of variable to print.
   */
  
public function p($varname) {
    print 
$this->finish($this->get_var($varname));
  }

  public function 
write($varname,$file)
  {
   
$myfile=fopen($file,"w+");
   
fputs($myfile,$this->finish($this->get_var($varname)));
  }

  public function 
get($varname) {
    return 
$this->finish($this->get_var($varname));
  }

  
/***************************************************************************/
  /* private: filename($filename)
   * filename: name to be completed.
   */
  
private function filename($filename) {
    if (
substr($filename01) != "/") {
      
$filename $this->root."/".$filename;
    }

    if (!
file_exists($filename))
      
$this->halt("filename: file $filename does not exist.");

    return 
$filename;
  }

  
/* private: varname($varname)
   * varname: name of a replacement variable to be protected.
   */
  
private function varname($varname) {
    return 
preg_quote("{".$varname."}");
  }

  
/* private: loadfile(string $handle)
   * handle:  load file defined by handle, if it is not loaded yet.
   */
  
private function loadfile($handle) {
    if (isset(
$this->varkeys[$handle]) and !empty($this->varvals[$handle]))
      return 
true;

    if (!isset(
$this->file[$handle])) {
      
$this->halt("loadfile: $handle is not a valid handle.");
      return 
false;
    }
    
$filename $this->file[$handle];

    
$str implode("", @file($filename));
    if (empty(
$str)) {
      
$this->halt("loadfile: While loading $handle$filename does not exist or is empty.");
      return 
false;
    }

    
$this->set_var($handle$str);

    return 
true;
  }

  
/***************************************************************************/
  /* public: halt(string $msg)
   * msg:    error message to show.
   */
  
public function halt($msg) {
    
$this->last_error $msg;

    if (
$this->halt_on_error != "no")
      
$this->haltmsg($msg);

    if (
$this->halt_on_error == "yes")
      die(
"<b>Halted.</b>");

    return 
false;
  }

  
/* public, override: haltmsg($msg)
   * msg: error message to show.
   */
  
public function haltmsg($msg) {
    
printf("<b>Template Error:</b> %s<br>\n"$msg);
  }
}
?>