From 8d526c49381d9ac646c1a9b31936e0104dc3a6dc Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <bruederli@kolabsys.com>
Date: Mon, 03 Nov 2014 10:15:44 -0500
Subject: [PATCH] Fix skin path handling in plugin context (#1488967): The plugin skin directories are removed again from the search path after parsing of a plugin template has finished.

---
 program/include/rcmail_output_html.php |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php
index 3d2f51b..026e9f8 100644
--- a/program/include/rcmail_output_html.php
+++ b/program/include/rcmail_output_html.php
@@ -462,6 +462,8 @@
     {
         $plugin   = false;
         $realname = $name;
+        $plugin_skin_paths = array();
+
         $this->template_name = $realname;
 
         $temp = explode('.', $name, 2);
@@ -471,7 +473,6 @@
             $skin_dir = $plugin . '/skins/' . $this->config->get('skin');
 
             // apply skin search escalation list to plugin directory
-            $plugin_skin_paths = array();
             foreach ($this->skin_paths as $skin_path) {
                 $plugin_skin_paths[] = $this->app->plugins->url . $plugin . '/' . $skin_path;
             }
@@ -482,7 +483,7 @@
                 $plugin_skin_paths[] = $this->app->plugins->url . $skin_dir;
             }
 
-            // add plugin skin paths to search list
+            // prepend plugin skin paths to search list
             $this->skin_paths = array_merge($plugin_skin_paths, $this->skin_paths);
         }
 
@@ -525,6 +526,8 @@
                 'file' => __FILE__,
                 'message' => 'Error loading template for '.$realname
                 ), true, $write);
+
+            $this->skin_paths = array_slice($this->skin_paths, count($plugin_skin_paths));
             return false;
         }
 
@@ -549,6 +552,9 @@
         $output = preg_replace_callback('/<form\s+([^>]+)>/Ui', array($this, 'alter_form_tag'), $output);
         $this->footer = preg_replace_callback('/<form\s+([^>]+)>/Ui', array($this, 'alter_form_tag'), $this->footer);
 
+        // remove plugin skin paths from current context
+        $this->skin_paths = array_slice($this->skin_paths, count($plugin_skin_paths));
+
         if (!$write) {
             return $output;
         }

--
Gitblit v1.9.1