1
0

MicroController.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\{
  5. Profile,
  6. Status,
  7. };
  8. use Auth, DB, Purify;
  9. use Illuminate\Validation\Rule;
  10. class MicroController extends Controller
  11. {
  12. public function __construct()
  13. {
  14. $this->middleware('auth');
  15. }
  16. public function composeText(Request $request)
  17. {
  18. $this->validate($request, [
  19. 'type' => [
  20. 'required',
  21. 'string',
  22. Rule::in(['text'])
  23. ],
  24. 'title' => 'nullable|string|max:140',
  25. 'content' => 'required|string|max:500',
  26. 'visibility' => [
  27. 'required',
  28. 'string',
  29. Rule::in([
  30. 'public',
  31. 'unlisted',
  32. 'private',
  33. 'draft'
  34. ])
  35. ]
  36. ]);
  37. $profile = Auth::user()->profile;
  38. $title = $request->input('title');
  39. $content = $request->input('content');
  40. $visibility = $request->input('visibility');
  41. $status = DB::transaction(function() use($profile, $content, $visibility, $title) {
  42. $status = new Status;
  43. $status->type = 'text';
  44. $status->profile_id = $profile->id;
  45. $status->caption = strip_tags($content);
  46. $status->rendered = Purify::clean($content);
  47. $status->is_nsfw = false;
  48. // TODO: remove deprecated visibility in favor of scope
  49. $status->visibility = $visibility;
  50. $status->scope = $visibility;
  51. $status->entities = json_encode(['title'=>$title]);
  52. $status->save();
  53. return $status;
  54. });
  55. $fractal = new \League\Fractal\Manager();
  56. $fractal->setSerializer(new \League\Fractal\Serializer\ArraySerializer());
  57. $s = new \League\Fractal\Resource\Item($status, new \App\Transformer\Api\StatusTransformer());
  58. return $fractal->createData($s)->toArray();
  59. }
  60. }