Adding hosting_limit_active_courses setting see BT#9175

1.9.x
Julio Montoya 10 years ago
parent 2024674fa8
commit 218dc6a4d7
  1. 134
      main/inc/lib/course.lib.php
  2. 5
      main/install/configuration.dist.php

@ -44,16 +44,36 @@ class CourseManager
if (api_get_multiple_access_url()) {
$access_url_id = api_get_current_access_url_id();
}
if (is_array($_configuration[$access_url_id]) &&
isset($_configuration[$access_url_id]['hosting_limit_courses']) &&
$_configuration[$access_url_id]['hosting_limit_courses'] > 0
) {
$num = self::count_courses();
if ($num >= $_configuration[$access_url_id]['hosting_limit_courses']) {
api_warn_hosting_contact('hosting_limit_courses');
return api_set_failure('PortalCoursesLimitReached');
if (isset($_configuration[$access_url_id]) &&
is_array($_configuration[$access_url_id])
){
if (isset($_configuration[$access_url_id]['hosting_limit_courses']) &&
$_configuration[$access_url_id]['hosting_limit_courses'] > 0
) {
$num = self::count_courses($access_url_id);
if ($num >= $_configuration[$access_url_id]['hosting_limit_courses']) {
api_warn_hosting_contact('hosting_limit_courses');
return api_set_failure(get_lang('PortalCoursesLimitReached'));
}
}
if (isset($_configuration[$access_url_id]['hosting_limit_active_courses']) &&
$_configuration[$access_url_id]['hosting_limit_active_courses'] > 0
) {
$num = self::countActiveCourses($access_url_id);
if ($num >= $_configuration[$access_url_id]['hosting_limit_active_courses']) {
api_warn_hosting_contact('hosting_limit_active_courses');
return api_set_failure(
get_lang('PortalActiveCoursesLimitReached')
);
}
}
}
if (empty($params['title'])) {
return false;
}
@ -1018,6 +1038,7 @@ class CourseManager
* @param boolean $user_is_registered_in_real_course
* @param string $real_course_name, the title of the real course
* @param array $virtual_course_list, the list of virtual courses
* @deprecated
*/
public static function create_combined_name($user_is_registered_in_real_course, $real_course_name, $virtual_course_list)
{
@ -1039,6 +1060,7 @@ class CourseManager
/**
* Create a course code based on all real and virtual courses the user is registered in.
* @deprecated
*/
public static function create_combined_code($user_is_registered_in_real_course, $real_course_code, $virtual_course_list)
{
@ -1128,7 +1150,7 @@ class CourseManager
/**
* This function returns the course code of the real course
* to which a virtual course is linked.
*
* @deprecated
* @param the course code of the virtual course
* @return the course code of the real course
*/
@ -1139,16 +1161,45 @@ class CourseManager
return $result['target_course_code'];
}
/*
USER FUNCTIONS
*/
/**
* @param int $userId
* @param array $courseInfo
* @return bool
*/
public static function isUserSubscribedInCourseAsDrh($userId, $courseInfo)
{
$userId = intval($userId);
if (!api_is_drh()) {
return false;
}
if (empty($courseInfo) || empty($userId)) {
return false;
}
$courseCode = Database::escape_string($courseInfo['code']);
$table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "SELECT * FROM $table
WHERE
user_id = $userId AND
relation_type = ".COURSE_RELATION_TYPE_RRHH." AND
course_code = $courseCode ";
$result = Database::fetch_array(Database::query($sql));
if (!empty($result)) {
// The user has been registered in this course.
return true;
}
}
/**
* Check if user is subscribed inside a course
* @param int User id
* @param string Course code, if this parameter is null, it'll check for all courses
* @param bool True for checking inside sessions too, by default is not checked
* @return bool true if the user is registered in the course, false otherwise
* @param int $user_id
* @param string $course_code, if this parameter is null, it'll check for all courses
* @param bool $in_a_session True for checking inside sessions too, by default is not checked
* @return bool $session_id true if the user is registered in the course, false otherwise
*/
public static function is_user_subscribed_in_course(
$user_id,
@ -1156,7 +1207,6 @@ class CourseManager
$in_a_session = false,
$session_id = null
) {
$user_id = intval($user_id);
if (empty($session_id)) {
@ -1186,13 +1236,14 @@ class CourseManager
return false;
}
$sql = 'SELECT 1 FROM '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).
$tableSessionCourseUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sql = 'SELECT 1 FROM '.$tableSessionCourseUser.
' WHERE id_user = '.$user_id.' '.$condition_course;
if (Database::num_rows(Database::query($sql)) > 0) {
return true;
}
$sql = 'SELECT 1 FROM '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).
$sql = 'SELECT 1 FROM '.$tableSessionCourseUser.
' WHERE id_user = '.$user_id.' AND status=2 '.$condition_course;
if (Database::num_rows(Database::query($sql)) > 0) {
return true;
@ -4546,21 +4597,62 @@ class CourseManager
/**
* Get courses count
* @param int Access URL ID (optional)
* @param int $visibility
*
* @return int Number of courses
*/
public static function count_courses($access_url_id = null)
public static function count_courses($access_url_id = null, $visibility = null)
{
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$table_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql = "SELECT count(id) FROM $table_course c";
if (!empty($access_url_id) && $access_url_id == intval($access_url_id)) {
$sql .= ", $table_course_rel_access_url u WHERE c.code = u.course_code AND u.access_url_id = $access_url_id";
$sql .= ", $table_course_rel_access_url u
WHERE c.code = u.course_code AND u.access_url_id = $access_url_id";
if (!empty($visibility)) {
$visibility = intval($visibility);
$sql .= " AND visibility = $visibility ";
}
} else {
if (!empty($visibility)) {
$visibility = intval($visibility);
$sql .= " WHERE visibility = $visibility ";
}
}
$res = Database::query($sql);
$row = Database::fetch_row($res);
return $row[0];
}
/**
* Get active courses count.
* Active = all courses except the ones with hidden visibility.
*
* @param int $urlId Access URL ID (optional)
* @return int Number of courses
*/
public static function countActiveCourses($urlId = null)
{
$table_course = Database::get_main_table(TABLE_MAIN_COURSE);
$table_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql = "SELECT count(id) FROM $table_course c";
if (!empty($urlId) && $urlId == intval($urlId)) {
$sql .= ", $table_course_rel_access_url u
WHERE
c.code = u.course_code AND
u.access_url_id = $urlId AND
visibility <> ".COURSE_VISIBILITY_HIDDEN
;
} else {
$sql .= " WHERE visibility <> ".COURSE_VISIBILITY_HIDDEN;
}
$res = Database::query($sql);
$row = Database::fetch_row($res);
return $row[0];
}
/**
* Get available le courses count
* @param int Access URL ID (optional)

@ -123,6 +123,10 @@ $_configuration[1]['hosting_limit_sessions'] = 0;
// Set a maximum disk space used, in MB (set to 1024 for 1GB, 5120 for 5GB).
// Default (0) = no limit
$_configuration[1]['hosting_limit_disk_space'] = 0;
// Set a maximum number of usable courses. Default (0) = no limit. Should always be lower than the hosting_limit_courses.
// If set, defining a course as "hidden" will free room for new courses (up to the hosting_limit_courses, if any value is set there).
// hosting_limit_enabled_courses is the maximum number of courses that are *not* hidden.
$_configuration[1]['hosting_limit_active_courses'] = 0;
// Email to warn if limit was reached.
//$_configuration[1]['hosting_contact_mail'] = 'example@example.org';
@ -261,3 +265,4 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
//$_configuration['aspell_temp_dir'] = './';
// Prevent redirecting admin to admin page
//$_configuration['redirect_admin_to_courses_list'] = true;

Loading…
Cancel
Save