Skip to content

Commit 5d3f0a4

Browse files
Merge pull request #5727 from christianbeeznest/ofaj-21805-2
Course: Fix non-authenticated course 'about' page error and add subscription validation - refs BT#21805
2 parents b23148c + 207ff4d commit 5d3f0a4

File tree

4 files changed

+96
-17
lines changed

4 files changed

+96
-17
lines changed

public/main/auth/inscription.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,16 @@
174174
$exercise_redirect = isset($_REQUEST['e']) && !empty($_REQUEST['e']) ? $_REQUEST['e'] : null;
175175

176176
if (!empty($course_code_redirect)) {
177+
if (!api_is_anonymous()) {
178+
$course_info = api_get_course_info($course_code_redirect);
179+
$subscribed = CourseManager::autoSubscribeToCourse($course_code_redirect);
180+
if ($subscribed) {
181+
header('Location: ' . api_get_path(WEB_PATH) . 'course/'.$course_info['real_id'].'/home?sid=0');
182+
} else {
183+
header('Location: ' . api_get_path(WEB_PATH) . 'course/'.$course_info['real_id'].'/about');
184+
}
185+
exit;
186+
}
177187
Session::write('course_redirect', $course_code_redirect);
178188
Session::write('exercise_redirect', $exercise_redirect);
179189
}

public/main/inc/lib/course.lib.php

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,82 @@ public static function autoSubscribeToCourse($courseCode, $status = STUDENT)
684684
return self::subscribeUser($userId, $course->getId(), $status, 0);
685685
}
686686

687+
/**
688+
* Checks if the current user can subscribe to a given course.
689+
*/
690+
public static function canUserSubscribeToCourse(string $courseCode): bool
691+
{
692+
if (api_is_anonymous()) {
693+
return false;
694+
}
695+
696+
$course = Container::getCourseRepository()->findOneBy(['code' => $courseCode]);
697+
698+
if (null === $course) {
699+
return false;
700+
}
701+
702+
$visibility = (int) $course->getVisibility();
703+
704+
if (in_array($visibility, [
705+
Course::CLOSED,
706+
Course::HIDDEN,
707+
])) {
708+
return false;
709+
}
710+
711+
if (Course::REGISTERED === $visibility && false === $course->getSubscribe()) {
712+
return false;
713+
}
714+
715+
$userId = api_get_user_id();
716+
717+
$sql = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)."
718+
WHERE
719+
user_id = $userId AND
720+
relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND
721+
c_id = ".$course->getId();
722+
if (Database::num_rows(Database::query($sql)) > 0) {
723+
return false;
724+
}
725+
726+
if (SUBSCRIBE_NOT_ALLOWED === (int) $course->getSubscribe()) {
727+
return false;
728+
}
729+
730+
$extraFieldValue = new ExtraFieldValue('course');
731+
$value = $extraFieldValue->get_values_by_handler_and_field_variable(
732+
$course->getId(),
733+
'max_subscribed_students'
734+
);
735+
if (!empty($value) && isset($value['value']) && '' !== $value['value']) {
736+
$maxStudents = (int) $value['value'];
737+
$count = CourseManager::get_user_list_from_course_code(
738+
$courseCode,
739+
0,
740+
null,
741+
null,
742+
STUDENT,
743+
true,
744+
false
745+
);
746+
747+
if ($count >= $maxStudents) {
748+
return false;
749+
}
750+
}
751+
752+
if ('true' === api_get_setting('session.catalog_course_subscription_in_user_s_session')) {
753+
$user = api_get_user_entity($userId);
754+
$sessions = $user->getCurrentlyAccessibleSessions();
755+
if (empty($sessions) && $user->getSessionsAsStudent()) {
756+
return false;
757+
}
758+
}
759+
760+
return true;
761+
}
762+
687763
/**
688764
* Subscribe a user to a course. No checks are performed here to see if
689765
* course subscription is allowed.

src/CoreBundle/Controller/CourseController.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -466,19 +466,7 @@ public function about(
466466
$subscriptionUser = CourseManager::is_user_subscribed_in_course($user->getId(), $course->getCode());
467467
}
468468

469-
/*$allowSubscribe = false;
470-
if ($course->getSubscribe() || api_is_platform_admin()) {
471-
$allowSubscribe = true;
472-
}
473-
$plugin = \BuyCoursesPlugin::create();
474-
$checker = $plugin->isEnabled();
475-
$courseIsPremium = null;
476-
if ($checker) {
477-
$courseIsPremium = $plugin->getItemByProduct(
478-
$courseId,
479-
\BuyCoursesPlugin::PRODUCT_TYPE_COURSE
480-
);
481-
}*/
469+
$allowSubscribe = CourseManager::canUserSubscribeToCourse($course->getCode());
482470

483471
$image = Container::getIllustrationRepository()->getIllustrationUrl($course, 'course_picture_medium');
484472

@@ -499,6 +487,7 @@ public function about(
499487
'is_premium' => '',
500488
'token' => '',
501489
'base_url' => $request->getSchemeAndHttpHost(),
490+
'allow_subscribe' => $allowSubscribe,
502491
];
503492

504493
$metaInfo = '<meta property="og:url" content="'.$urlCourse.'" />';

src/CoreBundle/Resources/views/Course/about.html.twig

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
<div class="bg-white shadow rounded p-4">
8080
<h3 class="sub-title text-xl font-bold mb-3">{{ "Course Information"|trans }}</h3>
8181
<div class="course-information">
82-
<!-- Añade aquí la información del curso -->
82+
{{ description | raw }}
8383
</div>
8484
</div>
8585
</div>
@@ -91,14 +91,18 @@
9191
<div class="session-subscribe mt-2">
9292
{% if not is_granted('IS_AUTHENTICATED') %}
9393
{% if 'allow_registration'|api_get_setting != 'false' %}
94-
<a href="{{ base_url ~ '/main/auth/inscription.php' ~ redirect_to_session }}" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">
94+
<a href="{{ base_url ~ '/main/auth/inscription.php?c=' ~ course.code }}" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">
9595
<i class="fa fa-pencil" aria-hidden="true"></i> {{ 'Sign Up'|trans }}
9696
</a>
9797
{% endif %}
9898
{% elseif subscription %}
99-
<a href="{{ url('home') }}courses/{{ course.code }}/index.php?sid=0" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">{{ 'Course Homepage'|trans }}</a>
99+
<a href="{{ base_url }}/course/{{ course.id }}/home?sid=0" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">{{ 'Course Homepage'|trans }}</a>
100+
{% elseif allow_subscribe %}
101+
<a href="{{ base_url }}/main/auth/inscription.php?c={{ course.code }}" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">{{ 'Subscribe'|trans }}</a>
100102
{% else %}
101-
<a href="{{ url('home') }}courses/{{ course.code }}/index.php?action=subscribe&sec_token={{ token }}" class="btn btn--success w-full py-2 mt-2 text-white bg-green-600 rounded hover:bg-green-700">{{ 'Subscribe'|trans }}</a>
103+
<button class="btn btn--success w-full py-2 mt-2 text-white bg-gray-400 rounded" title="{{ 'Subscription is not allowed for this course'|trans }}" disabled>
104+
{{ 'Subscription Not Available'|trans }}
105+
</button>
102106
{% endif %}
103107
</div>
104108
{% else %}

0 commit comments

Comments
 (0)