Applies patch 3/21 from pixelfed-staging PR #9: removes the redundant
protected $model property from 5 factories (Laravel resolves the model
from the factory name). Unused imports dropped via Pint. Verified
factories still resolve their models and affected tests pass.
Modernize artisan and public/index.php to the streamlined bootstrap form,
migrate factories/seeders autoload to PSR-4 (database/seeds -> seeders), and
backfill missing env-driven config keys across app, session, database, queue,
mail, logging, and cache. All changes are additive and preserve existing
Pixelfed behavior and defaults.
Modernize artisan and public/index.php to the streamlined bootstrap form,
migrate factories/seeders autoload to PSR-4 (database/seeds -> seeders), and
backfill missing env-driven config keys across app, session, database, queue,
mail, logging, and cache. All changes are additive and preserve existing
Pixelfed behavior and defaults.
Back out all emoji cloud-storage work from staging so it can be reworked and
re-landed separately (the URL resolution flips to cloud on a global config
flag, which created a broken-URL window, and the migration approach needs
revisiting).
Reverts to pre-emoji state:
- CustomEmoji model URL/storage helpers (urlForPath, storageTarget, storeMedia,
storeMediaFromFile, deleteMedia, url) and callers in ImportEmojis,
CustomEmojiService, AdminController
- admin custom-emoji blade views back to local /storage URLs
- Remove admin:EmojiMoveStorageLocalToCloud command
- Remove the deploy migration and its scheduler entry
Media (and the already-reverted story) scheduler entries are untouched.
Two issues prevented emoji from serving/migrating correctly on cloud:
- Admin custom-emoji views hardcoded url('storage/'.media_path), so they
always showed local URLs and bypassed cloud resolution. Use $emoji->url().
- The migration/command guard relied solely on config_cache('pixelfed.cloud_storage'),
which is DB/12h-cached and can read stale-false right after cloud is
enabled, causing the migration to silently no-op. Treat cloud as enabled
when either live config() or config_cache() is true.
Runs admin:EmojiMoveStorageLocalToCloud during migrate so existing local
emoji are relocated to cloud as part of the upgrade, shrinking the window
where emoji URLs resolve to cloud before the files are there. No-op unless
cloud storage is enabled.
Migration failed with a duplicate entry error: recollating to
utf8mb4_unicode_520_ci causes previously-distinct hashtag names/slugs
to collide on the unique indexes. Reverting until the data is
de-duplicated first.
Move all Eloquent models from the app/ root directory to app/Models/
for consistency with modern Laravel conventions. The project already had
54 models in App\Models; this migrates the remaining 52 legacy models.
Changes:
- Move 52 model files from app/ to app/Models/
- Update namespace declarations in each model
- Update all ~1000 import references across the codebase
- Add Relation::morphMap() in AppServiceProvider for backward
compatibility with existing polymorphic database records
- Add missing HasSnowflakePrimary imports for models that relied
on same-namespace resolution
Replace all deprecated helper function calls:
- str_slug() → Str::slug()
- starts_with() → str_starts_with()
- ends_with() → str_ends_with()
- array_first() → Arr::first()
- array_last() → Arr::last()
- array_flatten() → Arr::flatten()
Remove laravel/helpers package from composer.json as it is no longer
needed and will not be maintained for Laravel 13.
PHP 5.5.9 adds the new static `class` property which provides the fully qualified class name. This is preferred over using strings for class names since the `class` property references are checked by PHP.
Changes the collation for the hashtags table to utf8mb4_unicode_520_ci
when the driver is MySQL or MariaDB. Otherwise the default collation of
utf8mb4_unicode_ci is used which conflates all characters outside of the
basic multilingual plane. This meant that any hashtag that is using a
script not in the BMP ends up matching with any other hashtag with a
script outside the BMP if it has the same length.
* Consider using `hash_equals()` instead of `==` when comparing the state values to prevent timing attacks:
`abort_unless(hash_equals($request->input('state'), $request->session()->pull('oauth2state')), 400, 'invalid
state');`
* For better data integrity, consider adding a foreign key constraint to the user_id column: `$table-
>foreign('user_id')->references('id')->on('users')->onDelete('cascade');`
* Does the OIDC provider guarantee that the username field exists in the userInfo data? Consider adding a
null check or fallback: `$userInfoData[config('remote-auth.oidc.field_username')] ?? null`
* Update iar.blade.php - Fix in-app reg without hcaptcha (#5807)
* Staging (#5674)
* Update .env.docker
Registry has changed. Old registry has been discontinued in August 2024. New Registry added, format of Docker tag has been adjusted as it now contains the Debian Release as well.
Sample Version is set to current stable but can be adjusted to any of the available branches.
* Update .env.docker
Stick major.minor according to https://jippi.github.io/docker-pixelfed/customize/tags/#pixelfed-version
Disable Debian Release Check until it's solved in dottie.
Closes https://github.com/pixelfed/pixelfed/issues/5264
* New translations web.php (Finnish)
[ci skip]
* New translations web.php (Finnish)
[ci skip]
* fix: don't restore memory limit after cities import
Since this command can only be invoked by CLI, the process will exit after a successful import, so restoring the transient PHP memory limit doesn't really have any affect.
In PHP 8.4, this throws the following error (which doesn't happen in 8.3 and below)
> [entrypoint / 11-first-time-setup.sh] - (stderr) 128769/128769 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%[2025-01-20 11:29:23] production.ERROR: Failed to set memory limit to 134217728 bytes (Current memory usage is 134746112 bytes) {"exception":"[object] (ErrorException(code: 0): Failed to set memory limit to 134217728 bytes (Current memory usage is 134746112 bytes) at /var/www/app/Console/Commands/ImportCities.php:140)
It seems to be a 8.4 behavior change, so removing the logic would make it go away
* New translations web.php (Finnish)
[ci skip]
* New translations web.php (Finnish)
[ci skip]
* New translations web.php (Portuguese)
[ci skip]
* New translations web.php (Portuguese)
[ci skip]
* fix(compose-modal): avoid WebGL if it's not needed
* fix(compose-modal): update webgl-media-editor
* New translations web.php (Hungarian)
[ci skip]
* New translations web.php (Russian)
[ci skip]
* New translations web.php (Russian)
[ci skip]
* Update .env.example
Adding the parameter INSTANCE_DISCOVER_PUBLIC="true" to prevent a HTTP 403 error at the explorer tab in the instance preview.
* New variable for lang spanish
* Variable for lang spanish
* Update Dockerfile, fixes#5535#5559
* Fix#5582
* Fix#5632
* Update status twitter:card to summary_large_image for images/albums
* Update changelog
---------
Co-authored-by: Lioh Moeller <lioh.moeller@gmx.net>
Co-authored-by: Christian Winther <jippignu@gmail.com>
Co-authored-by: Taye Adeyemi <dev@taye.me>
Co-authored-by: stemy2 <stemy2@users.noreply.github.com>
Co-authored-by: Uthanien <feldarec@gmail.com>
* Update iar.blade.php
---------
Co-authored-by: daniel <danielsupernault@gmail.com>
Co-authored-by: Lioh Moeller <lioh.moeller@gmx.net>
Co-authored-by: Christian Winther <jippignu@gmail.com>
Co-authored-by: Taye Adeyemi <dev@taye.me>
Co-authored-by: stemy2 <stemy2@users.noreply.github.com>
Co-authored-by: Uthanien <feldarec@gmail.com>
* Add app register email verify resends
* Update composer
* Update changelog
* Update IG import command
---------
Co-authored-by: Shlee <github@shl.ee>
Co-authored-by: Lioh Moeller <lioh.moeller@gmx.net>
Co-authored-by: Christian Winther <jippignu@gmail.com>
Co-authored-by: Taye Adeyemi <dev@taye.me>
Co-authored-by: stemy2 <stemy2@users.noreply.github.com>
Co-authored-by: Uthanien <feldarec@gmail.com>