ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
ilUserDataSet Class Reference

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V. More...

+ Inheritance diagram for ilUserDataSet:
+ Collaboration diagram for ilUserDataSet:

Public Member Functions

 __construct ()
 
 getSupportedVersions ()
 
 getXmlRecord (string $a_entity, string $a_version, array $a_set)
 
 afterXmlRecordWriting (string $a_entity, string $a_version, array $a_set)
 
 readData (string $a_entity, string $a_version, array $a_ids)
 
 importRecord (string $a_entity, array $a_types, array $a_rec, ilImportMapping $a_mapping, string $a_schema_version)
 
- Public Member Functions inherited from ilDataSet
 __construct ()
 
 init (string $a_entity, string $a_schema_version)
 Init. More...
 
 getSupportedVersions ()
 
 readData (string $a_entity, string $a_version, array $a_ids)
 Read data from DB. More...
 
 initByExporter (ilXmlExporter $xml_exporter)
 
 setImportDirectory (string $a_val)
 
 getImportDirectory ()
 
 setDSPrefix (string $a_val)
 
 getDSPrefix ()
 
 getDSPrefixString ()
 
 getDirectDataFromQuery (string $a_query, bool $a_convert_to_leading_upper=true, bool $a_set=true)
 Get data from query.This is a standard procedure, all db field names are directly mapped to abstract fields. More...
 
 convertToLeadingUpper (string $a_str)
 Make xyz_abc a XyzAbc string. More...
 
 getXmlRepresentation (string $a_entity, string $a_schema_version, ?array $a_ids, string $a_field="", bool $a_omit_header=false, bool $a_omit_types=false)
 Get xml representation <dataset install_id="123" install_url="..."> <types entity="table_name" version="4.0.1"> <ftype name="field_1" type="text"> <ftype name="field_2" type="date"> <ftype name="field_3" type="integer"> </types> <types ...> ... More...
 
 addRecordsXml (ilXmlWriter $a_writer, array $a_prefixes, string $a_entity, string $a_schema_version, array $a_ids, ?string $a_field="")
 
 afterXmlRecordWriting (string $a_entity, string $a_version, array $a_set)
 
 getNamespaces (array &$namespaces, string $a_entity, string $a_schema_version)
 
 getXmlRecord (string $a_entity, string $a_version, array $a_set)
 Get xml record for version. More...
 
 getXmlTypes (string $a_entity, string $a_version)
 Get xml types. More...
 
 getXMLEntityName (string $a_entity, string $a_version)
 Get entity name for xml (may be overwritten) More...
 
 getXMLEntityTag (string $a_entity, string $a_schema_version)
 Get entity tag. More...
 
 setImport (ilSurveyImporter $a_val)
 
 getImport ()
 
 setCurrentInstallationId (string $a_val)
 
 getCurrentInstallationId ()
 
 importRecord (string $a_entity, array $a_types, array $a_rec, ilImportMapping $a_mapping, string $a_schema_version)
 Needs to be overwritten for import use case. More...
 
 getCollection (array $record, string $entity, string $schema_version, string $field, string $value)
 
 getContainerExportConfig (array $record, string $entity, string $schema_version, string $field, string $value)
 

Data Fields

array $multi = []
 
- Data Fields inherited from ilDataSet
const DATASET_NS = 'http://www.ilias.de/Services/DataSet/ds/4_3'
 
const DATASET_NS_PREFIX = 'ds'
 
const EXPORT_NO_INST_ID = 1
 
const EXPORT_ID_ILIAS_LOCAL = 2
 
const EXPORT_ID_ILIAS_LOCAL_INVALID = 3
 
const EXPORT_ID_ILIAS_REMOTE = 4
 
const EXPORT_ID_ILIAS_REMOTE_INVALID = 5
 
const EXPORT_ID = 6
 
const EXPORT_ID_INVALID = 7
 
int $dircnt = 0
 

Protected Member Functions

 getXmlNamespace (string $a_entity, string $a_schema_version)
 
 getTypes (string $a_entity, string $a_version)
 
- Protected Member Functions inherited from ilDataSet
 getTypes (string $a_entity, string $a_version)
 Get (abstract) types for (abstract) field names. More...
 
 getXmlNamespace (string $a_entity, string $a_schema_version)
 
 getExportDirInContainer (string $exp_dir)
 
 getIRSSContainerExportConfig (StorableResource $source_container, string $source_path, string $target_path="")
 
 getDependencies (string $a_entity, string $a_version, ?array $a_rec=null, ?array $a_ids=null)
 
 createObjectExportId (string $a_type, string $a_id)
 Build ilias export id. More...
 
 parseObjectExportId (string $a_id, ?string $a_fallback_id=null)
 Parse export id. More...
 
 stripTags (array $rec, array $omit_keys=[])
 

