Add Access Control Export

This commit is contained in:
FusionPBX 2025-01-09 00:06:52 -07:00 committed by GitHub
parent 106fc33459
commit c388194721
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 304 additions and 37 deletions

View File

@ -38,6 +38,9 @@
$language = new text;
$text = $language->get();
//create the database connection
$database = database::new();
//action add or update
if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) {
$action = "update";
@ -93,20 +96,17 @@
switch ($_POST['action']) {
case 'copy':
if (permission_exists('access_control_add')) {
$obj = new database;
$obj->copy($array);
$database->copy($array);
}
break;
case 'delete':
if (permission_exists('access_control_delete')) {
$obj = new database;
$obj->delete($array);
$database->delete($array);
}
break;
case 'toggle':
if (permission_exists('access_control_update')) {
$obj = new database;
$obj->toggle($array);
$database->toggle($array);
}
break;
}
@ -229,7 +229,6 @@
//save the data
if (is_array($array)) {
$database = new database;
$database->app_name = 'access controls';
$database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
$database->save($array);
@ -266,7 +265,7 @@
$sql = "select * from v_access_controls ";
$sql .= "where access_control_uuid = :access_control_uuid ";
$parameters['access_control_uuid'] = $access_control_uuid;
$database = new database;
$row = $database->select($sql, $parameters, 'row');
if (!empty($row) && count($row) > 0) {
$access_control_name = $row["access_control_name"];
@ -282,7 +281,6 @@
$sql .= "where access_control_uuid = :access_control_uuid ";
$sql .= "order by node_cidr asc";
$parameters['access_control_uuid'] = $access_control_uuid;
$database = new database;
$access_control_nodes = $database->select($sql, $parameters, 'all');
unset ($sql, $parameters);
}
@ -326,6 +324,9 @@
if (permission_exists('access_control_node_add')) {
echo button::create(['type'=>'button','label'=>$text['button-import'],'icon'=>$_SESSION['theme']['button_icon_import'],'style'=>'margin-right: 3px;','link'=>'access_control_import.php?id='.escape($access_control_uuid)]);
}
if (permission_exists('access_control_node_view')) {
echo button::create(['type'=>'button','label'=>$text['button-export'],'icon'=>$_SESSION['theme']['button_icon_export'],'style'=>'margin-right: 3px;','link'=>'access_control_export.php?id='.escape($access_control_uuid)]);
}
if (permission_exists('access_control_node_add')) {
echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
}

View File

@ -0,0 +1,186 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes files
require_once dirname(__DIR__, 2) . "/resources/require.php";
require_once "resources/check_auth.php";
require_once "resources/paging.php";
//check permissions
if (permission_exists('access_control_node_view')) {
//access granted
}
else {
echo "access denied";
exit;
}
//initialize the database object
$database = new database;
//add multi-lingual support
$language = new text;
$text = $language->get();
//define available columns
$available_columns[] = 'access_control_node_uuid';
$available_columns[] = 'access_control_uuid';
$available_columns[] = 'node_cidr';
$available_columns[] = 'node_description';
$available_columns[] = 'insert_date';
$available_columns[] = 'insert_user';
$available_columns[] = 'update_date';
$available_columns[] = 'update_user';
//action add or update
if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) {
$access_control_uuid = $_REQUEST["id"];
}
//define the functions
function array2csv(array &$array) {
if (count($array) == 0) {
return null;
}
ob_start();
$df = fopen("php://output", 'w');
fputcsv($df, array_keys(reset($array)));
foreach ($array as $row) {
fputcsv($df, $row);
}
fclose($df);
return ob_get_clean();
}
//send download headers
function download_send_headers($filename) {
// disable caching
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
}
//get the extensions from the database and send them as output
if (!empty($_REQUEST["column_group"]) && is_array($_REQUEST["column_group"]) && @sizeof($_REQUEST["column_group"]) != 0) {
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: access_control_export.php');
exit;
}
//validate submitted columns
foreach ($_REQUEST["column_group"] as $column_name) {
if (in_array($column_name, $available_columns)) {
$selected_columns[] = $column_name;
}
}
if (!empty($access_control_uuid) && is_uuid($access_control_uuid) && is_array($selected_columns) && @sizeof($selected_columns) != 0) {
//get the child data
$sql = "select ".implode(', ', $selected_columns)." from v_access_control_nodes ";
$sql .= "where access_control_uuid = :access_control_uuid ";
$sql .= "order by node_cidr asc";
$parameters['access_control_uuid'] = $access_control_uuid;
$access_control_nodes = $database->select($sql, $parameters, 'all');
unset($sql, $parameters, $selected_columns);
//send the download headers
download_send_headers("access_control_export_".date("Y-m-d").".csv");
//output the data
echo array2csv($access_control_nodes);
exit;
}
}
//create token
$object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//include the header
$document['title'] = $text['title-access_control_export'];
require_once "resources/header.php";
//show the content
echo "<form method='post' name='frm' id='frm'>\n";
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['header-access_control_export']."</b></div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>'access_control_edit.php?id='.$access_control_uuid]);
echo button::create(['type'=>'submit','label'=>$text['button-export'],'icon'=>$_SESSION['theme']['button_icon_export'],'id'=>'btn_save','style'=>'margin-left: 15px;']);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
echo $text['description-access_control_export'];
echo "<br /><br />\n";
echo "<div class='card'>\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle();' ".(empty($available_columns) ? "style='visibility: hidden;'" : null).">\n";
echo " </th>\n";
echo " <th>".$text['label-column_name']."</th>\n";
echo "</tr>\n";
if (!empty($available_columns) && is_array($available_columns) && @sizeof($available_columns) != 0) {
$x = 0;
foreach ($available_columns as $column_name) {
$list_row_onclick = "if (!this.checked) { document.getElementById('checkbox_all').checked = false; }";
echo "<tr class='list-row'>\n";
echo " <td class='checkbox'>\n";
echo " <input type='checkbox' name='column_group[]' id='checkbox_".$x."' value=\"".$column_name."\" onclick=\"".$list_row_onclick."\">\n";
echo " </td>\n";
echo " <td onclick=\"document.getElementById('checkbox_".$x."').checked = document.getElementById('checkbox_".$x."').checked ? false : true; ".$list_row_onclick."\">".$column_name."</td>";
echo "</tr>";
$x++;
}
}
echo "</table>\n";
echo "</div>\n";
echo "<br />\n";
echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
echo "</form>\n";
//include the footer
require_once "resources/footer.php";
?>

