diff options
Diffstat (limited to 'app')
36 files changed, 1793 insertions, 740 deletions
diff --git a/app/Http/Controllers/Admin/ModuleController.php b/app/Http/Controllers/Admin/ModuleController.php deleted file mode 100644 index e82b914da9..0000000000 --- a/app/Http/Controllers/Admin/ModuleController.php +++ /dev/null @@ -1,701 +0,0 @@ -<?php - -/** - * webtrees: online genealogy - * Copyright (C) 2019 webtrees development team - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Http\Controllers\Admin; - -use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\FlashMessages; -use Fisharebest\Webtrees\I18N; -use Fisharebest\Webtrees\Module\ModuleAnalyticsInterface; -use Fisharebest\Webtrees\Module\ModuleBlockInterface; -use Fisharebest\Webtrees\Module\ModuleChartInterface; -use Fisharebest\Webtrees\Module\ModuleDataFixInterface; -use Fisharebest\Webtrees\Module\ModuleFooterInterface; -use Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface; -use Fisharebest\Webtrees\Module\ModuleInterface; -use Fisharebest\Webtrees\Module\ModuleLanguageInterface; -use Fisharebest\Webtrees\Module\ModuleListInterface; -use Fisharebest\Webtrees\Module\ModuleMenuInterface; -use Fisharebest\Webtrees\Module\ModuleReportInterface; -use Fisharebest\Webtrees\Module\ModuleSidebarInterface; -use Fisharebest\Webtrees\Module\ModuleTabInterface; -use Fisharebest\Webtrees\Module\ModuleThemeInterface; -use Fisharebest\Webtrees\Services\ModuleService; -use Fisharebest\Webtrees\Services\TreeService; -use Illuminate\Database\Capsule\Manager as DB; -use Illuminate\Support\Collection; -use Psr\Http\Message\ResponseInterface; -use Psr\Http\Message\ServerRequestInterface; - -use function array_flip; -use function in_array; -use function redirect; -use function route; -use function view; - -/** - * Controller for configuring the modules. - */ -class ModuleController extends AbstractAdminController -{ - /** @var ModuleService */ - private $module_service; - - /** @var TreeService */ - private $tree_service; - - /** - * ModuleController constructor. - * - * @param ModuleService $module_service - * @param TreeService $tree_service - */ - public function __construct(ModuleService $module_service, TreeService $tree_service) - { - $this->module_service = $module_service; - $this->tree_service = $tree_service; - } - - /** - * Show the administrator a list of modules. - * - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function list(ServerRequestInterface $request): ResponseInterface - { - return $this->viewResponse('admin/modules', [ - 'title' => I18N::translate('All modules'), - 'modules' => $this->module_service->all(true), - 'deleted_modules' => $this->module_service->deletedModules(), - ]); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listAnalytics(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleAnalyticsInterface::class, - I18N::translate('Tracking and analytics'), - I18N::translate('If you use one of the following tracking and analytics services, webtrees can add the tracking codes automatically.') - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listBlocks(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleBlockInterface::class, - view('icons/block') . I18N::translate('Blocks'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listCharts(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleChartInterface::class, - view('icons/chart') . I18N::translate('Charts'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listDataFixes(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleDataFixInterface::class, - view('icons/data-fix') . I18N::translate('Data fixes'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listFooters(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleFooterInterface::class, - view('icons/footer') . I18N::translate('Footers'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listHistory(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleHistoricEventsInterface::class, - view('icons/history') . I18N::translate('Historic events'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listLanguages(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleLanguageInterface::class, - view('icons/language') . I18N::translate('Languages'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listLists(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleListInterface::class, - view('icons/list') . I18N::translate('Lists'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listMenus(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleMenuInterface::class, - view('icons/menu') . I18N::translate('Menus'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listReports(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleReportInterface::class, - view('icons/report') . I18N::translate('Reports'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listSidebars(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleSidebarInterface::class, - view('icons/sidebar') . I18N::translate('Sidebars'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listTabs(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleTabInterface::class, - view('icons/tab') . I18N::translate('Tabs'), - '' - ); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function listThemes(ServerRequestInterface $request): ResponseInterface - { - return $this->listComponents( - ModuleThemeInterface::class, - view('icons/theme') . I18N::translate('Themes'), - '' - ); - } - - /** - * @param string $interface - * @param string $title - * @param string $description - * - * @return ResponseInterface - */ - private function listComponents(string $interface, string $title, string $description): ResponseInterface - { - $trees = $this->tree_service->all(); - $modules = $this->module_service->findByInterface($interface, true, true); - $uses_access = in_array($interface, $this->module_service->componentsWithAccess(), true); - $uses_sorting = in_array($interface, $this->module_service->componentsWithOrder(), true); - - $level_text = Auth::accessLevelNames(); - - $access_summary = $modules - ->mapWithKeys(static function (ModuleInterface $module) use ($interface, $level_text, $trees): array { - $access_levels = $trees - ->map(static function ($tree) use ($interface, $module): int { - return $module->accessLevel($tree, $interface); - }) - ->uniqueStrict() - ->values() - ->map(static function (int $level) use ($level_text): string { - return $level_text[$level]; - }) - ->all(); - - return [$module->name() => $access_levels]; - }) - ->all(); - - return $this->viewResponse('admin/components', [ - 'description' => $description, - 'interface' => $interface, - 'modules' => $modules, - 'title' => $title, - 'trees' => $this->tree_service->all(), - 'uses_access' => $uses_access, - 'uses_sorting' => $uses_sorting, - 'access_summary' => $access_summary, - ]); - } - - /** - * Update the enabled/disabled status of the modules. - * - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function update(ServerRequestInterface $request): ResponseInterface - { - $params = (array) $request->getParsedBody(); - - $modules = $this->module_service->all(true); - - foreach ($modules as $module) { - $new_status = (bool) ($params['status-' . $module->name()] ?? false); - $old_status = $module->isEnabled(); - - if ($new_status !== $old_status) { - DB::table('module') - ->where('module_name', '=', $module->name()) - ->update(['status' => $new_status ? 'enabled' : 'disabled']); - - if ($new_status) { - FlashMessages::addMessage(I18N::translate('The module “%s” has been enabled.', $module->title()), 'success'); - } else { - FlashMessages::addMessage(I18N::translate('The module “%s” has been disabled.', $module->title()), 'success'); - } - } - } - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('modules')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateAnalytics(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleAnalyticsInterface::class, true); - - $this->updateStatus($modules, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('analytics')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateBlocks(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleBlockInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateAccessLevel($modules, ModuleBlockInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('blocks')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateCharts(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleChartInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateAccessLevel($modules, ModuleChartInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('charts')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateDataFixes(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleDataFixInterface::class, true); - - $this->updateStatus($modules, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('languages')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateFooters(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleFooterInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateOrder($modules, 'footer_order', $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('footers')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateHistory(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleHistoricEventsInterface::class, true); - - $this->updateStatus($modules, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('history')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateLanguages(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleLanguageInterface::class, true); - - $this->updateStatus($modules, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('languages')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateLists(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleListInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateAccessLevel($modules, ModuleListInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('lists')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateMenus(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleMenuInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateOrder($modules, 'menu_order', $request); - $this->updateAccessLevel($modules, ModuleMenuInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('menus')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateReports(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleReportInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateAccessLevel($modules, ModuleReportInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('reports')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateSidebars(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleSidebarInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateOrder($modules, 'sidebar_order', $request); - $this->updateAccessLevel($modules, ModuleSidebarInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('sidebars')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateTabs(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleTabInterface::class, true); - - $this->updateStatus($modules, $request); - $this->updateOrder($modules, 'tab_order', $request); - $this->updateAccessLevel($modules, ModuleTabInterface::class, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('tabs')); - } - - /** - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function updateThemes(ServerRequestInterface $request): ResponseInterface - { - $modules = $this->module_service->findByInterface(ModuleThemeInterface::class, true); - - $this->updateStatus($modules, $request); - - FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); - - return redirect(route('themes')); - } - - /** - * Update the access levels of the modules. - * - * @param Collection $modules - * @param string $column - * @param ServerRequestInterface $request - * - * @return void - */ - private function updateOrder(Collection $modules, string $column, ServerRequestInterface $request): void - { - $params = (array) $request->getParsedBody(); - - $order = (array) ($params['order'] ?? []); - $order = array_flip($order); - - foreach ($modules as $module) { - DB::table('module') - ->where('module_name', '=', $module->name()) - ->update([ - $column => $order[$module->name()] ?? 0, - ]); - } - } - - /** - * Update the access levels of the modules. - * - * @param Collection $modules - * @param ServerRequestInterface $request - * - * @return void - */ - private function updateStatus(Collection $modules, ServerRequestInterface $request): void - { - $params = (array) $request->getParsedBody(); - - foreach ($modules as $module) { - $enabled = (bool) ($params['status-' . $module->name()] ?? false); - - if ($enabled !== $module->isEnabled()) { - DB::table('module') - ->where('module_name', '=', $module->name()) - ->update(['status' => $enabled ? 'enabled' : 'disabled']); - - if ($enabled) { - $message = I18N::translate('The module “%s” has been enabled.', $module->title()); - } else { - $message = I18N::translate('The module “%s” has been disabled.', $module->title()); - } - - FlashMessages::addMessage($message, 'success'); - } - } - } - - /** - * Update the access levels of the modules. - * - * @param Collection $modules - * @param string $interface - * @param ServerRequestInterface $request - * - * @return void - */ - private function updateAccessLevel(Collection $modules, string $interface, ServerRequestInterface $request): void - { - $params = (array) $request->getParsedBody(); - - $trees = $this->tree_service->all(); - - foreach ($modules as $module) { - foreach ($trees as $tree) { - $key = 'access-' . $module->name() . '-' . $tree->id(); - $access_level = (int) ($params[$key] ?? 0); - - if ($access_level !== $module->accessLevel($tree, $interface)) { - DB::table('module_privacy')->updateOrInsert([ - 'module_name' => $module->name(), - 'gedcom_id' => $tree->id(), - 'interface' => $interface, - ], [ - 'access_level' => $access_level, - ]); - } - } - } - } - - /** - * Delete the database settings for a deleted module. - * - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function deleteModuleSettings(ServerRequestInterface $request): ResponseInterface - { - $params = (array) $request->getParsedBody(); - - $module_name = $params['module_name']; - - DB::table('block_setting') - ->join('block', 'block_setting.block_id', '=', 'block.block_id') - ->join('module', 'block.module_name', '=', 'module.module_name') - ->where('module.module_name', '=', $module_name) - ->delete(); - - DB::table('block') - ->join('module', 'block.module_name', '=', 'module.module_name') - ->where('module.module_name', '=', $module_name) - ->delete(); - - DB::table('module_setting') - ->where('module_name', '=', $module_name) - ->delete(); - - DB::table('module_privacy') - ->where('module_name', '=', $module_name) - ->delete(); - - DB::table('module') - ->where('module_name', '=', $module_name) - ->delete(); - - FlashMessages::addMessage(I18N::translate('The preferences for the module “%s” have been deleted.', $module_name), 'success'); - - return redirect(route('modules')); - } -} diff --git a/app/Http/RequestHandlers/AbstractModuleComponentAction.php b/app/Http/RequestHandlers/AbstractModuleComponentAction.php new file mode 100644 index 0000000000..c709fe7da1 --- /dev/null +++ b/app/Http/RequestHandlers/AbstractModuleComponentAction.php @@ -0,0 +1,146 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Services\ModuleService; +use Fisharebest\Webtrees\Services\TreeService; +use Illuminate\Database\Capsule\Manager as DB; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +use function array_flip; + +/** + * Update a list of modules. + */ +abstract class AbstractModuleComponentAction implements RequestHandlerInterface +{ + /** @var ModuleService */ + protected $module_service; + + /** @var TreeService */ + protected $tree_service; + + /** + * @param ModuleService $module_service + * @param TreeService $tree_service + */ + public function __construct(ModuleService $module_service, TreeService $tree_service) + { + $this->module_service = $module_service; + $this->tree_service = $tree_service; + } + + /** + * Update the access levels of the modules. + * + * @param string $interface + * @param ServerRequestInterface $request + * + * @return void + */ + protected function updateStatus(string $interface, ServerRequestInterface $request): void + { + $modules = $this->module_service->findByInterface($interface, true); + + $params = (array) $request->getParsedBody(); + + foreach ($modules as $module) { + $enabled = (bool) ($params['status-' . $module->name()] ?? false); + + if ($enabled !== $module->isEnabled()) { + DB::table('module') + ->where('module_name', '=', $module->name()) + ->update(['status' => $enabled ? 'enabled' : 'disabled']); + + if ($enabled) { + $message = I18N::translate('The module “%s” has been enabled.', $module->title()); + } else { + $message = I18N::translate('The module “%s” has been disabled.', $module->title()); + } + + FlashMessages::addMessage($message, 'success'); + } + } + } + + /** + * Update the access levels of the modules. + * + * @param string $interface + * @param ServerRequestInterface $request + * + * @return void + */ + protected function updateAccessLevel(string $interface, ServerRequestInterface $request): void + { + $modules = $this->module_service->findByInterface($interface, true); + + $params = (array) $request->getParsedBody(); + + $trees = $this->tree_service->all(); + + foreach ($modules as $module) { + foreach ($trees as $tree) { + $key = 'access-' . $module->name() . '-' . $tree->id(); + $access_level = (int) ($params[$key] ?? 0); + + if ($access_level !== $module->accessLevel($tree, $interface)) { + DB::table('module_privacy')->updateOrInsert([ + 'module_name' => $module->name(), + 'gedcom_id' => $tree->id(), + 'interface' => $interface, + ], [ + 'access_level' => $access_level, + ]); + } + } + } + } + + /** + * Update the access levels of the modules. + * + * @param string $interface + * @param string $column + * @param ServerRequestInterface $request + * + * @return void + */ + protected function updateOrder(string $interface, string $column, ServerRequestInterface $request): void + { + $modules = $this->module_service->findByInterface($interface, true); + + $params = (array) $request->getParsedBody(); + + $order = (array) ($params['order'] ?? []); + $order = array_flip($order); + + foreach ($modules as $module) { + DB::table('module') + ->where('module_name', '=', $module->name()) + ->update([ + $column => $order[$module->name()] ?? 0, + ]); + } + } +} diff --git a/app/Http/RequestHandlers/AbstractModuleComponentPage.php b/app/Http/RequestHandlers/AbstractModuleComponentPage.php new file mode 100644 index 0000000000..54b96f097e --- /dev/null +++ b/app/Http/RequestHandlers/AbstractModuleComponentPage.php @@ -0,0 +1,96 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\Auth; +use Fisharebest\Webtrees\Http\ViewResponseTrait; +use Fisharebest\Webtrees\Module\ModuleInterface; +use Fisharebest\Webtrees\Services\ModuleService; +use Fisharebest\Webtrees\Services\TreeService; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Server\RequestHandlerInterface; + +/** + * Show a list of modules. + */ +abstract class AbstractModuleComponentPage implements RequestHandlerInterface +{ + use ViewResponseTrait; + + /** @var ModuleService */ + private $module_service; + + /** @var TreeService */ + private $tree_service; + + /** + * @param ModuleService $module_service + * @param TreeService $tree_service + */ + public function __construct(ModuleService $module_service, TreeService $tree_service) + { + $this->module_service = $module_service; + $this->tree_service = $tree_service; + } + + /** + * @param string $interface + * @param string $title + * @param string $description + * + * @return ResponseInterface + */ + protected function listComponents(string $interface, string $title, string $description): ResponseInterface + { + $this->layout = 'layouts/administration'; + + $modules = $this->module_service->findByInterface($interface, true, true); + $uses_access = $this->module_service->componentsWithAccess()->containsStrict($interface); + $uses_sorting = $this->module_service->componentsWithOrder()->containsStrict($interface); + + $access_summary = $modules + ->mapWithKeys(function (ModuleInterface $module) use ($interface): array { + $access_levels = $this->tree_service->all() + ->map(static function ($tree) use ($interface, $module): int { + return $module->accessLevel($tree, $interface); + }) + ->uniqueStrict() + ->values() + ->map(static function (int $level): string { + return Auth::accessLevelNames()[$level]; + }) + ->all(); + + return [$module->name() => $access_levels]; + }) + ->all(); + + return $this->viewResponse('admin/components', [ + 'description' => $description, + 'interface' => $interface, + 'modules' => $modules, + 'title' => $title, + 'trees' => $this->tree_service->all(), + 'uses_access' => $uses_access, + 'uses_sorting' => $uses_sorting, + 'access_summary' => $access_summary, + ]); + } +} diff --git a/app/Http/RequestHandlers/ModuleAction.php b/app/Http/RequestHandlers/ModuleAction.php index 29d39f2521..d5969a86ba 100644 --- a/app/Http/RequestHandlers/ModuleAction.php +++ b/app/Http/RequestHandlers/ModuleAction.php @@ -42,8 +42,6 @@ class ModuleAction implements RequestHandlerInterface private $module_service; /** - * ModuleController constructor. - * * @param ModuleService $module_service */ public function __construct(ModuleService $module_service) diff --git a/app/Http/RequestHandlers/ModuleDeleteSettings.php b/app/Http/RequestHandlers/ModuleDeleteSettings.php new file mode 100644 index 0000000000..6c0dbcc8cc --- /dev/null +++ b/app/Http/RequestHandlers/ModuleDeleteSettings.php @@ -0,0 +1,77 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Illuminate\Database\Capsule\Manager as DB; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +use function redirect; +use function route; + +/** + * Delete the database settings for a deleted module. + */ +class ModuleDeleteSettings implements RequestHandlerInterface +{ + /** + * Delete the database settings for a deleted module. + * + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $params = (array) $request->getParsedBody(); + + $module_name = $params['module_name'] ?? ''; + + DB::table('block_setting') + ->join('block', 'block_setting.block_id', '=', 'block.block_id') + ->join('module', 'block.module_name', '=', 'module.module_name') + ->where('module.module_name', '=', $module_name) + ->delete(); + + DB::table('block') + ->join('module', 'block.module_name', '=', 'module.module_name') + ->where('module.module_name', '=', $module_name) + ->delete(); + + DB::table('module_setting') + ->where('module_name', '=', $module_name) + ->delete(); + + DB::table('module_privacy') + ->where('module_name', '=', $module_name) + ->delete(); + + DB::table('module') + ->where('module_name', '=', $module_name) + ->delete(); + + FlashMessages::addMessage(I18N::translate('The preferences for the module “%s” have been deleted.', $module_name), 'success'); + + return redirect(route('modules')); + } +} diff --git a/app/Http/RequestHandlers/ModulesAllAction.php b/app/Http/RequestHandlers/ModulesAllAction.php new file mode 100644 index 0000000000..761dbec00a --- /dev/null +++ b/app/Http/RequestHandlers/ModulesAllAction.php @@ -0,0 +1,79 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Services\ModuleService; +use Illuminate\Database\Capsule\Manager as DB; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesAllAction implements RequestHandlerInterface +{ + /** @var ModuleService */ + private $module_service; + + /** + * @param ModuleService $module_service + */ + public function __construct(ModuleService $module_service) + { + $this->module_service = $module_service; + } + + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $params = (array) $request->getParsedBody(); + + $modules = $this->module_service->all(true); + + foreach ($modules as $module) { + $new_status = (bool) ($params['status-' . $module->name()] ?? false); + $old_status = $module->isEnabled(); + + if ($new_status !== $old_status) { + DB::table('module') + ->where('module_name', '=', $module->name()) + ->update(['status' => $new_status ? 'enabled' : 'disabled']); + + if ($new_status) { + FlashMessages::addMessage(I18N::translate('The module “%s” has been enabled.', $module->title()), 'success'); + } else { + FlashMessages::addMessage(I18N::translate('The module “%s” has been disabled.', $module->title()), 'success'); + } + } + } + + return redirect(route(ModulesAllPage::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesAllPage.php b/app/Http/RequestHandlers/ModulesAllPage.php new file mode 100644 index 0000000000..5f3806920d --- /dev/null +++ b/app/Http/RequestHandlers/ModulesAllPage.php @@ -0,0 +1,64 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\Http\ViewResponseTrait; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Services\ModuleService; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +/** + * Show a list of modules. + */ +class ModulesAllPage implements RequestHandlerInterface +{ + use ViewResponseTrait; + + /** @var ModuleService */ + private $module_service; + + /** + * @param ModuleService $module_service + */ + public function __construct(ModuleService $module_service) + { + $this->module_service = $module_service; + } + + /** + * Delete the database settings for a deleted module. + * + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->layout = 'layouts/administration'; + + return $this->viewResponse('admin/modules', [ + 'title' => I18N::translate('All modules'), + 'modules' => $this->module_service->all(true), + 'deleted_modules' => $this->module_service->deletedModules(), + ]); + } +} diff --git a/app/Http/RequestHandlers/ModulesAnalyticsAction.php b/app/Http/RequestHandlers/ModulesAnalyticsAction.php new file mode 100644 index 0000000000..f2eaf8c5a9 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesAnalyticsAction.php @@ -0,0 +1,49 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleAnalyticsInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesAnalyticsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleAnalyticsInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesAnalyticsPage.php b/app/Http/RequestHandlers/ModulesAnalyticsPage.php new file mode 100644 index 0000000000..ab4d5c191f --- /dev/null +++ b/app/Http/RequestHandlers/ModulesAnalyticsPage.php @@ -0,0 +1,48 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\Http\ViewResponseTrait; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleAnalyticsInterface; +use Fisharebest\Webtrees\Services\ModuleService; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +/** + * Show a list of modules. + */ +class ModulesAnalyticsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleAnalyticsInterface::class, + I18N::translate('Tracking and analytics'), + I18N::translate('If you use one of the following tracking and analytics services, webtrees can add the tracking codes automatically.') + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesBlocksAction.php b/app/Http/RequestHandlers/ModulesBlocksAction.php new file mode 100644 index 0000000000..ffb4616ec9 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesBlocksAction.php @@ -0,0 +1,50 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleBlockInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesBlocksAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleBlockInterface::class, $request); + $this->updateAccessLevel(ModuleBlockInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesBlocksPage.php b/app/Http/RequestHandlers/ModulesBlocksPage.php new file mode 100644 index 0000000000..3fe8689a91 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesBlocksPage.php @@ -0,0 +1,51 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\Http\ViewResponseTrait; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleAnalyticsInterface; +use Fisharebest\Webtrees\Module\ModuleBlockInterface; +use Fisharebest\Webtrees\Services\ModuleService; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\RequestHandlerInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesBlocksPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleBlockInterface::class, + view('icons/block') . I18N::translate('Blocks'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesChartsAction.php b/app/Http/RequestHandlers/ModulesChartsAction.php new file mode 100644 index 0000000000..b47719cd52 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesChartsAction.php @@ -0,0 +1,50 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleChartInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesChartsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleChartInterface::class, $request); + $this->updateAccessLevel(ModuleChartInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesChartsPage.php b/app/Http/RequestHandlers/ModulesChartsPage.php new file mode 100644 index 0000000000..d07f2ecaad --- /dev/null +++ b/app/Http/RequestHandlers/ModulesChartsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleChartInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesChartsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleChartInterface::class, + view('icons/chart') . I18N::translate('Charts'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesDataFixesAction.php b/app/Http/RequestHandlers/ModulesDataFixesAction.php new file mode 100644 index 0000000000..85fab2f800 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesDataFixesAction.php @@ -0,0 +1,49 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleDataFixInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesDataFixesAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleDataFixInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesDataFixesPage.php b/app/Http/RequestHandlers/ModulesDataFixesPage.php new file mode 100644 index 0000000000..4ed82cb8fc --- /dev/null +++ b/app/Http/RequestHandlers/ModulesDataFixesPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleDataFixInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesDataFixesPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleDataFixInterface::class, + view('icons/data-fix') . I18N::translate('Data fixes'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesFootersAction.php b/app/Http/RequestHandlers/ModulesFootersAction.php new file mode 100644 index 0000000000..a09b3f196d --- /dev/null +++ b/app/Http/RequestHandlers/ModulesFootersAction.php @@ -0,0 +1,51 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleDataFixInterface; +use Fisharebest\Webtrees\Module\ModuleFooterInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesFootersAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleFooterInterface::class, $request); + $this->updateOrder(ModuleFooterInterface::class, 'footer_order', $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesFootersPage.php b/app/Http/RequestHandlers/ModulesFootersPage.php new file mode 100644 index 0000000000..d2980759c0 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesFootersPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleFooterInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesFootersPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleFooterInterface::class, + view('icons/footer') . I18N::translate('Footers'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesHistoricEventsAction.php b/app/Http/RequestHandlers/ModulesHistoricEventsAction.php new file mode 100644 index 0000000000..088a67ed67 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesHistoricEventsAction.php @@ -0,0 +1,49 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesHistoricEventsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleHistoricEventsInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesHistoricEventsPage.php b/app/Http/RequestHandlers/ModulesHistoricEventsPage.php new file mode 100644 index 0000000000..87894ac244 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesHistoricEventsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesHistoricEventsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleHistoricEventsInterface::class, + view('icons/history') . I18N::translate('Historic events'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesLanguagesAction.php b/app/Http/RequestHandlers/ModulesLanguagesAction.php new file mode 100644 index 0000000000..52d57ec928 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesLanguagesAction.php @@ -0,0 +1,49 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleLanguageInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesLanguagesAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleLanguageInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesLanguagesPage.php b/app/Http/RequestHandlers/ModulesLanguagesPage.php new file mode 100644 index 0000000000..f7a1c96381 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesLanguagesPage.php @@ -0,0 +1,48 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface; +use Fisharebest\Webtrees\Module\ModuleLanguageInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesLanguagesPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleLanguageInterface::class, + view('icons/language') . I18N::translate('Languages'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesListsAction.php b/app/Http/RequestHandlers/ModulesListsAction.php new file mode 100644 index 0000000000..7c0f1f19d7 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesListsAction.php @@ -0,0 +1,50 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleListInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesListsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleListInterface::class, $request); + $this->updateAccessLevel(ModuleListInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesListsPage.php b/app/Http/RequestHandlers/ModulesListsPage.php new file mode 100644 index 0000000000..e0c6e61906 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesListsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleListInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesListsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleListInterface::class, + view('icons/list') . I18N::translate('Lists'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesMenusAction.php b/app/Http/RequestHandlers/ModulesMenusAction.php new file mode 100644 index 0000000000..2b3b0a939d --- /dev/null +++ b/app/Http/RequestHandlers/ModulesMenusAction.php @@ -0,0 +1,51 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleMenuInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesMenusAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleMenuInterface::class, $request); + $this->updateOrder(ModuleMenuInterface::class, 'menu_order', $request); + $this->updateAccessLevel(ModuleMenuInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesMenusPage.php b/app/Http/RequestHandlers/ModulesMenusPage.php new file mode 100644 index 0000000000..46b9353b40 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesMenusPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleMenuInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesMenusPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleMenuInterface::class, + view('icons/menu') . I18N::translate('Menus'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesReportsAction.php b/app/Http/RequestHandlers/ModulesReportsAction.php new file mode 100644 index 0000000000..6c716d6366 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesReportsAction.php @@ -0,0 +1,50 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleReportInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesReportsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleReportInterface::class, $request); + $this->updateAccessLevel(ModuleReportInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesReportsPage.php b/app/Http/RequestHandlers/ModulesReportsPage.php new file mode 100644 index 0000000000..6727c2e3f6 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesReportsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleReportInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesReportsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleReportInterface::class, + view('icons/report') . I18N::translate('Reports'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesSidebarsAction.php b/app/Http/RequestHandlers/ModulesSidebarsAction.php new file mode 100644 index 0000000000..05f110cf2e --- /dev/null +++ b/app/Http/RequestHandlers/ModulesSidebarsAction.php @@ -0,0 +1,51 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleSidebarInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesSidebarsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleSidebarInterface::class, $request); + $this->updateOrder(ModuleSidebarInterface::class, 'sidebar_order', $request); + $this->updateAccessLevel(ModuleSidebarInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesSidebarsPage.php b/app/Http/RequestHandlers/ModulesSidebarsPage.php new file mode 100644 index 0000000000..757c732183 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesSidebarsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleSidebarInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesSidebarsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleSidebarInterface::class, + view('icons/sidebar') . I18N::translate('Sidebars'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesTabsAction.php b/app/Http/RequestHandlers/ModulesTabsAction.php new file mode 100644 index 0000000000..d2ce64609e --- /dev/null +++ b/app/Http/RequestHandlers/ModulesTabsAction.php @@ -0,0 +1,51 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleTabInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesTabsAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleTabInterface::class, $request); + $this->updateOrder(ModuleTabInterface::class, 'tab_order', $request); + $this->updateAccessLevel(ModuleTabInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesTabsPage.php b/app/Http/RequestHandlers/ModulesTabsPage.php new file mode 100644 index 0000000000..b9cda78e94 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesTabsPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleTabInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesTabsPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleTabInterface::class, + view('icons/tab') . I18N::translate('Tabs'), + '' + ); + } +} diff --git a/app/Http/RequestHandlers/ModulesThemesAction.php b/app/Http/RequestHandlers/ModulesThemesAction.php new file mode 100644 index 0000000000..e93c015922 --- /dev/null +++ b/app/Http/RequestHandlers/ModulesThemesAction.php @@ -0,0 +1,50 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 20 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleBlockInterface; +use Fisharebest\Webtrees\Module\ModuleThemeInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function redirect; +use function route; + +/** + * Update a list of modules. + */ +class ModulesThemesAction extends AbstractModuleComponentAction +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $this->updateStatus(ModuleThemeInterface::class, $request); + + FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); + + return redirect(route(ControlPanel::class)); + } +} diff --git a/app/Http/RequestHandlers/ModulesThemesPage.php b/app/Http/RequestHandlers/ModulesThemesPage.php new file mode 100644 index 0000000000..0cef064cfd --- /dev/null +++ b/app/Http/RequestHandlers/ModulesThemesPage.php @@ -0,0 +1,47 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2020 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\RequestHandlers; + +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Module\ModuleThemeInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +use function view; + +/** + * Show a list of modules. + */ +class ModulesThemesPage extends AbstractModuleComponentPage +{ + /** + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->listComponents( + ModuleThemeInterface::class, + view('icons/theme') . I18N::translate('Themes'), + '' + ); + } +} diff --git a/app/Http/Routes/WebRoutes.php b/app/Http/Routes/WebRoutes.php index 581d54c5d1..6b0cfa3f37 100644 --- a/app/Http/Routes/WebRoutes.php +++ b/app/Http/Routes/WebRoutes.php @@ -123,6 +123,35 @@ use Fisharebest\Webtrees\Http\RequestHandlers\MessageAction; use Fisharebest\Webtrees\Http\RequestHandlers\MessagePage; use Fisharebest\Webtrees\Http\RequestHandlers\MessageSelect; use Fisharebest\Webtrees\Http\RequestHandlers\ModuleAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModuleDeleteSettings; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesAnalyticsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesAnalyticsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesBlocksAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesBlocksPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesChartsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesChartsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesDataFixesAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesDataFixesPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesFootersAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesFootersPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesHistoricEventsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesHistoricEventsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesLanguagesAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesLanguagesPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesAllAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesAllPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesListsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesListsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesMenusAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesMenusPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesReportsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesReportsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesSidebarsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesSidebarsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesTabsAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesTabsPage; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesThemesAction; +use Fisharebest\Webtrees\Http\RequestHandlers\ModulesThemesPage; use Fisharebest\Webtrees\Http\RequestHandlers\NotePage; use Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestAction; use Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestPage; @@ -262,37 +291,8 @@ class WebRoutes $router->get('admin-webtrees1-thumbs', '/webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1Thumbnails'); $router->post('admin-webtrees1-thumbs-action', '/webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsAction'); $router->get('admin-webtrees1-thumbs-data', '/webtrees1-thumbs-data', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsData'); - $router->get('modules', '/modules', 'Admin\ModuleController::list'); - $router->post('modules-update', '/modules', 'Admin\ModuleController::update'); - $router->get('analytics', '/analytics', 'Admin\ModuleController::listAnalytics'); - $router->post('analytics-update', '/analytics', 'Admin\ModuleController::updateAnalytics'); - $router->get('blocks', '/blocks', 'Admin\ModuleController::listBlocks'); - $router->post('blocks-update', '/blocks', 'Admin\ModuleController::updateBlocks'); - $router->get('charts', '/charts', 'Admin\ModuleController::listCharts'); - $router->post('charts-update', '/charts', 'Admin\ModuleController::updateCharts'); - $router->get('data-fixes', '/data-fixes', 'Admin\ModuleController::listDataFixes'); - $router->post('data-fixes-update', '/data-fixes', 'Admin\ModuleController::updateDataFixes'); - $router->get('lists', '/lists', 'Admin\ModuleController::listLists'); - $router->post('lists-update', '/lists', 'Admin\ModuleController::updateLists'); - $router->get('footers', '/footers', 'Admin\ModuleController::listFooters'); - $router->post('footers-update', '/footers', 'Admin\ModuleController::updateFooters'); - $router->get('history', '/history', 'Admin\ModuleController::listHistory'); - $router->post('history-update', '/history', 'Admin\ModuleController::updateHistory'); - $router->get('menus', '/menus', 'Admin\ModuleController::listMenus'); - $router->post('menus-update', '/menus', 'Admin\ModuleController::updateMenus'); - $router->get('languages', '/languages', 'Admin\ModuleController::listLanguages'); - $router->post('languages-update', '/languages', 'Admin\ModuleController::updateLanguages'); - $router->get('reports', '/reports', 'Admin\ModuleController::listReports'); - $router->post('reports-update', '/reports', 'Admin\ModuleController::updateReports'); - $router->get('sidebars', '/sidebars', 'Admin\ModuleController::listSidebars'); - $router->post('sidebars-update', '/sidebars', 'Admin\ModuleController::updateSidebars'); - $router->get('themes', '/themes', 'Admin\ModuleController::listThemes'); - $router->post('themes-update', '/themes', 'Admin\ModuleController::updateThemes'); - $router->get('tabs', '/tabs', 'Admin\ModuleController::listTabs'); - $router->post('tabs-update', '/tabs', 'Admin\ModuleController::updateTabs'); $router->get(UsersCleanupPage::class, '/users-cleanup'); $router->post(UsersCleanupAction::class, '/users-cleanup'); - $router->post('delete-module-settings', '/delete-module-settings', 'Admin\ModuleController::deleteModuleSettings'); $router->get(MapDataList::class, '/map-data'); $router->get('map-data-edit', '/map-data-edit', 'Admin\LocationController::mapDataEdit'); $router->post('map-data-update', '/map-data-edit', 'Admin\LocationController::mapDataSave'); @@ -302,6 +302,35 @@ class WebRoutes $router->post('locations-import-action', '/locations-import', 'Admin\LocationController::importLocationsAction'); $router->get('map-provider', '/map-provider', 'Admin\MapProviderController::mapProviderEdit'); $router->post('map-provider-action', '/map-provider', 'Admin\MapProviderController::mapProviderSave'); + $router->post(ModuleDeleteSettings::class, '/module-delete-settings'); + $router->get(ModulesAllPage::class, '/modules'); + $router->post(ModulesAllAction::class, '/modules'); + $router->get(ModulesAnalyticsPage::class, '/analytics'); + $router->post(ModulesAnalyticsAction::class, '/analytics'); + $router->get(ModulesBlocksPage::class, '/blocks'); + $router->post(ModulesBlocksAction::class, '/blocks'); + $router->get(ModulesChartsPage::class, '/charts'); + $router->post(ModulesChartsAction::class, '/charts'); + $router->get(ModulesDataFixesPage::class, '/data-fixes'); + $router->post(ModulesDataFixesAction::class, '/data-fixes'); + $router->get(ModulesFootersPage::class, '/footers'); + $router->post(ModulesFootersAction::class, '/footers'); + $router->get(ModulesHistoricEventsPage::class, '/historic-events'); + $router->post(ModulesHistoricEventsAction::class, '/historic-events'); + $router->get(ModulesListsPage::class, '/lists'); + $router->post(ModulesListsAction::class, '/lists'); + $router->get(ModulesMenusPage::class, '/menus'); + $router->post(ModulesMenusAction::class, '/menus'); + $router->get(ModulesLanguagesPage::class, '/languages'); + $router->post(ModulesLanguagesAction::class, '/languages'); + $router->get(ModulesReportsPage::class, '/reports'); + $router->post(ModulesReportsAction::class, '/reports'); + $router->get(ModulesSidebarsPage::class, '/sidebars'); + $router->post(ModulesSidebarsAction::class, '/sidebars'); + $router->get(ModulesTabsPage::class, '/tabs'); + $router->post(ModulesTabsAction::class, '/tabs'); + $router->get(ModulesThemesPage::class, '/themes'); + $router->post(ModulesThemesAction::class, '/themes'); $router->get('upgrade', '/upgrade', 'Admin\UpgradeController::wizard'); $router->post('upgrade-confirm', '/upgrade-confirm', 'Admin\UpgradeController::confirm'); $router->post('upgrade-action', '/upgrade', 'Admin\UpgradeController::step'); diff --git a/app/Module/RelationshipsChartModule.php b/app/Module/RelationshipsChartModule.php index 683e50207d..21e5edc724 100644 --- a/app/Module/RelationshipsChartModule.php +++ b/app/Module/RelationshipsChartModule.php @@ -73,8 +73,6 @@ class RelationshipsChartModule extends AbstractModule implements ModuleChartInte private $tree_service; /** - * ModuleController constructor. - * * @param TreeService $tree_service */ public function __construct(TreeService $tree_service) diff --git a/app/Services/ModuleService.php b/app/Services/ModuleService.php index a26891f75a..47780771ae 100644 --- a/app/Services/ModuleService.php +++ b/app/Services/ModuleService.php @@ -857,18 +857,18 @@ class ModuleService } /** - * @return string[] + * @return Collection<string> */ - public function componentsWithAccess(): array + public function componentsWithAccess(): Collection { - return self::COMPONENTS_WITH_ACCESS; + return new Collection(self::COMPONENTS_WITH_ACCESS); } /** - * @return string[] + * @return Collection<string> */ - public function componentsWithOrder(): array + public function componentsWithOrder(): Collection { - return self::COMPONENTS_WITH_SORT; + return new Collection(self::COMPONENTS_WITH_SORT); } } |
