Thomas Bruederli
2014-11-03 8d526c49381d9ac646c1a9b31936e0104dc3a6dc
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.
1 files modified
10 ■■■■ changed files
program/include/rcmail_output_html.php 10 ●●●● patch | view | raw | blame | history
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;
        }