Browse Source

Merge pull request #1252 from jloguercio/1.11.x

Added User Tag Filter to subscribe users to course manager - Refs #8302
José Loguercio 8 years ago
parent
commit
c874509662

+ 40 - 10
main/admin/subscribe_user2course.php

@@ -60,10 +60,21 @@ if (is_array($extra_field_list)) {
         if ($extra_field[8] == 1 && $extra_field[2] == ExtraField::FIELD_TYPE_SELECT) {
             $new_field_list[] = array(
                 'name' => $extra_field[3],
+                'type' => $extra_field[2],
                 'variable' => $extra_field[1],
                 'data' => $extra_field[9],
             );
         }
+        if ($extra_field[8] == 1 && $extra_field[2] == ExtraField::FIELD_TYPE_TAG) {
+            $options = UserManager::get_extra_user_data_for_tags($extra_field[1]);
+
+            $new_field_list[] = array(
+                'name' => $extra_field[3],
+                'type' => $extra_field[2],
+                'variable' => $extra_field[1],
+                'data' => $options['options'],
+            );
+        }
     }
 }
 
@@ -118,7 +129,7 @@ if (empty($first_letter_user)) {
 }
 
 $where_filter = null;
-
+$extra_field_result = [];
 //Filter by Extra Fields
 $use_extra_fields = false;
 if (is_array($extra_field_list)) {
@@ -126,13 +137,21 @@ if (is_array($extra_field_list)) {
         $result_list = array();
         foreach ($new_field_list as $new_field) {
             $varname = 'field_'.$new_field['variable'];
+            $fieldtype = $new_field['type'];
             if (UserManager::is_extra_field_available($new_field['variable'])) {
                 if (isset($_POST[$varname]) && $_POST[$varname] != '0') {
                     $use_extra_fields = true;
-                    $extra_field_result[]= UserManager::get_extra_user_data_by_value(
-                        $new_field['variable'],
-                        $_POST[$varname]
-                    );
+                    if ($fieldtype == ExtraField::FIELD_TYPE_TAG) {
+                        $extra_field_result[]= UserManager::get_extra_user_data_by_tags(
+                            intval($_POST['field_id']),
+                            $_POST[$varname]
+                        );
+                    } else {
+                        $extra_field_result[]= UserManager::get_extra_user_data_by_value(
+                            $new_field['variable'],
+                            $_POST[$varname]
+                        );
+                    }
                 }
             }
         }
@@ -227,7 +246,6 @@ if (api_is_multiple_url_enabled()) {
 $result = Database::query($sql);
 $db_courses = Database::store_result($result);
 unset($result);
-
 ?>
 <form name="formulaire" method="post" action="<?php echo api_get_self(); ?>" style="margin:0px;">
 <?php
@@ -237,18 +255,30 @@ if (is_array($extra_field_list)) {
         foreach ($new_field_list as $new_field) {
             echo $new_field['name'];
             $varname = 'field_'.$new_field['variable'];
+            $fieldtype = $new_field['type'];
             echo '&nbsp;<select name="'.$varname.'">';
             echo '<option value="0">--'.get_lang('Select').'--</option>';
             foreach	($new_field['data'] as $option) {
                 $checked='';
-                if (isset($_POST[$varname])) {
-                    if ($_POST[$varname] == $option[1]) {
-                        $checked = 'selected="true"';
+                if ($fieldtype == ExtraField::FIELD_TYPE_TAG) {
+                    if (isset($_POST[$varname])) {
+                        if ($_POST[$varname] == $option['tag']) {
+                            $checked = 'selected="true"';
+                        }
+                    }
+                    echo '<option value="'.$option['tag'].'" '.$checked.'>'.$option['tag'].'</option>';
+                } else {
+                    if (isset($_POST[$varname])) {
+                        if ($_POST[$varname] == $option[1]) {
+                            $checked = 'selected="true"';
+                        }
                     }
+                    echo '<option value="'.$option[1].'" '.$checked.'>'.$option[1].'</option>';
                 }
-                echo '<option value="'.$option[1].'" '.$checked.'>'.$option[1].'</option>';
             }
             echo '</select>';
+            $extraHidden = $fieldtype == ExtraField::FIELD_TYPE_TAG ? '<input type="hidden" name="field_id" value="'.$option['field_id'].'" />' : '';
+            echo $extraHidden;
             echo '&nbsp;&nbsp;';
         }
         echo '<input class="btn btn-primary" type="button" value="'.get_lang('Filter').'" onclick="validate_filter()" ></input>';

+ 33 - 0
main/inc/lib/extra_field.lib.php

@@ -285,6 +285,39 @@ class ExtraField extends Model
         }
     }
 
+    /**
+     * Get all the field info for User Tags
+     * @param string $variable
+     *
+     * @return array|bool
+     */
+    public function get_handler_field_info_by_tags($variable)
+    {
+        $variable = Database::escape_string($variable);
+        $sql = "SELECT * FROM {$this->table}
+                WHERE
+                    variable = '$variable' AND
+                    extra_field_type = $this->extraFieldType";
+        $result = Database::query($sql);
+        if (Database::num_rows($result)) {
+            $row = Database::fetch_array($result, 'ASSOC');
+            $row['display_text'] = ExtraField::translateDisplayName($row['variable'], $row['display_text']);
+
+            // All the tags of the field
+            $sql = "SELECT * FROM $this->table_field_tag
+                    WHERE field_id='".intval($row['id'])."'
+                    ORDER BY id ASC";
+            $result = Database::query($sql);
+            while ($option = Database::fetch_array($result, 'ASSOC')) {
+                $row['options'][$option['id']] = $option;
+            }
+
+            return $row;
+        } else {
+            return false;
+        }
+    }
+
     /**
      * @param int $fieldId
      *

+ 50 - 0
main/inc/lib/usermanager.lib.php

@@ -2281,6 +2281,22 @@ class UserManager
         return $extraField->get_handler_field_info_by_field_variable($variable);
     }
 
+    /**
+     * Get the extra field information for user tag (the options as well)
+     * @param  int     $variable The name of the field we want to know everything about
+     * @return array   Array containing all the information about the extra profile field
+     * (first level of array contains field details, then 'options' sub-array contains options details,
+     * as returned by the database)
+     * @author José Loguercio
+     * @since v1.11.0
+     */
+    public static function get_extra_field_tags_information_by_name($variable)
+    {
+        $extraField = new ExtraField('user');
+
+        return $extraField->get_handler_field_info_by_tags($variable);
+    }
+
     /**
      * @param string $type
      *
@@ -2345,6 +2361,26 @@ class UserManager
         return $result;
     }
 
+    /**
+     * Get extra user data by tags value
+     *
+     * @param int $fieldId the ID of the field we want to know everything of
+     * @param string $tag the tag name for search
+     * @return array with extra data info of a user
+     * @author José Loguercio
+     * @since v1.11.0
+     */
+    public static function get_extra_user_data_by_tags($fieldId, $tag)
+    {
+        $extraField = new ExtraField('user');
+        $result = $extraField->getAllUserPerTag($fieldId, $tag);
+        $array = [];
+        foreach ($result as $index => $user) {
+            $array[] = $user['user_id'];
+        }
+        return $array;
+    }
+
     /**
      * Get extra user data by field variable
      * @param string    field variable
@@ -2368,6 +2404,20 @@ class UserManager
         return $data;
     }
 
+    /**
+     * Get extra user data tags by field variable
+     *
+     * @param string    field variable
+     * @return array    data
+     */
+    public static function get_extra_user_data_for_tags($field_variable)
+    {
+        $extra_information_by_variable = self::get_extra_field_tags_information_by_name($field_variable);
+
+
+        return $extra_information_by_variable;
+    }
+
     /**
      * Gives a list of [session_category][session_id] for the current user.
      * @param integer $user_id