fixup the previous commit
authorDenis Ovsienko <denis@ovsienko.info>
Mon, 19 Nov 2018 18:14:46 +0000 (18:14 +0000)
committerDenis Ovsienko <denis@ovsienko.info>
Mon, 19 Nov 2018 19:03:56 +0000 (19:03 +0000)
Move RE_STATIC_URI from solutions.php to functions.php and address
assorted non-critical issues:

* isUri(): use the same regexp as the chrome module does (update the
  tests respectively)
* addPageHeader(): a new helper function with the common code
* addJSExternal(): simplify by using the above function
* addJSInternal(): idem
* addJSText(): idem
* addCSSExternal(): idem
* addCSSInternal(): idem
* addCSSText(): idem
* checkColumnOfRadios8021Q(): update to make a clean call to addJSText()
* renderRackCodeViewer(): idem
* renderRackCodeEditor(): idem
* addParentNodeOptionsJS(): idem
* getOptionTree(): idem
* renderLocationFilterPortlet(): idem

Put some lettercase and punctuation right and add some missing comments
while at it.

README.md
tests/PureFunctionTest.php
wwwroot/inc/functions.php
wwwroot/inc/init.php
wwwroot/inc/interface-8021q.php
wwwroot/inc/interface-config.php
wwwroot/inc/interface-lib.php
wwwroot/inc/interface.php
wwwroot/inc/solutions.php
wwwroot/inc/upgrade.php

index 263e285..7385465 100644 (file)
--- a/README.md
+++ b/README.md
@@ -168,38 +168,38 @@ and initialize the application.
 This version drops support for the `$localreports` global variable, which is
 trivial to replace in a local plugin if necessary.
 
-There has been a separation of the `addJS` and `addCSS` functions to easily 
-identify the resource usage.  The original `addJS` and `addCSS` functions will 
-most likely to be removed in 0.22.0 as they are depreciated.
+There has been a separation of the `addJS()` and `addCSS()` functions to easily
+identify the resource usage.  The original `addJS()` and `addCSS()` functions will
+most likely be removed in 0.22.0 as they are deprecated.
 
-- *`addJSText`/`addCSSText`*
+- *`addJSText()`/`addCSSText()`*
 
-  These functions should be used to add inline JS/CSS 
+  These functions should be used to add inline JS/CSS
   not defined in a separate file.
 
-- *`addJSInternal`/`addCSSInternal`*
+- *`addJSInternal()`/`addCSSInternal()`*
 
-  These functions should be used to add an internal reference to a JS/CSS file 
-  which is accessed using the `?module=chrome&uri=` for self hosted JS/CSS 
+  These functions should be used to add an internal reference to a JS/CSS file
+  which is accessed using the `?module=chrome&uri=` for self hosted JS/CSS
   files.  This can be utilised by both the core and plugins.
 
-- *`addJSExternal`/`addCSSExternal`*
+- *`addJSExternal()`/`addCSSExternal()`*
 
-  These functions should be used to add an external reference to a JS/CSS file 
-  which hosted on an external site or CDN. This can be utilised by both the core 
+  These functions should be used to add an external reference to a JS/CSS file
+  which hosted on an external site or CDN. This can be utilised by both the core
   and plugins.
 
-Each of these functions expect the first parameter to be the data or URI, and 
-the second parameter to be an optional group.  By default, the group is set to 
-'default' and groups are sorted alphabetically.  It should be noted that when 
-the `addJSInternal` function is used, it will also add the jQuery and RackTables 
+Each of these functions expect the first parameter to be the data or URI, and
+the second parameter to be an optional group.  By default, the group is set to
+'default' and groups are sorted alphabetically.  It should be noted that when
+the `addJSInternal()` function is used, it will also add the jQuery and RackTables
 common JavaScript functons.
 
-Due to this separation, you will no longer need to supply a TRUE or FALSE to 
-identify whether the parameter value is text or a URI.  If you rename an 
-existing `addJS`/`addCSS` function call, be sure to remove this parameter. 
-Failure to do so will mean you are effectively be saying that the group name is 
-'' (false) or '1' (true).
+Due to this separation, you will no longer need to supply a TRUE or FALSE to
+identify whether the parameter value is text or a URI.  If you rename an
+existing `addJS()`/`addCSS()` function call, be sure to remove this parameter.
+Failure to do so will mean you are effectively be saying that the group name is
+'' (FALSE) or '1' (TRUE).
 
 ### Upgrading to 0.21.0
 
