ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
ilUserXMLWriter Class Reference

XML writer class Class to simplify manual writing of xml documents. More...

+ Inheritance diagram for ilUserXMLWriter:
+ Collaboration diagram for ilUserXMLWriter:

Public Member Functions

 setAttachRoles (bool $value)
 
 setObjects (array $users)
 
 start ()
 
 getXML ()
 
 __buildHeader ()
 
 __buildFooter ()
 
 __handleUser (array $row)
 
 __addElementMulti (string $tagname, array $value, ?array $attrs=null, ?string $settingsname=null, bool $requiredTag=false)
 
 __addElement (string $tagname, ?string $value, ?array $attrs=null, ?string $settingsname=null, bool $requiredTag=false)
 
 setFieldsToExport (array $fields_to_export)
 
 setAttachPreferences (bool $attach_preferences)
 if set to true, all preferences of a user will be set More...
 
- Public Member Functions inherited from ilXmlWriter
 __construct (string $version="1.0", string $outEnc="utf-8", string $inEnc="utf-8")
 
 xmlSetDtdDef (string $dtdDef)
 Sets dtd definition. More...
 
 xmlSetGenCmt (string $genCmt)
 Sets generated comment. More...
 
 xmlFormatData (string $data)
 Indents text for better reading. More...
 
 xmlHeader ()
 Writes xml header. More...
 
 xmlStartTag (string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
 Writes a starttag. More...
 
 xmlEndTag (string $tag)
 Writes an endtag. More...
 
 xmlData (string $data, bool $encode=true, bool $escape=true)
 Writes data. More...
 
 xmlElement (string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
 Writes a basic element (no children, just textual content) More...
 
 xmlDumpFile (string $file, bool $format=true)
 Dumps xml document from memory into a file. More...
 
 xmlDumpMem (bool $format=true)
 Returns xml document from memory. More...
 
 appendXML (string $a_str)
 append xml string to document More...
 
 xmlClear ()
 clears xmlStr More...
 

Static Public Member Functions

static getExportablePreferences ()
 return exportable preference keys as found in db More...
 
static isPrefExportable (string $key)
 returns wether a key from db is exportable or not More...
 

Private Member Functions

 __handlePreferences (array $prefs, array $row)
 
 canExport (string $tagname, ?string $settingsname=null)
 
 getPictureValue (int $usr_id)
 return array with base-encoded picture data as key value, encoding type as encoding, and image type as key type. More...
 
 addUDFsToXML ()
 add user defined field data to xml (using usr dtd) More...
 

Private Attributes

readonly ILIAS $ilias
 
readonly ilDBInterface $db
 
readonly Language $lng
 
readonly Profile $user_profile
 
readonly SettingsImplementation $user_settings
 
readonly UserSettingsDataRepository $user_settings_data_repo
 
array $users
 
int $user_id = 0
 
bool $attach_roles = false
 
bool $attach_preferences = false
 
array $fields_to_export = []
 fields to be exported More...
 

Detailed Description

XML writer class Class to simplify manual writing of xml documents.

It only supports writing xml sequentially, because the xml document is saved in a string with no additional structure information. The author is responsible for well-formedness and validity of the xml document.

Author
Stefan Meyer meyer.nosp@m.@lei.nosp@m.fos.c.nosp@m.om

Definition at line 39 of file class.ilUserXMLWriter.php.

Member Function Documentation

◆ __addElement()

ilUserXMLWriter::__addElement ( string  $tagname,
?string  $value,
?array  $attrs = null,
?string  $settingsname = null,
bool  $requiredTag = false 
)

Definition at line 315 of file class.ilUserXMLWriter.php.

321 : void {
322 if ($this->canExport($tagname, $settingsname)
323 && ($value !== null
324 || $requiredTag
325 || is_array($attrs) && count($attrs) > 0)) {
326 $this->xmlElement($tagname, $attrs, (string) $value);
327 }
328 }
canExport(string $tagname, ?string $settingsname=null)
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)

Referenced by __addElementMulti(), and __handleUser().

+ Here is the caller graph for this function:

◆ __addElementMulti()

ilUserXMLWriter::__addElementMulti ( string  $tagname,
array  $value,
?array  $attrs = null,
?string  $settingsname = null,
bool  $requiredTag = false 
)

Definition at line 303 of file class.ilUserXMLWriter.php.

309 : void {
310 foreach ($value as $item) {
311 $this->__addElement($tagname, $item, $attrs, $settingsname, $requiredTag);
312 }
313 }
__addElement(string $tagname, ?string $value, ?array $attrs=null, ?string $settingsname=null, bool $requiredTag=false)

References __addElement().

Referenced by __handleUser().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __buildFooter()

ilUserXMLWriter::__buildFooter ( )

Definition at line 126 of file class.ilUserXMLWriter.php.

126 : void
127 {
128 $this->xmlEndTag('Users');
129 }
xmlEndTag(string $tag)
Writes an endtag.

References ilXmlWriter\xmlEndTag().

Referenced by start().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __buildHeader()

ilUserXMLWriter::__buildHeader ( )

Definition at line 117 of file class.ilUserXMLWriter.php.

117 : void
118 {
119 $this->xmlSetDtdDef('<!DOCTYPE Users PUBLIC "-//ILIAS//DTD UserImport//EN" "' . ILIAS_HTTP_PATH . '/components/ILIAS/Export/xml/ilias_user_5_1.dtd">');
120 $this->xmlSetGenCmt('User of ilias system');
121 $this->xmlHeader();
122
123 $this->xmlStartTag('Users');
124 }
xmlSetGenCmt(string $genCmt)
Sets generated comment.
xmlHeader()
Writes xml header.
xmlSetDtdDef(string $dtdDef)
Sets dtd definition.
xmlStartTag(string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
Writes a starttag.

References ilXmlWriter\xmlHeader(), ilXmlWriter\xmlSetDtdDef(), ilXmlWriter\xmlSetGenCmt(), and ilXmlWriter\xmlStartTag().

Referenced by start().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __handlePreferences()

ilUserXMLWriter::__handlePreferences ( array  $prefs,
array  $row 
)
private

Definition at line 285 of file class.ilUserXMLWriter.php.

285 : void // Missing array type.
286 {
287 //todo nadia: test mail_address_option
288 $mailOptions = new ilMailOptions($row['usr_id']);
289 $prefs['mail_incoming_type'] = $mailOptions->getIncomingType();
290 $prefs['mail_address_option'] = $mailOptions->getEmailAddressMode();
291 $prefs['mail_signature'] = $mailOptions->getSignature();
292 if ($prefs !== []) {
293 $this->xmlStartTag('Prefs');
294 foreach ($prefs as $key => $value) {
295 if (self::isPrefExportable($key)) {
296 $this->xmlElement('Pref', ['key' => $key], $value);
297 }
298 }
299 $this->xmlEndTag('Prefs');
300 }
301 }

References ilXmlWriter\xmlElement(), ilXmlWriter\xmlEndTag(), and ilXmlWriter\xmlStartTag().

Referenced by __handleUser().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ __handleUser()

ilUserXMLWriter::__handleUser ( array  $row)

Definition at line 131 of file class.ilUserXMLWriter.php.

131 : void // Missing array type.
132 {
133 if ($this->fields_to_export === []) {
134 $this->setFieldsToExport(
135 array_merge(
136 $this->getExportFieldArray(
137 $this->lng,
138 $this->user_profile,
139 $this->user_settings
140 ),
141 ['time_limit_owner']
142 )
143 );
144 }
145
146 $settings = $this->user_settings_data_repo->getFor($row['usr_id']);
147
148 if ($row['language'] === null
149 || $row['language'] === '') {
150 $row['language'] = $this->lng->getDefaultLanguage();
151 }
152
153 $attrs = [
154 'Id' => 'il_' . IL_INST_ID . '_usr_' . $row['usr_id'],
155 'Language' => $row['language'],
156 'Action' => 'Update'
157 ];
158
159 $this->xmlStartTag('User', $attrs);
160
161 $this->xmlElement('Login', null, $row['login']);
162
163 if ($this->attach_roles == true) {
164 $query = sprintf(
165 'SELECT object_data.title, object_data.description, rbac_fa.* ' .
166 'FROM object_data, rbac_ua, rbac_fa WHERE rbac_ua.usr_id = %s ' .
167 'AND rbac_ua.rol_id = rbac_fa.rol_id AND object_data.obj_id = rbac_fa.rol_id',
168 $this->db->quote($row['usr_id'], 'integer')
169 );
170 $rbacresult = $this->db->query($query);
171
172 while ($rbacrow = $rbacresult->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) {
173 if ($rbacrow['assign'] != 'y') {
174 continue;
175 }
176
177 $type = '';
178
179 if ($rbacrow['parent'] == ROLE_FOLDER_ID) {
180 $type = 'Global';
181 } else {
182 $type = 'Local';
183 }
184 if ($type !== '') {
185 $this->xmlElement(
186 'Role',
187 ['Id' => 'il_' . IL_INST_ID . '_role_' . $rbacrow['rol_id'], 'Type' => $type],
188 $rbacrow['title']
189 );
190 }
191 }
192 }
193
194 $this->__addElement('Firstname', $row['firstname']);
195 $this->__addElement('Lastname', $row['lastname']);
196 $this->__addElement('Title', $row['title']);
197
198 if ($this->canExport('PersonalPicture', 'upload')) {
199 $imageData = $this->getPictureValue($row['usr_id']);
200 if ($imageData) {
201 $value = array_shift($imageData); //$imageData['value'];
202 $this->__addElement('PersonalPicture', $value, $imageData, 'upload');
203 }
204 }
205
206
207 $this->__addElement('Gender', $row['gender']);
208 $this->__addElement('Email', $row['email']);
209 $this->__addElement('SecondEmail', $row['second_email'], null, 'second_email');
210 $this->__addElement('Birthday', $row['birthday']);
211 $this->__addElement('Institution', $row['institution']);
212 $this->__addElement('Street', $row['street']);
213 $this->__addElement('City', $row['city']);
214 $this->__addElement('PostalCode', $row['zipcode'], null, 'zipcode');
215 $this->__addElement('Country', $row['country']);
216 $this->__addElement('PhoneOffice', $row['phone_office'], null, 'phone_office');
217 $this->__addElement('PhoneHome', $row['phone_home'], null, 'phone_home');
218 $this->__addElement('PhoneMobile', $row['phone_mobile'], null, 'phone_mobile');
219 $this->__addElement('Fax', $row['fax']);
220 $this->__addElement('Hobby', $row['hobby']);
221
222 $this->__addElementMulti('GeneralInterest', $row['interests_general'] ?? [], null, 'interests_general');
223 $this->__addElementMulti('OfferingHelp', $row['interests_help_offered'] ?? [], null, 'interests_help_offered');
224 $this->__addElementMulti('LookingForHelp', $row['interests_help_looking'] ?? [], null, 'interests_help_looking');
225
226 $this->__addElement('Department', $row['department']);
227 $this->__addElement('Comment', $row['referral_comment'], null, 'referral_comment');
228 $this->__addElement('Matriculation', $row['matriculation']);
229 $this->__addElement('Active', $row['active'] ? 'true' : 'false');
230 $this->__addElement('ClientIP', $row['client_ip'], null, 'client_ip');
231 $this->__addElement('TimeLimitOwner', (string) $row['time_limit_owner'], null, 'time_limit_owner');
232 $this->__addElement('TimeLimitUnlimited', (string) $row['time_limit_unlimited'], null, 'time_limit_unlimited');
233 $this->__addElement('TimeLimitFrom', (string) $row['time_limit_from'], null, 'time_limit_from');
234 $this->__addElement('TimeLimitUntil', (string) $row['time_limit_until'], null, 'time_limit_until');
235 $this->__addElement('ApproveDate', $row['approve_date'], null, 'approve_date');
236 $this->__addElement('AgreeDate', $row['agree_date'], null, 'agree_date');
237
238 if ($row['auth_mode'] !== null
239 && $row['auth_mode'] !== '') {
240 $this->__addElement('AuthMode', null, ['type' => $row['auth_mode']], 'auth_mode', true);
241 }
242
243 if ($row['ext_account'] !== null
244 && $row['ext_account'] !== '') {
245 $this->__addElement('ExternalAccount', $row['ext_account'], null, 'ext_account', true);
246 }
247
248 if (isset($settings['skin'])
249 && isset($settings['style'])
250 && $this->canExport('Look', 'skin_style')) {
251 $this->__addElement(
252 'Look',
253 null,
254 [
255 'Skin' => $settings['skin'], 'Style' => $settings['style']
256 ],
257 'skin_style',
258 true
259 );
260 }
261
262
263 $this->__addElement('LastUpdate', $row['last_update'], null, 'last_update');
264 $this->__addElement('LastLogin', $row['last_login'], null, 'last_login');
265
266 $udf_data = $this->addUDFsToXML();
267
268 $this->__addElement('AccountInfo', $row['ext_account'], ['Type' => 'external']);
269
270 $this->__addElement('GMapsInfo', null, [
271 'longitude' => $row['longitude'],
272 'latitude' => $row['latitude'],
273 'zoom' => $row['loc_zoom']]);
274
275 $this->__addElement('Feedhash', $row['feed_hash']);
276
277 if ($this->attach_preferences || $this->canExport('prefs', 'preferences')) {
278 $this->__handlePreferences($settings, $row);
279 }
280
281 $this->xmlEndTag('User');
282 }
getPictureValue(int $usr_id)
return array with base-encoded picture data as key value, encoding type as encoding,...
addUDFsToXML()
add user defined field data to xml (using usr dtd)
__handlePreferences(array $prefs, array $row)
setFieldsToExport(array $fields_to_export)
__addElementMulti(string $tagname, array $value, ?array $attrs=null, ?string $settingsname=null, bool $requiredTag=false)
const IL_INST_ID
Definition: constants.php:40
const ROLE_FOLDER_ID
Definition: constants.php:34

References __addElement(), __addElementMulti(), __handlePreferences(), addUDFsToXML(), canExport(), ilDBConstants\FETCHMODE_ASSOC, getPictureValue(), IL_INST_ID, ILIAS\Repository\lng(), ROLE_FOLDER_ID, setFieldsToExport(), ilXmlWriter\xmlElement(), ilXmlWriter\xmlEndTag(), and ilXmlWriter\xmlStartTag().

Referenced by start().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addUDFsToXML()

ilUserXMLWriter::addUDFsToXML ( )
private

add user defined field data to xml (using usr dtd)

Definition at line 380 of file class.ilUserXMLWriter.php.

380 : void
381 {
382 foreach ($this->user_profile->getVisibleFields(Context::Export) as $field) {
383 if (!$field->isCustom()) {
384 continue;
385 }
386 $this->xmlElement(
387 'UserDefinedField',
388 [
389 'Id' => $field->getIdentifier(),
390 'Name' => $field->getLabel($this->lng)
391 ],
392 (string) ($this->user_data['f_' . $field->getIdentifier()] ?? '')
393 );
394 }
395 }

Referenced by __handleUser(), and start().

+ Here is the caller graph for this function:

◆ canExport()

ilUserXMLWriter::canExport ( string  $tagname,
?string  $settingsname = null 
)
private

Definition at line 330 of file class.ilUserXMLWriter.php.

333 : bool {
334 return $this->fields_to_export === []
335 || in_array(strtolower($tagname), $this->fields_to_export) !== false
336 || in_array($settingsname, $this->fields_to_export) !== false;
337 }

Referenced by __handleUser().

+ Here is the caller graph for this function:

◆ getExportablePreferences()

static ilUserXMLWriter::getExportablePreferences ( )
static

return exportable preference keys as found in db

Definition at line 400 of file class.ilUserXMLWriter.php.

400 : array // Missing array type.
401 {
402 return [
403 'public_city',
404 'public_country',
405 'public_department',
406 'public_email',
407 'public_second_email',
408 'public_fax',
409 'public_hobby',
410 'public_institution',
411 'public_matriculation',
412 'public_phone',
413 'public_phone_home',
414 'public_phone_mobile',
415 'public_phone_office',
416 'public_profile',
417 'public_street',
418 'public_avatar',
419 'public_zip',
420 'send_info_mails',
421 /*'show_users_online',*/
422 'hide_own_online_status',
423 'bs_allow_to_contact_me',
424 'chat_osc_accept_msg',
425 'chat_broadcast_typing',
426 'user_tz',
427 'weekstart',
428 'mail_incoming_type',
429 'mail_signature',
430 'mail_linebreak',
431 'public_interests_general',
432 'public_interests_help_offered',
433 'public_interests_help_looking'
434 ];
435 }

◆ getPictureValue()

ilUserXMLWriter::getPictureValue ( int  $usr_id)
private

return array with base-encoded picture data as key value, encoding type as encoding, and image type as key type.

Definition at line 356 of file class.ilUserXMLWriter.php.

356 : ?array
357 {
358 $avatar_resolver = new ilUserAvatarResolver($usr_id);
359 $avatar_resolver->setForcePicture(true);
360 if (!$avatar_resolver->hasProfilePicture()) {
361 return null;
362 }
363
364 [$image_data, $image_type] = $avatar_resolver->getUserPictureForVCard();
365
366 if ($image_data === null || $image_type === null) {
367 return null;
368 }
369
370 return [
371 'value' => base64_encode($image_data),
372 'encoding' => 'Base64',
373 'imagetype' => $image_type
374 ];
375 }
Class ilUserAvatarResolver.

Referenced by __handleUser().

+ Here is the caller graph for this function:

◆ getXML()

ilUserXMLWriter::getXML ( )

Definition at line 111 of file class.ilUserXMLWriter.php.

111 : string
112 {
113 return $this->xmlDumpMem(false);
114 }
xmlDumpMem(bool $format=true)
Returns xml document from memory.

References ilXmlWriter\xmlDumpMem().

+ Here is the call graph for this function:

◆ isPrefExportable()

static ilUserXMLWriter::isPrefExportable ( string  $key)
static

returns wether a key from db is exportable or not

Definition at line 440 of file class.ilUserXMLWriter.php.

440 : bool
441 {
442 return in_array($key, self::getExportablePreferences());
443 }

Referenced by ilUserImportParser\importEndTag(), and ilUserImportParser\verifyPref().

+ Here is the caller graph for this function:

◆ setAttachPreferences()

ilUserXMLWriter::setAttachPreferences ( bool  $attach_preferences)

if set to true, all preferences of a user will be set

Definition at line 347 of file class.ilUserXMLWriter.php.

347 : void
348 {
349 $this->attach_preferences = $attach_preferences;
350 }

◆ setAttachRoles()

ilUserXMLWriter::setAttachRoles ( bool  $value)

Definition at line 81 of file class.ilUserXMLWriter.php.

81 : void
82 {
83 $this->attach_roles = $value;
84 }

◆ setFieldsToExport()

ilUserXMLWriter::setFieldsToExport ( array  $fields_to_export)

Definition at line 339 of file class.ilUserXMLWriter.php.

339 : void // Missing array type.
340 {
341 $this->fields_to_export = $fields_to_export;
342 }
array $fields_to_export
fields to be exported

Referenced by __handleUser().

+ Here is the caller graph for this function:

◆ setObjects()

ilUserXMLWriter::setObjects ( array  $users)

Definition at line 86 of file class.ilUserXMLWriter.php.

86 : void // Missing array type.
87 {
88 $this->users = $users;
89 }

References $users.

◆ start()

ilUserXMLWriter::start ( )

Definition at line 92 of file class.ilUserXMLWriter.php.

92 : bool
93 {
94 if (!is_array($this->users)) {
95 return false;
96 }
97
98 $this->__buildHeader();
99
100 $this->addUDFsToXML();
101
102 foreach ($this->users as $user) {
103 $this->__handleUser($user);
104 }
105
106 $this->__buildFooter();
107
108 return true;
109 }

References __buildFooter(), __buildHeader(), __handleUser(), and addUDFsToXML().

+ Here is the call graph for this function:

Field Documentation

◆ $attach_preferences

bool ilUserXMLWriter::$attach_preferences = false
private

Definition at line 52 of file class.ilUserXMLWriter.php.

◆ $attach_roles

bool ilUserXMLWriter::$attach_roles = false
private

Definition at line 51 of file class.ilUserXMLWriter.php.

◆ $db

readonly ilDBInterface ilUserXMLWriter::$db
private

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

◆ $fields_to_export

array ilUserXMLWriter::$fields_to_export = []
private

fields to be exported

Definition at line 58 of file class.ilUserXMLWriter.php.

◆ $ilias

readonly ILIAS ilUserXMLWriter::$ilias
private

Definition at line 43 of file class.ilUserXMLWriter.php.

◆ $lng

readonly Language ilUserXMLWriter::$lng
private

Definition at line 45 of file class.ilUserXMLWriter.php.

◆ $user_id

int ilUserXMLWriter::$user_id = 0
private

Definition at line 50 of file class.ilUserXMLWriter.php.

◆ $user_profile

readonly Profile ilUserXMLWriter::$user_profile
private

Definition at line 46 of file class.ilUserXMLWriter.php.

◆ $user_settings

readonly SettingsImplementation ilUserXMLWriter::$user_settings
private

Definition at line 47 of file class.ilUserXMLWriter.php.

◆ $user_settings_data_repo

readonly UserSettingsDataRepository ilUserXMLWriter::$user_settings_data_repo
private

Definition at line 48 of file class.ilUserXMLWriter.php.

◆ $users

array ilUserXMLWriter::$users
private

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

Referenced by setObjects().


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