phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpgwapi/inc/class.xslttemplates.inc.php, 1.16


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/class.xslttemplates.inc.php, 1.16
Date: Thu, 30 Dec 2004 07:47:31 +0100

Update of /phpgwapi/inc
Added Files:
        Branch: 
          class.xslttemplates.inc.php

date: 2004/12/30 06:47:31;  author: skwashd;  state: Exp;  lines: +32 -12

Log Message:
new HEAD
=====================================================================
<?php
        /*******************************************************************\
        * phpGroupWare API - XSLT Template class                            *
        * Written by Dan Kuykendall <address@hidden>               *
        * and Bettina Gille address@hidden                          *
        * and Ralf Becker <address@hidden>                  *
        * Copyright (C) 2002 Dan Kuykendall, Bettina Gille, Ralf Becker     *
        * ----------------------------------------------------------------- *
        * This library is part of the phpGroupWare API                      *
        * ----------------------------------------------------------------- *
        * This library is free software; you can redistribute it and/or     *
        * modify it under the terms of the GNU General Public License as    *
        * published by the Free Software Foundation; either version 2 of    *
        * the License, or (at your option) any later version.               *
        *                                                                   *
        * This program is distributed in the hope that it will be useful,   *
        * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
        * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  *
        * General Public License for more details.                          *
        *                                                                   *
        * You should have received a copy of the GNU General Public License *
        * along with this program; if not, write to the Free Software       *
        * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.         *
        \*******************************************************************/
  /* $Id: class.xslttemplates.inc.php,v 1.16 2004/12/30 06:47:31 skwashd Exp $ 
*/

        if (!extension_loaded('xslt'))
        {
                if (PHP_OS == 'Windows' || PHP_OS == 'OS/2')
                {
                        dl('php_xslt.dll');
                }
                else
                {
                        dl('xslt.so');
                }
        }

        require_once('class.xmltool.inc.php');

        class xslttemplates
        {
                var $rootdir = '';
                var $prev_rootdir = '';

                /* The xslfiles will be loaded up and merged into $xsldata */
                var $xslfiles = Array();
                var     $xsldata = '';

                /* Users can set $vars which will be converted into xmldata 
before xsl processing */
                /* Or they can generate their own XML data and set it directly 
when they have */
                /* need for a more robust schema */
                var $vars = Array();
                var $xmlvars = Array();
                var $xmldata = '';

                function xslttemplates($root = '.')
                {
                        if(@isset($GLOBALS['phpgw_info']['flags']['printview']) 
&& $GLOBALS['phpgw_info']['flags']['printview'] == True)
                        {
                                $this->print = True;
                        }
                        $this->set_root($root);
                }

                function halt($msg)
                {
                        echo $msg;
                        exit;
                }

                function set_root($rootdir)
                {
                        if (!is_dir($rootdir))
                        {
                                $this->halt('set_root: '.$rootdir.' is not a 
directory.');
                                return False;
                        }
                        $this->prev_rootdir = $this->rootdir;
                        $this->rootdir = $rootdir;
                        return True;
                }

                function reset_root()
                {
                        $this->rootdir = $this->prev_rootdir;
                }

                function add_file($filename,$rootdir='',$time=1)
                {
                        if (!is_array($filename))
                        {
                                if($rootdir=='')
                                {
                                        $rootdir=$this->rootdir;
                                }

                                if (substr($filename, 0, 1) != SEP && 
substr($filename, 1, 1) != ':')
                                {
                                        $new_filename = $rootdir . SEP . 
$filename;
                                }
                                else
                                {
                                        $new_filename = $filename;
                                }

                                if ($this->print && $time!=2 && $time!=4)
                                {
                                        $new_filename = $new_filename.'_print';
                                }

//                              echo 'Rootdir: 
'.$rootdir.'<br>'."\n".'Filename: '.$filename.'<br>'."\n".'New Filename: 
'.$new_filename.'<br>'."\n";
                                if (!file_exists($new_filename.'.xsl'))
                                {
                                        switch($time)
                                        {
                                                case 2:
                                                        $new_root = 
str_replace($GLOBALS['phpgw_info']['server']['template_set'],'base',$rootdir);
                                                        
$this->add_file($filename,$new_root,3);
                                                        return;
                                                        break;
                                                case 3:
                                                        
$this->add_file($filename,$rootdir,4);
                                                        return;
                                                        break;
                                                case 4:
                                                        $this->halt("filename: 
file $new_filename.xsl does not exist.");
                                                        break;
                                                default:
                                                        if (!$this->print)
                                                        {
                                                                $new_root = 
str_replace($GLOBALS['phpgw_info']['server']['template_set'],'base',$rootdir);
                                                                
$this->add_file($filename,$new_root,4);
                                                                return;
                                                        }
                                                        else
                                                        {
                                                                
$this->add_file($filename,$rootdir,2);
                                                                return;
                                                        }
                                        }
                                }
                                else
                                {
                                        $this->xslfiles[$filename] = 
$new_filename.'.xsl';
                                }
                        }
                        else
                        {
                                reset($filename);
                                while(list(,$file) = each($filename))
                                {
                                        $this->add_file($file);
                                }
                        }
                }

                function set_var($name, $value, $append = True)
                {
                        if($append)
                        {
                                if (is_array($value))
                                {
                                        while(list($key,$val) = each($value))
                                        {
                                                if (!is_array($val) && 
!is_array($this->vars[$name][$key]))
                                                {
                                                        
$this->vars[$name][$key] .= $val;
                                                }
                                                else
                                                {
                                                        
$this->vars[$name][$key] = array_merge($this->vars[$name][$key],$val);
                                                }
                                        }
                                }
                                //_debug_array($this->vars);
                        }
                        else
                        {
                                $this->vars[$name] = $value;
                        }

//                      $GLOBALS['phpgw']->xslttpl->pp();

                }

                function set_xml($xml, $append = False)
                {
                        if(!$append)
                        {
                                $this->xmlvars = $xml;
                        }
                        else
                        {
                                $this->xmlvars .= $xml;
                        }
                }

                function get_var($name)
                {
                        return $this->vars[$name];
                }

                function get_vars()
                {
                        return $this->vars;
                }

                function get_xml()
                {
                        return $this->xmlvars;
                }

                function xsl_parse()
                {
                        if(count($this->xslfiles) > 0)
                        {
                                $this->xsldata = '<?xml version="1.0" 
encoding="' . lang('charset') . '"?>'."\n";
                                $this->xsldata .= '<!DOCTYPE xsl:stylesheet 
['."\n";
                                $this->xsldata .= '<!ENTITY nl "&#10;">'."\n";
                                $this->xsldata .= '<!ENTITY nbsp 
"&#160;">'."\n";
                                $this->xsldata .= ']>'."\n";
                                $this->xsldata .= '<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">'."\n";
                                $this->xsldata .= '<xsl:output method="html" 
version="1.0" encoding="' . lang('charset') . '" indent="yes" 
omit-xml-declaration="yes" doctype-public="-//W3C/DTD XHTML 1.0 
Transitional//EN" 
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"; 
standalone="yes" media-type="text/html"/>'."\n";
                                $this->xsldata .= '<xsl:template 
match="/">'."\n";
                                $this->xsldata .= "\t".'<xsl:apply-templates 
select="PHPGW"/>'."\n";
                                $this->xsldata .= '</xsl:template>'."\n";
                                reset($this->xslfiles);
                                while(list($dummy,$xslfile) = 
each($this->xslfiles))
                                {
//                                      echo 'XSLFILES: 
'.$dummy.'<br>'."\n".'XSL File: '.$xslfile.'<br>'."\n";
                                        $fd = fopen ($xslfile, "r");
                                        $this->xsldata .= fread($fd, 
filesize($xslfile));
                                        fclose ($fd);
                                }
                                $this->xsldata .= '</xsl:stylesheet>'."\n";
                        }
                        else
                        {
                                echo 'Error: No XSL files have been selected';
                                exit;
                        }
                        return $this->xsldata;
                }

                function xml_parse()
                {
                        $this->xmldata = '';
                        $xmlvars = $this->xmlvars;

                        $xmldata = $this->vars;

                        /* auto generate xml based on vars */

                        while(list($key,$value) = each($xmlvars))
                        {
                                $xmldata[$key] = $value;
                        }
                        //$tmpxml_object = var2xml('PHPGW',$xmldata);
                        //$this->xmldata = $tmpxml_object->dump_mem();
                        //return $this->xmldata;
                        $this->xmldata = var2xml('PHPGW',$xmldata);
                        return $this->xmldata;
                }

                function list_lineno($xml)
                {
                        $xml = explode("\n",$xml);

                        echo "<pre>\n";
                        for ($n=1; isset($xml[$n]); ++$n)
                        {
                                echo "$n: ".htmlentities($xml[$n])."\n";
                        }
                        echo "</pre>\n";
                }

                function parse($parsexsl = True, $parsexml = True)
                {
                        if (!$GLOBALS['phpgw_info']['flags']['noframework'])
                        {
                                $GLOBALS['phpgw']->common->phpgw_header();
                                echo parse_navbar();
                                $GLOBALS['phpgw_info']['flags']['noframework'] 
= False;
                        }
                        else
                        {
                                include(PHPGW_INCLUDE_ROOT . 
'/phpgwapi/templates/' . $GLOBALS['phpgw_info']['server']['template_set']
                                        . '/head.inc.php');

                                
if($GLOBALS['phpgw_info']['flags']['app_header'])
                                {
                                        echo '<table width="100%" ><tr 
class="th"><td class="th_text" align = "center">' . 
$GLOBALS['phpgw_info']['flags']['app_header'] . '</td></tr></table>';
                                }
                        }

                        if($parsexsl)
                        {
                                $this->xsl_parse();
                        }
                        if($parsexml)
                        {
                                $this->xml_parse();
                        }
                        $xsltproc = xslt_create();

                        $minor = explode(".",phpversion());
                        if($minor[1] >= 1) // PHP 4.1.x -- preferred
                        {
                                $arguments = array('/_xml' => $this->xmldata, 
'/_xsl' => $this->xsldata);
                                $html = 
xslt_process($xsltproc,'arg:/_xml','arg:/_xsl',NULL,$arguments);
                        }
                        else /* PHP 4.0.6 -- works okay
                                        no, it doesnt work at all :) [ceb] */
                        {
                                xslt_process($this->xsldata, 
$this->xmldata,$html);
                        }
                        if (!$html)
                        {
                                echo "<p>xml-data = ";  
$this->list_lineno($this->xmldata);
                                echo "<p>xsl-data = "; 
$this->list_lineno($this->xsldata);
                                die(/*$this->xsldata.*/"\n\n XSLT processing 
error: ".xslt_error($xsltproc));
                        }
                        xslt_free($xsltproc);
                        return $html;
                }

                function pparse()
                {
                        print $this->parse();
                        return False;
                }
                function pp()
                {
                        return $this->pparse();
                }
        }
?>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]