r4012 SQL: add new column 'cable' for optional cable label
authorDenis Ovsienko <infrastation@yandex.ru>
Sat, 20 Nov 2010 17:48:50 +0000 (17:48 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sat, 20 Nov 2010 17:48:50 +0000 (17:48 +0000)
linkPortForObject(): update respectively for extra argument
renderRackObject(): idem
renderPortsForObject(): idem
getObjectPortsAndLinks(): idem
linkPorts(): idem

ChangeLog
inc/database.php
inc/interface.php
inc/ophandlers.php
install/init-structure.sql
popup.php
upgrade.php

index 5e083f6..427ae21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 0.19.0
        new feature: IPv6 support, except of LivePTR, NAT and SLB functionality (by Alexey Andriyanov)
+       new feature: cable ID column for links (#328, by Giovani Zamboni and Jens Weibler)
        update: cache image files thumbnails and make them JPEGs (#369, by Matt Mills)
 0.18.6
        bugfix: draw administrator's attention to missing LDAP extension (by Matt Mills)
index 03bbb9d..ec546ab 100644 (file)
@@ -554,14 +554,16 @@ function getObjectPortsAndLinks ($object_id)
        {
                $portid = $ret[$tmpkey]['id'];
                $remote_id = NULL;
-               $query = "select porta, portb from Link where porta = ? or portb = ?";
+               $query = "select porta, portb, cable from Link where porta = ? or portb = ?";
                $result = usePreparedSelectBlade ($query, array ($portid, $portid));
+               $cable = "CableID n/a";
                if ($row = $result->fetch (PDO::FETCH_ASSOC))
                {
                        if ($portid != $row['porta'])
                                $remote_id = $row['porta'];
                        elseif ($portid != $row['portb'])
                                $remote_id = $row['portb'];
+                       $cable = $row['cable'];
                }
                unset ($result);
                if ($remote_id) // there's a remote end here
@@ -572,6 +574,7 @@ function getObjectPortsAndLinks ($object_id)
                        {
                                $ret[$tmpkey]['remote_name'] = $row['name'];
                                $ret[$tmpkey]['remote_object_id'] = $row['object_id'];
+                               $ret[$tmpkey]['cableid'] = $cable;
                        }
                        $ret[$tmpkey]['remote_id'] = $remote_id;
                        unset ($result);
@@ -1002,7 +1005,7 @@ function getAllIPv4Allocations ()
        return $ret;
 }
 
-function linkPorts ($porta, $portb)
+function linkPorts ($porta, $portb, $cable = NULL)
 {
        if ($porta == $portb)
                throw new InvalidArgException ('porta/portb', $porta, "Ports can't be the same");
@@ -1012,7 +1015,7 @@ function linkPorts ($porta, $portb)
                $porta = $portb;
                $portb = $tmp;
        }
-       $ret = FALSE !== usePreparedInsertBlade ('Link', array ('porta' => $porta, 'portb' => $portb));
+       $ret = FALSE !== usePreparedInsertBlade ('Link', array ('porta' => $porta, 'portb' => $portb, 'cable' => $cable));
        $ret = $ret and FALSE !== usePreparedExecuteBlade
        (
                'UPDATE Port SET reservation_comment=NULL WHERE id IN(?, ?)',
index 9d4c93e..161173c 100644 (file)
@@ -1002,7 +1002,8 @@ function renderRackObject ($object_id)
                echo "<table cellspacing=0 cellpadding='5' align='center' class='widetable'>";
                echo '<tr><th class=tdleft>Local name</th><th class=tdleft>Visible label</th>';
                echo '<th class=tdleft>Interface</th><th class=tdleft>L2 address</th>';
-               echo '<th class=tdcenter colspan=2>Remote object and port</th></tr>';
+               echo '<th class=tdcenter colspan=2>Remote object and port</th>';
+               echo '<th class=tdleft>Cable ID</th></tr>';
                foreach ($info['ports'] as $port)
                {
                        echo '<tr';
@@ -1015,6 +1016,7 @@ function renderRackObject ($object_id)
                                $remote_object = spotEntity ('object', $port['remote_object_id']);
                                echo "<td class=tdleft><a href='".makeHref(array('page'=>'object', 'object_id'=>$port['remote_object_id'], 'hl_port_id'=>$port['remote_id']))."'>${remote_object['dname']}</a></td>";
                                echo "<td class=tdleft>${port['remote_name']}</td>";
+                               echo "<td class='tdleft rsvtext'>${port['cableid']}</td>";
                        }
                        elseif (strlen ($port['reservation_comment']))
                        {
@@ -1304,7 +1306,7 @@ function renderPortsForObject ($object_id)
        
        echo "<table cellspacing=0 cellpadding='5' align='center' class='widetable'>\n";
        echo "<tr><th>&nbsp;</th><th class=tdleft>Local name</th><th class=tdleft>Visible label</th><th class=tdleft>Interface</th><th class=tdleft>L2 address</th>";
-       echo "<th class=tdcenter colspan=2>Remote object and port</th><th class=tdcenter>(Un)link or (un)reserve</th><th>&nbsp;</th></tr>\n";
+       echo "<th class=tdcenter colspan=2>Cable, Remote object and port</th><th class=tdcenter>(Un)link or (un)reserve</th><th>&nbsp;</th></tr>\n";
        if (getConfigVar ('ADDNEW_AT_TOP') == 'yes')
                printNewItemTR ($prefs);
        foreach ($object['ports'] as $port)
@@ -1336,7 +1338,7 @@ function renderPortsForObject ($object_id)
                if ($port['remote_object_id'])
                {
                        $remote_object = spotEntity ('object', $port['remote_object_id']);
-                       echo "<td><a href='".makeHref(array('page'=>'object', 'object_id'=>$port['remote_object_id']))."'>${remote_object['dname']}</a></td>";
+                       echo "<td>${port['cableid']}&nbsp;<a href='".makeHref(array('page'=>'object', 'object_id'=>$port['remote_object_id']))."'>${remote_object['dname']}</a></td>";
                        echo "<td>${port['remote_name']}<input type=hidden name=reservation_comment value=''></td>";
                        echo "<td class=tdcenter><a href='".
                                makeHrefProcess(array(
index 3369c21..a4dee17 100644 (file)
@@ -190,9 +190,10 @@ function linkPortForObject ()
 {
        assertUIntArg ('port_id');
        assertUIntArg ('remote_port_id');
+       assertStringArg ('cable', TRUE);
 
        // FIXME: ensure, that at least one of these ports belongs to the current object
-       $error = linkPorts ($_REQUEST['port_id'], $_REQUEST['remote_port_id']);
+       $error = linkPorts ($_REQUEST['port_id'], $_REQUEST['remote_port_id'], $_REQUEST['cable']);
        if ($error != '')
                return buildRedirectURL (__FUNCTION__, 'ERR', array ($error));
        global $sic;
index d05706d..34f8c25 100644 (file)
@@ -240,6 +240,7 @@ CREATE TABLE `LDAPCache` (
 CREATE TABLE `Link` (
   `porta` int(10) unsigned NOT NULL default '0',
   `portb` int(10) unsigned NOT NULL default '0',
+  `cable` char(64) DEFAULT NULL,
   PRIMARY KEY  (`porta`,`portb`),
   UNIQUE KEY `porta` (`porta`),
   UNIQUE KEY `portb` (`portb`),
index b8906aa..8e58b08 100644 (file)
--- a/popup.php
+++ b/popup.php
@@ -117,10 +117,12 @@ header ('Content-Type: text/html; charset=UTF-8');
                        $spare_ports = findSparePorts ($port_id, $only_racks);
 
                        printSelect ($spare_ports, array ('name' => 'ports', 'size' => getConfigVar ('MAXSELSIZE')));
-                       echo '<br><br>';
+                       echo '<br>';
+                       echo "Cable ID: <input type=text id=cable>";
+                       echo '<br>';
                        echo "<input type='submit' value='Link' onclick='".
                        "if (getElementById(\"ports\").value != \"\") {".
-                       "       opener.location=\"process.php?page=object&tab=ports&op=linkPort&object_id=${port_info['object_id']}&port_id=$port_id&remote_port_id=\"+getElementById(\"ports\").value; ".
+                       "       opener.location=\"process.php?page=object&tab=ports&op=linkPort&object_id=${port_info['object_id']}&port_id=$port_id&remote_port_id=\"+getElementById(\"ports\").value+\"&cable=\"+getElementById(\"cable\").value; ".
                        "       window.close();}'>";
                        echo '</form></div>';
                        break;
index f4b0e8c..2ab5597 100644 (file)
@@ -799,6 +799,7 @@ CREATE TABLE `VLANIPv6` (
 ";
                        $query[] = "ALTER TABLE `TagStorage` CHANGE COLUMN `entity_realm` `entity_realm` ENUM('file','ipv4net','ipv4vs','ipv4rspool','object','rack','user','ipv6net') NOT NULL DEFAULT 'object' FIRST";
                        $query[] = "ALTER TABLE `FileLink` CHANGE COLUMN `entity_type` `entity_type` ENUM('ipv4net','ipv4rspool','ipv4vs','object','rack','user','ipv6net') NOT NULL DEFAULT 'object' AFTER `file_id`";
+                       $query[] = 'ALTER TABLE Link ADD COLUMN cable char(64) NULL AFTER portb';
                        $query[] = "UPDATE Config SET varvalue = '0.19.0' WHERE varname = 'DB_VERSION'";
                        break;
                default: