sTEFANs Subversion Web Contol (SWC)
Inc
[ class tree: Swc ] [ index: Swc ] [ all elements ]

Source for file svn_lib.inc.php

Documentation is available at svn_lib.inc.php

  1. <?php
  2. /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. SVN Web Control
  4. Copyright ©2006 by sTEFANs
  5. Created on 20.02.2006
  6. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 59 Temple Place - Suite 330,
  20. Boston, MA 02111-1307, USA.
  21. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  22. */
  23.  
  24. /**
  25.  * A collection of functions that encapsulates SVN commands.
  26.  * 
  27.  * @package Swc
  28.  * @subpackage Inc
  29.  * @author Stefan Schraml
  30.  * @copyright Copyright ©2006 by sTEFANs
  31.  * @license http://opensource.org/licenses/lgpl-license.php GNU General Public License
  32.  * @version v1.1.0
  33.  * @since v1.0.0
  34.  */
  35.  
  36. /** Common defines */
  37. require_once('var.inc.php');
  38. /** Project configuration interface */
  39. require_once ('config.inc.php');
  40.  
  41.     /** 
  42.      * Returns the help output of <i>svn</i>.
  43.      * @return array <i>svn help</i> output in
  44.      *  form of a result array as produced
  45.      *  by <b>ExecSvnCmd</b>.
  46.      * @see ExecSvnCmd
  47.      * 
  48.      * @since v1.0.0
  49.      */
  50.     function GetSvnHelp(){
  51.         $command 'svn';
  52.         $switches '--help';
  53.         $result ExecSvnCmd($command''$switches);
  54.         return $result;        
  55.     }
  56.     
  57.     /** 
  58.      * Returns the help output of <i>svnlook</i>.
  59.      * @return array <i>svnlook help</i> output in
  60.      *  form of a result array as produced
  61.      *  by <b>ExecSvnCmd</b>.
  62.      * @see ExecSvnCmd
  63.      * 
  64.      * @since v1.0.0
  65.      */
  66.     function GetSvnLookHelp(){
  67.         $command 'svnlook';
  68.         $switches '--help';
  69.         $result ExecSvnCmd($command''$switches);
  70.         return $result;        
  71.     }
  72.     
  73.     /** 
  74.      * Returns the help output of <i>svnadmin</i>.
  75.      * @return array <i>svnadmin</i> help output in
  76.      *  form of a result array as produced
  77.      *  by <b>ExecSvnCmd</b>.
  78.      * @see ExecSvnCmd
  79.      * 
  80.      * @since v1.0.0
  81.      */
  82.     function GetSvnAdminHelp(){
  83.         $command 'svnadmin';
  84.         $switches '--help';
  85.         $result ExecSvnCmd($command''$switches);
  86.         return $result;        
  87.     }
  88.     
  89.     /** 
  90.      * Returns the help output of <i>svnversion</i>.
  91.      * @return array <i>svnversion</i> help output in
  92.      *  form of a result array as produced
  93.      *  by <b>ExecSvnCmd</b>.
  94.      * @see ExecSvnCmd
  95.      * 
  96.      * @since v1.0.0
  97.      */
  98.     function GetSvnVersionHelp(){
  99.         $command 'svnversion';
  100.         $switches '--help';
  101.         $result ExecSvnCmd($command''$switches);
  102.         return $result;        
  103.     }
  104.     
  105.     /** 
  106.      * Returns the version of SVN.
  107.      * @return string Version of Subversion
  108.      * 
  109.      * @since v1.0.0
  110.      */
  111.     function GetSvnVersion(){
  112.         $command 'svn';
  113.         $switches '--version';
  114.         static $version NULL;
  115.         if ($version == NULL){
  116.             $result ExecSvnCmd($command''$switches);
  117.             if ($result[IDX_CMD_RC== 0){
  118.                 $version ParseArray($result[IDX_STDOUT]', '' (r');
  119.                 $version substr($versionstrpos($version'.')-1);
  120.             }
  121.         }
  122.         return $version;        
  123.     }
  124.             
  125.     /** 
  126.      * Returns the output of <i>svn info</i> for
  127.      * the repository contained in a result
  128.      * array as produced by <b>ExecSvnCmd</b>.
  129.      * @param SwcConfig $config SWC config for the operation.
  130.      * @return array Output line by line.
  131.      * @see ExecSvnCmd
  132.      * 
  133.      * @since v1.1.0
  134.      */
  135.     function &GetRepositoryInfo($config){
  136.         $command 'svn info';
  137.         $arg $config->GetRepositoryRoot();
  138.         $switches '--xml';
  139.         static $result NULL;
  140.         if (empty($result)){
  141.             $result ExecSvnCmd($command$arg$switches);
  142.         }
  143.         return $result;
  144.     }
  145.     
  146.     /** 
  147.      * Returns the number of the youngest SVN revision (HEAD)
  148.      * available in the repository.
  149.      * @param SwcConfig $config SWC config for the operation.
  150.      * @return int Number of HEAD revision
  151.      * 
  152.      * @since v1.0.0
  153.      *  */
  154.     function GetHeadRevision($config){
  155.         $info GetRepositoryInfo($config);
  156.         $rev ParseArray($info[IDX_STDOUT]'revision="''">');
  157.         return $rev;
  158.     }
  159.     
  160.     /** 
  161.      * Returns the formated date of the latest changes
  162.      * within the repository.
  163.      * @param SwcConfig $config SWC config for the operation.
  164.      * @return string Date of HEAD revision.
  165.      * 
  166.      * @since v1.0.0
  167.      */
  168.     function GetHeadDate($config){
  169.         $info GetRepositoryInfo($config);
  170.         $timestamp ParseArray($info[IDX_STDOUT]'<date>''</date>');
  171.         $timestamp strtotime($timestamp);
  172.         $ts GetLocalizedTimestamp($timestamp);
  173.         return $ts;            
  174.     }
  175.     
  176.     /** 
  177.      * Returns the output of <i>svn info</i>
  178.      * contained in a result array as produced
  179.      * by <b>ExecSvnCmd</b>.
  180.      * @param SwcConfig $config SWC config for the operation.
  181.      * @param boolean $xml_output Whether or not output shall
  182.      *  be printed in xml format (default).
  183.      * @return array Output line by line.
  184.      * @see ExecSvnCmd
  185.      * 
  186.      * @version v1.1.0
  187.      * @since v1.0.0
  188.      */
  189.     function &GetWebspaceInfo($config$xml_output true){
  190.         $command 'svn info';
  191.         $arg $config->GetWebspaceRootDir();
  192.         $switches '';
  193.         static $result_plain NULL;
  194.         static $result_xml NULL;
  195.         if (!$xml_output && empty($result_plain)){
  196.             $result_plain ExecSvnCmd($command$arg$switches);
  197.         }else if ($xml_output && empty($result_xml)){
  198.             $switches .= '--xml';
  199.             $result_xml ExecSvnCmd($command$arg$switches);
  200.         }
  201.         $res ($xml_output $result_xml $result_plain);
  202.         return $res;
  203.     }
  204.     
  205.     /** 
  206.      * Returns the number of the SVN revision
  207.      * of the webspace.
  208.      * @param SwcConfig $config SWC config for the operation.
  209.      * @return int Webspace revision.
  210.      * 
  211.      * @since v1.0.0
  212.      */
  213.     function GetWebspaceRevision($config){
  214.         $info GetWebspaceInfo($config);
  215.         return ParseArray($info[IDX_STDOUT]'revision="''">');            
  216.     }
  217.     
  218.     /** 
  219.      * Returns the path of the repository
  220.      * where the webspace referes to with
  221.      * repository root directory.
  222.      * @param SwcConfig $config SWC config for the operation.
  223.      * @return string Repository path the webspace points to.
  224.      * 
  225.      * @since v1.0.0
  226.      */
  227.     function GetWebspaceSourcePath($config){
  228.         $info GetWebspaceInfo($config);
  229.         $ws_path ParseArray($info[IDX_STDOUT]'<url>''</url>');
  230.         $ws_root ParseArray($info[IDX_STDOUT]'<root>''</root>');
  231.         $path substr($ws_pathstrlen($ws_root));
  232.         return $path;
  233.     }
  234.     
  235.     /** 
  236.      * Returns the formated date of the
  237.      * revision of the workspace.
  238.      * @param SwcConfig $config SWC config for the operation.
  239.      * @return string Date of webspace revision.
  240.      * 
  241.      * @since v1.0.0
  242.      */
  243.     function GetWebspaceRevisionDate($config){
  244.         $info GetWebspaceInfo($config);
  245.         $timestamp ParseArray($info[IDX_STDOUT]'<date>''</date>');
  246.         $timestamp strtotime($timestamp);
  247.         return GetLocalizedTimestamp($timestamp);            
  248.     }
  249.     
  250.     /** 
  251.      * Returns the output of <i>svn status</i>
  252.      * contained in a result array as produced
  253.      * by <b>ExecSvnCmd</b>.
  254.      * @param SwcConfig $config SWC config for the operation.
  255.      * @return array Result of <i>svn status</i> execution.
  256.      * @see ExecSvnCmd
  257.      * 
  258.      * @since v1.0.0
  259.      */
  260.     function &GetWebspaceStatus($config){
  261.         $command 'svn status';
  262.         $switches =  '--verbose --show-updates --non-interactive';
  263.         $switches .= GetSvnUsr($config);
  264.         $switches .= GetSvnPw($config);
  265.         $arg $config->GetWebspaceRootDir();
  266.         static $result NULL;
  267.         if ($result == NULL){
  268.             $result ExecSvnCmd($command$arg$switches);            
  269.             for ($i count($result[IDX_STDOUT])$i 0$i--){
  270.                 $result[IDX_STDOUT][$i$result[IDX_STDOUT][$i-1];
  271.             }
  272.             $result[IDX_STDOUT][0T(TK_WEBSPACE_STATUS_LIST_HEADER);
  273.         }
  274.         return $result;
  275.     }
  276.     
  277.     /** 
  278.      * Returns the output of <i>svn log</i>
  279.      * contained in a result array as produced
  280.      * by <b>ExecSvnCmd</b>.
  281.      * @param SwcConfig $config SWC config for the operation.
  282.      * @return array Result of <i>svn log</i> execution.
  283.      * @see ExecSvnCmd
  284.      * 
  285.      * @since v1.0.0
  286.      */     
  287.     function &GetWebspaceLog($config){
  288.         $command 'svn log';
  289.         $switches '--verbose --non-interactive';
  290.         $switches .= GetSvnUsr($config);
  291.         $switches .= GetSvnPw($config);
  292.         $arg $config->GetWebspaceRootDir();
  293.         $result ExecSvnCmd($command$arg$switches)
  294.         return $result;
  295.     }
  296.     
  297.     /** 
  298.      * Returns the output of <i>svn list</i>
  299.      * contained in a result array as produced
  300.      * by <b>ExecSvnCmd</b>.
  301.      * @param SwcConfig $config SWC config for the operation.
  302.      * @return array Result of <i>svn list</i> execution.
  303.      * @see ExecSvnCmd
  304.      * 
  305.      * @since v1.1.0
  306.      */
  307.     function ListRepository($config){
  308.         $rep_root $config->GetRepositoryRoot();
  309.         $command 'svn list';
  310.         $switches '--recursive';
  311.         $paths array();
  312.         $arg trim($rep_root);
  313.         $res ExecSvnCmd($command$arg$switches);
  314.         return $res;
  315.     }
  316.         
  317.     /** 
  318.      * Returns the array of tags available
  319.      * in the repository.
  320.      * @param SwcConfig $config SWC config for the operation.
  321.      * @return array Version tags.
  322.      * 
  323.      * @since v1.0.0
  324.      */ 
  325.     function &GetTags($config){
  326.         $tag_dirs $config->GetTagDirs();
  327.         $depth $config->GetMaxTagDirDepth();
  328.         $paths GetRepositoryPaths($config$tag_dirs$depth)
  329.         return $paths;
  330.     }
  331.     
  332.     /** 
  333.      * Returns the array of branches available
  334.      * in the repository.
  335.      * @param SwcConfig $config SWC config for the operation.
  336.      * @return array Version branches.
  337.      * 
  338.      * @since v1.0.0
  339.      */
  340.     function &GetBranches($config){
  341.         $branch_dirs $config->GetBranchDirs();
  342.         $depth $config->GetMaxBranchDirDepth();
  343.         $paths GetRepositoryPaths($config$branch_dirs$depth);
  344.         return $paths;
  345.     }
  346.     
  347.     /** 
  348.      * Returns an array of repository paths starting
  349.      * at $root with maximum directory count given in $level.
  350.      * @param SwcConfig $config SWC config for the operation.
  351.      * @param string or array $roots (Array of) repository directories to start from
  352.      * @param int $depth Maximum directory depth.
  353.      * @return array Array of paths of repository.
  354.      * 
  355.      * @since v1.0.0
  356.      */ 
  357.     function GetRepositoryPaths($config$roots$depth){
  358.         $rep_root $config->GetRepositoryRoot();
  359.         if (!is_array($roots)){
  360.             $root_dirs[$roots;
  361.         else {
  362.             $root_dirs $roots;
  363.         }
  364.         $command 'svn list';
  365.         $switches '--recursive';
  366.         $paths array();
  367.         foreach($root_dirs as $dir){
  368.             $parent_dir trim($dir);
  369.             $arg trim($rep_root).$parent_dir;
  370.             $res ExecSvnCmd($command$arg$switches);
  371.             if ($res[IDX_CMD_RC== 0){
  372.                 $paths BuildSvnDirTree($paths$res[IDX_STDOUT]$depth$parent_dir);
  373.             }
  374.         }
  375.         return $paths;
  376.     }
  377.     
  378.     /** 
  379.      * Builds SVN directory tree.
  380.      * @param array $paths Reference to SVN path array
  381.      * @param array $tree Reference to 'svnlook tree' stdout that
  382.      *  should be transformed into SVN paths.
  383.      * @param int $max_level Mamimum level for paths.
  384.      * @param string $parent_dir Parent directory in path.
  385.      * @return array Paths already found.
  386.      * @version v1.1.0
  387.      * @since v1.0.0
  388.      */
  389.     function &BuildSvnDirTree(&$paths&$tree$max_level$parent_dir ''){
  390.         if (empty($parent_dir)){
  391.             $paths[$parent_dir;
  392.         }
  393.         foreach($tree as $path){
  394.             $level 0;
  395.             $offset strpos($path'/')
  396.             while ($offset !== false && ($level $max_level)){
  397.                 $offset strpos($path'/'$offset);
  398.                 ++$level;
  399.             }
  400.             if ($offset === false){
  401.                 $offset strrpos($path'/');
  402.             }
  403.             $path substr($path0$offset);
  404.             if (!empty($parent_dir)){
  405.                 $path $parent_dir.'/'.$path;
  406.             }
  407.             $paths[$path$path;
  408.         }
  409.         return $paths;
  410.     }
  411.     
  412.     /** 
  413.      * Performs webspace update to head revision
  414.      * and returns the output of 'svn update'
  415.      * contained in a result array as produced
  416.      * by <b>ExecSvnCmd</b>.
  417.      * @param SwcConfig $config SWC config for the operation.
  418.      * @return array Result of <i>svn update</i> execution.
  419.      * @see ExecSvnCmd
  420.      * 
  421.      * @since v1.0.0
  422.      */
  423.     function UpdateWebspace($config){
  424.         $command 'svn update';
  425.         $switches '--non-interactive';
  426.         $switches .= GetSvnUsr($config);
  427.         $switches .= GetSvnPw($config);
  428.         $arg $config->GetWebspaceRootDir();
  429.         static $result NULL;
  430.         if ($result == NULL){
  431.             $result ExecSvnCmd($command$arg$switches);
  432.         }
  433.         return $result;
  434.         
  435.     }
  436.     
  437.     /** 
  438.      * Performs workspace (webspace) checkout
  439.      * and returns the output of 'svn checkout'
  440.      * contained in a result array as produced
  441.      * by <b>ExecSvnCmd</b>.
  442.      * @param SwcConfig $config SWC config for the operation.
  443.      * @return array Result of <i>svn checkout</i> execution.
  444.      * @see ExecSvnCmd
  445.      * 
  446.      * @since v1.0.0
  447.      */
  448.     function CheckoutWebspace($config){
  449.         $trunk_path $config->GetTrunkDir();
  450.         $command 'svn checkout';
  451.         $switches '--revision HEAD --non-interactive';
  452.         $switches .= GetSvnUsr($config);
  453.         $switches .= GetSvnPw($config);
  454.         $arg $config->GetRepositoryRoot().'/'.$trunk_path;
  455.         $arg $arg.' '.$config->GetWebspaceRootDir();
  456.         return ExecSvnCmd($command$arg);
  457.     }
  458.     
  459.     /** 
  460.      * Performs webspace cleanup
  461.      * and returns the output of <i>svn cleanup</i>
  462.      * contained in a result array as produced
  463.      * by <b>ExecSvnCmd</b>.
  464.      * @param SwcConfig $config SWC config for the operation.
  465.      * @return array Result of <i>svn cleanup</i> execution.
  466.      * @see ExecSvnCmd
  467.      * 
  468.      * @since v1.0.0
  469.      */     
  470.     function &CleanupWebspace($config){
  471.         $command 'svn cleanup';
  472.         $switches '--non-interactive';
  473.         $switches .= GetSvnUsr($config);
  474.         $switches .= GetSvnPw($config);
  475.         $arg $config->GetWebspaceRootDir();
  476.         $result ExecSvnCmd($command$arg)
  477.         return $result;
  478.     }
  479.     
  480.     /** 
  481.      * Switches webspace to given repository path.
  482.      * @param SwcConfig $config SWC config for the operation.
  483.      * @param string $path Repository path to switch to
  484.      *  A path without repository root should be applied.
  485.      * @return array Result of <i>svn switch</i> execution.
  486.      * @see ExecSvnCmd
  487.      * 
  488.      * @since v1.0.0
  489.      */
  490.     function SwitchWebspace($config$path){
  491.         if ($path == NULL){
  492.             $path $config->GetTrunkDir();
  493.         }            
  494.         $command 'svn switch';
  495.         $switches '--non-interactive';
  496.         $switches .= GetSvnUsr($config);
  497.         $switches .= GetSvnPw($config);
  498.         $arg $config->GetRepositoryRoot();
  499.         $arg .= '/'.$path;
  500.         $arg .= ' '.$config->GetWebspaceRootDir()
  501.         return ExecSvnCmd($command$arg);
  502.     }
  503.     
  504.     /** 
  505.      * Returns the SVN User switch for the given config.
  506.      * @param SwcConfig $config Config for retrieving user.
  507.      * @return string svn switch for user (empty string if no user
  508.      *  is applied.
  509.      * 
  510.      * @since v1.0.0
  511.      */
  512.     function GetSvnUsr($config){
  513.         $user $config->GetSvnUser();
  514.         $switch '';
  515.         if ($user != NULL && $user != ''){
  516.             $switch ' --username '.$user;
  517.         }
  518.         return $switch;
  519.     }
  520.     
  521.     /** 
  522.      * Returns the SVN password switch for the given config.
  523.      * @param SwcConfig $config Config for retrieving user.
  524.      * @return string svn switch for password (empty string if no password
  525.      *  is applied.
  526.      * 
  527.      * @since v1.0.0
  528.      */
  529.     function GetSvnPw($config){
  530.         $pw $config->GetSvnPassword();
  531.         $switch '';
  532.         if ($pw != NULL && $pw != ''){
  533.             $switch ' --password '.$pw;
  534.         }
  535.         return $switch;
  536.     }
  537.     
  538.     /** 
  539.      * Executes an SVN command.
  540.      * @param string $cmd Command to execute
  541.      * @param string $switch Switches to be applied for the given command
  542.      * @param string $arg Arguments of the command
  543.      * @return array Result array containing commandline (idx = IDX_CMDLINE),
  544.      *      standard out array (idx = IDX_STDOUT),    error array (idx = IDX_ERROUT),
  545.      *   and return code of the command (idx = IDX_CMD_RC).
  546.      * 
  547.      * @since v1.0.0
  548.      */
  549.     function &ExecSvnCmd($cmd$arg ''$switches ''){
  550.         $descriptorspec array(
  551.             => array("pipe""r"),      // stdin is a pipe that the child will read from
  552.             => array("pipe""w"),      // stdout is a pipe that the child will write to
  553.             => array("pipe""w")     // stderr is a pipe to write to
  554.         );
  555.         
  556.         $cwd NULL//'/tmp';
  557.         $pipes NULL;
  558.         
  559.         $cmdline $cmd." ".$switches." ".$arg;
  560.         $process proc_open($cmdline$descriptorspec$pipes$cwd);
  561.         
  562.         $result array();
  563.         $result[IDX_CMDLINE$cmdline;
  564.         $result[IDX_STDOUTarray();
  565.         $result[IDX_ERROUTarray();
  566.         $result[IDX_CMD_RC= -1;
  567.         
  568.         if (is_resource($process)) {
  569.             // $pipes now looks like this:
  570.             // 0 => writeable handle connected to child stdin
  571.             // 1 => readable handle connected to child stdout
  572.             // 1 => readable handle connected to child errout
  573.         
  574.             $result array();
  575.             $result[IDX_CMDLINE$cmdline;
  576.             $result[IDX_STDOUTGetLineArray($pipes[1]);
  577.             $result[IDX_ERROUTGetLineArray($pipes[2]);
  578.             
  579.             fclose($pipes[0]);
  580.             fclose($pipes[1]);
  581.             fclose($pipes[2]);
  582.         
  583.             // It is important that you close any pipes before calling
  584.             // proc_close in order to avoid a deadlock
  585.             $result[IDX_CMD_RCproc_close($process);
  586.             
  587. //        echo "CMD: $cmdline<br/>";
  588. //        PrintDebugArray($result, "Result");
  589.         }
  590.         return $result;
  591.     }
  592.         
  593.     /** 
  594.      * Reads data from a resource (e.g. pipe) and
  595.      * returns an array that contains each line for a
  596.      * separate index.
  597.      * @param resource $handle Resource handle
  598.      * @param int $length Maximum line length used if a line is not delimited.
  599.      * @return array Array containing a delimited line per index.
  600.      * 
  601.      * @since v1.0.0
  602.      */
  603.     function &GetLineArray($handle$length 4096){
  604.         $content array();
  605.         $line fgets($handle$length);
  606.         while ($line !== false){
  607.             $content[$line;
  608.             $line fgets($handle$length);
  609.         }
  610.         return $content;
  611.     }
  612.     
  613.     /** 
  614.      * Returns a string of the given array that is
  615.      * encapsulated within $startstr and $endstr.
  616.      * @param array $array Line array as provided by 'GetLineArray' to
  617.      *  search the string within.
  618.      * @param string $startstr String to search.
  619.      * @param string $endstr String to delimit search. If NULL, the returned string
  620.      *  is not delimited.
  621.      * @return string String within a 'line' of $array that starts with '$startstr'
  622.      *  and ends with '$endstr'. If $startstr is not found, '?' is returned. $startstr
  623.      *  is not returned.
  624.      * 
  625.      * @since v1.0.0
  626.      */
  627.     function ParseArray (&$array$startstr$endstr NULL){
  628.         $idx 0;
  629.         while ($idx count($array&& strpos($array[$idx]$startstr=== false){
  630.             $idx++;
  631.         }
  632.         $val '?';
  633.         if ($idx count($array)){
  634.             $start strpos($array[$idx]$startstrstrlen($startstr);
  635.             if ($endstr != NULL){
  636.                 $len strpos($array[$idx]$endstr$start;
  637.                 $val substr($array[$idx]$start$len);
  638.             else {                
  639.                 $val substr($array[$idx]$start);
  640.             }
  641.             $val trim($val);
  642.         }
  643.         return $val;            
  644.     }
  645.     
  646.     /** 
  647.      * HTML and user friendly output of an array.
  648.      * @param array $array Array to print
  649.      * @param string $name Name of the array, also printed.
  650.      * @param boolean $encode_html_chars Whether or not to
  651.      *  encode special characters to HTML equivalents (default).
  652.      * @version v.1.1.0
  653.      * @since v1.0.0
  654.      */
  655.     function PrintArray($array$name ''$encode_html_chars true){
  656.         if (is_array($array)){
  657.             if (strlen($name0){
  658.                 echo '<span class="text_low_bold">'.$name.'</span><br/>';
  659.             }
  660.             echo '<pre>';
  661.             foreach($array as $line){
  662.                 if ($encode_html_chars){
  663.                     echo htmlspecialchars($line);
  664.                 else {
  665.                     echo ($line);
  666.                 }
  667.             }
  668.             echo '</pre>';
  669.         }
  670.     }    
  671.     
  672. ?>

Documentation generated on Fri, 03 Nov 2006 18:45:01 +0100 by phpDocumentor 1.3.0RC6
for sTEFANs POWERED BY eBC.bz