summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2019-01-30 20:10:25 +0000
committerGreg Roach <fisharebest@webtrees.net>2019-01-30 20:11:03 +0000
commitdedcf571c9427b58a4edf21c94050d1e5e77604e (patch)
tree39ff05ea82e3de7166e637e1e5b46b3302582e88
parente5331ed896843a6cf8be7ec691a30ab8c02810ef (diff)
downloadwebtrees-dedcf571c9427b58a4edf21c94050d1e5e77604e.tar.gz
webtrees-dedcf571c9427b58a4edf21c94050d1e5e77604e.tar.bz2
webtrees-dedcf571c9427b58a4edf21c94050d1e5e77604e.zip
Convert Theme class to modules
-rw-r--r--app/Http/Controllers/AccountController.php33
-rw-r--r--app/Http/Controllers/AdminSiteController.php29
-rw-r--r--app/Http/Controllers/AdminTreesController.php30
-rw-r--r--app/Http/Controllers/AdminUsersController.php26
-rw-r--r--app/Services/ModuleService.php12
5 files changed, 115 insertions, 15 deletions
diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php
index 516d063e2b..9c6915c1c5 100644
--- a/app/Http/Controllers/AccountController.php
+++ b/app/Http/Controllers/AccountController.php
@@ -23,9 +23,12 @@ use Fisharebest\Webtrees\FlashMessages;
use Fisharebest\Webtrees\Functions\FunctionsEdit;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Individual;
+use Fisharebest\Webtrees\Module\ModuleThemeInterface;
+use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Session;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\User;
+use Illuminate\Support\Collection;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@@ -36,8 +39,20 @@ use Symfony\Component\HttpFoundation\Response;
class AccountController extends AbstractBaseController
{
/**
- * Help for dates.
+ * @var ModuleService
+ */
+ private $module_service;
+
+ /**
+ * AdminUsersController constructor.
*
+ * @param ModuleService $module_service
+ */
+ public function __construct(ModuleService $module_service) {
+ $this->module_service = $module_service;
+ }
+
+ /**
* @param Tree $tree
* @param User $user
*
@@ -50,7 +65,7 @@ class AccountController extends AbstractBaseController
$default_individual = Individual::getInstance($tree->getUserPreference(Auth::user(), 'rootid'), $tree);
$installed_languages = FunctionsEdit::optionsInstalledLanguages();
$show_delete_option = !$user->getPreference('canadmin');
- $themes = $this->themeNames();
+ $themes = $this->themeOptions();
$timezone_ids = DateTimeZone::listIdentifiers();
$timezones = array_combine($timezone_ids, $timezone_ids);
$title = I18N::translate('My account');
@@ -149,15 +164,13 @@ class AccountController extends AbstractBaseController
}
/**
- * @return array
+ * @return Collection|string[]
*/
- private function themeNames(): array
+ private function themeOptions(): Collection
{
- $default_option = [
- /* I18N: default option in list of themes */
- '' => I18N::translate('<default theme>'),
- ];
-
- return $default_option + Theme::themeNames();
+ return $this->module_service
+ ->findByInterface(ModuleThemeInterface::class)
+ ->map($this->module_service->titleMapper())
+ ->prepend(I18N::translate('<default theme>'), '');
}
}
diff --git a/app/Http/Controllers/AdminSiteController.php b/app/Http/Controllers/AdminSiteController.php
index d9e221c095..ca56997cfc 100644
--- a/app/Http/Controllers/AdminSiteController.php
+++ b/app/Http/Controllers/AdminSiteController.php
@@ -22,12 +22,15 @@ use Exception;
use Fisharebest\Webtrees\File;
use Fisharebest\Webtrees\FlashMessages;
use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Module\ModuleThemeInterface;
use Fisharebest\Webtrees\Services\DatatablesService;
+use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\User;
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Database\Query\Builder;
+use Illuminate\Support\Collection;
use League\Flysystem\Filesystem;
use stdClass;
use Symfony\Component\HttpFoundation\JsonResponse;
@@ -44,6 +47,20 @@ class AdminSiteController extends AbstractBaseController
protected $layout = 'layouts/administration';
/**
+ * @var ModuleService
+ */
+ private $module_service;
+
+ /**
+ * AdminUsersController constructor.
+ *
+ * @param ModuleService $module_service
+ */
+ public function __construct(ModuleService $module_service) {
+ $this->module_service = $module_service;
+ }
+
+ /**
* Show old user files in the data folder.
*
* @param Filesystem $filesystem
@@ -376,7 +393,7 @@ class AdminSiteController extends AbstractBaseController
*/
public function preferencesForm(): Response
{
- $all_themes = Theme::themeNames();
+ $all_themes = $this->themeOptions();
$title = I18N::translate('Website preferences');
@@ -519,4 +536,14 @@ class AdminSiteController extends AbstractBaseController
4 => I18N::translate('Choose user defined welcome text typed below'),
];
}
+
+ /**
+ * @return Collection|string[]
+ */
+ private function themeOptions(): Collection
+ {
+ return $this->module_service
+ ->findByInterface(ModuleThemeInterface::class)
+ ->map($this->module_service->titleMapper());
+ }
}
diff --git a/app/Http/Controllers/AdminTreesController.php b/app/Http/Controllers/AdminTreesController.php
index 891224eccb..c68c02d3ca 100644
--- a/app/Http/Controllers/AdminTreesController.php
+++ b/app/Http/Controllers/AdminTreesController.php
@@ -32,6 +32,8 @@ use Fisharebest\Webtrees\Html;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Individual;
use Fisharebest\Webtrees\Media;
+use Fisharebest\Webtrees\Module\ModuleThemeInterface;
+use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Services\TimeoutService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Source;
@@ -41,6 +43,7 @@ use Fisharebest\Webtrees\User;
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Database\Query\Builder;
use Illuminate\Database\Query\JoinClause;
+use Illuminate\Support\Collection;
use League\Flysystem\Filesystem;
use League\Flysystem\ZipArchive\ZipArchiveAdapter;
use stdClass;
@@ -65,6 +68,20 @@ class AdminTreesController extends AbstractBaseController
protected $layout = 'layouts/administration';
/**
+ * @var ModuleService
+ */
+ private $module_service;
+
+ /**
+ * AdminUsersController constructor.
+ *
+ * @param ModuleService $module_service
+ */
+ public function __construct(ModuleService $module_service) {
+ $this->module_service = $module_service;
+ }
+
+ /**
* @param Tree $tree
*
* @return Response
@@ -966,7 +983,7 @@ class AdminTreesController extends AbstractBaseController
2 => I18N::translate('records'),
];
- $theme_options = ['' => I18N::translate('<default theme>')] + Theme::themeNames();
+ $theme_options = $this->themeOptions();
$privacy_options = [
Auth::PRIV_USER => I18N::translate('Show to members'),
@@ -2114,4 +2131,15 @@ class AdminTreesController extends AbstractBaseController
return $tree_name . $tree_number;
}
+
+ /**
+ * @return Collection|string[]
+ */
+ private function themeOptions(): Collection
+ {
+ return $this->module_service
+ ->findByInterface(ModuleThemeInterface::class)
+ ->map($this->module_service->titleMapper())
+ ->prepend(I18N::translate('<default theme>'), '');
+ }
}
diff --git a/app/Http/Controllers/AdminUsersController.php b/app/Http/Controllers/AdminUsersController.php
index d965db2484..00434123be 100644
--- a/app/Http/Controllers/AdminUsersController.php
+++ b/app/Http/Controllers/AdminUsersController.php
@@ -24,12 +24,15 @@ use Fisharebest\Webtrees\Functions\FunctionsEdit;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Module\ModuleThemeInterface;
use Fisharebest\Webtrees\Services\DatatablesService;
+use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\User;
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Database\Query\JoinClause;
+use Illuminate\Support\Collection;
use stdClass;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -49,6 +52,20 @@ class AdminUsersController extends AbstractBaseController
protected $layout = 'layouts/administration';
/**
+ * @var ModuleService
+ */
+ private $module_service;
+
+ /**
+ * AdminUsersController constructor.
+ *
+ * @param ModuleService $module_service
+ */
+ public function __construct(ModuleService $module_service) {
+ $this->module_service = $module_service;
+ }
+
+ /**
* @param Request $request
*
* @return Response
@@ -464,10 +481,13 @@ class AdminUsersController extends AbstractBaseController
}
/**
- * @return string[]
+ * @return Collection|string[]
*/
- private function themeOptions(): array
+ private function themeOptions(): Collection
{
- return ['' => I18N::translate('<default theme>')] + Theme::themeNames();
+ return $this->module_service
+ ->findByInterface(ModuleThemeInterface::class)
+ ->map($this->module_service->titleMapper())
+ ->prepend(I18N::translate('<default theme>'), '');
}
}
diff --git a/app/Services/ModuleService.php b/app/Services/ModuleService.php
index 057103c151..b0e99ddb0f 100644
--- a/app/Services/ModuleService.php
+++ b/app/Services/ModuleService.php
@@ -419,6 +419,18 @@ class ModuleService
}
/**
+ * A function to convert modules into their titles - to create option lists, etc.
+ *
+ * @return Closure
+ */
+ public function titleMapper(): Closure
+ {
+ return function (ModuleInterface $module): string {
+ return $module->title();
+ };
+ }
+
+ /**
* Modules which (a) provide a specific function and (b) we have permission to see.
*
* @param string $component