@@ -388,4 +388,3 @@ besides 'yes' and 'no': 'none'. Use 'none' value if you are experiencing low
 performance on IP tree page. It will completely disable IP ranges scan for
 used/spare IPs and the speed of IP tree will increase radically. The price is
 you will not see the routers in IP tree at all.
-
index e8eeefa..51d7cdd 100644 (file)
@@ -506,7 +506,8 @@ class PureFunctionTest extends RTTestCase
 
                        // validate various URI/URL combinations
                        array ('isUri', 'https://www.test.com', FALSE),
-                       array ('isUri', '/js/table.js', TRUE),
+                       array ('isUri', '/js/table.js', FALSE),
+                       array ('isUri', 'js/table.js', TRUE),
                        array ('isUri', '!#$%', FALSE),
 
                        array ('isUrl', 'https://www.test.com', TRUE),
index e3f78dc..19cd233 100644 (file)
@@ -50,6 +50,7 @@ define ('RE_L2_IPOIB_HYPHEN', '/^[0-9A-F]{2}(-[0-9A-F]{2}){19}$/');
 define ('RE_L2_IPOIB_SOLID', '/^[0-9A-F]{40}$/');
 define ('RE_IP4_ADDR', '#^[0-9]{1,3}(\.[0-9]{1,3}){3}$#');
 define ('RE_IP4_NET', '#^[0-9]{1,3}(\.[0-9]{1,3}){3}/[0-9]{1,2}$#');
+define ('RE_STATIC_URI', '#^(?:[[:alnum:]]+[[:alnum:]_.-]*/)+[[:alnum:]\._-]+\.([[:alpha:]]+)$#');
 define ('E_8021Q_NOERROR', 0);
 define ('E_8021Q_VERSION_CONFLICT', 101);
 define ('E_8021Q_PULL_REMOTE_ERROR', 102);
index 4780b8e..1b1096e 100644 (file)
@@ -110,6 +110,8 @@ $user_given_tags = array();
 $user_defined_atags = array();
 
 // Initial the HTML header arrays used by addJSxxx() and addCSSxxx() functions
+// FIXME: For some reason without this global declaration there two variables do
+// not exist for addPageHeader() in PHPUnit.
 global $html_headers, $seen_headers;
 $html_headers = array();
 $seen_headers = array();
index 5c3ce32..f388327 100644 (file)
@@ -1215,7 +1215,7 @@ function checkColumnOfRadios8021Q (prefix, numRows, suffix)
        }
 }
 END
-       , TRUE);
+       ); // addJSText()
        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable width="100%">';
        if ($maxdecisions)
                echo '<tr><th colspan=2>&nbsp;</th><th colspan=3>discard</th><th>&nbsp;</th></tr>';
@@ -1552,7 +1552,7 @@ function renderVSTRulesEditor ($vst_id)
        $row_html .= '<td><input type=text name=wrt_vlans value="%s"></td>';
        $row_html .= '<td><input type=text name=description value="%s"></td>';
        $row_html .= '<td><a href="#" class="vst-add-rule">' . getImageHREF ('add', 'Duplicate rule') . '</a></td>';
-       addJSText ("var new_vst_row = '" . addslashes (sprintf ($row_html, '', '', getSelect ($port_role_options, array ('name' => 'port_role'), 'anymode'), '', '')) . "';", TRUE);
+       addJSText ("var new_vst_row = '" . addslashes (sprintf ($row_html, '', '', getSelect ($port_role_options, array ('name' => 'port_role'), 'anymode'), '', '')) . "';");
        startSession();
        foreach (array_fetch ($_SESSION, 'vst_edited', $vst['rules']) as $item)
                printf ('<tr>' . $row_html . '</tr>', $item['rule_no'], htmlspecialchars ($item['port_pcre'], ENT_QUOTES),  getSelect ($port_role_options, array ('name' => 'port_role'), $item['port_role']), $item['wrt_vlans'], $item['description']);
index 8ac530a..656395a 100644 (file)
@@ -120,7 +120,7 @@ $(document).ready(function() {
        ${scrollcode}
 });
 ENDJAVASCRIPT