Protected Attributes

ilUserExportConfig $export_config
 
array $temp_picture_dirs = []
 
array $users
 
- Protected Attributes inherited from ilDataSet
ILIAS ResourceStorage Services $irss
 
string $current_installation_id = ""
 
array $data = []
 
ilDBInterface $db
 
ilLogger $ds_log
 
string $import_directory = ""
 
string $entity = ""
 
string $schema_version = ""
 
string $component_export_dir = ""
 
string $ds_prefix = "ds"
 
string $version = ""
 
ilSurveyImporter $import
 
ilExport $export
 

Private Attributes

ilUserProfile $user_profile
 

Detailed Description

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V.

ILIAS is licensed with the GPL-3.0, see https://www.gnu.org/licenses/gpl-3.0.en.html You should have received a copy of said license along with the source code, too.

If this is not the case or you just want to try ILIAS, you'll find us at: https://www.ilias.de https://github.com/ILIAS-eLearning

Author
Alexander Killing killi.nosp@m.ng@l.nosp@m.eifos.nosp@m..de

Definition at line 22 of file class.ilUserDataSet.php.

Constructor & Destructor Documentation

◆ __construct()

ilUserDataSet::__construct ( )

Definition at line 30 of file class.ilUserDataSet.php.

References ILIAS\GlobalScreen\Provider\__construct(), and ilDataSet\initByExporter().

31  {
33  $this->user_profile = new ilUserProfile();
34  }
Class ilUserProfile.
__construct(Container $dic, ilPlugin $plugin)
+ Here is the call graph for this function:

Member Function Documentation

◆ afterXmlRecordWriting()

ilUserDataSet::afterXmlRecordWriting ( string  $a_entity,
string  $a_version,
array  $a_set 
)

Definition at line 167 of file class.ilUserDataSet.php.

References ilFileUtils\delDir().

167  : void // Missing array type.
168  {
169  if ($a_entity == "usr_profile") {
170  // cleanup temp dirs for pictures
171  $tmp_dir = $this->temp_picture_dirs[$a_set["Id"]];
172  if ($tmp_dir != "" && is_dir($tmp_dir)) {
173  ilFileUtils::delDir($tmp_dir);
174  }
175  }
176  }
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
+ Here is the call graph for this function:

◆ getSupportedVersions()

ilUserDataSet::getSupportedVersions ( )

Definition at line 44 of file class.ilUserDataSet.php.

44  : array // Missing array type.
45  {
46  return ["4.3.0", "4.5.0", "5.1.0", "5.2.0", "5.3.0"];
47  }

◆ getTypes()

ilUserDataSet::getTypes ( string  $a_entity,
string  $a_version 
)
protected

Definition at line 54 of file class.ilUserDataSet.php.

54  : array // Missing array type.
55  {
56  // user profile type
57  if ($a_entity == "usr_profile") {
58  switch ($a_version) {
59  case "4.3.0":
60  case "4.5.0":
61  case "5.1.0":
62  case "5.2.0":
63  case "5.3.0":
64  return [
65  "Id" => "integer",
66  "Username" => "text",
67  "Firstname" => "text",
68  "Lastname" => "text",
69  "Title" => "text",
70  "Birthday" => "text",
71  "Gender" => "text",
72  "Institution" => "text",
73  "Department" => "text",
74  "Street" => "text",
75  "Zipcode" => "text",
76  "City" => "text",
77  "Country" => "text",
78  "SelCountry" => "text",
79  "PhoneOffice" => "text",
80  "PhoneHome" => "text",
81  "PhoneMobile" => "text",
82  "Fax" => "text",
83  "Email" => "text",
84  "SecondEmail" => "text",
85  "Hobby" => "text",
86  "ReferralComment" => "text",
87  "Matriculation" => "text",
88  "Latitude" => "text",
89  "Longitude" => "text",
90  "LocZoom" => "text",
91  "Picture" => "directory"
92  ];
93  }
94  }
95 
96  if ($a_entity == "usr_setting") {
97  switch ($a_version) {
98  case "4.3.0":
99  case "4.5.0":
100  case "5.1.0":
101  case "5.2.0":
102  case "5.3.0":
103  return [
104  "UserId" => "integer",
105  "Keyword" => "text",
106  "Value" => "text"
107  ];
108  }
109  }
110 
111  if ($this->export_config->getExportType() == "personal_data") {
112  switch ($a_version) {
113  case "4.3.0":
114  case "4.5.0":
115  case "5.1.0":
116  case "5.2.0":
117  case "5.3.0":
118  return [
119  "Id" => "integer"
120  ];
121  }
122  }
123 
124  if ($a_entity == "usr_multi") {
125  switch ($a_version) {
126  case "4.5.0":
127  case "5.1.0":
128  case "5.2.0":
129  case "5.3.0":
130  return [
131  "UserId" => "integer",
132  "FieldId" => "text",
133  "Value" => "text"
134  ];
135  }
136  }
137  return [];
138  }

