parent
2db0656f12
commit
4a79e1debb
@ -0,0 +1,109 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Chamilo\CoreBundle\ServiceHelper; |
||||||
|
|
||||||
|
use Chamilo\CoreBundle\Entity\Course; |
||||||
|
use Chamilo\CoreBundle\Entity\Session; |
||||||
|
use Chamilo\CoreBundle\Entity\User; |
||||||
|
use Chamilo\CoreBundle\Settings\SettingsManager; |
||||||
|
use ExtraFieldValue; |
||||||
|
use Symfony\Bundle\SecurityBundle\Security; |
||||||
|
use Symfony\Component\HttpFoundation\RequestStack; |
||||||
|
|
||||||
|
readonly class IsAllowedToEditHelper |
||||||
|
{ |
||||||
|
public function __construct( |
||||||
|
private SettingsManager $settingsManager, |
||||||
|
private Security $security, |
||||||
|
private RequestStack $requestStack, |
||||||
|
private CidReqHelper $cidReqHelper, |
||||||
|
) { |
||||||
|
} |
||||||
|
|
||||||
|
public function check( |
||||||
|
bool $tutor = false, |
||||||
|
bool $coach = false, |
||||||
|
bool $sessionCoach = false, |
||||||
|
bool $checkStudentView = true, |
||||||
|
?Course $course = null, |
||||||
|
?Session $session = null, |
||||||
|
): bool { |
||||||
|
/** @var User $user */ |
||||||
|
$user = $this->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; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue