From efb2e4f0bde4f7cf3376db96281a7bd01f1009e3 Mon Sep 17 00:00:00 2001 From: ro Date: Sat, 16 Mar 2024 12:36:51 -0600 Subject: [PATCH] created asset service class to handle file moving theme controller was getting top heavy, so an asset service class was plugged in to handle moving assets around for theme testing and eventually to production when HTML rendering is set up --- .../Controllers/Theming/ThemeController.php | 100 ++++-------------- app/Providers/FipamoServiceProvider.php | 9 ++ app/Services/AssetService.php | 92 ++++++++++++++++ .../themes/fipamo-default-v2/base.blade.php | 1 + 4 files changed, 120 insertions(+), 82 deletions(-) create mode 100644 app/Services/AssetService.php diff --git a/app/Http/Controllers/Theming/ThemeController.php b/app/Http/Controllers/Theming/ThemeController.php index 311be0f..0d70c6c 100644 --- a/app/Http/Controllers/Theming/ThemeController.php +++ b/app/Http/Controllers/Theming/ThemeController.php @@ -5,110 +5,46 @@ namespace App\Http\Controllers\Theming; use App\Http\Controllers\Controller; use App\Interfaces\PageRepositoryInterface; use App\Services\AuthService; -use App\Services\ThemeService; use App\Services\SortingService; +use App\Services\AssetService; class ThemeController extends Controller { protected PageRepositoryInterface $pages; protected AuthService $auth; - protected ThemeService $themes; + protected AssetService $assets; protected SortingService $sort; public function __construct( PageRepositoryInterface $pageRepository, AuthService $authService, - ThemeService $themeService, + AssetService $assetService, SortingService $sortService, ) { - $this->pages = $pageRepository; - $this->auth = $authService; - $this->themes = $themeService; - $this->sort = $sortService; - $theme = $this->themes->getCurrentTheme(); - $themeTestImagePath = '../public/theme/images/global/'; - $themeTestCSSPath = '../public/theme/css/theme/'; - $themeTestScriptsPath = '../public/theme/scripts/theme/'; - //TODO: Create assset service class to handle moving theme assets around - //move assets to public for testing - foreach ( - new \DirectoryIterator('../content/themes/' . $theme . '/assets/images/global/') as $file - ) { - if ($file->isDot()) { - continue; - } - //make theme directory if not present - if (!is_dir($themeTestImagePath)) { - mkdir($themeTestImagePath, 0755, true); - } - - if (!is_file($themeTestImagePath . $file->getFileName())) { - copy( - '../content/themes/' . - $theme . - '/assets/images/global/' . - $file->getFileName(), - $themeTestImagePath . $file->getFileName() - ); - } else { - //image is already there, so chill - } - //print $file->getFilename() . "\n"; - } - //clear test theme css and script directories - $styles = glob($themeTestCSSPath . '*'); // get all file names - foreach ($styles as $file) { // iterate files - if (is_file($file)) { - unlink($file); // delete file - } - } - $scripts = glob($themeTestScriptsPath . '*'); // get all file names - foreach ($scripts as $file) { // iterate files - if (is_file($file)) { - unlink($file); // delete file - } - } - - // - - //copy theme assets to public - $newcss = glob('../content/themes/' . $theme . '/assets/css/*'); - if (!is_dir($themeTestCSSPath)) { - mkdir($themeTestCSSPath, 0755, true); - } - foreach ($newcss as $file) { // iterate files - if (is_file($file)) { - $path = explode('/', $file); - copy($file, $themeTestCSSPath . $path[6]); - } - } - $newjs = glob('../content/themes/' . $theme . '/assets/scripts/*'); - if (!is_dir($themeTestScriptsPath)) { - mkdir($themeTestScriptsPath, 0755, true); - } - foreach ($newjs as $file) { // iterate files - if (is_file($file)) { - $path = explode('/', $file); - copy($file, $themeTestScriptsPath . $path[6]); - } - } + $this->pages = $pageRepository; + $this->auth = $authService; + $this->assets = $assetService; + $this->sort = $sortService; } public function getView($view = 'index') { + //move assets to theme testing dir + $this->assets->moveToTheme(); + $currentTheme = $this->assets->getCurrentTheme(); $template; $pageData = []; switch ($view) { case "index": case "page": $view == 'index' ? - $template = 'fipamo-default-v2.index' : - $template = 'fipamo-default-v2.page'; - $page = $this->pages->getById('09E5A362-BA31-4AE2-9DEE-C93DFBE005C3')->first(); + $template = $currentTheme . '.index' : + $template = $currentTheme . '.page'; + $page = $this->pages->getById('09E5A362-BA31-4AE2-9DEE-C93DFBE005C3'); $data = $this->sort->page($page); $pageData = [ "debug" => "true", - "theme" => 'fipamo-default-v2', + "theme" => $currentTheme, "status" => $this->auth::status(), "title" => "THEME PAGE", "meta" => $data['meta'], @@ -124,11 +60,11 @@ class ThemeController extends Controller ]; break; case "tags": - $template = 'fipamo-default-v2.tags'; + $template = $currentTheme . '.tags'; $data = $this->sort->tags(); $pageData = [ 'debug' => true, // for theme kit - 'theme' => 'fipamo-default-v2', // for theme kit + 'theme' => $currentTheme, // for theme kit 'title' => 'Pages Tagged as Tag', 'dynamicRender' => $data['info']['dynamicRender'], 'tags' => $data['info']['tags'][3]['pages'], @@ -142,11 +78,11 @@ class ThemeController extends Controller break; case "archives": case "archive": - $template = 'fipamo-default-v2.archive'; + $template = $currentTheme . '.archive'; $data = $this->sort->archive(); $pageData = [ 'debug' => true, // for theme kit - 'theme' => 'fipamo-default-v2', // for theme kit + 'theme' => $currentTheme, // for theme kit 'title' => 'Archives', 'dynamicRender' => $data['info']['dynamicRender'], 'archive' => $data['archive'], diff --git a/app/Providers/FipamoServiceProvider.php b/app/Providers/FipamoServiceProvider.php index 5ef4250..438bb73 100644 --- a/app/Providers/FipamoServiceProvider.php +++ b/app/Providers/FipamoServiceProvider.php @@ -15,6 +15,7 @@ use App\Services\StringService; use App\Services\FileUploadService; use App\Services\RenderService; use App\Services\SortingService; +use App\Services\AssetService; class FipamoServiceProvider extends ServiceProvider { @@ -74,6 +75,14 @@ class FipamoServiceProvider extends ServiceProvider new StringService(), ); }); + + $this->app->bind(AssetService::class, function ($app) { + return new AssetService( + new ThemeService( + new SettingsService(new DocService()) + ) + ); + }); } /** diff --git a/app/Services/AssetService.php b/app/Services/AssetService.php new file mode 100644 index 0000000..641644d --- /dev/null +++ b/app/Services/AssetService.php @@ -0,0 +1,92 @@ +themeTestImagePath = '../public/theme/images/global/'; + $this->themeTestCSSPath = '../public/theme/css/theme/'; + $this->themeTestScriptsPath = '../public/theme/scripts/theme/'; + $this->themes = $themeService; + $this->currentTheme = $this->themes->getCurrentTheme(); + } + + public function getCurrentTheme() + { + return $this->currentTheme; + } + + public function moveToTheme() + { + //get current theme + foreach ( + new \DirectoryIterator('../content/themes/' . $this->currentTheme . '/assets/images/global/') as $file + ) { + if ($file->isDot()) { + continue; + } + //make theme directory if not present + if (!is_dir($this->themeTestImagePath)) { + mkdir($this->themeTestImagePath, 0755, true); + } + + if (!is_file($this->themeTestImagePath . $file->getFileName())) { + copy( + '../content/themes/' . + $this->currentTheme . + '/assets/images/global/' . + $file->getFileName(), + $this->themeTestImagePath . $file->getFileName() + ); + } else { + //image is already there, so chill + } + //print $file->getFilename() . "\n"; + } + //clear test theme css and script directories + $styles = glob($this->themeTestCSSPath . '*'); // get all file names + foreach ($styles as $file) { // iterate files + if (is_file($file)) { + unlink($file); // delete file + } + } + $scripts = glob($this->themeTestScriptsPath . '*'); // get all file names + foreach ($scripts as $file) { // iterate files + if (is_file($file)) { + unlink($file); // delete file + } + } + + // + + //copy theme assets to public + $newcss = glob('../content/themes/' . $this->currentTheme . '/assets/css/*'); + if (!is_dir($this->themeTestCSSPath)) { + mkdir($this->themeTestCSSPath, 0755, true); + } + foreach ($newcss as $file) { // iterate files + if (is_file($file)) { + $path = explode('/', $file); + copy($file, $this->themeTestCSSPath . $path[6]); + } + } + $newjs = glob('../content/themes/' . $this->currentTheme . '/assets/scripts/*'); + if (!is_dir($this->themeTestScriptsPath)) { + mkdir($this->themeTestScriptsPath, 0755, true); + } + foreach ($newjs as $file) { // iterate files + if (is_file($file)) { + $path = explode('/', $file); + copy($file, $this->themeTestScriptsPath . $path[6]); + } + } + } +} diff --git a/content/themes/fipamo-default-v2/base.blade.php b/content/themes/fipamo-default-v2/base.blade.php index c58b2ae..067fce8 100644 --- a/content/themes/fipamo-default-v2/base.blade.php +++ b/content/themes/fipamo-default-v2/base.blade.php @@ -20,6 +20,7 @@ +