◆ getXmlNamespace()

ilUserDataSet::getXmlNamespace ( string  $a_entity,
string  $a_schema_version 
)
protected

Definition at line 49 of file class.ilUserDataSet.php.

49  : string
50  {
51  return "https://www.ilias.de/xml/Services/User/" . $a_entity;
52  }

◆ getXmlRecord()

ilUserDataSet::getXmlRecord ( string  $a_entity,
string  $a_version,
array  $a_set 
)

Definition at line 140 of file class.ilUserDataSet.php.

References $DIC, ilObjUser\_getPersonalPicturePath(), ilObjUser\copyProfilePicturesToDirectory(), ilFileUtils\ilTempnam(), and ilFileUtils\makeDir().

140  : array // Missing array type.
141  {
142  global $DIC;
143 
144  if ($a_entity == "usr_profile") {
145  $tmp_dir = ilFileUtils::ilTempnam();
146  ilFileUtils::makeDir($tmp_dir);
147 
149  $a_set["Id"],
150  "small",
151  true,
152  true
153  );
154 
155  if ($im != "") {
156  ilObjUser::copyProfilePicturesToDirectory($a_set["Id"], $tmp_dir);
157  }
158 
159  $this->temp_picture_dirs[$a_set["Id"]] = $tmp_dir;
160 
161  $a_set["Picture"] = $tmp_dir;
162  }
163 
164  return $a_set;
165  }
static copyProfilePicturesToDirectory(int $a_user_id, string $a_dir)
global $DIC
Definition: shib_login.php:26
static _getPersonalPicturePath(int $a_usr_id, string $a_size='small', bool $a_force_pic=false, bool $a_prevent_no_photo_image=false, bool $html_export=false)
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
+ Here is the call graph for this function:

◆ importRecord()

ilUserDataSet::importRecord ( string  $a_entity,
array  $a_types,
array  $a_rec,
ilImportMapping  $a_mapping,
string  $a_schema_version 
)

Definition at line 293 of file class.ilUserDataSet.php.

References $DIC, Vendor\Package\$f, $ilSetting, ilObject\_lookupType(), ilObjUser\_uploadPersonalPicture(), ilImportMapping\addMapping(), ilDataSet\convertToLeadingUpper(), ilDataSet\getImportDirectory(), ilImportMapping\getMapping(), ILIAS\Repository\int(), null, and ilUtil\secureString().

