From 9ea978629f278fbeeb7f50f1d2a96518dea6828f Mon Sep 17 00:00:00 2001 From: Tom Mitchelmore Date: Mon, 9 Mar 2026 12:20:57 +0000 Subject: [PATCH] Update to Lumberjack 8.1 --- .env.example | 1 + 404.php | 2 +- README.md | 2 +- app/Exceptions/Handler.php | 5 +- app/Http/Lumberjack.php | 3 +- app/Menu/Item.php | 7 +- app/Menu/Menu.php | 6 +- app/Providers/AppServiceProvider.php | 16 ++- archive.php | 2 +- author.php | 2 +- composer.json | 11 +- config/app.php | 2 +- config/ignition.php | 166 +++++++++++++++++++++++++++ index.php | 2 +- page.php | 5 +- routes.php | 2 +- search.php | 2 +- single.php | 5 +- 18 files changed, 213 insertions(+), 28 deletions(-) create mode 100644 .env.example create mode 100644 config/ignition.php diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..2047de6a --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +IGNITION_LOCAL_SITES_PATH=/Users//site/web/app/themes/lumberjack diff --git a/404.php b/404.php index 7a4a839c..c2842723 100755 --- a/404.php +++ b/404.php @@ -23,6 +23,6 @@ class Error404Controller extends Controller { public function handle() { - return new TimberResponse('templates/errors/404.twig', Timber::get_context(), 404); + return new TimberResponse('templates/errors/404.twig', Timber::context(), 404); } } diff --git a/README.md b/README.md index 772e25f6..1f654a84 100755 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ class IndexController { public function handle() { - $context = Timber::get_context(); + $context = Timber::context(); $context['posts'] = Post::whereStatus('publish') ->limit(5) ->get(); diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 2428aff8..6a130ea0 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -13,19 +13,22 @@ class Handler extends LumberjackHandler { + #[\Override] protected $dontReport = []; + #[\Override] public function report(Exception $e) { parent::report($e); } + #[\Override] public function render(ServerRequestInterface $request, Exception $e): ResponseInterface { // Provide a customisable error rendering when not in debug mode try { if (Config::get('app.debug') === false) { - $data = Timber::get_context(); + $data = Timber::context(); $data['exception'] = $e; return new TimberResponse('templates/errors/whoops.twig', $data, 500); diff --git a/app/Http/Lumberjack.php b/app/Http/Lumberjack.php index 8e1f3c88..aa43077c 100644 --- a/app/Http/Lumberjack.php +++ b/app/Http/Lumberjack.php @@ -4,6 +4,7 @@ use Rareloop\Lumberjack\Http\Lumberjack as LumberjackCore; use App\Menu\Menu; +use Timber\Timber; class Lumberjack extends LumberjackCore { @@ -18,7 +19,7 @@ public function addToContext($context) // the context, you can get items from it in a way that is a little smoother and more // versatile than Wordpress's wp_nav_menu. (You need never again rely on a // crazy "Walker Function!") - $context['menu'] = new Menu('main-nav'); + $context['menu'] = Timber::get_menu('main-nav'); return $context; } diff --git a/app/Menu/Item.php b/app/Menu/Item.php index a2de502d..dc0d3768 100755 --- a/app/Menu/Item.php +++ b/app/Menu/Item.php @@ -2,16 +2,17 @@ namespace App\Menu; +use Timber\Menu as TimberMenu; use Timber\MenuItem as TimberMenuItem; +use WP_Post; class Item extends TimberMenuItem { - public $PostClass = 'Rareloop\Lumberjack\Post'; public $listItemClass = 'page-list__item'; - public function __construct($data) + public function __construct(?WP_Post $data = null, ?TimberMenu $menu = null) { - parent::__construct($data); + parent::__construct($data, $menu); // Add a modifier class if the item is the current page if ($data->current) { diff --git a/app/Menu/Menu.php b/app/Menu/Menu.php index 8ddfee23..86cd9559 100755 --- a/app/Menu/Menu.php +++ b/app/Menu/Menu.php @@ -4,8 +4,4 @@ use Timber\Menu as TimberMenu; -class Menu extends TimberMenu -{ - public $MenuItemClass = 'App\Menu\Item'; - public $PostClass = 'Rareloop\Lumberjack\Post'; -} +class Menu extends TimberMenu {} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 81c26d6f..3853360d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,10 @@ namespace App\Providers; +use App\Menu\Item; +use App\Menu\Menu; +use Rareloop\Lumberjack\Page; +use Rareloop\Lumberjack\Post; use Rareloop\Lumberjack\Providers\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -9,14 +13,20 @@ class AppServiceProvider extends ServiceProvider /** * Register any app specific items into the container */ - public function register() - { - } + public function register() {} /** * Perform any additional boot required for this application */ public function boot() { + add_filter('timber/post/classmap', fn($classmap) => [ + ...$classmap, + Post::getPostType() => Post::class, + Page::getPostType() => Page::class, + ]); + + add_filter('timber/menu/class', fn() => Menu::class); + add_filter('timber/menuitem/class', fn() => Item::class); } } diff --git a/archive.php b/archive.php index 06e4e7f8..ea01b619 100755 --- a/archive.php +++ b/archive.php @@ -20,7 +20,7 @@ class ArchiveController extends Controller { public function handle() { - $data = Timber::get_context(); + $data = Timber::context(); $data['title'] = 'Archive'; if (is_day()) { diff --git a/author.php b/author.php index 7f70afc4..16a9b764 100755 --- a/author.php +++ b/author.php @@ -18,7 +18,7 @@ public function handle() { global $wp_query; - $data = Timber::get_context(); + $data = Timber::context(); $author = new TimberUser($wp_query->query_vars['author']); $data['author'] = $author; diff --git a/composer.json b/composer.json index dc997038..1aa3d15b 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,18 @@ } ], "keywords": [ - "lumberjack", "composer", "wordpress", "wp", "theme", "timber", "twig", "mvc", "dry" + "lumberjack", + "composer", + "wordpress", + "wp", + "theme", + "timber", + "twig", + "mvc", + "dry" ], "require": { + "php": ">=8.3", "composer/installers": "^1.0" } } diff --git a/config/app.php b/config/app.php index 78497723..1cce6685 100644 --- a/config/app.php +++ b/config/app.php @@ -47,7 +47,7 @@ 'logs' => [ 'enabled' => true, 'path' => false, - 'level' => Monolog\Logger::ERROR, + 'level' => Monolog\Level::Error, ], 'themeSupport' => [ diff --git a/config/ignition.php b/config/ignition.php new file mode 100644 index 00000000..004d0e95 --- /dev/null +++ b/config/ignition.php @@ -0,0 +1,166 @@ + env('IGNITION_EDITOR', 'vscode'), + + /* + |-------------------------------------------------------------------------- + | Theme + |-------------------------------------------------------------------------- + | + | Here you may specify which theme Ignition should use. + | + | Supported: "light", "dark", "auto" + | + */ + + 'theme' => env('IGNITION_THEME', 'auto'), + + /* + |-------------------------------------------------------------------------- + | Solution Providers + |-------------------------------------------------------------------------- + | + | List of solution providers that should be loaded. You may specify additional + | providers as fully qualified class names. + | + */ + + 'solution_providers' => [ + // from spatie/ignition + BadMethodCallSolutionProvider::class, + MergeConflictSolutionProvider::class, + UndefinedPropertySolutionProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Ignored Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'ignored_solution_providers' => [], + + /* + |-------------------------------------------------------------------------- + | Runnable Solutions + |-------------------------------------------------------------------------- + | + | Some solutions that Ignition displays are runnable and can perform + | various tasks. By default, runnable solutions are only enabled when your + | app has debug mode enabled and the environment is `local` or + | `development`. + | + | Using the `IGNITION_ENABLE_RUNNABLE_SOLUTIONS` environment variable, you + | can override this behaviour and enable or disable runnable solutions + | regardless of the application's environment. + | + | Default: env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS') + | + */ + + 'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS', 'false'), + + /* + |-------------------------------------------------------------------------- + | Remote Path Mapping + |-------------------------------------------------------------------------- + | + | If you are using a remote dev server, like Laravel Homestead, Docker, or + | even a remote VPS, it will be necessary to specify your path mapping. + | + | Leaving one, or both of these, empty or null will not trigger the remote + | URL changes and Ignition will treat your editor links as local files. + | + | "remote_sites_path" is an absolute base path for your sites or projects + | in Homestead, Vagrant, Docker, or another remote development server. + | + | Example value: "/home/vagrant/Code" + | + | "local_sites_path" is an absolute base path for your sites or projects + | on your local computer where your IDE or code editor is running on. + | + | Example values: "/Users//Code", "C:\Users\\Documents\Code" + | + */ + + 'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', dirname(__DIR__)), + 'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''), + + /* + |-------------------------------------------------------------------------- + | Recorders + |-------------------------------------------------------------------------- + | + | Ignition registers a couple of recorders when it is enabled. Below you may + | specify a recorders will be used to record specific events. + | + */ + + 'recorders' => [], + + /* + * When a key is set, we'll send your exceptions to Open AI to generate a solution + */ + + 'open_ai_key' => env('IGNITION_OPEN_AI_KEY'), + + /* + |-------------------------------------------------------------------------- + | Include arguments + |-------------------------------------------------------------------------- + | + | Ignition show you stack traces of exceptions with the arguments that were + | passed to each method. This feature can be disabled here. + | + */ + + 'with_stack_frame_arguments' => true, + + /* + |-------------------------------------------------------------------------- + | Argument reducers + |-------------------------------------------------------------------------- + | + | Ignition show you stack traces of exceptions with the arguments that were + | passed to each method. To make these variables more readable, you can + | specify a list of classes here which summarize the variables. + | + */ + + 'argument_reducers' => [ + \Spatie\Backtrace\Arguments\Reducers\BaseTypeArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\ArrayArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\StdClassArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\EnumArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\ClosureArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\DateTimeArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\DateTimeZoneArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\SymphonyRequestArgumentReducer::class, + \Spatie\Backtrace\Arguments\Reducers\StringableArgumentReducer::class, + ], + +]; diff --git a/index.php b/index.php index 097bd30b..0d993258 100755 --- a/index.php +++ b/index.php @@ -19,7 +19,7 @@ class IndexController extends Controller { public function handle() { - $context = Timber::get_context(); + $context = Timber::context(); $context['posts'] = Post::all(); return new TimberResponse('templates/posts.twig', $context); diff --git a/page.php b/page.php index d1ce71b5..6be5ec13 100755 --- a/page.php +++ b/page.php @@ -13,15 +13,14 @@ use App\Http\Controllers\Controller; use Rareloop\Lumberjack\Http\Responses\TimberResponse; -use Rareloop\Lumberjack\Page; use Timber\Timber; class PageController extends Controller { public function handle() { - $context = Timber::get_context(); - $page = new Page(); + $context = Timber::context(); + $page = Timber::get_post(); $context['post'] = $page; $context['title'] = $page->title; diff --git a/routes.php b/routes.php index 4e089eba..9f65a01a 100644 --- a/routes.php +++ b/routes.php @@ -1,7 +1,7 @@ Hello World!'); diff --git a/search.php b/search.php index 921aca34..4b46724b 100755 --- a/search.php +++ b/search.php @@ -15,7 +15,7 @@ class SearchController extends Controller { public function handle() { - $context = Timber::get_context(); + $context = Timber::context(); $searchQuery = get_search_query(); $context['title'] = 'Search results for \'' . htmlspecialchars($searchQuery) . '\''; diff --git a/single.php b/single.php index c28a79dd..301cd386 100755 --- a/single.php +++ b/single.php @@ -8,15 +8,14 @@ use App\Http\Controllers\Controller; use Rareloop\Lumberjack\Http\Responses\TimberResponse; -use Rareloop\Lumberjack\Post; use Timber\Timber; class SingleController extends Controller { public function handle() { - $context = Timber::get_context(); - $post = new Post(); + $context = Timber::context(); + $post = Timber::get_post(); $context['post'] = $post; $context['title'] = $post->title;