Self management
This commit is contained in:
@@ -40,6 +40,7 @@ final class AppIconResolver
|
||||
'public-dashboard' => '/assets/desktop/skin-icons/windows/public-dashboard.ico',
|
||||
'workspace-manager' => '/assets/desktop/skin-icons/windows/workspace-manager.ico',
|
||||
'admin-apps' => '/assets/desktop/skin-icons/windows/admin-apps.ico',
|
||||
'user-self-management' => '/assets/desktop/skin-icons/windows/admin-apps.ico',
|
||||
'desktop-login' => '/assets/desktop/skin-icons/windows/desktop-login.ico',
|
||||
'mining-checker' => '/assets/desktop/skin-icons/windows/admin-apps.ico',
|
||||
],
|
||||
@@ -48,6 +49,7 @@ final class AppIconResolver
|
||||
'public-dashboard' => '/assets/desktop/skin-icons/apple/public-dashboard.svg',
|
||||
'workspace-manager' => '/assets/desktop/skin-icons/apple/workspace-manager.svg',
|
||||
'admin-apps' => '/assets/desktop/skin-icons/apple/admin-apps.svg',
|
||||
'user-self-management' => '/assets/desktop/skin-icons/apple/admin-apps.svg',
|
||||
'desktop-login' => '/assets/desktop/skin-icons/apple/desktop-login.svg',
|
||||
'mining-checker' => '/assets/desktop/skin-icons/apple/admin-apps.svg',
|
||||
],
|
||||
@@ -56,6 +58,7 @@ final class AppIconResolver
|
||||
'public-dashboard' => '/assets/desktop/skin-icons/linux/public-dashboard.svg',
|
||||
'workspace-manager' => '/assets/desktop/skin-icons/linux/workspace-manager.svg',
|
||||
'admin-apps' => '/assets/desktop/skin-icons/linux/admin-apps.svg',
|
||||
'user-self-management' => '/assets/desktop/skin-icons/linux/admin-apps.svg',
|
||||
'desktop-login' => '/assets/desktop/skin-icons/linux/desktop-login.svg',
|
||||
'mining-checker' => '/assets/desktop/skin-icons/linux/admin-apps.svg',
|
||||
],
|
||||
|
||||
59
src/Desktop/AppVisibility.php
Normal file
59
src/Desktop/AppVisibility.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Desktop;
|
||||
|
||||
final class AppVisibility
|
||||
{
|
||||
/**
|
||||
* @param array<int, array<string, mixed>> $apps
|
||||
* @param array<int, string> $groups
|
||||
* @return array<int, array<string, mixed>>
|
||||
*/
|
||||
public static function filterByGroups(array $apps, array $groups): array
|
||||
{
|
||||
$normalizedGroups = array_map(
|
||||
static fn (string $group): string => strtolower(trim($group, '/')),
|
||||
$groups
|
||||
);
|
||||
|
||||
return array_values(array_filter($apps, static function (array $app) use ($normalizedGroups): bool {
|
||||
$requiredGroups = array_values(array_map('strval', (array) ($app['required_groups'] ?? [])));
|
||||
|
||||
if ($requiredGroups === []) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($requiredGroups as $group) {
|
||||
if (in_array(strtolower(trim($group, '/')), $normalizedGroups, true)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int, array<string, mixed>> $apps
|
||||
* @param array<int, string> $enabledAppIds
|
||||
* @param array<int, string> $mandatoryAppIds
|
||||
* @return array<int, array<string, mixed>>
|
||||
*/
|
||||
public static function filterByEnabledIds(array $apps, array $enabledAppIds, array $mandatoryAppIds = []): array
|
||||
{
|
||||
$lookup = array_fill_keys($enabledAppIds, true);
|
||||
$mandatoryLookup = array_fill_keys($mandatoryAppIds, true);
|
||||
|
||||
return array_values(array_filter($apps, static function (array $app) use ($lookup, $mandatoryLookup): bool {
|
||||
$appId = (string) ($app['app_id'] ?? '');
|
||||
|
||||
if ($appId === '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return isset($lookup[$appId]) || isset($mandatoryLookup[$appId]);
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,11 @@ final class DesktopState
|
||||
public static function quickActions(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'action_id' => 'open-user-self-management',
|
||||
'label' => 'Setup',
|
||||
'description' => 'Oeffnet die persoenlichen Desktop-Einstellungen.',
|
||||
],
|
||||
[
|
||||
'action_id' => 'open-public-dashboard',
|
||||
'label' => 'Public Dashboard',
|
||||
@@ -55,11 +60,6 @@ final class DesktopState
|
||||
'label' => 'Widgets umschalten',
|
||||
'description' => 'Blendet alle registrierten Widgets ein oder aus.',
|
||||
],
|
||||
[
|
||||
'action_id' => 'cycle-skin',
|
||||
'label' => 'Skin wechseln',
|
||||
'description' => 'Wechselt zyklisch zwischen Windows, Apple und Linux.',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user