Browse Source

Adding certificate_filter_by_official_code see BT#9250

Julio Montoya 10 years ago
parent
commit
d36c633267

+ 26 - 4
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 '<br />';
+    $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 = '<br />'.$form->return_form();
+
+    if ($form->validate()) {
+        $officialCode = $form->getSubmitValue('filter');
+        $userList = UserManager::getUsersByOfficialCode($officialCode);
+    }
+}
+
+$certificate_list = get_list_users_certificates($cat_id, $userList);
 
 echo '<div class="btn-group">';
 $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 '</div>';
 
-if (count($certificate_list)==0) {
+echo $filterForm;
+
+if (count($certificate_list) == 0 ) {
     echo Display::display_warning_message(get_lang('NoResultsAvailable'));
 } else {
 

+ 55 - 7
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;
+    }
 }

+ 2 - 0
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;