2015-04-03 18:22:29 +00:00
< ? php
/* Copyright ( C ) 2015 Daniel Preussker < f0o @ devilcode . org >
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />. */
/**
* Device - Grouping
* @ author Daniel Preussker < f0o @ devilcode . org >
* @ copyright 2015 f0o , LibreNMS
* @ license GPL
* @ package LibreNMS
* @ subpackage Devices
*/
/**
* Generate SQL from Group - Pattern
* @ param string $pattern Pattern to generate SQL for
2015-04-20 16:09:02 +00:00
* @ param string $search What to searchid for
2015-04-03 18:22:29 +00:00
* @ return string
*/
2015-04-20 16:09:02 +00:00
function GenGroupSQL ( $pattern , $search = '' ) {
2015-04-03 18:22:29 +00:00
$tmp = explode ( " " , $pattern );
$tables = array ();
foreach ( $tmp as $opt ) {
if ( strstr ( $opt , '%' ) && strstr ( $opt , '.' ) ) {
$tmpp = explode ( " . " , $opt , 2 );
$tmpp [ 0 ] = str_replace ( " % " , " " , $tmpp [ 0 ]);
$tables [] = mres ( str_replace ( " ( " , " " , $tmpp [ 0 ]));
$pattern = str_replace ( $opt , $tmpp [ 0 ] . '.' . $tmpp [ 1 ], $pattern );
}
}
$tables = array_keys ( array_flip ( $tables ));
$x = sizeof ( $tables );
$i = 0 ;
$join = " " ;
while ( $i < $x ) {
if ( isset ( $tables [ $i + 1 ]) ) {
$join .= $tables [ $i ] . " .device_id = " . $tables [ $i + 1 ] . " .device_id && " ;
}
$i ++ ;
}
2015-04-20 16:09:02 +00:00
if ( ! empty ( $search ) ) {
$search .= " && " ;
}
$sql = " SELECT DISTINCT( " . str_replace ( " ( " , " " , $tables [ 0 ]) . " .device_id) FROM " . implode ( " , " , $tables ) . " WHERE " . $search . " ( " . str_replace ( array ( " % " , " @ " , " !~ " , " ~ " ), array ( " " , " % " , " NOT LIKE " , " LIKE " ), $pattern ) . " ) " ;
2015-04-03 18:22:29 +00:00
return $sql ;
}
/**
* Get all devices of Group
* @ param int $group_id Group - ID
* @ return string
*/
function GetDevicesFromGroup ( $group_id ) {
$pattern = dbFetchCell ( " SELECT pattern FROM device_groups WHERE id = ? " , array ( $group_id ));
if ( ! empty ( $pattern ) ) {
return dbFetchRows ( GenGroupSQL ( $pattern ));
}
return false ;
}
/**
* Get all Device - Groups
* @ return array
*/
function GetDeviceGroups () {
return dbFetchRows ( " SELECT * FROM device_groups " );
}
/**
* Get all groups of Device
* @ param int $device Device - ID
* @ return array
*/
function GetGroupsFromDevice ( $device ) {
$ret = array ();
foreach ( GetDeviceGroups () as $group ) {
2015-04-20 16:09:02 +00:00
if ( dbFetchCell ( GenGroupSQL ( $group [ 'pattern' ], 'device_id=?' ) . ' LIMIT 1' , array ( $device )) == $device ){
$ret [] = $group [ 'id' ];
2015-04-03 18:22:29 +00:00
}
}
return $ret ;
}
?>