r3288 formatVLANName(): new function
[racktables] / popup.php
CommitLineData
38ee0db8 1<?php
0cc24e9a
DY
2ob_start();
3try {
4
f77323f1 5 require 'inc/interface.php';
38ee0db8 6 require 'inc/init.php';
cd3775e9
DO
7
8// Return a list of rack IDs, which are P or less positions
9// far from the given rack in its row.
10function getProximateRacks ($rack_id, $proximity = 0)
11{
12 $rack = spotEntity ('rack', $rack_id);
13 $rackList = listCells ('rack', $rack['row_id']);
14 doubleLink ($rackList);
15 $ret = array ($rack_id);
16 $todo = $proximity;
17 $cur_item = $rackList[$rack_id];
18 while ($todo and array_key_exists ('prev_key', $cur_item))
19 {
20 $cur_item = $rackList[$cur_item['prev_key']];
21 $ret[] = $cur_item['id'];
22 $todo--;
23 }
24 $todo = $proximity;
25 $cur_item = $rackList[$rack_id];
26 while ($todo and array_key_exists ('next_key', $cur_item))
27 {
28 $cur_item = $rackList[$cur_item['next_key']];
29 $ret[] = $cur_item['id'];
30 $todo--;
31 }
32 return $ret;
33}
34
35function findSparePorts ($port_id, $only_racks = array())
36{
026a79ee 37 $query = "SELECT id, object_id, name FROM Port WHERE " .
cd3775e9
DO
38 "id <> ${port_id} " .
39 "AND type IN (SELECT type2 FROM PortCompat WHERE type1 = (SELECT type FROM Port WHERE id = ${port_id})) " .
40 "AND reservation_comment IS NULL " .
41 "AND id NOT IN (SELECT porta FROM Link) " .
42 "AND id NOT IN (SELECT portb FROM Link) ";
43 if (count ($only_racks))
44 $query .= 'AND object_id IN (SELECT DISTINCT object_id FROM RackSpace WHERE rack_id IN (' .
45 implode (', ', $only_racks) . '))';
8a5a4555 46 $result = useSelectBlade ($query);
026a79ee
DO
47 // avoid nested queries
48 $rows = $result->fetchAll (PDO::FETCH_ASSOC);
49 unset ($result);
cd3775e9 50 $ret = array();
026a79ee 51 foreach (array_keys ($rows) as $rkey)
cd3775e9 52 {
026a79ee
DO
53 $object = spotEntity ('object', $rows[$rkey]['object_id']);
54 $ret[$rows[$rkey]['id']] = $object['dname'] . ' ' . $rows[$rkey]['name'];
55 unset ($rows[$rkey]);
cd3775e9
DO
56 }
57 return $ret;
58}
59
38ee0db8 60?>
39106006
DO
61<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
62<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" style="height: 100%;">
63<head>
64 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
b325120a 65<?php
4dc8e857 66 echo "<title>RackTables pop-up</title>\n";
39106006
DO
67 echo "<link rel=stylesheet type='text/css' href=pi.css />\n";
68 echo "<link rel=icon href='" . getFaviconURL() . "' type='image/x-icon' />";
69 echo '</head><body style="height: 100%;">';
0cc24e9a 70 assertStringArg ('helper');
39106006
DO
71 switch ($_REQUEST['helper'])
72 {
73 case 'portlist':
026a79ee
DO
74 $pageno = 'depot';
75 $tabno = 'default';
4dc8e857
DO
76 fixContext();
77 if (!permitted())
4dc8e857 78 renderAccessDenied();
0cc24e9a 79 assertUIntArg ('port');
0cc24e9a 80 assertStringArg ('in_rack');
cd3775e9 81 $localchoice = $_REQUEST['in_rack'] == 'y';
026a79ee 82 $port_id = $_REQUEST['port'];
cd3775e9 83 echo '<div style="background-color: #f0f0f0; border: 1px solid #3c78b5; padding: 10px; height: 100%; text-align: center; margin: 5px;"><h2>';
026a79ee
DO
84 echo $localchoice ?
85 ('Nearest spare ports (<a href="popup.php?helper=portlist&port=' . $port_id . '&in_rack=n">show all</a>)') :
86 ('All spare ports (<a href="popup.php?helper=portlist&port=' . $port_id . '&in_rack=y">show nearest</a>)');
cd3775e9 87 echo '</h2><form action="javascript:;">';
cd3775e9 88 $only_racks = array();
026a79ee
DO
89 $port_info = getPortInfo ($port_id);
90 if ($_REQUEST['in_rack'] == 'y' and $port_info['object_id'])
cd3775e9 91 {
026a79ee
DO
92 $object = spotEntity ('object', $port_info['object_id']);
93 if ($object['rack_id'])
94 $only_racks = getProximateRacks ($object['rack_id'], getConfigVar ('PROXIMITY_RANGE'));
cd3775e9
DO
95 }
96 $spare_ports = findSparePorts ($port_id, $only_racks);
97 printSelect ($spare_ports, array ('name' => 'ports', 'id' => 'ports', 'size' => getConfigVar ('MAXSELSIZE')));
98 echo '<br><br>';
99 echo "<input type='submit' value='Link' onclick='".
39106006 100 "if (getElementById(\"ports\").value != \"\") {".
026a79ee 101 " 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; ".
39106006
DO
102 " window.close();}'>";
103 echo '</form></div>';
104 break;
105 case 'inet4list':
4dc8e857
DO
106 $pageno = 'ipv4space';
107 $tabno = 'default';
108 fixContext();
109 if (!permitted())
4dc8e857 110 renderAccessDenied();
39106006 111 echo '<div style="background-color: #f0f0f0; border: 1px solid #3c78b5; padding: 10px; height: 100%; text-align: center; margin: 5px;">';
e8dd0422 112 echo '<h2>Choose a port:</h2><br><br>';
39106006
DO
113 echo '<form action="javascript:;">';
114 echo '<input type=hidden id=ip>';
115 echo '<select size=' . getConfigVar ('MAXSELSIZE') . ' id=addresses>';
23cdc7e9
DO
116 $addresses = getAllIPv4Allocations();
117 usort ($addresses, 'sortObjectAddressesAndNames');
118 foreach ($addresses as $address)
119 echo "<option value='${address['ip']}' onclick='getElementById(\"ip\").value=\"${address['ip']}\";'>" .
120 "${address['object_name']} ${address['name']} ${address['ip']}</option>\n";
39106006
DO
121 echo '</select><br><br>';
122 echo "<input type=submit value='Proceed' onclick='".
123 "if (getElementById(\"ip\")!=\"\") {".
124 " opener.document.getElementById(\"remoteip\").value=getElementById(\"ip\").value;".
125 " window.close();}'>";
126 echo '</form></div>';
127 break;
128 default:
0cc24e9a 129 throw new RuntimeException ('Invalid parameter or internal error');
39106006 130 }
e673ee24 131?>
e673ee24
DO
132</body>
133</html>
0cc24e9a
DY
134<?php
135ob_end_flush();
136}
137catch (Exception $e)
138{
139 ob_end_clean();
140 printException($e);
141}
142?>