From d36c633267b4ec66dec8e04054be2c1db0aae55f Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 8 Jan 2015 13:32:53 +0100 Subject: [PATCH] Adding certificate_filter_by_official_code see BT#9250 --- .../gradebook_display_certificate.php | 30 +++++++-- main/inc/lib/usermanager.lib.php | 62 ++++++++++++++++--- main/install/configuration.dist.php | 2 + 3 files changed, 83 insertions(+), 11 deletions(-) diff --git a/main/gradebook/gradebook_display_certificate.php b/main/gradebook/gradebook_display_certificate.php index 971dd5dba8..5b13deccd3 100755 --- a/main/gradebook/gradebook_display_certificate.php +++ b/main/gradebook/gradebook_display_certificate.php @@ -45,7 +45,6 @@ switch ($action) { break; case 'delete_all_certificates': Category::deleteAllCertificates($cat_id); - break; } @@ -66,7 +65,7 @@ if (isset($_GET['action']) && $_GET['action'] == 'delete') { Security::clear_token(); if ($result ==true) { Display::display_confirmation_message(get_lang('CertificateRemoved')); - } else { + } else { Display::display_error_message(get_lang('CertificateNotRemoved')); } } @@ -117,7 +116,28 @@ if (!empty($cats)) { } } -$certificate_list = get_list_users_certificates($cat_id); +$filter = api_get_configuration_value('certificate_filter_by_official_code'); +$userList = array(); +$filterForm = null; +if ($filter) { + echo '
'; + $options = UserManager::getOfficialCodeGrouped(); + $form = new FormValidator( + 'official_code', + 'POST', + api_get_self().'?'.api_get_cidreq().'&cat_id='.$cat_id + ); + $form->addElement('select', 'filter', get_lang('OfficialCode'), $options); + $form->add_button('submit', get_lang('Submit')); + $filterForm = '
'.$form->return_form(); + + if ($form->validate()) { + $officialCode = $form->getSubmitValue('filter'); + $userList = UserManager::getUsersByOfficialCode($officialCode); + } +} + +$certificate_list = get_list_users_certificates($cat_id, $userList); echo '
'; $url = api_get_self().'?action=generate_all_certificates'.'&'.api_get_cidReq().'&cat_id='.$cat_id; @@ -132,7 +152,9 @@ if (count($certificate_list) > 0) { } echo '
'; -if (count($certificate_list)==0) { +echo $filterForm; + +if (count($certificate_list) == 0 ) { echo Display::display_warning_message(get_lang('NoResultsAvailable')); } else { diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index e9721d696a..98b5f78111 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -3557,7 +3557,7 @@ class UserManager } /** - * Returns a list of all admninistrators + * Returns a list of all administrators * @author jmontoya * @return array */ @@ -3568,13 +3568,18 @@ class UserManager $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_id = api_get_current_access_url_id(); if (api_get_multiple_access_url()) { - $access_url_id = api_get_current_access_url_id(); - $sql = "SELECT admin.user_id, username, firstname, lastname, email FROM $tbl_url_rel_user as url INNER JOIN $table_admin as admin - ON (admin.user_id=url.user_id) INNER JOIN $table_user u ON (u.user_id=admin.user_id) - WHERE access_url_id ='".$access_url_id."'"; + $sql = "SELECT admin.user_id, username, firstname, lastname, email + FROM $tbl_url_rel_user as url + INNER JOIN $table_admin as admin + ON (admin.user_id=url.user_id) + INNER JOIN $table_user u + ON (u.user_id=admin.user_id) + WHERE access_url_id ='".$access_url_id."'"; } else { - $sql = "SELECT admin.user_id, username, firstname, lastname, email FROM $table_admin as admin - INNER JOIN $table_user u ON (u.user_id=admin.user_id)"; + $sql = "SELECT admin.user_id, username, firstname, lastname, email + FROM $table_admin as admin + INNER JOIN $table_user u + ON (u.user_id=admin.user_id)"; } $result = Database::query($sql); $return = array(); @@ -3583,6 +3588,7 @@ class UserManager $return[$row['user_id']] = $row; } } + return $return; } @@ -4899,4 +4905,46 @@ EOF; Database::query($sql); } } + + /** + * @return array + */ + public static function getOfficialCodeGrouped() + { + $user = Database::get_main_table(TABLE_MAIN_USER); + $sql = "SELECT DISTINCT official_code + FROM $user + GROUP BY official_code"; + $result = Database::query($sql); + + $values = Database::store_result($result, 'ASSOC'); + + $result = array(); + foreach ($values as $value) { + $result[$value['official_code']] = $value['official_code']; + } + return $result; + } + + /** + * @param string $officialCode + * @return array + */ + public static function getUsersByOfficialCode($officialCode) + { + $user = Database::get_main_table(TABLE_MAIN_USER); + $officialCode = Database::escape_string($officialCode); + + $sql = "SELECT DISTINCT user_id + FROM $user + WHERE official_code = $officialCode + "; + $result = Database::query($sql); + + $users = array(); + while ($row = Database::fetch_array($result)) { + $users[] = $row['user_id']; + } + return $users; + } } diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index 7757864e65..fe1af1e6ef 100755 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -271,3 +271,5 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE; //$_configuration['course_images_in_courses_list'] = false; // Which student publication will be taken when connected to the gradebook: first|last //$_configuration['student_publication_to_take_in_gradebook'] = 'first'; +// Show a filter by official code +//$_configuration['certificate_filter_by_official_code'] = false;