Reduce CourseManager::get_user_list_from_course_code() method's complexity

ofaj
Yannick Warnier 10 years ago
parent ff06f05e47
commit 0acf259234
  1. 64
      main/inc/lib/course.lib.php

@ -1299,9 +1299,6 @@ class CourseManager
} else {
if ($return_count) {
$sql = " SELECT COUNT(*) as count";
if ($resumed_report) {
//$sql = " SELECT count(field_id) ";
}
} else {
if (empty($course_code)) {
$sql = 'SELECT DISTINCT
@ -1322,11 +1319,11 @@ class CourseManager
}
}
$sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user ';
$sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_COURSE_USER) . ' as course_rel_user
$sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '
. ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_COURSE_USER) . ' as course_rel_user
ON user.user_id = course_rel_user.user_id AND
course_rel_user.relation_type <> ' . COURSE_RELATION_TYPE_RRHH . ' ';
$sql .= " INNER JOIN $course_table course ON course_rel_user.c_id = course.id ";
course_rel_user.relation_type <> ' . COURSE_RELATION_TYPE_RRHH . ' '
. " INNER JOIN $course_table course ON course_rel_user.c_id = course.id ";
if (!empty($course_code)) {
$sql .= ' AND course_rel_user.c_id="' . $courseId . '"';
@ -1463,22 +1460,11 @@ class CourseManager
$users[$row_key]['count_users'] += $counter;
$registered_users_with_extra_field = 0;
if (!empty($name) && $name != '-') {
$extraFieldType = EntityExtraField::COURSE_FIELD_TYPE;
$name = Database::escape_string($name);
$sql = "SELECT count(v.item_id) as count
FROM $table_user_field_value v INNER JOIN
$tableExtraField f
ON (f.id = v.field_id)
WHERE value = '$name' AND extra_field_type = $extraFieldType";
$result_count = Database::query($sql);
if (Database::num_rows($result_count)) {
$row_count = Database::fetch_array($result_count);
$registered_users_with_extra_field = $row_count['count'];
}
}
$registered_users_with_extra_field = CourseManager::getCountRegisteredUsersWithCourseExtraField(
$name,
$tableExtraField,
$table_user_field_value
);
$users[$row_key]['count_users_registered'] = $registered_users_with_extra_field;
$users[$row_key]['average_hours_per_user'] = $users[$row_key]['training_hours'] / $users[$row_key]['count_users'];
@ -5944,4 +5930,36 @@ class CourseManager
$cr->restore($courseCode);
}
}
/**
* Helper method to get the number of users defined with a specific course extra field
* @param string $name Field title
* @param string $tableExtraFields The extra fields table name
* @param string $tableUserFieldValues The user extra field value table name
* @return int The number of users with this extra field with a specific value
*/
public static function getCountRegisteredUsersWithCourseExtraField($name, $tableExtraFields = '', $tableUserFieldValues = '') {
if (empty($tableExtraFields)) {
$tableExtraFields = Database::get_main_table(TABLE_EXTRA_FIELD);
}
if (empty($tableUserFieldValues)) {
$tableUserFieldValues = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
}
$registered_users_with_extra_field = 0;
if (!empty($name) && $name != '-') {
$extraFieldType = EntityExtraField::COURSE_FIELD_TYPE;
$name = Database::escape_string($name);
$sql = "SELECT count(v.item_id) as count
FROM $tableUserFieldValues v INNER JOIN
$tableExtraFields f
ON (f.id = v.field_id)
WHERE value = '$name' AND extra_field_type = $extraFieldType";
$result_count = Database::query($sql);
if (Database::num_rows($result_count)) {
$row_count = Database::fetch_array($result_count);
$registered_users_with_extra_field = $row_count['count'];
}
}
return $registered_users_with_extra_field;
}
}

Loading…
Cancel
Save