[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/libs/sysplugins/ -> smarty_internal_data.php (source)

   1  <?php
   2  /**
   3   * Smarty Internal Plugin Data
   4   *
   5   * This file contains the basic classes and methodes for template and variable creation
   6   *
   7   * @package Smarty
   8   * @subpackage Template
   9   * @author Uwe Tews
  10   */
  11  
  12  /**
  13   * Base class with template and variable methodes
  14   *
  15   * @package Smarty
  16   * @subpackage Template
  17   */
  18  class Smarty_Internal_Data {
  19  
  20      /**
  21       * name of class used for templates
  22       *
  23       * @var string
  24       */
  25      public $template_class = 'Smarty_Internal_Template';
  26      /**
  27       * template variables
  28       *
  29       * @var array
  30       */
  31      public $tpl_vars = array();
  32      /**
  33       * parent template (if any)
  34       *
  35       * @var Smarty_Internal_Template
  36       */
  37      public $parent = null;
  38      /**
  39       * configuration settings
  40       *
  41       * @var array
  42       */
  43      public $config_vars = array();
  44  
  45      /**
  46       * assigns a Smarty variable
  47       *
  48       * @param array|string $tpl_var the template variable name(s)
  49       * @param mixed        $value   the value to assign
  50       * @param boolean      $nocache if true any output of this variable will be not cached
  51       * @param boolean $scope the scope the variable will have  (local,parent or root)
  52       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
  53       */
  54      public function assign($tpl_var, $value = null, $nocache = false)
  55      {
  56          if (is_array($tpl_var)) {
  57              foreach ($tpl_var as $_key => $_val) {
  58                  if ($_key != '') {
  59                      $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache);
  60                  }
  61              }
  62          } else {
  63              if ($tpl_var != '') {
  64                  $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache);
  65              }
  66          }
  67  
  68          return $this;
  69      }
  70  
  71      /**
  72       * assigns a global Smarty variable
  73       *
  74       * @param string $varname the global variable name
  75       * @param mixed  $value   the value to assign
  76       * @param boolean $nocache if true any output of this variable will be not cached
  77       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
  78       */
  79      public function assignGlobal($varname, $value = null, $nocache = false)
  80      {
  81          if ($varname != '') {
  82              Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache);
  83          }
  84  
  85          return $this;
  86      }
  87      /**
  88       * assigns values to template variables by reference
  89       *
  90       * @param string $tpl_var the template variable name
  91       * @param mixed $ &$value the referenced value to assign
  92       * @param boolean $nocache if true any output of this variable will be not cached
  93       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
  94       */
  95      public function assignByRef($tpl_var, &$value, $nocache = false)
  96      {
  97          if ($tpl_var != '') {
  98              $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
  99              $this->tpl_vars[$tpl_var]->value = &$value;
 100          }
 101  
 102          return $this;
 103      }
 104  
 105      /**
 106       * appends values to template variables
 107       *
 108       * @param array|string $tpl_var the template variable name(s)
 109       * @param mixed        $value   the value to append
 110       * @param boolean      $merge   flag if array elements shall be merged
 111       * @param boolean $nocache if true any output of this variable will be not cached
 112       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 113       */
 114      public function append($tpl_var, $value = null, $merge = false, $nocache = false)
 115      {
 116          if (is_array($tpl_var)) {
 117              // $tpl_var is an array, ignore $value
 118              foreach ($tpl_var as $_key => $_val) {
 119                  if ($_key != '') {
 120                      if (!isset($this->tpl_vars[$_key])) {
 121                          $tpl_var_inst = $this->getVariable($_key, null, true, false);
 122                          if ($tpl_var_inst instanceof Undefined_Smarty_Variable) {
 123                              $this->tpl_vars[$_key] = new Smarty_variable(null, $nocache);
 124                          } else {
 125                              $this->tpl_vars[$_key] = clone $tpl_var_inst;
 126                          }
 127                      }
 128                      if (!(is_array($this->tpl_vars[$_key]->value) || $this->tpl_vars[$_key]->value instanceof ArrayAccess)) {
 129                          settype($this->tpl_vars[$_key]->value, 'array');
 130                      }
 131                      if ($merge && is_array($_val)) {
 132                          foreach($_val as $_mkey => $_mval) {
 133                              $this->tpl_vars[$_key]->value[$_mkey] = $_mval;
 134                          }
 135                      } else {
 136                          $this->tpl_vars[$_key]->value[] = $_val;
 137                      }
 138                  }
 139              }
 140          } else {
 141              if ($tpl_var != '' && isset($value)) {
 142                  if (!isset($this->tpl_vars[$tpl_var])) {
 143                      $tpl_var_inst = $this->getVariable($tpl_var, null, true, false);
 144                      if ($tpl_var_inst instanceof Undefined_Smarty_Variable) {
 145                          $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
 146                      } else {
 147                          $this->tpl_vars[$tpl_var] = clone $tpl_var_inst;
 148                      }
 149                  }
 150                  if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) {
 151                      settype($this->tpl_vars[$tpl_var]->value, 'array');
 152                  }
 153                  if ($merge && is_array($value)) {
 154                      foreach($value as $_mkey => $_mval) {
 155                          $this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
 156                      }
 157                  } else {
 158                      $this->tpl_vars[$tpl_var]->value[] = $value;
 159                  }
 160              }
 161          }
 162  
 163          return $this;
 164      }
 165  
 166      /**
 167       * appends values to template variables by reference
 168       *
 169       * @param string $tpl_var the template variable name
 170       * @param mixed  &$value  the referenced value to append
 171       * @param boolean $merge  flag if array elements shall be merged
 172       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 173       */
 174      public function appendByRef($tpl_var, &$value, $merge = false)
 175      {
 176          if ($tpl_var != '' && isset($value)) {
 177              if (!isset($this->tpl_vars[$tpl_var])) {
 178                  $this->tpl_vars[$tpl_var] = new Smarty_variable();
 179              }
 180              if (!is_array($this->tpl_vars[$tpl_var]->value)) {
 181                  settype($this->tpl_vars[$tpl_var]->value, 'array');
 182              }
 183              if ($merge && is_array($value)) {
 184                  foreach($value as $_key => $_val) {
 185                      $this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key];
 186                  }
 187              } else {
 188                  $this->tpl_vars[$tpl_var]->value[] = &$value;
 189              }
 190          }
 191  
 192          return $this;
 193      }
 194  
 195      /**
 196       * Returns a single or all template variables
 197       *
 198       * @param string  $varname        variable name or null
 199       * @param string  $_ptr           optional pointer to data object
 200       * @param boolean $search_parents include parent templates?
 201       * @return string variable value or or array of variables
 202       */
 203      public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
 204      {
 205          if (isset($varname)) {
 206              $_var = $this->getVariable($varname, $_ptr, $search_parents, false);
 207              if (is_object($_var)) {
 208                  return $_var->value;
 209              } else {
 210                  return null;
 211              }
 212          } else {
 213              $_result = array();
 214              if ($_ptr === null) {
 215                  $_ptr = $this;
 216              } while ($_ptr !== null) {
 217                  foreach ($_ptr->tpl_vars AS $key => $var) {
 218                      if (!array_key_exists($key, $_result)) {
 219                          $_result[$key] = $var->value;
 220                      }
 221                  }
 222                  // not found, try at parent
 223                  if ($search_parents) {
 224                      $_ptr = $_ptr->parent;
 225                  } else {
 226                      $_ptr = null;
 227                  }
 228              }
 229              if ($search_parents && isset(Smarty::$global_tpl_vars)) {
 230                  foreach (Smarty::$global_tpl_vars AS $key => $var) {
 231                      if (!array_key_exists($key, $_result)) {
 232                          $_result[$key] = $var->value;
 233                      }
 234                  }
 235              }
 236              return $_result;
 237          }
 238      }
 239  
 240      /**
 241       * clear the given assigned template variable.
 242       *
 243       * @param string|array $tpl_var the template variable(s) to clear
 244       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 245       */
 246      public function clearAssign($tpl_var)
 247      {
 248          if (is_array($tpl_var)) {
 249              foreach ($tpl_var as $curr_var) {
 250                  unset($this->tpl_vars[$curr_var]);
 251              }
 252          } else {
 253              unset($this->tpl_vars[$tpl_var]);
 254          }
 255  
 256          return $this;
 257      }
 258  
 259      /**
 260       * clear all the assigned template variables.
 261       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 262       */
 263      public function clearAllAssign()
 264      {
 265          $this->tpl_vars = array();
 266          return $this;
 267      }
 268  
 269      /**
 270       * load a config file, optionally load just selected sections
 271       *
 272       * @param string $config_file filename
 273       * @param mixed  $sections    array of section names, single section or null
 274       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 275       */
 276      public function configLoad($config_file, $sections = null)
 277      {
 278          // load Config class
 279          $config = new Smarty_Internal_Config($config_file, $this->smarty, $this);
 280          $config->loadConfigVars($sections);
 281          return $this;
 282      }
 283  
 284      /**
 285       * gets the object of a Smarty variable
 286       *
 287       * @param string  $variable the name of the Smarty variable
 288       * @param object  $_ptr     optional pointer to data object
 289       * @param boolean $search_parents search also in parent data
 290       * @return object the object of the variable
 291       */
 292      public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
 293      {
 294          if ($_ptr === null) {
 295              $_ptr = $this;
 296          } while ($_ptr !== null) {
 297              if (isset($_ptr->tpl_vars[$variable])) {
 298                  // found it, return it
 299                  return $_ptr->tpl_vars[$variable];
 300              }
 301              // not found, try at parent
 302              if ($search_parents) {
 303                  $_ptr = $_ptr->parent;
 304              } else {
 305                  $_ptr = null;
 306              }
 307          }
 308          if (isset(Smarty::$global_tpl_vars[$variable])) {
 309              // found it, return it
 310              return Smarty::$global_tpl_vars[$variable];
 311          }
 312          if ($this->smarty->error_unassigned && $error_enable) {
 313              // force a notice
 314              $x = $$variable;
 315          }
 316          return new Undefined_Smarty_Variable;
 317      }
 318  
 319      /**
 320       * gets  a config variable
 321       *
 322       * @param string $variable the name of the config variable
 323       * @return mixed the value of the config variable
 324       */
 325      public function getConfigVariable($variable, $error_enable = true)
 326      {
 327          $_ptr = $this;
 328          while ($_ptr !== null) {
 329              if (isset($_ptr->config_vars[$variable])) {
 330                  // found it, return it
 331                  return $_ptr->config_vars[$variable];
 332              }
 333              // not found, try at parent
 334              $_ptr = $_ptr->parent;
 335          }
 336          if ($this->smarty->error_unassigned && $error_enable) {
 337              // force a notice
 338              $x = $$variable;
 339          }
 340          return null;
 341      }
 342  
 343      /**
 344       * gets  a stream variable
 345       *
 346       * @param string $variable the stream of the variable
 347       * @return mixed the value of the stream variable
 348       */
 349      public function getStreamVariable($variable)
 350      {
 351          $_result = '';
 352          $fp = fopen($variable, 'r+');
 353          if ($fp) {
 354              while (!feof($fp) && ($current_line = fgets($fp)) !== false ) {
 355                  $_result .= $current_line;
 356              }
 357              fclose($fp);
 358              return $_result;
 359          }
 360  
 361          if ($this->smarty->error_unassigned) {
 362              throw new SmartyException('Undefined stream variable "' . $variable . '"');
 363          } else {
 364              return null;
 365          }
 366      }
 367  
 368      /**
 369       * Returns a single or all config variables
 370       *
 371       * @param string $varname variable name or null
 372       * @return string variable value or or array of variables
 373       */
 374      public function getConfigVars($varname = null, $search_parents = true)
 375      {
 376          $_ptr = $this;
 377          $var_array = array();
 378          while ($_ptr !== null) {
 379              if (isset($varname)) {
 380                  if (isset($_ptr->config_vars[$varname])) {
 381                      return $_ptr->config_vars[$varname];
 382                  }
 383              } else {
 384                  $var_array = array_merge($_ptr->config_vars, $var_array);
 385              }
 386               // not found, try at parent
 387              if ($search_parents) {
 388                  $_ptr = $_ptr->parent;
 389              } else {
 390                  $_ptr = null;
 391              }
 392          }
 393          if (isset($varname)) {
 394              return '';
 395          } else {
 396              return $var_array;
 397          }
 398      }
 399  
 400      /**
 401       * Deassigns a single or all config variables
 402       *
 403       * @param string $varname variable name or null
 404       * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
 405       */
 406      public function clearConfig($varname = null)
 407      {
 408          if (isset($varname)) {
 409              unset($this->config_vars[$varname]);
 410          } else {
 411              $this->config_vars = array();
 412          }
 413          return $this;
 414      }
 415  
 416  }
 417  
 418  /**
 419   * class for the Smarty data object
 420   *
 421   * The Smarty data object will hold Smarty variables in the current scope
 422   *
 423   * @package Smarty
 424   * @subpackage Template
 425   */
 426  class Smarty_Data extends Smarty_Internal_Data {
 427  
 428      /**
 429       * Smarty object
 430       *
 431       * @var Smarty
 432       */
 433      public $smarty = null;
 434  
 435      /**
 436       * create Smarty data object
 437       *
 438       * @param Smarty|array $_parent  parent template
 439       * @param Smarty       $smarty   global smarty instance
 440       */
 441      public function __construct ($_parent = null, $smarty = null)
 442      {
 443          $this->smarty = $smarty;
 444          if (is_object($_parent)) {
 445              // when object set up back pointer
 446              $this->parent = $_parent;
 447          } elseif (is_array($_parent)) {
 448              // set up variable values
 449              foreach ($_parent as $_key => $_val) {
 450                  $this->tpl_vars[$_key] = new Smarty_variable($_val);
 451              }
 452          } elseif ($_parent != null) {
 453              throw new SmartyException("Wrong type for template variables");
 454          }
 455      }
 456  
 457  }
 458  
 459  /**
 460   * class for the Smarty variable object
 461   *
 462   * This class defines the Smarty variable object
 463   *
 464   * @package Smarty
 465   * @subpackage Template
 466   */
 467  class Smarty_Variable {
 468  
 469      /**
 470       * template variable
 471       *
 472       * @var mixed
 473       */
 474      public $value = null;
 475      /**
 476       * if true any output of this variable will be not cached
 477       *
 478       * @var boolean
 479       */
 480      public $nocache = false;
 481      /**
 482       * the scope the variable will have  (local,parent or root)
 483       *
 484       * @var int
 485       */
 486      public $scope = Smarty::SCOPE_LOCAL;
 487  
 488      /**
 489       * create Smarty variable object
 490       *
 491       * @param mixed   $value   the value to assign
 492       * @param boolean $nocache if true any output of this variable will be not cached
 493       * @param int     $scope   the scope the variable will have  (local,parent or root)
 494       */
 495      public function __construct($value = null, $nocache = false, $scope = Smarty::SCOPE_LOCAL)
 496      {
 497          $this->value = $value;
 498          $this->nocache = $nocache;
 499          $this->scope = $scope;
 500      }
 501  
 502      /**
 503       * <<magic>> String conversion
 504       *
 505       * @return string
 506       */
 507      public function __toString()
 508      {
 509          return (string) $this->value;
 510      }
 511  
 512  }
 513  
 514  /**
 515   * class for undefined variable object
 516   *
 517   * This class defines an object for undefined variable handling
 518   *
 519   * @package Smarty
 520   * @subpackage Template
 521   */
 522  class Undefined_Smarty_Variable {
 523  
 524      /**
 525       * Returns FALSE for 'nocache' and NULL otherwise.
 526       *
 527       * @param string $name
 528       * @return bool
 529       */
 530      public function __get($name)
 531      {
 532          if ($name == 'nocache') {
 533              return false;
 534          } else {
 535              return null;
 536          }
 537      }
 538  
 539      /**
 540       * Always returns an empty string.
 541       *
 542       * @return string
 543       */
 544      public function __toString()
 545      {
 546          return "";
 547      }
 548  
 549  }
 550  
 551  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1