From e1f694b21ae54820e332ff3f31ad7c9f9ae55639 Mon Sep 17 00:00:00 2001
From: daniel
Date: Fri, 24 Jan 2025 21:29:36 -0700
Subject: [PATCH 1/5] add kickstarter and monthly users badge (#5589) (#5591)
Co-authored-by: Simon Laux
---
README.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/README.md b/README.md
index 08568fc6d..477044ef1 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,11 @@
+
+
+
+
+
## Introduction
A free and ethical photo sharing platform, powered by ActivityPub federation.
From fa4474bc38d64b1d96272f9d45e90289020fcb11 Mon Sep 17 00:00:00 2001
From: daniel
Date: Sat, 25 Jan 2025 08:45:42 -0700
Subject: [PATCH 2/5] Staging (#5594)
* add kickstarter and monthly users badge (#5589)
Co-authored-by: daniel
* DM
---------
Co-authored-by: Simon Laux
---
app/Http/Controllers/Api/ApiV1Controller.php | 2 ++
app/Http/Controllers/DirectMessageController.php | 1 +
2 files changed, 3 insertions(+)
diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php
index 156c44a6b..0de794a4c 100644
--- a/app/Http/Controllers/Api/ApiV1Controller.php
+++ b/app/Http/Controllers/Api/ApiV1Controller.php
@@ -3006,6 +3006,8 @@ class ApiV1Controller extends Controller
'scope' => 'nullable|in:inbox,sent,requests',
]);
+ return [];
+
$limit = $request->input('limit', 20);
$scope = $request->input('scope', 'inbox');
$user = $request->user();
diff --git a/app/Http/Controllers/DirectMessageController.php b/app/Http/Controllers/DirectMessageController.php
index b2e0df3a2..b29680058 100644
--- a/app/Http/Controllers/DirectMessageController.php
+++ b/app/Http/Controllers/DirectMessageController.php
@@ -30,6 +30,7 @@ class DirectMessageController extends Controller
{
public function __construct()
{
+ abort(404);
$this->middleware('auth');
}
From bd82bba9f822c94fc90dadfbb62164258438cd41 Mon Sep 17 00:00:00 2001
From: daniel
Date: Sat, 25 Jan 2025 21:45:26 -0700
Subject: [PATCH 3/5] Staging (#5603)
* add kickstarter and monthly users badge (#5589)
Co-authored-by: daniel
* DM
* Fix the local column for statuses to not include remote shares (#5513)
* Fix the local column for statuses to not include remote shares
* Chunk the migration
* Refactor migration
---------
Co-authored-by: Simon Laux
Co-authored-by: Anil Kulkarni <6687139+intentionally-left-nil@users.noreply.github.com>
---
app/Util/ActivityPub/Inbox.php | 1 +
.../2025_01_18_061532_fix_local_statuses.php | 25 +++++++++++++++++++
2 files changed, 26 insertions(+)
create mode 100644 database/migrations/2025_01_18_061532_fix_local_statuses.php
diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php
index e98b48c49..ddd377a70 100644
--- a/app/Util/ActivityPub/Inbox.php
+++ b/app/Util/ActivityPub/Inbox.php
@@ -645,6 +645,7 @@ class Inbox
'profile_id' => $actor->id,
'reblog_of_id' => $parent->id,
'type' => 'share',
+ 'local' => false,
]);
Notification::firstOrCreate(
diff --git a/database/migrations/2025_01_18_061532_fix_local_statuses.php b/database/migrations/2025_01_18_061532_fix_local_statuses.php
new file mode 100644
index 000000000..06b3b9fb1
--- /dev/null
+++ b/database/migrations/2025_01_18_061532_fix_local_statuses.php
@@ -0,0 +1,25 @@
+join('profiles', 'profiles.id', '=', 'statuses.profile_id')
+ ->leftJoin('users', 'users.id', '=', 'profiles.user_id')
+ ->where('statuses.local', true)
+ ->where('statuses.type', 'share')
+ ->whereNull('users.id')
+ ->update(['statuses.local' => false]);
+ }
+
+ public function down(): void
+ {
+ // No down migration needed since this is a data fix
+ }
+};
From 552901cc0e218a3ca37711b577c8b375d5bf81fd Mon Sep 17 00:00:00 2001
From: daniel
Date: Sun, 26 Jan 2025 00:05:22 -0700
Subject: [PATCH 4/5] Staging (#5604)
* add kickstarter and monthly users badge (#5589)
Co-authored-by: daniel
* DM
* Fix the local column for statuses to not include remote shares (#5513)
* Fix the local column for statuses to not include remote shares
* Chunk the migration
* Refactor migration
* Fix GroupController, move groups enabled check to each method to fix route:list
* Update changelog
---------
Co-authored-by: Simon Laux
Co-authored-by: Anil Kulkarni <6687139+intentionally-left-nil@users.noreply.github.com>
---
CHANGELOG.md | 1 +
app/Http/Controllers/GroupController.php | 29 ++++++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 99d2d2065..abed4f19d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -38,6 +38,7 @@
- Update SearchApiV2Service, fix hashtag search ([83c1a7fd](https://github.com/pixelfed/pixelfed/commit/83c1a7fd))
- Update AP Helpers, fix comment bug ([22eae69f](https://github.com/pixelfed/pixelfed/commit/22eae69f))
- Update ComposeController, add max_media_attachments attribute ([17918cbe](https://github.com/pixelfed/pixelfed/commit/17918cbe))
+- Fix GroupController, move groups enabled check to each method to fix route:list ([f260572e](https://github.com/pixelfed/pixelfed/commit/f260572e))
- ([](https://github.com/pixelfed/pixelfed/commit/))
## [v0.12.4 (2024-11-08)](https://github.com/pixelfed/pixelfed/compare/v0.12.4...dev)
diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php
index 881d31f01..68aadcb89 100644
--- a/app/Http/Controllers/GroupController.php
+++ b/app/Http/Controllers/GroupController.php
@@ -27,11 +27,11 @@ class GroupController extends GroupFederationController
public function __construct()
{
$this->middleware('auth');
- abort_unless(config('groups.enabled'), 404);
}
public function index(Request $request)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
return view('layouts.spa');
@@ -39,6 +39,7 @@ class GroupController extends GroupFederationController
public function home(Request $request)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
return view('layouts.spa');
@@ -46,6 +47,7 @@ class GroupController extends GroupFederationController
public function show(Request $request, $id, $path = false)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::find($id);
if (! $group || $group->status) {
@@ -61,6 +63,7 @@ class GroupController extends GroupFederationController
public function showStatus(Request $request, $gid, $sid)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::find($gid);
$pid = optional($request->user())->profile_id ?? false;
@@ -81,6 +84,7 @@ class GroupController extends GroupFederationController
public function getGroup(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::whereNull('status')->findOrFail($id);
$pid = optional($request->user())->profile_id ?? false;
@@ -91,6 +95,7 @@ class GroupController extends GroupFederationController
public function showStatusLikes(Request $request, $id, $sid)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::findOrFail($id);
$user = $request->user();
$pid = $user->profile_id;
@@ -114,6 +119,7 @@ class GroupController extends GroupFederationController
public function groupSettings(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -125,6 +131,7 @@ class GroupController extends GroupFederationController
public function joinGroup(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
abort_if($group->isMember($pid), 404);
@@ -159,6 +166,7 @@ class GroupController extends GroupFederationController
public function updateGroup(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
$this->validate($request, [
'description' => 'nullable|max:500',
'membership' => 'required|in:all,local,private',
@@ -257,11 +265,14 @@ class GroupController extends GroupFederationController
protected function toJson($group, $pid = false)
{
+ abort_unless(config('groups.enabled'), 404);
+
return GroupService::get($group->id, $pid);
}
public function groupLeave(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$pid = $request->user()->profile_id;
@@ -281,6 +292,7 @@ class GroupController extends GroupFederationController
public function cancelJoinRequest(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$pid = $request->user()->profile_id;
@@ -299,6 +311,7 @@ class GroupController extends GroupFederationController
public function metaBlockSearch(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -332,6 +345,7 @@ class GroupController extends GroupFederationController
public function reportCreate(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -368,7 +382,7 @@ class GroupController extends GroupFederationController
'You already reported this'
);
- $report = new GroupReport();
+ $report = new GroupReport;
$report->group_id = $group->id;
$report->profile_id = $pid;
$report->type = $type;
@@ -399,6 +413,7 @@ class GroupController extends GroupFederationController
public function reportAction(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -477,6 +492,7 @@ class GroupController extends GroupFederationController
public function getMemberInteractionLimits(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -492,6 +508,7 @@ class GroupController extends GroupFederationController
public function updateMemberInteractionLimits(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$group = Group::findOrFail($id);
$pid = $request->user()->profile_id;
@@ -553,6 +570,7 @@ class GroupController extends GroupFederationController
public function showProfile(Request $request, $id, $pid)
{
+ abort_unless(config('groups.enabled'), 404);
$group = Group::find($id);
if (! $group || $group->status) {
@@ -564,6 +582,7 @@ class GroupController extends GroupFederationController
public function showProfileByUsername(Request $request, $id, $pid)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
if (! $request->user()) {
return redirect("/{$pid}");
@@ -597,6 +616,7 @@ class GroupController extends GroupFederationController
public function groupInviteLanding(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort(404, 'Not yet implemented');
$group = Group::findOrFail($id);
@@ -605,6 +625,7 @@ class GroupController extends GroupFederationController
public function groupShortLinkRedirect(Request $request, $hid)
{
+ abort_unless(config('groups.enabled'), 404);
$gid = HashidService::decode($hid);
$group = Group::findOrFail($gid);
@@ -613,6 +634,7 @@ class GroupController extends GroupFederationController
public function groupInviteClaim(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
$group = GroupService::get($id);
abort_if(! $group || empty($group), 404);
@@ -621,6 +643,7 @@ class GroupController extends GroupFederationController
public function groupMemberInviteCheck(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$pid = $request->user()->profile_id;
$group = Group::findOrFail($id);
@@ -636,6 +659,7 @@ class GroupController extends GroupFederationController
public function groupMemberInviteAccept(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$pid = $request->user()->profile_id;
$group = Group::findOrFail($id);
@@ -661,6 +685,7 @@ class GroupController extends GroupFederationController
public function groupMemberInviteDecline(Request $request, $id)
{
+ abort_unless(config('groups.enabled'), 404);
abort_if(! $request->user(), 404);
$pid = $request->user()->profile_id;
$group = Group::findOrFail($id);
From 3eb9257def00e9d5831a72b3d7f6ca4ff7a9d002 Mon Sep 17 00:00:00 2001
From: tercean
Date: Mon, 3 Feb 2025 00:46:26 +0100
Subject: [PATCH 5/5] Skip thumbnail cloud upload if no thumbnail exists
migrate2cloud fails on media without thumbnail.
fix check for existing thumbnail, skip upload if none exists.
---
app/Services/MediaStorageService.php | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/Services/MediaStorageService.php b/app/Services/MediaStorageService.php
index 87bb9a586..4a6964ad1 100644
--- a/app/Services/MediaStorageService.php
+++ b/app/Services/MediaStorageService.php
@@ -85,7 +85,9 @@ class MediaStorageService
protected function localToCloud($media)
{
$path = storage_path('app/'.$media->media_path);
- $thumb = storage_path('app/'.$media->thumbnail_path);
+ if ($media->thumbnail_path) {
+ $thumb = storage_path('app/'.$media->thumbnail_path);
+ }
$p = explode('/', $media->media_path);
$name = array_pop($p);
@@ -94,7 +96,7 @@ class MediaStorageService
$storagePath = implode('/', $p);
$url = ResilientMediaStorageService::store($storagePath, $path, $name);
- if ($thumb) {
+ if ($media->thumbnail_path) {
$thumbUrl = ResilientMediaStorageService::store($storagePath, $thumb, $thumbname);
$media->thumbnail_url = $thumbUrl;
}