revokeCourseUser($course, $user); $this->handleCourseUser($course, $user); $this->handleImGroupUser($course, $user); } protected function handleCourseUser(CourseModel $course, UserModel $user) { if ($course->model == CourseModel::MODEL_OFFLINE) { $expiryTime = strtotime($course->attrs['end_date']); } else { $expiryTime = strtotime("+{$course->study_expiry} months"); } $courseUser = new CourseUserModel(); $courseUser->user_id = $user->id; $courseUser->course_id = $course->id; $courseUser->expiry_time = $expiryTime; $courseUser->role_type = CourseUserModel::ROLE_STUDENT; $courseUser->source_type = CourseUserModel::SOURCE_CHARGE; $courseUser->create(); $course->user_count += 1; $course->update(); $user->course_count += 1; $user->update(); } protected function handleImGroupUser(CourseModel $course, UserModel $user) { $groupRepo = new ImGroupRepo(); $group = $groupRepo->findByCourseId($course->id); $imUserRepo = new ImUserRepo(); $imUser = $imUserRepo->findById($user->id); $groupUserRepo = new ImGroupUserRepo(); $groupUser = $groupUserRepo->findGroupUser($group->id, $user->id); if (!$groupUser) { $groupUser = new ImGroupUserModel(); $groupUser->group_id = $group->id; $groupUser->user_id = $user->id; $groupUser->create(); $imUser->group_count += 1; $imUser->update(); $group->user_count += 1; $group->update(); } } protected function revokeCourseUser(CourseModel $course, UserModel $user) { $courseUserRepo = new CourseUserRepo(); $relations = $courseUserRepo->findByCourseAndUserId($course->id, $user->id); if ($relations->count() == 0) return; foreach ($relations as $relation) { if ($relation->deleted == 0) { $relation->deleted = 1; $relation->update(); } } } }