-       , TRUE);
+       ); // addJSText ()
        echo "<tr><td><textarea rows=40 cols=100 id=RCTA>";
        echo loadScript ('RackCode') . "</textarea></td></tr>\n";
        echo '</table>';
@@ -173,7 +173,7 @@ $(document).ready(function() {
     });
 });
 ENDJAVASCRIPT
-       , TRUE);
+       ); // addJSText ()
 
        printOpFormIntro ('saveRackCode');
        echo '<table width="100%" border=0>';
@@ -971,8 +971,7 @@ $(document).ready(function () {
        $('select.nodelist-popup').bind('mousedown', ${prefix}_showselectbox);
 });
 END
-               , TRUE
-       );
+       ); // addJSText()
 }
 
 function getColorSelect($id = 'color', $selected = NULL)
index 6406032..6f472bf 100644 (file)
@@ -409,8 +409,8 @@ $(function() {
        var option_tree = " . json_encode ($tree_options) . ";
        var options = " . json_encode ($tree_config + $default_config) . ";
        $('input[name=${tree_name}]').optionTree(option_tree, options);
-});
-", TRUE);
+});"
+       ); // addJSText()
 
        return "<input type=hidden name=${tree_name}>";
 }
@@ -497,13 +497,13 @@ function transformRequestData()
                $_SERVER['REMOTE_USER'] = escapeString ($_SERVER['REMOTE_USER']);
 }
 
-// Return whether value passed is likely to be a Uri
+// Return whether value passed is likely to be a URI.
 function isUri ($uri)
 {
-       return preg_match ('~^[\w\-\._\/ ]+$~', $uri);
+       return preg_match (RE_STATIC_URI, $uri);
 }
 
