You've already forked Atomcms-edit
043854cf3d
- Remove whichbrowser/parser, mockery/mockery, fruitcake/laravel-debugbar,
itsgoingd/clockwork (all unused)
- Replace qirolab/laravel-themer (dev-master) with custom App\Services\ThemeService
and App\Providers\ThemeServiceProvider
- Drop doctrine/dbal: rewrite all ->change() calls in 8 migrations to raw
DB::statement('ALTER TABLE ... MODIFY ...') SQL
- RenameColumn() kept intact (works without dbal in Laravel 13)
- Fix 2026_04_04 migration: inverted column-exists logic corrected
- Clear bootstrap cache to remove stale references to removed packages
70 lines
1.6 KiB
PHP
70 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Facades\View;
|
|
|
|
class ThemeService
|
|
{
|
|
private const string DEFAULT_THEME = 'atom';
|
|
|
|
private ?string $activeTheme = null;
|
|
|
|
private ?string $parentTheme = null;
|
|
|
|
public function set(string $theme, ?string $parentTheme = null): void
|
|
{
|
|
$this->clear();
|
|
|
|
$basePath = config('theme.base_path', base_path('resources/themes'));
|
|
|
|
if ($parentTheme) {
|
|
View::addLocation("{$basePath}/{$parentTheme}/views");
|
|
$this->parentTheme = $parentTheme;
|
|
}
|
|
|
|
View::addLocation("{$basePath}/{$theme}/views");
|
|
$this->activeTheme = $theme;
|
|
|
|
$this->registerVendorNamespaces($theme, $basePath);
|
|
}
|
|
|
|
public function active(): ?string
|
|
{
|
|
return $this->activeTheme;
|
|
}
|
|
|
|
public function parent(): ?string
|
|
{
|
|
return $this->parentTheme;
|
|
}
|
|
|
|
public function resolve(?string $theme = null): string
|
|
{
|
|
return $theme ?? $this->activeTheme ?? self::DEFAULT_THEME;
|
|
}
|
|
|
|
public function clear(): void
|
|
{
|
|
$this->activeTheme = null;
|
|
$this->parentTheme = null;
|
|
}
|
|
|
|
private function registerVendorNamespaces(string $theme, string $basePath): void
|
|
{
|
|
$vendorPath = "{$basePath}/{$theme}/views/vendor";
|
|
|
|
if (! is_dir($vendorPath)) {
|
|
return;
|
|
}
|
|
|
|
$directories = scandir($vendorPath);
|
|
|
|
foreach ($directories as $namespace) {
|
|
if ($namespace !== '.' && $namespace !== '..') {
|
|
View::prependNamespace($namespace, "{$vendorPath}/{$namespace}");
|
|
}
|
|
}
|
|
}
|
|
}
|