diff --git a/main/admin/user_export.php b/main/admin/user_export.php index 85ceca43d5..aba5a3667d 100755 --- a/main/admin/user_export.php +++ b/main/admin/user_export.php @@ -183,20 +183,24 @@ if ($form->validate()) { } } - $studentData = UserManager::get_extra_user_data( - $user['UserId'], - true, - false - ); - foreach ($studentData as $key => $value) { - $key = substr($key, 6); - if (is_array($value)) { - $user[$key] = $value['extra_'.$key]; + $data[$user['UserId']] = $user; + } + + foreach ($extra_fields as $fieldInfo) { + $extraField = new ExtraField('user'); + $default = $extraField->getDefaultValueByFieldId($fieldInfo[0]); + $fieldValues = $extraField->getAllValuesByFieldId($fieldInfo[0]); + foreach ($data as $userId => &$values) { + if (isset($fieldValues[$userId])) { + if (is_array($fieldValues[$userId])) { + $values['extra_'.$fieldInfo[1]] = $fieldValues[$userId]; + } else { + $values[$fieldInfo[1]] = $fieldValues[$userId]; + } } else { - $user[$key] = $value; + $values[$fieldInfo[1]] = $default; } } - $data[] = $user; } switch ($file_type) { diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index 15e801a856..aee79928cc 100755 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -77,6 +77,7 @@ class ExtraField extends Model public $pageUrl; public $extraFieldType = 0; + public $table; public $table_field_options; public $table_field_values; public $table_field_tag; @@ -3618,4 +3619,55 @@ JAVASCRIPT; } ); } + + /** + * For one given field ID, get all the item_id + value + * + * @param int $fieldId + * + * @return array + */ + public function getAllValuesByFieldId(int $fieldId) + { + $type = $this->get_field_type_by_id($fieldId); + $sql = "SELECT item_id, value FROM ".$this->table_field_values." WHERE field_id = $fieldId"; + $res = Database::query($sql); + $values = []; + if (Database::num_rows($res) > 0) { + while ($row = Database::fetch_array($res)) { + if (is_null($row['value'])) { + // If the entry exists but is NULL, consider it an empty string (to reproduce the behaviour of UserManager::get_extra_user_data() + $values[$row['item_id']] = ''; + } else { + if ($type == UserManager::USER_FIELD_TYPE_SELECT_MULTIPLE) { + $values[$row['item_id']] = explode(';', $row['value']); + } else { + $values[$row['item_id']] = $row['value']; + } + } + } + } + + return $values; + } + + /** + * Gets the default value for one specific field + * + * @param int $fieldId Field ID + * + * @return mixed Default value for the field (could be null, or usually a string) + */ + public function getDefaultValueByFieldId(int $fieldId) + { + $sql = "SELECT default_value FROM $this->table WHERE id = $fieldId"; + $res = Database::query($sql); + if (Database::num_rows($res) > 0) { + $row = Database::fetch_array($res); + + return $row['default_value']; + } + + return null; + } }