r4104 show page/tab handler exception messages embedded in main page interface
authorAlexey Andriyanov <alan@al-an.info>
Wed, 12 Jan 2011 05:50:37 +0000 (05:50 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Wed, 12 Jan 2011 05:50:37 +0000 (05:50 +0000)
prevent message appearing in foreign tab

+clearMessages: clears $_SESSION['log']
index.php: additional try-catch block added around tabhandler call
index.php: message list is clearead after index.php finishes, making sure no unshown messages kept
showMessageOrError: used new clearMessages

inc/functions.php
inc/interface.php
index.php

index eb84ed6..ed57ad2 100644 (file)
@@ -4394,6 +4394,12 @@ function setMessage ($message, $type, $direct_rendering)
        }
 }
 
+// clear message list set by showError, its siblings, buildWideRedirectURL
+function clearMessages()
+{
+       unset ($_SESSION['log']);
+}
+
 function isEthernetPort($port)
 {
        return ($port['iif_id'] != 1 or preg_match('/Base|LACP/i', $port['oif_name']));
index 7e689d7..e5ff15e 100644 (file)
@@ -1836,7 +1836,7 @@ function showMessageOrError ()
                        echo '<div class=msg_error>' . __FUNCTION__ . ': internal error</div>';
                        break;
        }
-       unset($_SESSION['log']);
+       clearMessages();
 }
 
 // renders two tables: port link status and learned MAC list
index ecfe7aa..86ab3dd 100644 (file)
--- a/index.php
+++ b/index.php
@@ -14,14 +14,22 @@ header ('Content-Type: text/html; charset=UTF-8');
 if (isset ($_REQUEST['tab']) and ! isset ($_SESSION['RTLT'][$pageno]['dont_remember']))
        $_SESSION['RTLT'][$pageno] = array ('tabname' => $tabno, 'time' => time());
 
+// call the main handler - page or tab handler.
+// catch exception and show its error message instead of page/tab content
+try {
 if (isset ($tabhandler[$pageno][$tabno]))
        call_user_func ($tabhandler[$pageno][$tabno], getBypassValue());
 elseif (isset ($page[$pageno]['handler']))
        $page[$pageno]['handler'] ($tabno);
 else
-       throw new RackTablesError ("Failed to find handler for page '${pageno}', tab '${tabno}'", RackTablesError::INTERNAL);
-
+       showError ("Failed to find handler for page '${pageno}', tab '${tabno}'");
 $content = ob_get_clean();
+} catch (Exception $e) {
+       ob_clean();
+       $content = '';
+       showError ("Unhandled exception: " . $e->getMessage());
+}
+
 ob_start();
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -45,7 +53,7 @@ ob_start();
   </table>
  </td></tr>
  <tr><td><?php showTabs ($pageno, $tabno); ?></td></tr>
- <tr><td><?php $output_is_buffered = FALSE; showMessageOrError(); ?></td></tr>
+ <tr><td><?php showMessageOrError(); ?></td></tr>
  <tr><td><?php echo $content; ?></td></tr>
 </table>
 </body>
@@ -56,4 +64,5 @@ ob_start();
        ob_end_clean();
        printException($e);
 }
+clearMessages(); // prevent message appearing in foreign tab
 ?>