Skip to content

v1.0.5 — Bugfix wave (manual job form, branding, GDPR-EN)

Choose a tag to compare

@noschmarrn noschmarrn released this 21 May 12:58
Immutable release. Only release title and notes can be modified.

What's new

Collected release after feedback from the test installation. Seven independent issues — from a form breaker to translation gaps to log hygiene. No critical hotfix like v1.0.4, but "enter job manually" had been broken since v1.0.3 — if you use it actively, you should install this.

Changes

fix(jobs): manual job entry works again

The form (admin and driver view) broke the HTML attribute as soon as a customer name contained a "@json($allObjects) inside an x-data="..." attribute emits raw JSON whose quotes terminate the attribute. Visible as raw Alpine code in the browser; result: Alpine didn't initialize and the "Create" button did nothing.

Switched to {{ json_encode(...) }} — Blade's HTML escaping (") survives the attribute cleanly, and the browser unescapes on parse. Both manual-job forms fixed.

feat(i18n): :app_name is substituted globally and automatically

A new BrandedTranslator (extending Laravel's Translator) injects :app_name as a replacement variable into every __() call — bound via app->extend('translator', …), because Laravel's TranslationServiceProvider is deferred and a plain singleton() override would be overwritten.

Help texts, update strings, and mail templates now render Schneespur / Wintertrace correctly everywhere instead of raw :app_name. Code no longer has to set ['app_name' => brand()] explicitly.

feat(gdpr): EN default template for Wintertrace installs

A new dsgvo/default-template-en.blade.php with UK/EU GDPR wording — Art. 6(1)(f), ICO note, full subject-rights enumeration (Art. 15–22). Both GDPR controllers now load locale-aware (dsgvo.default-template-{locale} with a German fallback).

Placeholder replacement ([Firmenname eintragen], [Company name], …) knows both languages via a new helper dsgvo_apply_company_placeholders() — with de-duplication along the way.

Existing EN installs with an already-saved (German) template must regenerate it manually in the GDPR admin UI (or delete the dsgvo_template_markdown setting).

ui(settings): icons for all settings cards

Previously only the module card had an icon; the others were text-only. All 8 cards now have matching Heroicons (branding, email, log, company, retention, weather, update, modules). The Blade was rebuilt around an array-driven loop.

chore(modules): example module removed from the release

The example module was meant as a demo, but it shipped with every customer install and loaded automatically — with a nav entry, dashboard widget, and settings page, and no way to disable it.

Three layers of defense:

  • build.sh excludes modules/example/ from the release ZIP
  • ExampleServiceProvider::boot() is self-gated via env('EXAMPLE_MODULE_ENABLED', false)
  • ModuleManager::boot() skips the example slug by default (also covers an old example/ folder left over from 1.0.4)

Devs can still enable it locally with EXAMPLE_MODULE_ENABLED=true in .env.

chore(logging): less log spam + daily rotation

ModuleManager wrote a Log::info for every "discovered" and "booted" on every request — with several modules that quickly became several MB per day in laravel.log. Dropped to Log::debug (filtered out in production with LOG_LEVEL=warning).

New defaults in config/logging.php and .env.example:

  • LOG_STACK=daily (file rotation, old files auto-deleted)
  • LOG_LEVEL=warning (no more spam in production)
  • LOG_DAILY_DAYS=14 (two-week retention)

Important for existing installs: the existing .env still has LOG_STACK=single and LOG_LEVEL=debug set explicitly — the new default only applies when the variable is absent. Adjust .env manually for immediate effect.

fix(install): hardcoded German error message

InstallerController::processPreflight() threw a hardcoded German withErrors() message instead of a __() call. Switched to __('install.preflight_has_failures') — the EN installer now shows correct English.

Upgrading from v1.0.4 (auto-update works)

  1. In the admin, "Check for updates" → v1.0.5 is offered
  2. Click, done — no DB migration needed
  3. Optional: adjust .env for the new log defaults (see above)

Upgrading from v1.0.3 or older

Manual upload recommended — the self-updater in v1.0.2 and v1.0.3 had bugs (see the v1.0.4 release notes).

  1. Download the ZIP, extract locally
  2. Copy the contents over the existing installation via FTP
  3. Do not overwrite .env and storage/app/installed.lock
  4. Optionally on the server: php artisan view:clear && php artisan config:clear

Requirements

  • PHP 8.3+ with ext-sodium, ext-pdo_mysql
  • MySQL/MariaDB 10.6+ or PostgreSQL 13+
  • Web hosting with write access to storage/ and bootstrap/cache/