diff --git a/app/Http/Controllers/DashController.php b/app/Http/Controllers/DashController.php index b37e467..bedbf59 100644 --- a/app/Http/Controllers/DashController.php +++ b/app/Http/Controllers/DashController.php @@ -4,18 +4,22 @@ namespace App\Http\Controllers; use App\Interfaces\PageRepositoryInterface; use App\Services\AuthService; +use App\Services\ThemeService; class DashController extends Controller { protected PageRepositoryInterface $pages; protected AuthService $auth; + protected ThemeService $themes; public function __construct( PageRepositoryInterface $pageRepository, AuthService $authService, + ThemeService $themeService, ) { - $this->pages = $pageRepository; - $this->auth = $authService; + $this->pages = $pageRepository; + $this->auth = $authService; + $this->themes = $themeService; } public function start() @@ -52,6 +56,7 @@ class DashController extends Controller "status" => $this->auth::status(), "mode" => $mode, "page" => $page, + "views" => $this->themes->getCustomViews($page['layout']), "title" => 'Editing ' . $page['title'] ]); } diff --git a/app/Providers/FipamoServiceProvider.php b/app/Providers/FipamoServiceProvider.php index 7ca08bb..776702d 100644 --- a/app/Providers/FipamoServiceProvider.php +++ b/app/Providers/FipamoServiceProvider.php @@ -9,6 +9,7 @@ use App\Services\SettingsService; use App\Services\AuthService; use App\Services\ContentService; use App\Services\PaginateService; +use App\Services\ThemeService; class FipamoServiceProvider extends ServiceProvider { @@ -30,6 +31,10 @@ class FipamoServiceProvider extends ServiceProvider return new ContentService(); }); + $this->app->bind(ThemeService::class, function ($app) { + return new ThemeService(new SettingsService()); + }); + $this->app->bind(PaginateService::class, function ($app) { return new PaginateService(new ContentService()); }); diff --git a/app/Services/ThemeService.php b/app/Services/ThemeService.php new file mode 100644 index 0000000..8ebef01 --- /dev/null +++ b/app/Services/ThemeService.php @@ -0,0 +1,73 @@ +settings = $settingsService; + $_themes = glob(env('THEMES_PATH') . '/*', GLOB_ONLYDIR); + foreach ($_themes as $theme) { + array_push( + $this->themes, + json_decode(file_get_contents($theme . '/theme.json'), true) + ); + } + } + + public function getThemes() + { + return $this->themes; + } + + public function getCustomViews($layout) + { + $views = []; + if (str_contains($layout, 'index')) { + $views = $this->findCustomIndex(); + } else { + $views = $this->findCustomViews(); + } + return $views; + } + + public function findCustomIndex() + { + $currentTheme = $this->settings->getGlobal()['theme']; + $folder = '../content/themes/' . $currentTheme; + $files = array_filter(glob("$folder/*twig"), 'is_file'); + $views = []; + + foreach ($files as $file) { + $path = explode('/', $file); + $fileName = $path[4]; + if (str_contains($fileName, 'index')) { + $page = explode('.', $fileName); + $views[] = $page[0]; + } + } + return $views; + } + + public function findCustomViews() + { + $currentTheme = $this->settings->getGlobal()['theme']; + $folder = '../content/themes/' . $currentTheme; + $files = array_filter(glob("$folder/*twig"), 'is_file'); + $views = []; + + foreach ($files as $file) { + $path = explode('/', $file); + $fileName = $path[4]; + if (str_contains($fileName, 'page')) { + $page = explode('.', $fileName); + $views[] = $page[0]; + } + } + return $views; + } +} diff --git a/resources/views/back/page.blade.php b/resources/views/back/page.blade.php index ecbeb8c..3fa65ca 100644 --- a/resources/views/back/page.blade.php +++ b/resources/views/back/page.blade.php @@ -151,6 +151,15 @@
LAYOUTS +
OPTIONS