[ Index ]
 

Code source de Typo3 4.1.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/t3lib/ -> class.t3lib_xml.php (source)

   1  <?php
   2  /***************************************************************
   3  *  Copyright notice
   4  *
   5  *  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
   6  *  All rights reserved
   7  *
   8  *  This script is part of the TYPO3 project. The TYPO3 project is
   9  *  free software; you can redistribute it and/or modify
  10  *  it under the terms of the GNU General Public License as published by
  11  *  the Free Software Foundation; either version 2 of the License, or
  12  *  (at your option) any later version.
  13  *
  14  *  The GNU General Public License can be found at
  15  *  http://www.gnu.org/copyleft/gpl.html.
  16  *  A copy is found in the textfile GPL.txt and important notices to the license
  17  *  from the author is found in LICENSE.txt distributed with these scripts.
  18  *
  19  *
  20  *  This script is distributed in the hope that it will be useful,
  21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23  *  GNU General Public License for more details.
  24  *
  25  *  This copyright notice MUST APPEAR in all copies of the script!
  26  ***************************************************************/
  27  /**
  28   * Contains class for creating XML output from records
  29   *
  30   * $Id: class.t3lib_xml.php 593 2005-04-01 14:37:15Z typo3 $
  31   * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
  32   *
  33   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
  34   */
  35  /**
  36   * [CLASS/FUNCTION INDEX of SCRIPT]
  37   *
  38   *
  39   *
  40   *   86: class t3lib_xml
  41   *  102:     function t3lib_xml($topLevelName)
  42   *  113:     function setRecFields($table,$list)
  43   *  122:     function getResult()
  44   *  132:     function WAPHeader()
  45   *  144:     function renderHeader()
  46   *  155:     function renderFooter()
  47   *  167:     function newLevel($name,$beginEndFlag=0,$params=array())
  48   *  192:     function output($content)
  49   *  208:     function indent($b)
  50   *  224:     function renderRecords($table,$res)
  51   *  237:     function addRecord($table,$row)
  52   *  255:     function getRowInXML($table,$row)
  53   *  271:     function utf8($content)
  54   *  281:     function substNewline($string)
  55   *  292:     function fieldWrap($field,$value)
  56   *  301:     function WAPback()
  57   *  315:     function addLine($str)
  58   *
  59   * TOTAL FUNCTIONS: 17
  60   * (This index is automatically created/updated by the extension "extdeveval")
  61   *
  62   */
  63  
  64  
  65  
  66  
  67  
  68  
  69  
  70  
  71  
  72  
  73  
  74  
  75  
  76  /**
  77   * XML class, Used to create XML output from input rows.
  78   * Doesn't contain a lot of advanced features - pretty straight forward, practical stuff
  79   * You are encouraged to use this class in your own applications.
  80   *
  81   * @author    Kasper Skaarhoj <kasperYYYY@typo3.com>
  82   * @package TYPO3
  83   * @subpackage t3lib
  84   * @see user_xmlversion, user_wapversion
  85   */
  86  class t3lib_xml {
  87      var $topLevelName = 'typo3_test';    // Top element name
  88      var $XML_recFields = array();        // Contains a list of fields for each table which should be presented in the XML output
  89  
  90      var $XMLIndent=0;
  91      var $Icode='';
  92      var $XMLdebug=0;
  93      var $includeNonEmptyValues=0;    // if set, all fields from records are rendered no matter their content. If not set, only 'true' (that is '' or zero) fields make it to the document.
  94      var $lines=array();
  95  
  96      /**
  97       * Constructor, setting topLevelName to the input var
  98       *
  99       * @param    string        Top Level Name
 100       * @return    void
 101       */
 102  	function t3lib_xml($topLevelName)    {
 103          $this->topLevelName = $topLevelName;
 104      }
 105  
 106      /**
 107       * When outputting a input record in XML only fields listed in $this->XML_recFields for the current table will be rendered.
 108       *
 109       * @param    string        Table name
 110       * @param    string        Commalist of fields names from the table, $table, which is supposed to be rendered in the XML output. If a field is not in this list, it is not rendered.
 111       * @return    void
 112       */
 113  	function setRecFields($table,$list)    {
 114          $this->XML_recFields[$table]=$list;
 115      }
 116  
 117      /**
 118       * Returns the result of the XML rendering, basically this is imploding the internal ->lines array with linebreaks.
 119       *
 120       * @return    string
 121       */
 122  	function getResult()    {
 123          $content = implode(chr(10),$this->lines);
 124          return $this->output($content);
 125      }
 126  
 127      /**
 128       * Initialize WML (WAP) document with <?xml + <!DOCTYPE header tags and setting ->topLevelName as the first level.
 129       *
 130       * @return    void
 131       */
 132  	function WAPHeader()    {
 133          $this->lines[]='<?xml version="1.0"?>';
 134          $this->lines[]='<!DOCTYPE '.$this->topLevelName.' PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">';
 135          $this->newLevel($this->topLevelName,1);
 136      }
 137  
 138      /**
 139       * Initialize "anonymous" XML document with <?xml + <!DOCTYPE header tags and setting ->topLevelName as the first level.
 140       * Encoding is set to UTF-8!
 141       *
 142       * @return    void
 143       */
 144  	function renderHeader()    {
 145          $this->lines[]='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
 146          $this->lines[]='<!DOCTYPE '.$this->topLevelName.'>';
 147          $this->newLevel($this->topLevelName,1);
 148      }
 149  
 150      /**
 151       * Sets the footer (of ->topLevelName)
 152       *
 153       * @return    void
 154       */
 155  	function renderFooter()    {
 156          $this->newLevel($this->topLevelName,0);
 157      }
 158  
 159      /**
 160       * Indents/Outdents a new level named, $name
 161       *
 162       * @param    string        The name of the new element for this level
 163       * @param    boolean        If false, then this function call will *end* the level, otherwise create it.
 164       * @param    array        Array of attributes in key/value pairs which will be added to the element (tag), $name
 165       * @return    void
 166       */
 167  	function newLevel($name,$beginEndFlag=0,$params=array())    {
 168          if ($beginEndFlag)    {
 169              $pList='';
 170              if (count($params))    {
 171                  $par=array();
 172                  reset($params);
 173                  while(list($key,$val)=each($params))    {
 174                      $par[]=$key.'="'.htmlspecialchars($val).'"';
 175                  }
 176                  $pList=' '.implode(' ',$par);
 177              }
 178              $this->lines[]=$this->Icode.'<'.$name.$pList.'>';
 179              $this->indent(1);
 180          } else {
 181              $this->indent(0);
 182              $this->lines[]=$this->Icode.'</'.$name.'>';
 183          }
 184      }
 185  
 186      /**
 187       * Function that will return the content from string $content. If the internal ->XMLdebug flag is set the content returned will be formatted in <pre>-tags
 188       *
 189       * @param    string        The XML content to output
 190       * @return    string        Output
 191       */
 192  	function output($content)    {
 193          if ($this->XMLdebug)    {
 194              return '<pre>'.htmlspecialchars($content).'</pre>
 195              <hr /><font color="red">Size: '.strlen($content).'</font>';
 196          } else {
 197              return $content;
 198          }
 199      }
 200  
 201      /**
 202       * Increments/Decrements Indentation counter, ->XMLIndent
 203       * Sets and returns ->Icode variable which is a line prefix consisting of a number of tab-chars corresponding to the indent-levels of the current posision (->XMLindent)
 204       *
 205       * @param    boolean        If true the XMLIndent var is increased, otherwise decreased
 206       * @return    string        ->Icode - the prefix string with TAB-chars.
 207       */
 208  	function indent($b)    {
 209          if ($b)    $this->XMLIndent++; else $this->XMLIndent--;
 210          $this->Icode='';
 211          for ($a=0;$a<$this->XMLIndent;$a++)    {
 212              $this->Icode.=chr(9);
 213          }
 214          return $this->Icode;
 215      }
 216  
 217      /**
 218       * Takes a SQL result for $table and traverses it, adding rows
 219       *
 220       * @param    string        Tablename
 221       * @param    pointer        SQL resource pointer, should be reset
 222       * @return    void
 223       */
 224  	function renderRecords($table,$res) {
 225          while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))    {
 226              $this->addRecord($table,$row);
 227          }
 228      }
 229  
 230      /**
 231       * Adds record, $row, from table, $table, to the internal array of XML-lines
 232       *
 233       * @param    string        Table name
 234       * @param    array        The row to add to XML structure from the table name
 235       * @return    void
 236       */
 237  	function addRecord($table,$row)    {
 238          $this->lines[]=$this->Icode.'<'.$table.' uid="'.$row["uid"].'">';
 239              $this->indent(1);
 240              $this->getRowInXML($table,$row);
 241              $this->indent(0);
 242          $this->lines[]=$this->Icode.'</'.$table.'>';
 243      }
 244  
 245      /**
 246       * Internal function for adding the actual content of the $row from $table to the internal structure.
 247       * Notice that only fields from $table that are listed in $this->XML_recFields[$table] (set by setRecFields()) will be rendered (and in the order found in that array!)
 248       * Content from the row will be htmlspecialchar()'ed, UTF-8 encoded and have chr(10) (newlines) exchanged for '<newline/>' tags. The element name for a value equals the fieldname from the record.
 249       *
 250       * @param    string        Table name
 251       * @param    array        Row from table to add.
 252       * @return    void
 253       * @access private
 254       */
 255  	function getRowInXML($table,$row)    {
 256          $fields = t3lib_div::trimExplode(',',$this->XML_recFields[$table],1);
 257          reset($fields);
 258          while(list(,$field)=each($fields))    {
 259              if ($row[$field] || $this->includeNonEmptyValues)    {
 260                  $this->lines[]=$this->Icode.$this->fieldWrap($field,$this->substNewline($this->utf8(htmlspecialchars($row[$field]))));
 261              }
 262          }
 263      }
 264  
 265      /**
 266       * UTF-8 encodes the input content (from ISO-8859-1!)
 267       *
 268       * @param    string        String content to UTF-8 encode
 269       * @return    string        Encoded content.
 270       */
 271  	function utf8($content)    {
 272          return utf8_encode($content);
 273      }
 274  
 275      /**
 276       * Substitutes chr(10) characters with a '<newline/>' tag.
 277       *
 278       * @param    string        Input value
 279       * @return    string        Processed input value
 280       */
 281  	function substNewline($string)    {
 282          return ereg_replace(chr(10),'<newline/>',$string);
 283      }
 284  
 285      /**
 286       * Wraps the value in tags with element name, $field.
 287       *
 288       * @param    string        Fieldname from a record - will be the element name
 289       * @param    string        Value from the field - will be wrapped in the elements.
 290       * @return    string        The wrapped string.
 291       */
 292  	function fieldWrap($field,$value)    {
 293          return '<'.$field.'>'.$value.'</'.$field.'>';
 294      }
 295  
 296      /**
 297       * Creates the BACK button for WAP documents
 298       *
 299       * @return    void
 300       */
 301  	function WAPback()    {
 302          $this->newLevel('template',1);
 303              $this->newLevel('do',1,array('type'=>'accept','label'=>'Back'));
 304              $this->addLine('<prev/>');
 305              $this->newLevel('do');
 306          $this->newLevel('template');
 307      }
 308  
 309      /**
 310       * Add a line to the internal XML structure (automatically prefixed with ->Icode.
 311       *
 312       * @param    string        Line to add to the $this->lines array
 313       * @return    void
 314       */
 315  	function addLine($str)    {
 316          $this->lines[]=$this->Icode.$str;
 317      }
 318  }
 319  
 320  
 321  if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_xml.php'])    {
 322      include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_xml.php']);
 323  }
 324  ?>


Généré le : Sun Nov 25 17:13:16 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics