/**
* Get the location of an RackTables object
*
* @param array $aObject
* @return string
*/
function getLocation($aObject) {
$sRowName = 'unknown';
$sRackName = 'unknown';
# Location parsing for other realms than objects
if ($aObject['realm'] == 'rack') {
$sLocation = $aObject["location_name"] . ': '. $aObject["row_name"];
return $sLocation;
}
if ($aObject['realm'] == 'row') {
$sLocation = $aObject["location_name"];
return $sLocation;
}
if ($aObject['realm'] == 'location') {
if ($aObject["parent_name"] == null)
return '';
$sLocation = $aObject["parent_name"];
return $sLocation;
}
# Try to read the mount informations of the object
if ( function_exists('getMountInfo') ) {
$mountInfo = getMountInfo (array($aObject['id']));
if ( isset( $mountInfo[$aObject['id']][0]["rack_name"] ) )
$sRackName = $mountInfo[$aObject['id']][0]["rack_name"];
$sRowName = 'unknown';
if ( isset( $mountInfo[$aObject['id']][0]["row_name"] ) )
$sRowName = $mountInfo[$aObject['id']][0]["row_name"];
}
else {
if ( isset( $aObject["Row_name"] ) )
$sRowName = $aObject["Row_name"];
if ( isset( $aObject["Rack_name"] ) )
$sRackName = $aObject["Rack_name"];
}
# No mount information available - check for a container
if ( ( $sRowName == 'unknown' ) && ( $sRackName == 'unknown' ) && ( isset( $aObject['container_id'] ) ) ) {
$sContainerName = ''.$aObject['container_name'].'';
$attributes = getAttrValues ($aObject['id']);
if ( isset($attributes['28']['a_value']) && $attributes['28']['a_value'] != '' )
$sLocation = $sContainerName.': Slot '.$attributes['28']['a_value'];
else
$sLocation = $sContainerName;
# Get mount info of the container
$sContainerRowName = 'unknown';
$sContainerRackName = 'unknown';
if ( function_exists('getMountInfo') ) {
$containerMountInfo = getMountInfo (array($aObject['container_id']));
if ( isset( $containerMountInfo[$aObject['container_id']][0]["rack_name"] ) )
$sContainerRackName = $containerMountInfo[$aObject['container_id']][0]["rack_name"];
if ( isset( $containerMountInfo[$aObject['container_id']][0]["row_name"] ) )
$sContainerRowName = $containerMountInfo[$aObject['container_id']][0]["row_name"];
$sLocation .= '
' . $sContainerRowName.': '.$sContainerRackName;
}
}
else {
$sLocation = $sRowName.': '.$sRackName;
}
return $sLocation;
}
/**
* Create hyperlinks in text
*
* @param string $sText
* @return string
*/
function makeLinksInText($sText)
{
# prepend http:// to www.xyz.com strings
$sText = preg_replace("/([^\/](www\.))(([^(\s|,)<]{4,68})[^(\s|,)<]*)/", ' http://$2$3', $sText);
# add html hyperlink to http:// and https:// strings
$sText = preg_replace("/(http:\/\/|https:\/\/)(([^(\s|,)<]{4,68})[^(\s|,)<]*)/", '$2$4', $sText);
return $sText;
}
# Need for backward compatibility - Define function from Racktables version 0.20.x
if ( !function_exists('ip6_format') )
{
function ip6_format ($ip_bin) {
// maybe this is IPv6-to-IPv4 address?
if (substr ($ip_bin, 0, 12) == "\0\0\0\0\0\0\0\0\0\0\xff\xff")
return '::ffff:' . implode ('.', unpack ('C*', substr ($ip_bin, 12, 4)));
$result = array();
$hole_index = NULL;
$max_hole_index = NULL;
$hole_length = 0;
$max_hole_length = 0;
for ($i = 0; $i < 8; $i++) {
$unpacked = unpack ('n', substr ($ip_bin, $i * 2, 2));
$value = array_shift ($unpacked);
$result[] = dechex ($value & 0xffff);
if ($value != 0) {
unset ($hole_index);
$hole_length = 0;
}
else {
if (! isset ($hole_index))
$hole_index = $i;
if (++$hole_length >= $max_hole_length) {
$max_hole_index = $hole_index;
$max_hole_length = $hole_length;
}
}
}
if (isset ($max_hole_index)) {
array_splice ($result, $max_hole_index, $max_hole_length, array (''));
if ($max_hole_index == 0 && $max_hole_length == 8)
return '::';
elseif ($max_hole_index == 0)
return ':' . implode (':', $result);
elseif ($max_hole_index + $max_hole_length == 8)
return implode (':', $result) . ':';
}
return implode (':', $result);
}
}
/**
* Get the containers of an RackTables object
*
* @param integer $object_id
* @return array
*/
function getObjectContainerList ($object_id) {
$ret = array();
$result = usePreparedSelectBlade
(
'SELECT el.parent_entity_id AS container_id, ro.name as container_name '.
'FROM EntityLink AS el '.
'INNER JOIN RackObject AS ro ON ro.id = el.parent_entity_id '.
'WHERE el.child_entity_type = "object" AND el.parent_entity_type = "object" AND el.child_entity_id = ?',
array ($object_id)
);
while ($row = $result->fetch (PDO::FETCH_ASSOC))
$ret[$row['container_id']] = array ('container_name' => $row['container_name']);
return $ret;
}
/**
* Get list of child objects of an RackTables object
*
* @param integer $object_id
* @return array
*/
function getObjectChildObjectList ($object_id) {
$ret = array();
$result = usePreparedSelectBlade
(
'SELECT el.child_entity_id AS object_id, ro.name as object_name '.
'FROM EntityLink AS el '.
'INNER JOIN RackObject AS ro ON ro.id = el.child_entity_id '.
'WHERE el.child_entity_type = "object" AND el.parent_entity_type = "object" AND el.parent_entity_id = ?',
array ($object_id)
);
while ($row = $result->fetch (PDO::FETCH_ASSOC))
$ret[$row['object_id']] = array ('object_name' => $row['object_name']);
return $ret;
}