diff --git a/app/Http/Controllers/ProfileSponsorController.php b/app/Http/Controllers/ProfileSponsorController.php new file mode 100644 index 000000000..e0d5f900f --- /dev/null +++ b/app/Http/Controllers/ProfileSponsorController.php @@ -0,0 +1,16 @@ +firstOrFail()->sponsors; + return response($res)->header('Content-Type', 'application/json'); + } +} diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 282782ba9..126326969 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\AccountLog; use App\Following; +use App\ProfileSponsor; use App\Report; use App\UserFilter; use Auth, Cookie, DB, Cache, Purify; @@ -166,5 +167,48 @@ class SettingsController extends Controller return response()->json([200])->cookie($cookie); } + + public function sponsor() + { + $default = [ + 'patreon' => null, + 'liberapay' => null, + 'opencollective' => null + ]; + $sponsors = ProfileSponsor::whereProfileId(Auth::user()->profile->id)->first(); + $sponsors = $sponsors ? json_decode($sponsors->sponsors, true) : $default; + return view('settings.sponsor', compact('sponsors')); + } + + public function sponsorStore(Request $request) + { + $this->validate($request, [ + 'patreon' => 'nullable|string', + 'liberapay' => 'nullable|string', + 'opencollective' => 'nullable|string' + ]); + + $patreon = $request->input('patreon'); + $liberapay = $request->input('liberapay'); + $opencollective = $request->input('opencollective'); + + if(empty($patreon) && empty($liberapay) && empty($opencollective)) { + abort(400, 'Bad request'); + } + + $res = [ + 'patreon' => $patreon, + 'liberapay' => $liberapay, + 'opencollective' => $opencollective + ]; + + $sponsors = ProfileSponsor::firstOrCreate([ + 'profile_id' => Auth::user()->profile_id ?? Auth::user()->profile->id + ]); + $sponsors->sponsors = json_encode($res); + $sponsors->save(); + $sponsors = $res; + return redirect(route('settings'))->with('status', 'Sponsor settings successfully updated!');; + } } diff --git a/app/ProfileSponsor.php b/app/ProfileSponsor.php new file mode 100644 index 000000000..1ba4a6e09 --- /dev/null +++ b/app/ProfileSponsor.php @@ -0,0 +1,15 @@ +belongsTo(Profile::class); + } +} diff --git a/database/migrations/2019_07_11_234836_create_profile_sponsors_table.php b/database/migrations/2019_07_11_234836_create_profile_sponsors_table.php new file mode 100644 index 000000000..15920c724 --- /dev/null +++ b/database/migrations/2019_07_11_234836_create_profile_sponsors_table.php @@ -0,0 +1,33 @@ +bigIncrements('id'); + $table->bigInteger('profile_id')->unsigned()->unique()->index(); + $table->json('sponsors')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('profile_sponsors'); + } +} diff --git a/resources/assets/js/components/Profile.vue b/resources/assets/js/components/Profile.vue index 2ce177e8a..49a2f3cc5 100644 --- a/resources/assets/js/components/Profile.vue +++ b/resources/assets/js/components/Profile.vue @@ -1,1091 +1,1135 @@ diff --git a/resources/views/settings/partial/sidebar.blade.php b/resources/views/settings/partial/sidebar.blade.php index 5606a2b74..43a47b41f 100644 --- a/resources/views/settings/partial/sidebar.blade.php +++ b/resources/views/settings/partial/sidebar.blade.php @@ -33,6 +33,9 @@ + diff --git a/resources/views/settings/sponsor.blade.php b/resources/views/settings/sponsor.blade.php new file mode 100644 index 000000000..f43c0d7f4 --- /dev/null +++ b/resources/views/settings/sponsor.blade.php @@ -0,0 +1,48 @@ +@extends('settings.template') + +@section('section') + +
+

Sponsor

+

Add crowdfunding links to your profile.

+
+
+
+ @csrf + +
+ +
+ +

+ Example: patreon.com/dansup +

+
+
+
+ +
+ +

+ Example: liberapay.com/pixelfed +

+
+
+
+ +
+ +

+ Example: opencollective.com/pixelfed +

+
+
+
+
+
+ +
+
+
+ +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index f94072f89..173f207d9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -114,6 +114,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('exp/rec', 'ApiController@userRecommendations'); Route::post('discover/tag/subscribe', 'HashtagFollowController@store')->middleware('throttle:maxHashtagFollowsPerHour,60')->middleware('throttle:maxHashtagFollowsPerDay,1440');; Route::get('discover/tag/list', 'HashtagFollowController@getTags'); + Route::get('profile/sponsor/{id}', 'ProfileSponsorController@get'); }); }); @@ -261,6 +262,8 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('invites/create', 'UserInviteController@create')->name('settings.invites.create'); Route::post('invites/create', 'UserInviteController@store'); Route::get('invites', 'UserInviteController@show')->name('settings.invites'); + Route::get('sponsor', 'SettingsController@sponsor')->name('settings.sponsor'); + Route::post('sponsor', 'SettingsController@sponsorStore'); }); Route::group(['prefix' => 'site'], function () {