Browse Source

Update ComposeController

Daniel Supernault 3 years ago
parent
commit
fee2857deb
2 changed files with 55 additions and 1 deletions
  1. 51 1
      app/Http/Controllers/ComposeController.php
  2. 4 0
      config/instance.php

+ 51 - 1
app/Http/Controllers/ComposeController.php

@@ -18,6 +18,7 @@ use App\{
 	UserFilter,
 	UserFilter,
 	UserSetting
 	UserSetting
 };
 };
+use App\Models\Poll;
 use App\Transformer\Api\{
 use App\Transformer\Api\{
 	MediaTransformer,
 	MediaTransformer,
 	MediaDraftTransformer,
 	MediaDraftTransformer,
@@ -42,7 +43,7 @@ use App\Services\MediaPathService;
 use App\Services\MediaBlocklistService;
 use App\Services\MediaBlocklistService;
 use App\Services\MediaStorageService;
 use App\Services\MediaStorageService;
 use App\Services\MediaTagService;
 use App\Services\MediaTagService;
-use App\Services\ServiceService;
+use App\Services\StatusService;
 use Illuminate\Support\Str;
 use Illuminate\Support\Str;
 use App\Util\Lexer\Autolink;
 use App\Util\Lexer\Autolink;
 use App\Util\Lexer\Extractor;
 use App\Util\Lexer\Extractor;
@@ -682,4 +683,53 @@ class ComposeController extends Controller
 			return json_decode($res->compose_settings, true);
 			return json_decode($res->compose_settings, true);
 		}));
 		}));
 	}
 	}
+
+	public function createPoll(Request $request)
+	{
+		$this->validate($request, [
+			'caption' => 'nullable|string|max:'.config('pixelfed.max_caption_length', 500),
+			'cw' => 'nullable|boolean',
+			'visibility' => 'required|string|in:public,private',
+			'comments_disabled' => 'nullable',
+			'expiry' => 'required|in:60,360,1440,10080',
+			'pollOptions' => 'required|array|min:1|max:4'
+		]);
+
+		abort_if(config('instance.polls.enabled') == false, 404, 'Polls not enabled');
+
+		abort_if(Status::whereType('poll')
+			->whereProfileId($request->user()->profile_id)
+			->whereCaption($request->input('caption'))
+			->where('created_at', '>', now()->subDays(2))
+			->exists()
+		, 422, 'Duplicate detected.');
+
+		$status = new Status;
+		$status->profile_id = $request->user()->profile_id;
+		$status->caption = $request->input('caption');
+		$status->rendered = Autolink::create()->autolink($status->caption);
+		$status->visibility = 'draft';
+		$status->scope = 'draft';
+		$status->type = 'poll';
+		$status->local = true;
+		$status->save();
+
+		$poll = new Poll;
+		$poll->status_id = $status->id;
+		$poll->profile_id = $status->profile_id;
+		$poll->poll_options = $request->input('pollOptions');
+		$poll->expires_at = now()->addMinutes($request->input('expiry'));
+		$poll->cached_tallies = collect($poll->poll_options)->map(function($o) {
+			return 0;
+		})->toArray();
+		$poll->save();
+
+		$status->visibility = $request->input('visibility');
+		$status->scope = $request->input('visibility');
+		$status->save();
+
+		NewStatusPipeline::dispatch($status);
+
+		return ['url' => $status->url()];
+	}
 }
 }

+ 4 - 0
config/instance.php

@@ -47,6 +47,10 @@ return [
 		]
 		]
 	],
 	],
 
 
+	'polls' => [
+		'enabled' => false
+	],
+
 	'stories' => [
 	'stories' => [
 		'enabled' => env('STORIES_ENABLED', false),
 		'enabled' => env('STORIES_ENABLED', false),
 	],
 	],