-// Return whether value passed is likely to be a Url
+// Return whether value passed is likely to be a URL.
 function isUrl ($url)
 {
        return preg_match ('~^[\w]+:\/\/[\w \-\.\_\/]+$~', $url);
@@ -526,27 +526,22 @@ function addJS ($data, $inline = FALSE, $group = 'default')
 // either http:// or https://
 function addJSExternal ($url, $group = 'default')
 {
-       global $html_headers, $seen_headers;
-
        if (! isUrl ($url))
                throw new InvalidArgException ('url', $url, 'Value passed is not a URL');
 
-       $url = "<script type='text/javascript' src='${url}'></script>\n";
-       if (!isset ($seen_headers[$url]))
-       {
-               $html_headers[$group][] = $url;
-               $seen_headers[$url] = 1;
-       }
+       addPageHeader ("<script type='text/javascript' src='${url}'></script>\n", $group);
 }
 
 // addJSInternal adds links that go through the Chrome module of index.php
 function addJSInternal ($uri, $group = 'default')
 {
-       global $html_headers, $seen_headers;
+       global $html_headers;
 
        // Add jquery.js and racktables.js the first time a Javascript file is added.
+       // FIXME: Would it be better to do this initialization elsewhere?
        if (! array_key_exists ('a_core', $html_headers))
        {
+               // Prevent infinite recursion.
                $html_headers['a_core'] = array();
 
                addJSInternal('js/jquery-1.4.4.min.js', 'a_core');
@@ -554,34 +549,22 @@ function addJSInternal ($uri, $group = 'default')
        }
 
        if (! isUri ($uri))
-               throw new InvalidArgException ('uri', $uri, 'Value passed is not a valid Uri');
+               throw new InvalidArgException ('uri', $uri, 'Value passed is not a valid URI');
 
-       $uri = "<script type='text/javascript' src='?module=chrome&uri=${uri}'></script>\n";
-       if (! isset ($seen_headers[$uri]))
-       {
-               $html_headers[$group][] = $uri;
-               $seen_headers[$uri] = 1;
-       }
+       addPageHeader ("<script type='text/javascript' src='?module=chrome&uri=${uri}'></script>\n", $group);
 }
 
 // This function adds script blocks that automatically appear in the <head> of your page.
 // Scripts are included in the order of adding within the same group, and groups are sorted alphabetically.
 function addJSText ($text, $group = 'default')
 {
-       global $html_headers, $seen_headers;
-
        if (isUrl ($text))
-               throw new InvalidArgException ('text', $text, 'Value passed is most likely a Url and should use addJSExternal');
+               throw new InvalidArgException ('text', $text, 'Value passed is most likely a URL and should use addJSExternal()');
 
        if (isUri ($text))
-               throw new InvalidArgException ('text', $text, 'Value passed is most likely a Uri and should use addJSInternal');
+               throw new InvalidArgException ('text', $text, 'Value passed is most likely a URI and should use addJSInternal()');
 
-       $text = '<script type="text/javascript">' . "\n" . trim ($text, "\r\n") . "\n</script>\n";
-       if (! isset ($seen_headers[$text]))
-       {
-               $html_headers[$group][] = $text;
-               $seen_headers[$text] = 1;
-       }
+       addPageHeader ('<script type="text/javascript">' . "\n" . trim ($text, "\r\n") . "\n</script>\n", $group);
 }
 
 // CSS styles should be included through this function.
@@ -604,17 +587,10 @@ function addCSS ($data, $inline = FALSE, $group = 'default')
 // Styles are included in the order of adding.
 function addCSSExternal ($url, $group = 'default')
 {
-       global $html_headers, $seen_headers;
-
        if (! isUrl ($url))
-               throw new InvalidArgException ('url', $url, 'Value passed is not a valid Url');
+               throw new InvalidArgException ('url', $url, 'Value passed is not a valid URL');
 
-       $url = "<link rel=stylesheet type='text/css' href='$url' />\n";
-       if (! isset ($seen_headers[$url]))
-       {
-               $html_headers[$group][] = $url;
-               $seen_headers[$url] = 1;
-       }
+       addPageHeader ("<link rel=stylesheet type='text/css' href='$url' />\n", $group);
 }
 
 // CSS styles should be included through this function.
@@ -623,17 +599,10 @@ function addCSSExternal ($url, $group = 'default')
 // Styles are included in the order of adding.
 function addCSSInternal ($uri, $group = 'default')
 {
-       global $html_headers, $seen_headers;
-
        if (! isUri ($uri))
-               throw new InvalidArgException ('uri', $uri, 'Value passed is not a valid Uri');
+               throw new InvalidArgException ('uri', $uri, 'Value passed is not a valid URI');
 
-       $uri = "<link rel=stylesheet type='text/css' href='?module=chrome&uri=$uri' />\n";
-       if (! isset ($seen_headers[$uri]))
-       {
-               $html_headers[$group][] = $uri;
-               $seen_headers[$uri] = 1;
-       }
+       addPageHeader ("<link rel=stylesheet type='text/css' href='?module=chrome&uri=$uri' />\n", $group);
 }
 
 // CSS styles should be included through this function.
@@ -642,20 +611,13 @@ function addCSSInternal ($uri, $group = 'default')
 // Styles are included in the order of adding.
 function addCSSText ($text, $group = 'default')
 {
-       global $html_headers, $seen_headers;
-
        if (isUrl ($text))
-               throw new InvalidArgException ('text', $text, 'Value passed is most likely a Url and should use addCSSExternal');
+               throw new InvalidArgException ('text', $text, 'Value passed is most likely a URL and should use addCSSExternal()');
 
        if (isUri ($text))
-               throw new InvalidArgException ('text', $text, 'Value passed is most likely a Uri and should use addCSSInternal');
+               throw new InvalidArgException ('text', $text, 'Value passed is most likely a URI and should use addCSSInternal()');
 
-       $text = '<style type="text/css">' . "\n" . trim ($text, "\r\n") . "\n</style>\n";
-       if (! isset ($seen_headers[$text]))
-       {
-               $html_headers[$group][] = $text;
-               $seen_headers[$text] = 1;
-       }
+       addPageHeader ('<style type="text/css">' . "\n" . trim ($text, "\r\n") . "\n</style>\n", $group);
 }
 
 function getRenderedIPNetCapacity ($range)
@@ -796,6 +758,17 @@ function getRenderedIPv6NetCapacity ($range)
        return "<div class=\"$class\" id=\"$div_id\">" . "{$addrc}${cnt}${mult} ${what}" . "</div>";
 }
 
+function addPageHeader ($header, $group)
+{
+       global $html_headers, $seen_headers;
+
+       if (! array_key_exists ($header, $seen_headers))
+       {
+               $html_headers[$group][] = $header;
+               $seen_headers[$header] = 1;
+       }
+}
+
 // print part of HTML HEAD block
 function printPageHeaders ()
 {
index e9c461d..c66bbc9 100644 (file)
@@ -308,7 +308,7 @@ function renderLocationFilterPortlet ()
                }
        }
 
-       addJS(<<<'END'
+       addJSText (<<<'END'
 function checkAll(bx) {
        for (var tbls=document.getElementsByTagName("table"), i=tbls.length; i--;)
                if (tbls[i].id == "locationFilter") {
@@ -363,7 +363,7 @@ function expand(id) {
        }
 }
 END
-       );
+       ); // addJSText()
        startPortlet ('Location filter');
        echo <<<'END'
 <table border=0 align=center cellspacing=0 class="tagtree" id="locationFilter">
@@ -586,7 +586,7 @@ function renderLocationSelectTree ($select_name, $selected_id = NULL)
 
 function renderRackspaceLocationEditor ()
 {
-       $js = <<<'JSTXT'
+       addJSText (<<<'JSTXT'
        function locationeditor_showselectbox(e) {
                $(this).load('index.php', {module: 'ajax', ac: 'get-location-select', locationid: this.id});
                $(this).unbind('mousedown', locationeditor_showselectbox);
@@ -594,9 +594,9 @@ function renderRackspaceLocationEditor ()
        $(document).ready(function () {
                $('select.locationlist-popup').bind('mousedown', locationeditor_showselectbox);
        });
-JSTXT;
+JSTXT
+       ); // addJSText()
 
-       addJS($js);
        function printNewItemTR ()
        {
                printOpFormIntro ('addLocation');
@@ -1847,7 +1847,7 @@ function renderIPForObject ($object_id)
                                });
                        });
 JSEND
-               );
+               ); // addJSText()
                printOpFormIntro ('add');
                echo "<tr><td>"; // left btn
                printImageHREF ('add', 'allocate', TRUE);
@@ -2159,7 +2159,7 @@ $(function () {
     });
 });
 ENDOFJAVASCRIPT
-       );
+       ); // addJSText()
 }
 
 // An object can be mounted onto free atoms only, that is, if any record for an atom
@@ -2734,7 +2734,7 @@ $(document).ready(function () {
        Validate.init();
 });
 END
-       );
+       ); // addJSText()
 
        startPortlet ('Add new');
        printOpFormIntro ('add');
@@ -3430,7 +3430,7 @@ function renderIPAddressAllocations ($ip_bin)
                                });
                        });
 JSEND
-               );
+               ); // addJSText()
                printOpFormIntro ('add');
                echo "<tr id='aid-new'><td>";
                printImageHREF ('add', 'allocate', TRUE);
@@ -4691,7 +4691,7 @@ function textifyCellFilter(target, text)
        portlet.find ('input[type="radio"][value="and"]').attr('checked','true');
 }
 END
-                       );
+                       ); // addJSText()
                }
                echo '</td><td class=tdright>';
                // "reset"
index b73d848..1f8b1ea 100644 (file)
@@ -15,8 +15,6 @@ implement the "interface" module.
 
 require_once 'slb-interface.php';
 
-define ('RE_STATIC_URI', '#^(?:[[:alnum:]]+[[:alnum:]_.-]*/)+[[:alnum:]\._-]+\.([[:alpha:]]+)$#');
-
 $color = array();
 
 function castRackImageException ($e)
index 29be362..81c9462 100644 (file)
@@ -179,11 +179,11 @@ ENDOFTEXT
 This version drops support for the $localreports global variable, which is
 trivial to replace in a local plugin if necessary.
 
-The "addJS()" function is now depreciated in favour of "addJSText()", "addJSInternal()",
-and "addJSExternal()" functions.  The "addJS()" function will likely be removed in 0.22.0
+The "addJS()" function is now deprecated in favour of "addJSText()", "addJSInternal()",
+and "addJSExternal()" functions.  The "addJS()" function will likely be removed in 0.22.0.
 
-The "addCSS()" function is now depreciated in favour of "addCSSText()", "addCSSInternal()",
-and "addCSSExternal()" functions.  The "addCSS()" function will likely be removed in 0.22.0
+The "addCSS()" function is now deprecated in favour of "addCSSText()", "addCSSInternal()",
+and "addCSSExternal()" functions.  The "addCSS()" function will likely be removed in 0.22.0.
 
 For more information on the "addJS()" and "addCSS()" changes see the README.md
 ENDOFTEXT