299  : void {
300  global $DIC;
301 
302  $ilSetting = $DIC['ilSetting'];
303  $ilUser = $DIC['ilUser'];
304 
305  switch ($a_entity) {
306  case "usr":
307  // only users themselves import their profiles!
308  // thus we can map the import id of the dataset to the current user
309  $a_mapping->addMapping("components/ILIAS/User", "usr", $a_rec["Id"], $ilUser->getId());
310  break;
311 
312  case "usr_profile":
313  $usr_id = $a_mapping->getMapping("components/ILIAS/User", "usr", $a_rec["Id"]);
314  if ($usr_id > 0 && ilObject::_lookupType($usr_id) == "usr") {
315  if (!isset($this->users[$usr_id])) {
316  $this->users[$usr_id] = new ilObjUser($usr_id);
317  }
318  $user = $this->users[$usr_id];
319  $prof = new ilUserProfile();
320  $prof->skipField("username");
321  $prof->skipField("password");
322  $prof->skipField("roles");
323  $prof->skipGroup("settings");
324  $fields = $prof->getStandardFields();
325  foreach ($fields as $k => $f) {
326  $up_k = $this->convertToLeadingUpper($k);
327  // only change fields, when it is possible in profile
328  if ($this->user_profile->userSettingVisible($k) &&
329  !$ilSetting->get("usr_settings_disable_" . $k) &&
330  ($f["method"] ?? "") != "" && isset($a_rec[$up_k])) {
331  $set_method = "set" . substr($f["method"], 3);
332  $user->{$set_method}(ilUtil::secureString($a_rec[$up_k]));
333  }
334  }
335 
336  $user->setLatitude($a_rec["Latitude"] ?? null);
337  $user->setLongitude($a_rec["Longitude"] ?? null);
338  $zoom = isset($a_rec["LocZoom"]) ? (int) $a_rec["LocZoom"] : null;
339  $user->setLocationZoom($zoom);
340 
341  $user->update();
342 
343  // personal picture
344  $pic_dir = $this->getImportDirectory() . "/" . str_replace("..", "", $a_rec["Picture"]);
345  if ($pic_dir != "" && is_dir($pic_dir)) {
346  $upload_file = $pic_dir . "/usr_" . $a_rec["Id"] . ".jpg";
347  if (!is_file($upload_file)) {
348  $upload_file = $pic_dir . "/upload_" . $a_rec["Id"] . "pic";
349  }
350  if (is_file($upload_file)) {
351  ilObjUser::_uploadPersonalPicture($upload_file, $user->getId());
352  }
353  }
354  }
355  break;
356 
357  case "usr_setting":
358  $usr_id = $a_mapping->getMapping("components/ILIAS/User", "usr", $a_rec["UserId"]);
359  if ($usr_id > 0 && ilObject::_lookupType($usr_id) == "usr") {
360  if (!isset($this->users[$usr_id])) {
361  $this->users[$usr_id] = new ilObjUser($usr_id);
362  }
363  $user = $this->users[$usr_id];
364  $user->writePref($a_rec["Keyword"], ilUtil::secureString($a_rec["Value"]));
365  }
366  break;
367 
368  case "usr_multi":
369  $usr_id = $a_mapping->getMapping("components/ILIAS/User", "usr", $a_rec["UserId"]);
370  if ($usr_id > 0 && ilObject::_lookupType($usr_id) == "usr") {
371  $this->multi[$usr_id][$a_rec["FieldId"]][] = ilUtil::secureString($a_rec["Value"]);
372  }
373  break;
374  }
375  }
convertToLeadingUpper(string $a_str)
Make xyz_abc a XyzAbc string.
static secureString(string $a_str, bool $a_strip_html=true, string $a_allow="")
Class ilUserProfile.
addMapping(string $a_comp, string $a_entity, string $a_old_id, string $a_new_id)
static _uploadPersonalPicture(string $tmp_file, int $obj_id)
Create a personal picture image file from a temporary image file.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
getMapping(string $a_comp, string $a_entity, string $a_old_id)
global $DIC
Definition: shib_login.php:26
global $ilSetting
Definition: privfeed.php:31
static _lookupType(int $id, bool $reference=false)
+ Here is the call graph for this function:

◆ readData()

ilUserDataSet::readData ( string  $a_entity,
string  $a_version,
array  $a_ids 
)

Definition at line 178 of file class.ilUserDataSet.php.

References $DIC, $id, $ilDB, and ilDataSet\getDirectDataFromQuery().

