From 639a2625999c8f7a83a808ea980ce7014371a1f4 Mon Sep 17 00:00:00 2001 From: envoyr Date: Sun, 27 Feb 2022 20:53:24 +0100 Subject: [PATCH] implement visible callbacks for tabellisting --- lib/Froxlor/UI/Callbacks/Domain.php | 37 +++++++++++++++++++ lib/Froxlor/UI/Listing.php | 5 +++ .../customer/tablelisting.domains.php | 4 ++ .../customer/tablelisting.emails.php | 5 ++- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/Froxlor/UI/Callbacks/Domain.php b/lib/Froxlor/UI/Callbacks/Domain.php index ac3d703e..2ca9cfe3 100644 --- a/lib/Froxlor/UI/Callbacks/Domain.php +++ b/lib/Froxlor/UI/Callbacks/Domain.php @@ -3,6 +3,7 @@ namespace Froxlor\UI\Callbacks; use Froxlor\FileDir; +use Froxlor\Settings; use Froxlor\UI\Panel\UI; /** @@ -44,4 +45,40 @@ class Domain } return UI::getLng('domains.aliasdomain') . ' ' . $attributes['fields']['aliasdomain']; } + + public static function canEditDomain(array $attributes): bool + { + return (bool)$attributes['fields']['caneditdomain']; + } + + public static function canViewDomainLogs(array $attributes): bool + { + return (bool)UI::getCurrentUser()['logviewenabled']; + } + + public static function canDeleteDomain(array $attributes): bool + { + return $attributes['fields']['parentdomainid'] != '0' + && empty($attributes['fields']['domainaliasid']); + } + + public static function canEditDomainDNS(array $attributes): bool + { + return $attributes['fields']['isbinddomain'] == '1' + && UI::getCurrentUser()['dnsenabled'] == '1' + && $attributes['fields']['caneditdomain'] == '1' + && Settings::Get('system.bind_enable') == '1' + && Settings::Get('system.dnsenabled') == '1'; + } + + public function canEditDomainSSL(array $attributes): bool + { + // FIXME: https://github.com/Froxlor/Froxlor/blob/master/templates/Sparkle/customer/domains/domains_domain.tpl#L41 + return false; + } + + public function canEditDomainAlias(array $attributes): bool + { + return !empty($attributes['fields']['domainaliasid']); + } } diff --git a/lib/Froxlor/UI/Listing.php b/lib/Froxlor/UI/Listing.php index a77f2fa0..1d9ca14a 100644 --- a/lib/Froxlor/UI/Listing.php +++ b/lib/Froxlor/UI/Listing.php @@ -121,6 +121,11 @@ class Listing // Check each action for a href foreach ($actions as $key => $action) { + // Call user function if visible is an array + if (isset($action['visible']) && is_array($action['visible'])) { + $actions[$key]['visible'] = call_user_func($action['visible'], ['fields' => $item]); + } + // Set link if href is an array if (isset($action['href']) && is_array($action['href'])) { // Search for "columns" in our href array diff --git a/lib/tablelisting/customer/tablelisting.domains.php b/lib/tablelisting/customer/tablelisting.domains.php index 36466339..a341ce21 100644 --- a/lib/tablelisting/customer/tablelisting.domains.php +++ b/lib/tablelisting/customer/tablelisting.domains.php @@ -47,6 +47,7 @@ return [ 'action' => 'edit', 'id' => ':id' ], + 'visible' => [Domain::class, 'canEditDomain'] ], 'logfiles' => [ 'icon' => 'fa fa-file', @@ -55,6 +56,7 @@ return [ 'page' => 'logfiles', 'domain_id' => ':id' ], + 'visible' => [Domain::class, 'canViewDomainLogs'] ], 'domaindnseditor' => [ 'icon' => 'fa fa-globe', @@ -63,6 +65,7 @@ return [ 'page' => 'domaindnseditor', 'domain_id' => ':id' ], + 'visible' => [Domain::class, 'canEditDomainDNS'] ], 'delete' => [ 'icon' => 'fa fa-trash', @@ -73,6 +76,7 @@ return [ 'action' => 'delete', 'id' => ':id' ], + 'visible' => [Domain::class, 'canDeleteDomain'] ] ] ] diff --git a/lib/tablelisting/customer/tablelisting.emails.php b/lib/tablelisting/customer/tablelisting.emails.php index 6fb9deec..372554fb 100644 --- a/lib/tablelisting/customer/tablelisting.emails.php +++ b/lib/tablelisting/customer/tablelisting.emails.php @@ -16,6 +16,7 @@ * */ +use Froxlor\Settings; use Froxlor\UI\Callbacks\Email; use Froxlor\UI\Callbacks\Text; use Froxlor\UI\Listing; @@ -43,12 +44,12 @@ return [ 'label' => $lng['emails']['catchall'], 'field' => 'iscatchall', 'format_callback' => [Text::class, 'boolean'], - 'visible' => \Froxlor\Settings::Get('catchall.catchall_enabled') == '1' + 'visible' => Settings::Get('catchall.catchall_enabled') == '1' ], 'm.quota' => [ 'label' => $lng['emails']['quota'], 'field' => 'quota', - 'visible' => \Froxlor\Settings::Get('system.mail_quota_enabled') == '1' + 'visible' => Settings::Get('system.mail_quota_enabled') == '1' ] ], 'visible_columns' => Listing::getVisibleColumnsForListing('email_list', [