revokeCourseUser($course, $user); $this->handleCourseUser($course, $user); } protected function handleCourseUser(CourseModel $course, UserModel $user) { $expiryTime = strtotime("+{$course->study_expiry} months"); if ($course->model == CourseModel::MODEL_OFFLINE) { $expiryTime = strtotime($course->attrs['end_date']); } $sourceType = CourseUserModel::SOURCE_CHARGE; $this->createCourseUser($course, $user, $expiryTime, $sourceType); $this->recountCourseUsers($course); $this->recountUserCourses($user); } 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) { $this->deleteCourseUser($relation); } } } }