View File

@ -55,7 +55,6 @@
$y++;
$apps[$x]['permissions'][$y]['name'] = "access_control_node_delete";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
//cache details
$apps[$x]['cache']['key'] = "configuration.acl.conf";
@ -73,7 +72,7 @@
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_name";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Enter the name.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "access_control_default";

View File

@ -108,32 +108,59 @@ $text['title-access_control']['zh-cn'] = "访问控制";
$text['title-access_control']['ja-jp'] = "アクセス制御";
$text['title-access_control']['ko-kr'] = "액세스 제어";
$text['title_description-access_controls']['en-us'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['en-gb'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['ar-eg'] = "قائمة التحكم بالوصول يمكن السماح أو الرفض نطاقات العناوين.";
$text['title_description-access_controls']['de-at'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['de-ch'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['de-de'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['el-gr'] = "Access control list can allow or deny ranges of IP addresses";
$text['title_description-access_controls']['es-cl'] = "Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['title_description-access_controls']['es-mx'] = "Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['title_description-access_controls']['fr-ca'] = "Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['title_description-access_controls']['fr-fr'] = "Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['title_description-access_controls']['he-il'] = " רשימת בקרת גישה יכולה לאפשר או למנוע טווחים של כתובות IP.";
$text['title_description-access_controls']['it-it'] = "Le liste per il controllo di accesso permettono o negano l'accesso a range di IP.";
$text['title_description-access_controls']['ka-ge'] = "წვდომის კონტროლის სიას IP მისამართების შუალედების დაშვება ან აკრძალვა შეუძლია";
$text['title_description-access_controls']['nl-nl'] = "Toegang Controle lijst kan IP adres reeks toestaan of verbieden.";
$text['title_description-access_controls']['pl-pl'] = "Lista kontroli dostępu może umożliwić lub zablokować zakresy adresów IP.";
$text['title_description-access_controls']['pt-br'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['title_description-access_controls']['pt-pt'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['title_description-access_controls']['ro-ro'] = "Lista de control al accesului poate permite sau refuza intervale de adrese IP.";
$text['title_description-access_controls']['ru-ru'] = "Контроль доступа может разрешить или запретить диапазоны IP адресов.";
$text['title_description-access_controls']['sv-se'] = "Åtkomstkontrollista kan tillåta eller neka intervall av IP-adresser.";
$text['title_description-access_controls']['uk-ua'] = "Список контролю доступу може дозволити або заборонити діапазони IP-адрес.";
$text['title_description-access_controls']['tr-tr'] = "Erişim kontrol listesi IP adres aralıklarına izin verebilir veya reddedebilir.";
$text['title_description-access_controls']['zh-cn'] = "访问控制列表可以允许或拒绝 IP 地址范围。";
$text['title_description-access_controls']['ja-jp'] = "アクセス コントロール リストでは、IP アドレスの範囲を許可または拒否できます。";
$text['title_description-access_controls']['ko-kr'] = "액세스 제어 목록은 IP 주소 범위를 허용하거나 거부할 수 있습니다.";
$text['title-access_control_export']['en-us'] = "Access Control Export";
$text['title-access_control_export']['en-gb'] = "Access Control Export";
$text['title-access_control_export']['ar-eg'] = "";
$text['title-access_control_export']['de-at'] = "";
$text['title-access_control_export']['de-ch'] = "";
$text['title-access_control_export']['de-de'] = "";
$text['title-access_control_export']['ek-gr'] = "";
$text['title-access_control_export']['es-cl'] = "";
$text['title-access_control_export']['es-mx'] = "";
$text['title-access_control_export']['fr-ca'] = "";
$text['title-access_control_export']['fr-fr'] = "";
$text['title-access_control_export']['he-il'] = "";
$text['title-access_control_export']['it-it'] = "";
$text['title-access_control_export']['ka-ge'] = "";
$text['title-access_control_export']['nl-nl'] = "";
$text['title-access_control_export']['pl-pl'] = "";
$text['title-access_control_export']['pt-br'] = "";
$text['title-access_control_export']['pt-pt'] = "";
$text['title-access_control_export']['ro-ro'] = "";
$text['title-access_control_export']['ru-ru'] = "";
$text['title-access_control_export']['sv-se'] = "";
$text['title-access_control_export']['uk-ua'] = "";
$text['title-access_control_export']['tr-tr'] = "";
$text['title-access_control_export']['zh-cn'] = "";
$text['title-access_control_export']['ja-jp'] = "";
$text['title-access_control_export']['ko-kr'] = "";
$text['header-access_control_export']['en-us'] = "Access Control Export";
$text['header-access_control_export']['en-gb'] = "Access Control Export";
$text['header-access_control_export']['ar-eg'] = "";
$text['header-access_control_export']['de-at'] = "";
$text['header-access_control_export']['de-ch'] = "";
$text['header-access_control_export']['de-de'] = "";
$text['header-access_control_export']['ek-gr'] = "";
$text['header-access_control_export']['es-cl'] = "";
$text['header-access_control_export']['es-mx'] = "";
$text['header-access_control_export']['fr-ca'] = "";
$text['header-access_control_export']['fr-fr'] = "";
$text['header-access_control_export']['he-il'] = "";
$text['header-access_control_export']['it-it'] = "";
$text['header-access_control_export']['ka-ge'] = "";
$text['header-access_control_export']['nl-nl'] = "";
$text['header-access_control_export']['pl-pl'] = "";
$text['header-access_control_export']['pt-br'] = "";
$text['header-access_control_export']['pt-pt'] = "";
$text['header-access_control_export']['ro-ro'] = "";
$text['header-access_control_export']['ru-ru'] = "";
$text['header-access_control_export']['sv-se'] = "";
$text['header-access_control_export']['uk-ua'] = "";
$text['header-access_control_export']['tr-tr'] = "";
$text['header-access_control_export']['zh-cn'] = "";
$text['header-access_control_export']['ja-jp'] = "";
$text['header-access_control_export']['ko-kr'] = "";
$text['label-node_type']['en-us'] = "Type";
$text['label-node_type']['en-gb'] = "Type";
@ -405,6 +432,33 @@ $text['label-access_control_description']['zh-cn'] = "描述";
$text['label-access_control_description']['ja-jp'] = "説明";
$text['label-access_control_description']['ko-kr'] = "설명";
$text['title_description-access_controls']['en-us'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['en-gb'] = "Access control list can allow or deny ranges of IP addresses.";
$text['title_description-access_controls']['ar-eg'] = "قائمة التحكم بالوصول يمكن السماح أو الرفض نطاقات العناوين.";
$text['title_description-access_controls']['de-at'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['de-ch'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['de-de'] = "Die Zugriffskontrollliste kann Bereiche von IP Adressen zulassen oder ablehnen.";
$text['title_description-access_controls']['el-gr'] = "Access control list can allow or deny ranges of IP addresses";
$text['title_description-access_controls']['es-cl'] = "Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['title_description-access_controls']['es-mx'] = "Lista de control de acceso puede permitir o denegar los rangos de direcciones IP.";
$text['title_description-access_controls']['fr-ca'] = "Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['title_description-access_controls']['fr-fr'] = "Liste de contrôle d'accès peut autoriser ou refuser des plages d'adresses IP.";
$text['title_description-access_controls']['he-il'] = " רשימת בקרת גישה יכולה לאפשר או למנוע טווחים של כתובות IP.";
$text['title_description-access_controls']['it-it'] = "Le liste per il controllo di accesso permettono o negano l'accesso a range di IP.";
$text['title_description-access_controls']['ka-ge'] = "წვდომის კონტროლის სიას IP მისამართების შუალედების დაშვება ან აკრძალვა შეუძლია";
$text['title_description-access_controls']['nl-nl'] = "Toegang Controle lijst kan IP adres reeks toestaan of verbieden.";
$text['title_description-access_controls']['pl-pl'] = "Lista kontroli dostępu może umożliwić lub zablokować zakresy adresów IP.";
$text['title_description-access_controls']['pt-br'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['title_description-access_controls']['pt-pt'] = "Lista de controle de acesso pode permitir ou negar intervalos de endereços IP.";
$text['title_description-access_controls']['ro-ro'] = "Lista de control al accesului poate permite sau refuza intervale de adrese IP.";
$text['title_description-access_controls']['ru-ru'] = "Контроль доступа может разрешить или запретить диапазоны IP адресов.";
$text['title_description-access_controls']['sv-se'] = "Åtkomstkontrollista kan tillåta eller neka intervall av IP-adresser.";
$text['title_description-access_controls']['uk-ua'] = "Список контролю доступу може дозволити або заборонити діапазони IP-адрес.";
$text['title_description-access_controls']['tr-tr'] = "Erişim kontrol listesi IP adres aralıklarına izin verebilir veya reddedebilir.";
$text['title_description-access_controls']['zh-cn'] = "访问控制列表可以允许或拒绝 IP 地址范围。";
$text['title_description-access_controls']['ja-jp'] = "アクセス コントロール リストでは、IP アドレスの範囲を許可または拒否できます。";
$text['title_description-access_controls']['ko-kr'] = "액세스 제어 목록은 IP 주소 범위를 허용하거나 거부할 수 있습니다.";
$text['description-node_type']['en-us'] = "Select the type.";
$text['description-node_type']['en-gb'] = "Select the type.";
$text['description-node_type']['ar-eg'] = "حدد نوع.";
@ -594,4 +648,31 @@ $text['description-access_control_default']['zh-cn'] = "选择默认类型。";
$text['description-access_control_default']['ja-jp'] = "デフォルトのタイプを選択します。";
$text['description-access_control_default']['ko-kr'] = "기본 유형을 선택합니다.";
$text['description-access_control_export']['en-us'] = "Select the fields you wish to include in the export.";
$text['description-access_control_export']['en-gb'] = "Select the fields you wish to include in the export.";
$text['description-access_control_export']['ar-eg'] = "حدد الحقول التي ترغب في تضمينها في التصدير.";
$text['description-access_control_export']['de-at'] = "Wählen Sie die Felder aus, die Sie in den Export einbeziehen möchten.";
$text['description-access_control_export']['de-ch'] = "Wählen Sie die Felder aus, die Sie in den Export einbeziehen möchten.";
$text['description-access_control_export']['de-de'] = "Wählen Sie die Felder aus, die Sie in den Export einbeziehen möchten.";
$text['description-access_control_export']['ek-gr'] = "Επιλέξτε τα πεδία που θέλετε να συμπεριλάβετε στην εξαγωγή.";
$text['description-access_control_export']['es-cl'] = "Seleccione los campos que desea incluir en la exportación.";
$text['description-access_control_export']['es-mx'] = "Seleccione los campos que desea incluir en la exportación.";
$text['description-access_control_export']['fr-ca'] = "Sélectionnez les champs que vous souhaitez inclure dans l'exportation.";
$text['description-access_control_export']['fr-fr'] = "Sélectionnez les champs que vous souhaitez inclure dans l'exportation.";
$text['description-access_control_export']['he-il'] = "בחר את השדות שברצונך לכלול בייצוא.";
$text['description-access_control_export']['it-it'] = "Seleziona i campi che desideri includere nell'esportazione.";
$text['description-access_control_export']['ka-ge'] = "აირჩიეთ ექსპორტში ჩასასმელი ველები.";
$text['description-access_control_export']['nl-nl'] = "Selecteer de velden die u in de export wilt opnemen.";
$text['description-access_control_export']['pl-pl'] = "Wybierz pola, które chcesz uwzględnić w eksporcie.";
$text['description-access_control_export']['pt-br'] = "Selecione os campos que deseja incluir na exportação.";
$text['description-access_control_export']['pt-pt'] = "Selecione os campos que deseja incluir na exportação.";
$text['description-access_control_export']['ro-ro'] = "Selectați câmpurile pe care doriți să le includeți în export.";
$text['description-access_control_export']['ru-ru'] = "Выберите поля, которые вы хотите включить в экспорт.";
$text['description-access_control_export']['sv-se'] = "Välj de fält du vill inkludera i exporten.";
$text['description-access_control_export']['uk-ua'] = "Виберіть поля, які потрібно включити в експорт.";
$text['description-access_control_export']['tr-tr'] = "Dışa aktarmaya dahil etmek istediğiniz alanları seçin.";
$text['description-access_control_export']['zh-cn'] = "选择您希望包含在导出中的字段。";
$text['description-access_control_export']['ja-jp'] = "エクスポートに含めるフィールドを選択します。";
$text['description-access_control_export']['ko-kr'] = "내보내기에 포함할 필드를 선택합니다.";
?>