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 ;
}
?>