From ade8e117dfbb62f6dbd16b4aca81dfbdbd054579 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 02 Sep 2008 03:42:46 -0400
Subject: [PATCH] Let rcmail class create address book instances

---
 program/include/rcube_template.php |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index fb65411..ba73539 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -480,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);
     }
 
 

--
Gitblit v1.9.1