1
0

MicroController.php 1.9 KB

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