CreateGroupsController.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Http\Controllers\Groups;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use App\Services\GroupService;
  6. use App\Models\Group;
  7. use App\Models\GroupMember;
  8. class CreateGroupsController extends Controller
  9. {
  10. public function __construct()
  11. {
  12. $this->middleware('auth');
  13. }
  14. public function checkCreatePermission(Request $request)
  15. {
  16. abort_if(!$request->user(), 404);
  17. $pid = $request->user()->profile_id;
  18. $config = GroupService::config();
  19. if($request->user()->is_admin) {
  20. $allowed = true;
  21. } else {
  22. $max = $config['limits']['user']['create']['max'];
  23. $allowed = Group::whereProfileId($pid)->count() <= $max;
  24. }
  25. return ['permission' => (bool) $allowed];
  26. }
  27. public function storeGroup(Request $request)
  28. {
  29. abort_if(!$request->user(), 404);
  30. $this->validate($request, [
  31. 'name' => 'required',
  32. 'description' => 'nullable|max:500',
  33. 'membership' => 'required|in:public,private,local'
  34. ]);
  35. $pid = $request->user()->profile_id;
  36. $config = GroupService::config();
  37. abort_if($config['limits']['user']['create']['new'] == false && $request->user()->is_admin == false, 422, 'Invalid operation');
  38. $max = $config['limits']['user']['create']['max'];
  39. // abort_if(Group::whereProfileId($pid)->count() <= $max, 422, 'Group limit reached');
  40. $group = new Group;
  41. $group->profile_id = $pid;
  42. $group->name = $request->input('name');
  43. $group->description = $request->input('description', null);
  44. $group->is_private = $request->input('membership') == 'private';
  45. $group->local_only = $request->input('membership') == 'local';
  46. $group->metadata = $request->input('configuration');
  47. $group->save();
  48. GroupService::log($group->id, $pid, 'group:created');
  49. $member = new GroupMember;
  50. $member->group_id = $group->id;
  51. $member->profile_id = $pid;
  52. $member->role = 'founder';
  53. $member->local_group = true;
  54. $member->local_profile = true;
  55. $member->save();
  56. GroupService::log(
  57. $group->id,
  58. $pid,
  59. 'group:joined',
  60. null,
  61. GroupMember::class,
  62. $member->id
  63. );
  64. return [
  65. 'id' => $group->id,
  66. 'url' => $group->url()
  67. ];
  68. }
  69. }