178  : void // Missing array type.
179  {
180  global $DIC;
181 
182  $ilDB = $DIC['ilDB'];
183 
184  if (!is_array($a_ids)) {
185  $a_ids = [$a_ids];
186  }
187 
188  if ($this->export_config->getExportType() == "personal_data") {
189  switch ($a_version) {
190  case "4.3.0":
191  case "4.5.0":
192  case "5.1.0":
193  case "5.2.0":
194  case "5.3.0":
195  $this->data = [];
196  foreach ($a_ids as $id) {
197  $this->data[] = ["Id" => $id];
198  }
199  break;
200  }
201  }
202 
203  if ($a_entity == "usr_profile") {
204  switch ($a_version) {
205  case "4.3.0":
206  case "4.5.0":
207  case "5.1.0":
208  $this->getDirectDataFromQuery("SELECT usr_id id, login username, firstname, lastname, " .
209  " title, birthday, gender, institution, department, street, city, zipcode, country, sel_country, " .
210  " phone_office, phone_home, phone_mobile, fax, email, hobby, referral_comment, matriculation, " .
211  " delicious, latitude, longitude, loc_zoom" .
212  " FROM usr_data u " .
213  "WHERE " .
214  $ilDB->in("u.usr_id", $a_ids, false, "integer"));
215  break;
216 
217  case "5.2.0":
218  $this->getDirectDataFromQuery("SELECT usr_id id, login username, firstname, lastname, " .
219  " title, birthday, gender, institution, department, street, city, zipcode, country, sel_country, " .
220  " phone_office, phone_home, phone_mobile, fax, email, hobby, referral_comment, matriculation, " .
221  " latitude, longitude, loc_zoom" .
222  " FROM usr_data u " .
223  "WHERE " .
224  $ilDB->in("u.usr_id", $a_ids, false, "integer"));
225  break;
226  case "5.3.0":
227  $this->getDirectDataFromQuery("SELECT usr_id id, login username, firstname, lastname, " .
228  " title, birthday, gender, institution, department, street, city, zipcode, country, sel_country, " .
229  " phone_office, phone_home, phone_mobile, fax, email, second_email, hobby, referral_comment, matriculation, " .
230  " latitude, longitude, loc_zoom" .
231  " FROM usr_data u " .
232  "WHERE " .
233  $ilDB->in("u.usr_id", $a_ids, false, "integer"));
234  break;
235  }
236  }
237 
238  if ($a_entity == "usr_setting") {
239  switch ($a_version) {
240  case "4.3.0":
241  case "4.5.0":
242  case "5.1.0":
243  case "5.2.0":
244  case "5.3.0":
245  // for all user ids get data from usr_pref and mail options, create records user_id/name/value
246  $prefs = ["date_format", "day_end", "day_start", "bs_allow_to_contact_me", "chat_osc_accept_msg", "hide_own_online_status", "language",
247  "public_birthday", "puplic_city", "public_country", "public_delicious", "public_department", "public_email", "public_second_email",
248  "public_fax", "public_gender", "public_hobby", "public_im_aim", "public_im_icq", "public_im_jabber",
249  "public_im_msn", "public_im_skype", "public_im_voip", "public_im_yahoo", "public_institution", "public_location",
250  "public_matriculation", "public_phone_home", "public_phone_mobile", "public_phone_office",
251  "public_profile", "public_sel_country", "public_street", "public_title", "public_upload", "public_zipcode",
252  "screen_reader_optimization", "show_users_online",
253  "store_last_visited", "time_format", "user_tz", "weekstart",
254  "session_reminder_lead_time", "usr_starting_point",
255  "chat_broadcast_typing"];
256 
257  if (version_compare($a_version, '5.2.0', '>=')) {
258  unset(
259  $prefs['public_im_aim'], $prefs['public_im_icq'], $prefs['public_im_jabber'],
260  $prefs['public_im_msn'], $prefs['public_im_skype'], $prefs['public_im_voip'],
261  $prefs['public_im_yahoo'], $prefs['public_delicious']
262  );
263  }
264 
265  $this->data = [];
266  $set = $ilDB->query("SELECT * FROM usr_pref " .
267  " WHERE " . $ilDB->in("keyword", $prefs, false, "text") .
268  " AND " . $ilDB->in("usr_id", $a_ids, false, "integer"));
269  while ($rec = $ilDB->fetchAssoc($set)) {
270  $this->data[] = ["UserId" => $rec["usr_id"], "Keyword" => $rec["keyword"], "Value" => $rec["value"]];
271  }
272  break;
273  }
274  }
275 
276  if ($a_entity == "usr_multi") {
277  switch ($a_version) {
278  case "4.5.0":
279  case "5.1.0":
280  case "5.2.0":
281  case "5.3.0":
282  $this->data = [];
283  $set = $ilDB->query("SELECT * FROM usr_data_multi" .
284  " WHERE " . $ilDB->in("usr_id", $a_ids, false, "integer"));
285  while ($rec = $ilDB->fetchAssoc($set)) {
286  $this->data[] = ["UserId" => $rec["usr_id"], "FieldId" => $rec["field_id"], "Value" => $rec["value"]];
287  }
288  break;
289  }
290  }
291  }
global $DIC
Definition: shib_login.php:26
getDirectDataFromQuery(string $a_query, bool $a_convert_to_leading_upper=true, bool $a_set=true)
Get data from query.This is a standard procedure, all db field names are directly mapped to abstract ...
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
+ Here is the call graph for this function:

Field Documentation

◆ $export_config

ilUserExportConfig ilUserDataSet::$export_config
protected

Definition at line 25 of file class.ilUserDataSet.php.

◆ $multi

array ilUserDataSet::$multi = []

Definition at line 27 of file class.ilUserDataSet.php.

◆ $temp_picture_dirs

array ilUserDataSet::$temp_picture_dirs = []
protected

Definition at line 26 of file class.ilUserDataSet.php.

◆ $user_profile

ilUserProfile ilUserDataSet::$user_profile
private

Definition at line 24 of file class.ilUserDataSet.php.

◆ $users

array ilUserDataSet::$users
protected

Definition at line 28 of file class.ilUserDataSet.php.


The documentation for this class was generated from the following file: