r4807 new API for redefining internal RackTables functions.
authorAlexey Andriyanov <alan@al-an.info>
Fri, 30 Sep 2011 06:53:55 +0000 (06:53 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Fri, 30 Sep 2011 06:53:55 +0000 (06:53 +0000)
Ability to redefine RealServers table in RSPool page

new $hook global array
callHook: new API function which the developers should use to give users ability to override the operation
renderRSPool: use prepareRealServersTable hook instead of getRSDisplayColumns function
getRSDisplayColumns was renamed into prepareRealServersTable. The result format also changed

wwwroot/inc/functions.php
wwwroot/inc/navigation.php
wwwroot/inc/slb-interface.php

index 48ec11b..cc40fb6 100644 (file)
@@ -4670,6 +4670,18 @@ function getOutputOf ($func_name)
        }
 }
 
+// calls function which can be overriden in $hook array. Takes any number of additional parameters
+function callHook ($func_name)
+{
+       global $hook;
+       if (isset ($hook[$func_name]))
+               $func_name = $hook[$func_name];
+       $params = func_get_args();
+       array_shift($params);
+       // if function named $func_name does not exists, an exception is thrown automatically
+       return call_user_func_array ($func_name, $params); 
+}
+
 // function to parse text table header, aligned by left side
 // returns array suitable to be used by explodeTableLine
 function guessTableStructure ($line)
index ed38c33..dded8b7 100644 (file)
@@ -21,6 +21,7 @@ $trigger = array();
 $ophandler = array();
 $tabhandler = array();
 $delayauth = array();
+$hook = array();
 
 $indexlayout = array
 (
index e687abd..1343182 100644 (file)
@@ -243,16 +243,17 @@ function renderRSPool ($pool_id)
        if ($poolInfo['rscount'])
        {
                $rs_list = getRSListInPool ($pool_id);
-               $columns = getRSDisplayColumns ($rs_list);              startPortlet ("Real servers ({$poolInfo['rscount']})");
+               $rs_table = callHook ('prepareRealServersTable', $rs_list);
+               startPortlet ("Real servers ({$poolInfo['rscount']})");
                echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
                echo "<tr>";
-               foreach ($columns as $title)
+               foreach ($rs_table['columns'] as $title)
                        echo "<th>$title</th>";
                echo "</tr>";
-               foreach ($rs_list as $rs)
+               foreach ($rs_table['rows'] as $rs)
                {
                        echo "<tr valign=top>";
-                       foreach (array_keys ($columns) as $field)
+                       foreach (array_keys ($rs_table['columns']) as $field)
                        {
                                switch ($field)
                                {
@@ -291,9 +292,9 @@ function renderRSPool ($pool_id)
        echo "</td></tr></table>\n";
 }
 
-function getRSDisplayColumns ($rs_list)
+function prepareRealServersTable ($rs_list)
 {
-       $result = array
+       $columns = array
        (
                'inservice' => '',
                'rsip' => 'address',
@@ -301,15 +302,19 @@ function getRSDisplayColumns ($rs_list)
                'rsconfig' => 'RS config',
                'comment' => 'comment',
        );
-       $not_seen = $result;
+       $not_seen = $columns;
        foreach ($rs_list as $rs)
                foreach ($rs as $key => $value)
                        if (! empty ($value) and isset ($not_seen[$key]))
                                unset ($not_seen[$key]);
        foreach (array_keys ($not_seen) as $key)
                if ($key != 'rsip')
-                       unset ($result[$key]);
-       return $result;
+                       unset ($columns[$key]);
+       return array
+               (
+                       'columns' => $columns,
+                       'rows' => $rs_list,
+               );
 }
 
 function renderRSPoolServerForm ($pool_id)