From d30460ad2fc0f78ce44d474fa2c466d660596d27 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Sun, 10 Feb 2013 09:31:39 -0500
Subject: [PATCH] Let some env variables survive reset(); don't show taskbar and top line in framed error pages (#1488938)

---
 program/include/rcmail_output_html.php |    8 +++++++-
 skins/larry/templates/error.html       |    7 +++++--
 skins/larry/styles.css                 |    4 ++++
 skins/larry/includes/header.html       |    6 +++---
 4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php
index f6c5d91..2babe1c 100644
--- a/program/include/rcmail_output_html.php
+++ b/program/include/rcmail_output_html.php
@@ -80,6 +80,8 @@
 
         if (!empty($_REQUEST['_extwin']))
           $this->set_env('extwin', 1);
+        if ($this->framed || !empty($_REQUEST['_framed']))
+          $this->set_env('framed', 1);
 
         // add common javascripts
         $this->add_script('var '.self::JS_OBJECT_NAME.' = new rcube_webmail();', 'head_top');
@@ -308,8 +310,12 @@
      */
     public function reset()
     {
+        $env = array_intersect_key($this->env, array('extwin'=>1, 'framed'=>1));
+
         parent::reset();
-        $this->js_env = array();
+
+        // let some env variables survive
+        $this->env = $this->js_env = $env;
         $this->js_labels = array();
         $this->js_commands = array();
         $this->script_files = array();
diff --git a/skins/larry/includes/header.html b/skins/larry/includes/header.html
index 5a30020..f2efb8e 100644
--- a/skins/larry/includes/header.html
+++ b/skins/larry/includes/header.html
@@ -10,16 +10,16 @@
 	<roundcube:container name="topline-center" id="topline-center" />
 	<div class="topright">
 	<roundcube:container name="topline-right" id="topline-right" />
-	<roundcube:if condition="!env:extwin" />
+	<roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
 		<span class="username"><roundcube:object name="username" /></span>
 		<roundcube:button command="logout" label="logout" class="button-logout" />
-	<roundcube:else />
+	<roundcube:elseif condition="env:extwin" />
 		<roundcube:button command="close" label="close" class="closelink" />
 	<roundcube:endif />
 	</div>
 </div>
 
-<roundcube:if condition="!env:extwin" />
+<roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
 <div id="topnav">
 	<div id="taskbar" class="topright">
 	<roundcube:button command="mail" label="mail" class="button-mail" classSel="button-mail button-selected" innerClass="button-inner" />
diff --git a/skins/larry/styles.css b/skins/larry/styles.css
index 613a08a..044a09e 100644
--- a/skins/larry/styles.css
+++ b/skins/larry/styles.css
@@ -1276,6 +1276,10 @@
 	margin: 38px 0 10px 0;
 }
 
+body.iframe.error {
+	background: #ededed;
+}
+
 body.iframe.floatingbuttons {
 	margin-bottom: 40px;
 }
diff --git a/skins/larry/templates/error.html b/skins/larry/templates/error.html
index cd0fc96..a65733e 100644
--- a/skins/larry/templates/error.html
+++ b/skins/larry/templates/error.html
@@ -4,9 +4,12 @@
 <title><roundcube:object name="pagetitle" /></title>
 <roundcube:include file="/includes/links.html" />
 </head>
-<body>
-
+<roundcube:if condition="!env:framed" />
+<body class="error">
 <roundcube:include file="/includes/header.html" />
+<roundcube:else />
+<body class="error iframe">
+<roundcube:endif />
 
 <div class="uibox centerbox errorbox">
 $__page_content

--
Gitblit v1.9.1