improved ipam

This commit is contained in:
2025-08-21 14:34:42 +02:00
parent 50d9769e94
commit c8fe1ca78c
3 changed files with 243 additions and 171 deletions

View File

@@ -33,10 +33,18 @@ class IpNetworkModel {
$sqlConditions[] = " (CONCAT(INET_NTOA(network_address), '/', cidr) LIKE '%{$searchTerm}%' OR `name` LIKE '%{$searchTerm}%' OR `description` LIKE '%{$searchTerm}%') ";
}
if (isset($filters['name'])) $sqlConditions[] = Helper::generateFilterCondition($filters['name'], 'name');
if (isset($filters['description'])) $sqlConditions[] = Helper::generateFilterCondition($filters['description'], 'description');
if (isset($filters['location'])) $sqlConditions[] = Helper::generateFilterCondition($filters['location'], 'location');
if (isset($filters['status'])) $sqlConditions[] = Helper::generateFilterCondition($filters['status'], 'status');
if (!empty($filters['name'])) $sqlConditions[] = Helper::generateFilterCondition($filters['name'], 'name');
if (!empty($filters['description'])) $sqlConditions[] = Helper::generateFilterCondition($filters['description'], 'description');
if (!empty($filters['location'])) $sqlConditions[] = Helper::generateFilterCondition($filters['location'], 'location');
if (!empty($filters['status'])) $sqlConditions[] = Helper::generateFilterCondition($filters['status'], 'status');
if (isset($filters['children']) && is_array($filters['children'])) {
if (isset($filters['children']['from'])) {
$sqlConditions[] = " (SELECT COUNT(*) FROM `IpNetwork` WHERE `parent_network_id` = main.id) >= " . intval($filters['children']['from']);
}
if (isset($filters['children']['to'])) {
$sqlConditions[] = " (SELECT COUNT(*) FROM `IpNetwork` WHERE `parent_network_id` = main.id) <= " . intval($filters['children']['to']);
}
}
if (empty($filters['parent_network_id'])) {
$sqlConditions[] = " `parent_network_id` IS NULL ";
@@ -44,6 +52,12 @@ class IpNetworkModel {
$sqlConditions[] = " `parent_network_id` = " . intval($filters['parent_network_id']) . " ";
}
foreach ($sqlConditions as $key => $condition) {
if (strpos($condition, ' AND ') === 0 || strpos($condition, 'AND ') === 0) {
$sqlConditions[$key] = substr($condition, 4);
}
}
return empty($sqlConditions) ? "" : " WHERE " . implode(" AND ", $sqlConditions);
}
@@ -70,7 +84,6 @@ class IpNetworkModel {
" . $orderClause . "
" . $limitClause;
$result = $db->query($sql);
$rows = [];
while ($row = $result->fetch_assoc()) {
@@ -101,11 +114,12 @@ class IpNetworkModel {
public static function countIpNetworks($filters): int {
$db = FronkDB::singleton()->link;
$sql = "SELECT COUNT(*) as `total_rows` FROM `IpNetwork`" . self::getSqlFilter($filters);
$sql = "SELECT COUNT(*) as `total_rows` FROM `IpNetwork` main" . self::getSqlFilter($filters);
$result = $db->query($sql);
return (int)$result->fetch_assoc()['total_rows'];
}
public static function findSuggestions(string $query, int $limit = 10): array {
$db = FronkDB::singleton()->link;
$query = $db->real_escape_string($query);