factor array_fetch() out
authorDenis Ovsienko <infrastation@yandex.ru>
Mon, 16 Dec 2013 16:44:30 +0000 (20:44 +0400)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 16 Dec 2013 16:52:57 +0000 (20:52 +0400)
There is no core function in PHP that would return a default value when
there is no requested index in the array (consider Array.fetch() in
Ruby). Implement and use such function to replace a few ternary
conditionals with a more focused notation.

* array_fetch(): new function
* syncdomain.php: update
* getPrevIDforRack(): idem
* getNextIDforRack(): idem
* formatRealmName(): idem
* get8021QSyncOptions(): idem
* strerror8021Q(): idem
* renderObject8021QPorts(): idem
* renderObject8021QSyncPorts(): idem
* resolve8021QConflicts(): idem
* tableHandler(): idem

scripts/syncdomain.php
wwwroot/inc/functions.php
wwwroot/inc/interface.php
wwwroot/inc/ophandlers.php

index 621851b..3801aca 100755 (executable)
@@ -44,7 +44,7 @@ default:
        usage();
 }
 
-$max = array_key_exists ('max', $options) ? $options['max'] : 0;
+$max = array_fetch ($options, 'max', 0);
 $verbose = array_key_exists ('verbose', $options);
 
 $switch_list = array();
index 23df2ef..e71988e 100644 (file)
@@ -914,13 +914,13 @@ function l2addressFromDatabase ($string)
 function getPrevIDforRack ($row_id, $rack_id)
 {
        $rackList = doubleLink (listCells ('rack', $row_id));
-       return isset ($rackList[$rack_id]['prev_key']) ? $rackList[$rack_id]['prev_key'] : NULL;
+       return array_fetch ($rackList[$rack_id], 'prev_key', NULL);
 }
 
 function getNextIDforRack ($row_id, $rack_id)
 {
        $rackList = doubleLink (listCells ('rack', $row_id));
-       return isset ($rackList[$rack_id]['next_key']) ? $rackList[$rack_id]['next_key'] : NULL;
+       return array_fetch ($rackList[$rack_id], 'next_key', NULL);
 }
 
 // This function finds previous and next array keys for each array key and
@@ -2666,7 +2666,7 @@ function formatRealmName ($realm)
                'location' => 'Location',
                'user' => 'User',
        );
-       return array_key_exists ($realm, $realmstr) ? $realmstr[$realm] : 'invalid';
+       return array_fetch ($realmstr, $realm, 'invalid');
 }
 
 // Convert filesize to appropriate unit and make it human-readable
@@ -3959,8 +3959,8 @@ function get8021QSyncOptions
                                $ret[$pn] = array
                                (
                                        'status' => 'martian_conflict',
-                                       'left' => array_key_exists ($pn, $C) ? $C[$pn] : array ('mode' => 'none'),
-                                       'right' => array_key_exists ($pn, $R) ? $R[$pn] : array ('mode' => 'none'),
+                                       'left' => array_fetch ($C, $pn, array ('mode' => 'none')),
+                                       'right' => array_fetch ($R, $pn, array ('mode' => 'none')),
                                );
                        continue;
                }
@@ -3969,8 +3969,8 @@ function get8021QSyncOptions
                        $ret[$pn] = array
                        (
                                'status' => 'martian_conflict',
-                               'left' => array_key_exists ($pn, $C) ? $C[$pn] : array ('mode' => 'none'),
-                               'right' => array_key_exists ($pn, $R) ? $R[$pn] : array ('mode' => 'none'),
+                               'left' => array_fetch ($C, $pn, array ('mode' => 'none')),
+                               'right' => array_fetch ($R, $pn, array ('mode' => 'none')),
                        );
                        continue;
                }
@@ -4196,7 +4196,7 @@ function strerror8021Q ($errno)
                E_8021Q_PUSH_REMOTE_ERROR => 'push failed due to remote error',
                E_8021Q_SYNC_DISABLED => 'sync disabled by operator',
        );
-       return array_key_exists ($errno, $errstr) ? $errstr[$errno] : "unknown error code ${errno}";
+       return array_fetch ($errstr, $errno, "unknown error code ${errno}");
 }
 
 function saveDownlinksReverb ($object_id, $requested_changes)
@@ -5588,6 +5588,12 @@ function array_sub ($a, $b)
        return $ret;
 }
 
+// returns the requested element value or the default value if not found
+function array_fetch ($array, $key, $default_value)
+{
+       return array_key_exists ($key, $array) ? $array[$key] : $default_value;
+}
+
 // Registers additional ophandler on page-tab-opname triplet.
 // Valid $method values are 'before' and 'after'.
 //   'before' puts your ophandler in the beginning of the list (and thus before the default)
index 3527e3d..fb4334a 100644 (file)
@@ -6845,7 +6845,7 @@ function renderObject8021QPorts ($object_id)
        global $pageno, $tabno, $sic;
        $vswitch = getVLANSwitchInfo ($object_id);
        $vdom = getVLANDomain ($vswitch['domain_id']);
-       $req_port_name = array_key_exists ('port_name', $sic) ? $sic['port_name'] : '';
+       $req_port_name = array_fetch ($sic, 'port_name', '');
        $desired_config = apply8021QOrder ($vswitch, getStored8021QConfig ($object_id, 'desired'));
        $cached_config = getStored8021QConfig ($object_id, 'cached');
        $desired_config = sortPortList  ($desired_config);
@@ -7754,7 +7754,7 @@ function renderObject8021QSyncPorts ($object, $D)
        # OPTIONSs for existing 802.1Q ports
        foreach (sortPortList ($D) as $portname => $portconfig)
                $enabled["disable ${portname}"] = "${portname} ("
-                       . (array_key_exists ($portname, $allethports) ? $allethports[$portname] : 'N/A')
+                       . array_fetch ($allethports, $portname, 'N/A')
                        . ') ' . serializeVLANPack ($portconfig);
        # OPTIONs for potential 802.1Q ports
        $disabled = array();
index 5204fa1..5946cd9 100644 (file)
@@ -2880,7 +2880,7 @@ function resolve8021QConflicts ()
                        $F[$sic["pn_${i}"]] = array
                        (
                                'mode' => $sic["rm_${i}"],
-                               'allowed' => array_key_exists ("ra_${i}", $sic) ? $sic["ra_${i}"] : array(),
+                               'allowed' => array_fetch ($sic, "ra_${i}", array()),
                                'native' => $sic["rn_${i}"],
                                'decision' => $sic["i_${i}"],
                        );
@@ -3440,8 +3440,12 @@ function tableHandler()
                $retcode = 48;
                break;
        case 'DELETE':
-               $conjunction = array_key_exists ('conjunction', $opspec) ? $opspec['conjunction'] : 'AND';
-               usePreparedDeleteBlade ($opspec['table'], buildOpspecColumns ($opspec, 'arglist'), $conjunction);
+               usePreparedDeleteBlade
+               (
+                       $opspec['table'],
+                       buildOpspecColumns ($opspec, 'arglist'),
+                       array_fetch ($opspec, 'conjunction', 'AND')
+               );
                $retcode = 49;
                break;
        case 'UPDATE':
@@ -3450,7 +3454,7 @@ function tableHandler()
                        $opspec['table'],
                        buildOpspecColumns ($opspec, 'set_arglist'),
                        buildOpspecColumns ($opspec, 'where_arglist'),
-                       array_key_exists ('conjunction', $opspec) ? $opspec['conjunction'] : 'AND'
+                       array_fetch ($opspec, 'conjunction', 'AND')
                );
                $retcode = 51;
                break;