input('view')) { case 'new': //最新公开课程列表 $table = Course::where('publicity', 30); break; case 'open': /** * 开放课程列表 * 开放规则: * 1. 公开 * 2. 课程开始时间比现在时间晚 */ $table = Course::where('publicity', 30) ->whereDate('start_at', ">", date("Y-m-d", strtotime("today"))); break; case 'close': /** * 已经关闭课程列表 * 判定规则: * 1. 公开 * 2. 课程开始时间比现在时间早 */ $table = Course::where('publicity', 30) ->whereDate('start_at', "<=", date("Y-m-d", strtotime("today"))); break; case 'create': # 获取 studio 建立的所有 course $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 if ($user['user_uid'] !== StudioApi::getIdByName($request->input('studio'))) { return $this->error(__('auth.failed')); } $table = Course::where('studio_id', $user["user_uid"]); break; case 'study': $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //我学习的课程 $course = CourseMember::where('user_id', $user["user_uid"]) ->where('role', 'student') ->where('is_current', true) ->select('course_id') ->get(); $courseId = []; foreach ($course as $key => $value) { # code... $courseId[] = $value->course_id; } $table = Course::whereIn('id', $courseId); break; case 'teach': //我任教的课程 $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } $course = CourseMember::where('user_id', $user["user_uid"]) ->whereIn('role', ['assistant', 'manager', 'teacher']) ->where('is_current', true) ->select('course_id') ->get(); $courseId = []; foreach ($course as $key => $value) { # code... $courseId[] = $value->course_id; } $table = Course::whereIn('id', $courseId); break; } $table = $table->select($indexCol); if ($request->has('search')) { $table = $table->where('title', 'like', $request->input('search') . "%"); } $count = $table->count(); $table = $table->orderBy( $request->input('order', 'updated_at'), $request->input('dir', 'desc') ); $table = $table->skip($request->input('offset', 0)) ->take($request->input('limit', 1000)); $result = $table->get(); return $this->ok(["rows" => CourseResource::collection($result), "count" => $count]); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function showMyCourseNumber(Request $request) { $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //我建立的课程 $create = Course::where('studio_id', $user["user_uid"])->count(); //我学习的课程 $study = CourseMember::where('user_id', $user["user_uid"]) ->where('role', 'student') ->where('is_current', true) ->count(); //我任教的课程 $teach = CourseMember::where('user_id', $user["user_uid"]) ->where('is_current', true) ->whereIn('role', ['assistant', 'manager', 'teacher']) ->count(); return $this->ok(['create' => $create, 'teach' => $teach, 'study' => $study]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 $studio_id = StudioApi::getIdByName($request->input('studio')); if ($user['user_uid'] !== $studio_id) { return $this->error(__('auth.failed')); } //查询是否重复 if (Course::where('title', $request->input('title')) ->where('studio_id', $user['user_uid']) ->exists() ) { return $this->error(__('validation.exists', ['name'])); } try { $course = new Course; DB::transaction(function () use ($course, $request, $studio_id, $user) { $saveCourse = false; $saveCourseMember = false; $course->id = Str::uuid(); $course->title = $request->input('title'); $course->studio_id = $studio_id; $saveCourse = $course->save(); //添加owner $newMember = new CourseMember(); $newMember->user_id = $user['user_uid']; $newMember->course_id = $course->id; $newMember->role = 'owner'; $saveCourseMember = $newMember->save(); }); } catch (\Exception $e) { return $this->error('course create fail', 500, 500); } return $this->ok(new CourseResource($course)); } /** * Display the specified resource. * * @param \App\Models\Course $course * @return \Illuminate\Http\Response */ public function show(Course $course) { // return $this->ok(new CourseResource($course)); } private function userCanManage($courseId, $userUid) { //判断是否是manager $role = CourseMember::where('course_id', $courseId) ->where('is_current', true) ->where('user_id', $userUid) ->value('role'); $manager = ['owner', 'teacher', 'manager']; if (in_array($role, $manager)) { return true; } return false; } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Course $course * @return \Illuminate\Http\Response */ public function update(Request $request, Course $course) { // $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 $canManage = $this->userCanManage($course->id, $user['user_uid']); if (!$canManage) { return $this->error(__('auth.failed'), 403, 403); } //查询标题是否重复 if (Course::where('title', $request->input('title')) ->where('studio_id', $user['user_uid']) ->exists() ) { if ($course->title !== $request->input('title')) { return $this->error(__('validation.exists', ['name'])); } } $course->title = $request->input('title'); $course->subtitle = $request->input('subtitle'); $course->summary = $request->input('summary'); $course->number = $request->input('number', 0); if ($request->has('cover')) { $course->cover = $request->input('cover'); } $course->content = $request->input('content'); $course->sign_up_message = $request->input('sign_up_message'); if ($request->has('teacher_id')) { $course->teacher = $request->input('teacher_id'); } if ($request->has('anthology_id')) { $course->anthology_id = $request->input('anthology_id'); } $course->channel_id = $request->input('channel_id'); if ($request->has('publicity')) { $course->publicity = $request->input('publicity'); } $course->start_at = $request->input('start_at'); $course->end_at = $request->input('end_at'); $course->sign_up_start_at = $request->input('sign_up_start_at'); $course->sign_up_end_at = $request->input('sign_up_end_at'); $course->join = $request->input('join'); $course->save(); return $this->ok($course); } /** * Remove the specified resource from storage. * @param \Illuminate\Http\Request $request * @param \App\Models\Course $course * @return \Illuminate\Http\Response */ public function destroy(Request $request, Course $course) { // $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 if ($user['user_uid'] !== $course->studio_id) { return $this->error(__('auth.failed')); } $delete = 0; DB::transaction(function () use ($delete, $course) { //删除group member $memberDelete = CourseMember::where('course_id', $course->id)->delete(); $delete = $course->delete(); }); return $this->ok($delete); } }