checkChapter($id); $course = $this->checkCourse($chapter->course_id); $this->course = $course; $user = $this->getCurrentUser(); $this->user = $user; $this->setCourseUser($course, $user); $this->handleCourseUser($course, $user); $this->setChapterUser($chapter, $user); $this->handleChapterUser($chapter, $user); return $this->handleChapter($chapter, $user); } protected function handleChapter(ChapterModel $chapter, UserModel $user) { $service = new BasicInfo(); $result = $service->handleBasicInfo($chapter); /** * 无内容查看权限,过滤掉相关内容 */ if (!$this->ownedChapter) { if ($chapter->model == CourseModel::MODEL_VOD) { $result['play_urls'] = []; } elseif ($chapter->model == CourseModel::MODEL_LIVE) { $result['play_urls'] = []; } elseif ($chapter->model == CourseModel::MODEL_READ) { $result['content'] = ''; } } $result['course'] = $service->handleCourseInfo($this->course); $result['me'] = $this->handleMeInfo($chapter, $user); return $result; } protected function handleCourseUser(CourseModel $course, UserModel $user) { if ($user->id == 0) return; if ($this->joinedCourse) return; if (!$this->ownedCourse) return; $courseUser = new CourseUserModel(); $roleType = CourseUserModel::ROLE_STUDENT; $sourceType = CourseUserModel::SOURCE_FREE; if ($course->market_price > 0 && $course->vip_price == 0 && $user->vip == 1) { $sourceType = CourseUserModel::SOURCE_VIP; } $courseUser->course_id = $course->id; $courseUser->user_id = $user->id; $courseUser->source_type = $sourceType; $courseUser->role_type = $roleType; $courseUser->create(); $this->courseUser = $courseUser; $this->joinedCourse = true; $this->incrCourseUserCount($course); $this->incrUserCourseCount($user); } protected function handleChapterUser(ChapterModel $chapter, UserModel $user) { if ($user->id == 0) return; if (!$this->joinedCourse) return; if (!$this->ownedChapter) return; if ($this->joinedChapter) return; $chapterUser = new ChapterUserModel(); $chapterUser->plan_id = $this->courseUser->plan_id; $chapterUser->course_id = $chapter->course_id; $chapterUser->chapter_id = $chapter->id; $chapterUser->user_id = $user->id; $chapterUser->create(); $this->chapterUser = $chapterUser; $this->joinedChapter = true; $this->incrChapterUserCount($chapter); } protected function handleMeInfo(ChapterModel $chapter, UserModel $user) { $me = [ 'role_type' => 0, 'plan_id' => 0, 'position' => 0, 'logged' => 0, 'joined' => 0, 'owned' => 0, 'liked' => 0, ]; if ($user->id > 0) { if ($this->joinedChapter) { $me['joined'] = 1; } if ($this->ownedChapter) { $me['owned'] = 1; } $me['logged'] = 1; $likeRepo = new ChapterLikeRepo(); $like = $likeRepo->findChapterLike($chapter->id, $user->id); if ($like && $like->deleted == 0) { $me['liked'] = 1; } if ($this->courseUser) { $me['role_type'] = $this->courseUser->role_type; $me['plan_id'] = $this->courseUser->plan_id; } if ($this->chapterUser) { $me['position'] = $this->chapterUser->position; } } return $me; } protected function incrUserCourseCount(UserModel $user) { $user->course_count += 1; $user->update(); } protected function incrCourseUserCount(CourseModel $course) { $course->user_count += 1; $course->update(); } protected function incrChapterUserCount(ChapterModel $chapter) { $chapter->user_count += 1; $chapter->update(); $parent = $this->checkChapter($chapter->parent_id); $parent->user_count += 1; $parent->update(); } }