check for existing fields when setting/updating tablelisting-columns

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann
2023-02-14 11:36:11 +01:00
parent 89843d6f37
commit 4003a8d2b6
6 changed files with 37 additions and 7 deletions

View File

@@ -237,11 +237,11 @@ class Ajax
private function updateTablelisting() private function updateTablelisting()
{ {
$columns = []; $columns = [];
foreach ((Request::any('columns') ?? []) as $value) { foreach ((Request::post('columns') ?? []) as $value) {
$columns[] = $value; $columns[] = $value;
} }
if (!empty($columns)) { if (!empty($columns)) {
Listing::storeColumnListingForUser([Request::any('listing') => $columns]); $columns = Listing::storeColumnListingForUser([Request::post('listing') => $columns]);
return $this->jsonResponse($columns); return $this->jsonResponse($columns);
} }
return $this->errorResponse('At least one column must be selected', 406); return $this->errorResponse('At least one column must be selected', 406);
@@ -249,7 +249,7 @@ class Ajax
private function resetTablelisting() private function resetTablelisting()
{ {
Listing::deleteColumnListingForUser([Request::any('listing') => []]); Listing::deleteColumnListingForUser([Request::post('listing') => []]);
return $this->jsonResponse([]); return $this->jsonResponse([]);
} }

View File

@@ -27,6 +27,7 @@ namespace Froxlor\UI;
use Froxlor\CurrentUser; use Froxlor\CurrentUser;
use Froxlor\Database\Database; use Froxlor\Database\Database;
use Froxlor\Froxlor;
use Froxlor\UI\Panel\UI; use Froxlor\UI\Panel\UI;
use InvalidArgumentException; use InvalidArgumentException;
@@ -247,9 +248,9 @@ class Listing
* ] * ]
* *
* @param array $tabellisting * @param array $tabellisting
* @return bool * @return array
*/ */
public static function storeColumnListingForUser(array $tabellisting): bool public static function storeColumnListingForUser(array $tabellisting): array
{ {
$section = array_key_first($tabellisting); $section = array_key_first($tabellisting);
if (empty($section) || !is_array($tabellisting[$section]) || empty($tabellisting[$section])) { if (empty($section) || !is_array($tabellisting[$section]) || empty($tabellisting[$section])) {
@@ -259,6 +260,22 @@ class Listing
if (CurrentUser::isAdmin()) { if (CurrentUser::isAdmin()) {
$userid = 'adminid'; $userid = 'adminid';
} }
// include all possible tablelisting-definitions to check for the right section
foreach(glob(Froxlor::getInstallDir().'lib/tablelisting/{,*/}*.php', GLOB_BRACE) as $tbl_file) {
$table_listings = include $tbl_file;
if (!isset($table_listings[$section])) {
continue;
} else {
break;
}
}
$columns_available = array_keys($table_listings[$section]['columns']);
// filter out unknown columns
foreach ($tabellisting[$section] as $index => $column_changed) {
if (!in_array($column_changed, $columns_available)) {
unset($tabellisting[$section][$index]);
}
}
// delete possible existing entry // delete possible existing entry
self::deleteColumnListingForUser($tabellisting); self::deleteColumnListingForUser($tabellisting);
// add new entry // add new entry
@@ -273,7 +290,7 @@ class Listing
'section' => $section, 'section' => $section,
'cols' => json_encode($tabellisting[$section]) 'cols' => json_encode($tabellisting[$section])
]); ]);
return true; return $tabellisting[$section];
} }
/** /**

View File

@@ -29,11 +29,14 @@ use Froxlor\UI\Callbacks\Style;
use Froxlor\UI\Callbacks\Text; use Froxlor\UI\Callbacks\Text;
use Froxlor\UI\Listing; use Froxlor\UI\Listing;
// used outside scope variables
$customerCollectionCount = !is_null($customerCollection ?? null) ? $customerCollection->count() : 0;
return [ return [
'domain_list' => [ 'domain_list' => [
'title' => lng('admin.domains'), 'title' => lng('admin.domains'),
'icon' => 'fa-solid fa-globe', 'icon' => 'fa-solid fa-globe',
'empty_msg' => $customerCollection->count() == 0 ? lng('admin.domain_nocustomeraddingavailable') : '', 'empty_msg' => $customerCollectionCount == 0 ? lng('admin.domain_nocustomeraddingavailable') : '',
'self_overview' => ['section' => 'domains', 'page' => 'domains'], 'self_overview' => ['section' => 'domains', 'page' => 'domains'],
'default_sorting' => ['d.domain_ace' => 'asc'], 'default_sorting' => ['d.domain_ace' => 'asc'],
'columns' => [ 'columns' => [

View File

@@ -27,6 +27,9 @@ use Froxlor\UI\Callbacks\Ftp;
use Froxlor\UI\Callbacks\Text; use Froxlor\UI\Callbacks\Text;
use Froxlor\UI\Listing; use Froxlor\UI\Listing;
// used outside scope variables
$cperlenabled = $cperlenabled ?? false;
return [ return [
'htaccess_list' => [ 'htaccess_list' => [
'title' => lng('menue.extras.pathoptions'), 'title' => lng('menue.extras.pathoptions'),

View File

@@ -27,6 +27,9 @@ use Froxlor\UI\Callbacks\Mysql;
use Froxlor\UI\Callbacks\Text; use Froxlor\UI\Callbacks\Text;
use Froxlor\UI\Listing; use Froxlor\UI\Listing;
// used outside scope variables
$multiple_mysqlservers = $multiple_mysqlservers ?? false;
return [ return [
'mysql_list' => [ 'mysql_list' => [
'title' => lng('menue.mysql.databases'), 'title' => lng('menue.mysql.databases'),

View File

@@ -27,6 +27,10 @@ use Froxlor\UI\Callbacks\Dns;
use Froxlor\UI\Callbacks\Text; use Froxlor\UI\Callbacks\Text;
use Froxlor\UI\Listing; use Froxlor\UI\Listing;
// used outside scope variables
$domain = $domain ?? '';
$domain_id = $domain_id ?? '';
return [ return [
'dns_list' => [ 'dns_list' => [
'title' => 'DNS Entries', 'title' => 'DNS Entries',