diff --git a/src/CoreBundle/ServiceHelper/IsAllowedToEditHelper.php b/src/CoreBundle/ServiceHelper/IsAllowedToEditHelper.php new file mode 100644 index 0000000000..658f642019 --- /dev/null +++ b/src/CoreBundle/ServiceHelper/IsAllowedToEditHelper.php @@ -0,0 +1,109 @@ +security->getUser(); + + $studentViewIsActive = 'studentview' === $this->requestStack->getSession()->get('studentview'); + + $isSessionAdminAllowedToEdit = 'true' === $this->settingsManager->getSetting('session.session_admins_edit_courses_content'); + + if ($user->isAdmin() || ($user->isSessionAdmin() && $isSessionAdminAllowedToEdit)) { + if ($checkStudentView && $studentViewIsActive) { + return false; + } + + return true; + } + + $session = $session ?: $this->cidReqHelper->getSessionEntity(); + $course = $course ?: $this->cidReqHelper->getCourseEntity(); + + if ($session && $course && 'true' === $this->settingsManager->getSetting('session.session_courses_read_only_mode')) { + $lockExrafieldField = (new ExtraFieldValue('course')) + ->get_values_by_handler_and_field_variable( + $course->getId(), + 'session_courses_read_only_mode' + ); + + if (!empty($lockExrafieldField['value'])) { + return false; + } + } + + $isCoachAllowedToEdit = $session?->hasCoach($user) && !$studentViewIsActive; + $sessionVisibility = $session?->setAccessVisibilityByUser($user); + $isCourseAdmin = $user->hasRole('ROLE_CURRENT_COURSE_TEACHER') || $user->hasRole('ROLE_CURRENT_COURSE_SESSION_TEACHER'); + + if (!$isCourseAdmin && $tutor) { + $isCourseAdmin = $user->isCourseTutor($course, $session); + } + + if (!$isCourseAdmin && $coach) { + if (Session::READ_ONLY === $sessionVisibility) { + $isCoachAllowedToEdit = false; + } + + if ('true' === $this->settingsManager->getSetting('session.allow_coach_to_edit_course_session')) { + $isCourseAdmin = $isCoachAllowedToEdit; + } + } + + if (!$isCourseAdmin && $sessionCoach) { + $isCourseAdmin = $isCoachAllowedToEdit; + } + + if ('true' !== $this->settingsManager->getSetting('course.student_view_enabled')) { + return $isCourseAdmin; + } + + if ($session) { + if (Session::READ_ONLY === $sessionVisibility) { + $isCoachAllowedToEdit = false; + } + + $isAllowed = 'true' === $this->settingsManager->getSetting('session.allow_coach_to_edit_course_session') && $isCoachAllowedToEdit; + + if ($checkStudentView) { + $isAllowed = $isAllowed && !$studentViewIsActive; + } + } elseif ($checkStudentView) { + $isAllowed = $isCourseAdmin && !$studentViewIsActive; + } else { + $isAllowed = $isCourseAdmin; + } + + return $isAllowed; + } +} \ No newline at end of file