diff --git a/modules/itop-config-mgmt-1.0.0/en.dict.itop-config-mgmt.php b/modules/itop-config-mgmt-1.0.0/en.dict.itop-config-mgmt.php index e8b0a2f40..844a36f25 100644 --- a/modules/itop-config-mgmt-1.0.0/en.dict.itop-config-mgmt.php +++ b/modules/itop-config-mgmt-1.0.0/en.dict.itop-config-mgmt.php @@ -766,6 +766,19 @@ Dict::Add('EN US', 'English', 'English', array( )); + +// +// Class extensions +// + +Dict::Add('EN US', 'English', 'English', array( +'Class:Subnet/Tab:IPUsage' => 'IP Usage', +'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces having an IP in the range: %1$s to %2$s', +'Class:Subnet/Tab:FreeIPs' => 'Free IPs', +'Class:Subnet/Tab:FreeIPs-count' => 'Free IPs: %1$s', +'Class:Subnet/Tab:FreeIPs-explain' => 'Here is an extract of 10 free IP addresses', +)); + // // Application Menu // diff --git a/modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php b/modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php index cfbea0b14..ec870444e 100644 --- a/modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php +++ b/modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php @@ -382,11 +382,58 @@ class Subnet extends cmdbAbstractObject MetaModel::Init_SetZListItems('standard_search', array('name', 'description', 'ip', 'ip_mask')); MetaModel::Init_SetZListItems('list', array('description', 'ip', 'ip_mask')); } + public function ComputeValues() { $sName = $this->Get('ip').'/'.$this->Get('ip_mask'); $this->Set('name', $sName); } + + function DisplayBareRelations(WebPage $oPage) + { + parent::DisplayBareRelations($oPage); + + $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:IPUsage')); + + $bit_ip = ip2long($this->Get('ip')); + $bit_mask = ip2long($this->Get('ip_mask')); + + $iIPMin = $bit_ip & $bit_mask; + $iIPMax = ($bit_ip | (~$bit_mask)) - 1; + + $sIPMin = long2ip($iIPMin); + $sIPMax = long2ip($iIPMax); + + $oPage->p(Dict::Format('Class:Subnet/Tab:IPUsage-explain', $sIPMin, $sIPMax)); + + $oIfSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT NetworkInterface AS if WHERE INET_ATON(if.ip_address) >= INET_ATON('$sIPMin') AND INET_ATON(if.ip_address) <= INET_ATON('$sIPMax')")); + self::DisplaySet($oPage, $oIfSet); + + $iCountUsed = $oIfSet->Count(); + $iCountRange = $iIPMax - $iIPMin; + $iFreeCount = $iCountRange - $iCountUsed; + + $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:FreeIPs')); + $oPage->p(Dict::Format('Class:Subnet/Tab:FreeIPs-count', $iFreeCount)); + $oPage->p(Dict::S('Class:Subnet/Tab:FreeIPs-explain')); + + $aUsedIPs = $oIfSet->GetColumnAsArray('ip_address', false); + $iAnIP = $iIPMin; + $iFound = 0; + while (($iFound < min($iFreeCount, 10)) && ($iAnIP <= $iIPMax)) + { + $sAnIP = long2ip($iAnIP); + if (!in_array($sAnIP, $aUsedIPs)) + { + $iFound++; + $oPage->p($sAnIP); + } + else + { + } + $iAnIP++; + } + } } class Patch extends cmdbAbstractObject {