r4033 bugfix: the feature of remembering last opened tab of realm page is now working
authorAlexey Andriyanov <alan@al-an.info>
Tue, 30 Nov 2010 14:24:55 +0000 (14:24 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Tue, 30 Nov 2010 14:24:55 +0000 (14:24 +0000)
index.php: store not only tab name, but also last visited time
inc/navigation.php: independent bug, moved renderIPv4SLB from pagehandler to tabhandler

inc/interface.php:
 showTabs: added support for bypassing optional arguments between tabs

inc/functions.php:
 new constant TAB_REMEMBER_TIMEOUT defined
 redirectIfNecessary: redirects to remembered tab
 prepareNavigation: moved old feature code out of here, it was not working before permissions init
 redirectUser: added support for bypassing optional arguments between tabs

ChangeLog
inc/functions.php
inc/interface.php
inc/navigation.php
index.php

index a21016e..09afb0c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
        new feature: SNMPv3 support (#379, by Jens Weibler)
        update: cache image files thumbnails and make them JPEGs (#369, by Matt Mills)
        update: enhance rackspace click helpers (by Jeroen Benda)
+       bugfix: the feature of remembering last opened tab of realm page is now working
 0.18.7
        bugfix: adjust 802.1Q command generation
        bugfix: fixed telnet session hanging in NX-OS4 connector
index f74e4ec..ef49ea3 100644 (file)
@@ -24,6 +24,8 @@ $templateWidth[3] = 1;
 $templateWidth[4] = 1;
 $templateWidth[5] = 1;
 
+define ('TAB_REMEMBER_TIMEOUT', 300);
+
 // Entity type by page number mapping is 1:1 atm, but may change later.
 $etype_by_pageno = array
 (
@@ -1134,13 +1136,27 @@ function redirectIfNecessary ()
                redirectUser ($pmap[$pageno], $tabno);
        if (isset ($tmap[$pageno][$tabno]))
                redirectUser ($pageno, $tmap[$pageno][$tabno]);
+
+       if
+       (
+               ! isset ($_REQUEST['tab']) and
+               isset ($_SESSION['RTLT'][$pageno]) and
+               getConfigVar ('SHOW_LAST_TAB') == 'yes' and
+               permitted ($pageno, $_SESSION['RTLT'][$pageno]['tabname']) and
+               time() - $_SESSION['RTLT'][$pageno]['time'] <= TAB_REMEMBER_TIMEOUT
+       )
+               redirectUser ($pageno, $_SESSION['RTLT'][$pageno]['tabname']);
+
        // check if we accidentaly got on a dynamic tab that shouldn't be shown for this object
        if
        (
                isset ($trigger[$pageno][$tabno]) and
                !strlen (call_user_func ($trigger[$pageno][$tabno]))
        )
+       {
+               $_SESSION['RTLT'][$pageno]['dont_remember'] = 1;
                redirectUser ($pageno, 'default');
+       }
 }
 
 function prepareNavigation()
@@ -1148,23 +1164,10 @@ function prepareNavigation()
        global
                $pageno,
                $tabno;
-
        $pageno = (isset ($_REQUEST['page'])) ? $_REQUEST['page'] : 'index';
 
-// Special handling of tab number to substitute the "last" index where applicable.
-// Always show explicitly requested tab, substitute the last used name in case
-// it is awailable, fall back to the default one.
-
        if (isset ($_REQUEST['tab']))
                $tabno = $_REQUEST['tab'];
-       elseif
-       (
-               basename($_SERVER['PHP_SELF']) == 'index.php' and
-               getConfigVar ('SHOW_LAST_TAB') == 'yes' and
-               isset ($_SESSION['RTLT'][$pageno]) and
-               permitted ($pageno, $_SESSION['RTLT'][$pageno])
-       )
-               redirectUser ($pageno, $_SESSION['RTLT'][$pageno]);
        else
                $tabno = 'default';
 }
@@ -1491,6 +1494,10 @@ function redirectUser ($p, $t)
        $l = "index.php?page=${p}&tab=${t}";
        if (isset ($page[$p]['bypass']) and isset ($_REQUEST[$page[$p]['bypass']]))
                $l .= '&' . $page[$p]['bypass'] . '=' . $_REQUEST[$page[$p]['bypass']];
+       if (isset ($page[$p]['bypass_tabs']))
+               foreach ($page[$p]['bypass_tabs'] as $param_name)
+                       if (isset ($_REQUEST[$param_name]))
+                               $l .= '&' . urlencode ($param_name) . '=' . urlencode ($_REQUEST[$param_name]);
        header ("Location: " . $l);
        die;
 }
index e565098..6e96aef 100644 (file)
@@ -7104,6 +7104,11 @@ function showTabs ($pageno, $tabno)
                        $bpval = $_REQUEST[$bpname];
                        echo "&${bpname}=${bpval}";
                }
+               if (isset ($page[$pageno]['bypass_tabs']))
+                       foreach ($page[$pageno]['bypass_tabs'] as $param_name)
+                               if (isset ($_REQUEST[$param_name]))
+                                       echo "&" . urlencode ($param_name) . '=' . urlencode ($_REQUEST[$param_name]);
+               
                echo "'>${tabtitle}</a></li>\n";
        }
        echo "</ul></div></td>\n";
index ba0a0da..3bb8124 100644 (file)
@@ -279,9 +279,9 @@ $ophandler['ipv6address']['assignment']['addIPv6Allocation'] = 'addIPv6Allocatio
 
 $page['ipv4slb']['title'] = 'IPv4 SLB';
 $page['ipv4slb']['parent'] = 'index';
-$page['ipv4slb']['handler'] = 'renderIPv4SLB';
 $tab['ipv4slb']['default'] = 'Browse';
 $tab['ipv4slb']['defconfig'] = 'Default configs';
+$tabhandler['ipv4slb']['default'] = 'renderIPv4SLB';
 $tabhandler['ipv4slb']['defconfig'] = 'renderSLBDefConfig';
 $ophandler['ipv4slb']['defconfig']['save'] = 'updateSLBDefConfig';
 
index 0bb0ab5..24b2a84 100644 (file)
--- a/index.php
+++ b/index.php
@@ -11,7 +11,8 @@ if (!permitted())
        renderAccessDenied();
 header ('Content-Type: text/html; charset=UTF-8');
 // Only store the tab name after clearance is got. Any failure is unhandleable.
-$_SESSION['RTLT'][$pageno] = $tabno;
+if (isset ($_REQUEST['tab']) and ! isset ($_SESSION['RTLT'][$pageno]['dont_remember']))
+       $_SESSION['RTLT'][$pageno] = array ('tabname' => $tabno, 'time' => time());
 
 echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n";
 echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'."\n";