From a3f149eb5729ef1ba6d1c05b29fead1058f4c888 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Fri, 19 Sep 2008 13:01:57 -0400 Subject: [PATCH] Fix search box on Safari and make pages validate --- program/include/rcube_template.php | 38 ++++++++++++++++++++++++++++---------- 1 files changed, 28 insertions(+), 10 deletions(-) diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php index c38b32f..2108ed7 100755 --- a/program/include/rcube_template.php +++ b/program/include/rcube_template.php @@ -54,6 +54,7 @@ $this->app = rcmail::get_instance(); $this->config = $this->app->config->all(); + $this->browser = new rcube_browser(); //$this->framed = $framed; $this->set_env('task', $task); @@ -464,17 +465,29 @@ * @todo Get rid off eval() once I understand what this does. * @todo Extend this to allow real conditions, not just "set" * @param string Condition statement - * @return boolean True if condition is met, False is not + * @return boolean True if condition is met, False if not */ private function check_condition($condition) { - $condition = preg_replace( + return eval("return (".$this->parse_expression($condition).");"); + } + + + /** + * Parses expression and replaces variables + * + * @param string Expression statement + * @return string Expression statement + */ + private function parse_expression($expression) + { + return preg_replace( array( '/session:([a-z0-9_]+)/i', '/config:([a-z0-9_]+)(:([a-z0-9_]+))?/i', '/env:([a-z0-9_]+)/i', - '/request:([a-z0-9_]+)/ie', - '/cookie:([a-z0-9_]+)/ie' + '/request:([a-z0-9_]+)/i', + '/cookie:([a-z0-9_]+)/i' ), array( "\$_SESSION['\\1']", @@ -483,9 +496,7 @@ "get_input_value('\\1', RCUBE_INPUT_GPC)", "\$_COOKIE['\\1']" ), - $condition); - - return eval("return (".$condition.");"); + $expression); } @@ -618,6 +629,11 @@ return Q($title); } break; + + // return code for a specified eval expression + case 'exp': + $value = $this->parse_expression($attrib['expression']); + return eval("return Q($value);"); // return variable case 'var': @@ -692,8 +708,6 @@ return ''; } - $browser = new rcube_browser(); - // try to find out the button type if ($attrib['type']) { $attrib['type'] = strtolower($attrib['type']); @@ -740,7 +754,7 @@ $attrib['alt'] = Q(rcube_label($attrib['alt'])); } // set title to alt attribute for IE browsers - if ($browser->ie && $attrib['title'] && !$attrib['alt']) { + if ($this->browser->ie && $attrib['title'] && !$attrib['alt']) { $attrib['alt'] = $attrib['title']; unset($attrib['title']); } @@ -1003,6 +1017,10 @@ if (empty($attrib['id'])) { $attrib['id'] = 'rcmqsearchbox'; } + if ($attrib['type'] == 'search' && !$this->browser->khtml) { + unset($attrib['type'], $attrib['results']); + } + $input_q = new html_inputfield($attrib); $out = $input_q->show(); -- Gitblit v1.9.1