alecpl
2008-09-02 82bac871fa626e82a593f7ab5a4ca3509261049f
program/include/rcube_template.php
@@ -299,16 +299,13 @@
    private function parse($name = 'main', $exit = true)
    {
        $skin_path = $this->config['skin_path'];
        // read template file
        $templ = '';
        $path = "$skin_path/templates/$name.html";
        if (($fp = fopen($path, 'r')) === false) {
            $message = '';
        // read template file
   if (($templ = file_get_contents($path)) === false) {
            ob_start();
            fopen($path, 'r');
            $message.= ob_get_contents();
            file_get_contents($path);
            $message = ob_get_contents();
            ob_end_clean();
            raise_error(array(
                'code' => 501,
@@ -319,8 +316,6 @@
                ), true, true);
            return false;
        }
        $templ = fread($fp, filesize($path));
        fclose($fp);
        // parse for specialtags
        $output = $this->parse_conditions($templ);
@@ -485,11 +480,28 @@
     *
     * @param  string Input string to parse
     * @return string Altered input string
     * @todo   Use DOM-parser to traverse template HTML
     * @todo   Maybe a cache.
     */
    private function parse_xml($input)
    {
        return preg_replace('/<roundcube:([-_a-z]+)\s+([^>]+)>/Uie', "\$this->xml_command('\\1', '\\2')", $input);
        return preg_replace_callback('/<roundcube:([-_a-z]+)\s+([^>]+)>/Ui', array($this, 'xml_command_callback'), $input);
    }
    /**
     * This is a callback function for preg_replace_callback (see #1485286)
     * It's only purpose is to reconfigure parameters for xml_command, so that the signature isn't disturbed
     */
    private function xml_command_callback($matches)
    {
        $str_attrib = isset($matches[2]) ? $matches[2] : '';
        $add_attrib = isset($matches[3]) ? $matches[3] : array();
        $command = $matches[1];
        //matches[0] is the entire matched portion of the string
        return $this->xml_command($command, $str_attrib, $add_attrib);
    }
@@ -529,14 +541,13 @@
            // include a file
            case 'include':
                $path = realpath($this->config['skin_path'].$attrib['file']);
                if ($fsize = filesize($path)) {
                if (is_readable($path)) {
                    if ($this->config['skin_include_php']) {
                        $incl = $this->include_php($path);
                    }
                    else if ($fp = fopen($path, 'r')) {
                        $incl = fread($fp, $fsize);
                        fclose($fp);
                    }
                    else {
              $incl = file_get_contents($path);
          }
                    return $this->parse_xml($incl);
                }
                break;