fix: template for MikrotikController

https://github.com/rekryt/iplist/issues/89
https://github.com/rekryt/iplist/issues/88
This commit is contained in:
Rekryt
2025-12-26 13:35:41 +03:00
parent 1f001233ad
commit 50638b7982

View File

@@ -21,6 +21,7 @@ class MikrotikController extends AbstractIPListController {
} }
$response = []; $response = [];
$lists = [];
foreach ($this->getGroups() as $groupName => $groupSites) { foreach ($this->getGroups() as $groupName => $groupSites) {
if (count($sites)) { if (count($sites)) {
$groupSites = array_filter($groupSites, fn(Site $siteEntity) => in_array($siteEntity->name, $sites)); $groupSites = array_filter($groupSites, fn(Site $siteEntity) => in_array($siteEntity->name, $sites));
@@ -29,6 +30,7 @@ class MikrotikController extends AbstractIPListController {
continue; continue;
} }
$listName = $template;
foreach ( foreach (
[ [
'group' => $groupName, 'group' => $groupName,
@@ -36,16 +38,9 @@ class MikrotikController extends AbstractIPListController {
] ]
as $key => $value as $key => $value
) { ) {
$template = str_replace('{' . $key . '}', $value, $template); $listName = str_replace('{' . $key . '}', $value, $listName);
} }
$listName = $template;
$response = array_merge($response, [
'/ip firewall address-list remove [find list="' . $listName . '"];',
':delay 5s',
'',
'/ip firewall address-list',
]);
$items = []; $items = [];
$entries = []; $entries = [];
foreach ($groupSites as $siteName => $siteEntity) { foreach ($groupSites as $siteName => $siteEntity) {
@@ -62,6 +57,20 @@ class MikrotikController extends AbstractIPListController {
$items = SiteFactory::normalizeArray($items, in_array($data, ['ip4', 'ip6', 'cidr4', 'cidr6'])); $items = SiteFactory::normalizeArray($items, in_array($data, ['ip4', 'ip6', 'cidr4', 'cidr6']));
$items[count($items) - 1] = $items[count($items) - 1] . ';'; $items[count($items) - 1] = $items[count($items) - 1] . ';';
if (!isset($lists[$listName])) {
$lists[$listName] = [];
}
$lists[$listName] = array_merge($lists[$listName], $items);
}
foreach ($lists as $listName => $items) {
$response = array_merge($response, [
'/ip firewall address-list remove [find list="' . $listName . '"];',
':delay 5s',
'',
'/ip firewall address-list',
]);
$response = array_merge($response, $items, ['', '']); $response = array_merge($response, $items, ['', '']);
} }