ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilUserXMLWriter.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once "./Services/Xml/classes/class.ilXmlWriter.php";
6include_once './Services/User/classes/class.ilObjUserFolder.php';
7
21{
22 public $ilias;
23 public $xml;
24 public $users;
25 public $user_id = 0;
26 public $attachRoles = false;
27 public $attachPreferences = false;
28 private static $exportablePrefs;
29
35 private $settings;
36
44 public function __construct()
45 {
46 global $ilias,$ilUser;
47
48 parent::__construct();
49
50 $this->ilias = $ilias;
51 $this->user_id = $ilUser->getId();
52 $this->attachRoles = false;
53
54 /* $this->exportablePrefs = array(
55 "priv_feed_pass", "language", "style", "skin", 'ilPageEditor_HTMLMode',
56 'ilPageEditor_JavaScript', 'ilPageEditor_MediaMode', 'tst_javascript',
57 'tst_lastquestiontype', 'tst_multiline_answers', 'tst_use_previous_answers',
58 'graphicalAnswerSetting', "weekstart"
59 );*/
60 }
61
62 public function setAttachRoles($value)
63 {
64 $this->attachRoles = $value == 1? true : false;
65 }
66
67 public function setObjects(&$users)
68 {
69 $this->users = &$users;
70 }
71
72
73 public function start()
74 {
75 if (!is_array($this->users)) {
76 return false;
77 }
78
79 $this->__buildHeader();
80
81
82 include_once("./Services/User/classes/class.ilUserDefinedFields.php");
84 $udf_data->addToXML($this);
85
86 foreach ($this->users as $user) {
87 $this->__handleUser($user);
88 }
89
90 $this->__buildFooter();
91
92 return true;
93 }
94
95 public function getXML()
96 {
97 return $this->xmlDumpMem(false);
98 }
99
100
101 public function __buildHeader()
102 {
103 $this->xmlSetDtdDef("<!DOCTYPE Users PUBLIC \"-//ILIAS//DTD UserImport//EN\" \"" . ILIAS_HTTP_PATH . "/xml/ilias_user_5_1.dtd\">");
104 $this->xmlSetGenCmt("User of ilias system");
105 $this->xmlHeader();
106
107 $this->xmlStartTag('Users');
108
109 return true;
110 }
111
112 public function __buildFooter()
113 {
114 $this->xmlEndTag('Users');
115 }
116
117 public function __handleUser($row)
118 {
119 global $ilDB,$lng;
120 if (!is_array($this->settings)) {
121 include_once('./Services/User/classes/class.ilObjUserFolder.php');
123 }
124
125 $prefs = ilObjUser::_getPreferences($row["usr_id"]);
126
127 if (strlen($row["language"]) == 0) {
128 $row["language"] = $lng->getDefaultLanguage();
129 }
130
131 $attrs = array(
132 'Id' => "il_" . IL_INST_ID . "_usr_" . $row["usr_id"],
133 'Language' => $row["language"],
134 'Action' => "Update"
135 );
136
137 $this->xmlStartTag("User", $attrs);
138
139 $this->xmlElement("Login", null, $row["login"]);
140
141 if ($this->attachRoles == true) {
142 include_once './Services/AccessControl/classes/class.ilObjRole.php';
143
144 $query = sprintf(
145 "SELECT object_data.title, object_data.description, rbac_fa.* " .
146 "FROM object_data, rbac_ua, rbac_fa WHERE rbac_ua.usr_id = %s " .
147 "AND rbac_ua.rol_id = rbac_fa.rol_id AND object_data.obj_id = rbac_fa.rol_id",
148 $ilDB->quote($row["usr_id"], 'integer')
149 );
150 $rbacresult = $ilDB->query($query);
151
152 while ($rbacrow = $rbacresult->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) {
153 if ($rbacrow["assign"] != "y") {
154 continue;
155 }
156
157 $type = "";
158
159 if ($rbacrow["parent"] == ROLE_FOLDER_ID) {
160 $type = "Global";
161 } else {
162 $type = "Local";
163 }
164 if (strlen($type)) {
165 $this->xmlElement(
166 "Role",
167 array("Id" =>
168 "il_" . IL_INST_ID . "_role_" . $rbacrow["rol_id"], "Type" => $type),
169 $rbacrow["title"]
170 );
171 }
172 }
173 }
174
175 $this->__addElement("Firstname", $row["firstname"]);
176 $this->__addElement("Lastname", $row["lastname"]);
177 $this->__addElement("Title", $row["title"]);
178
179 if ($this->canExport("PersonalPicture", "upload")) {
180 $imageData = $this->getPictureValue($row["usr_id"]);
181 if ($imageData) {
182 $value = array_shift($imageData); //$imageData["value"];
183 $this->__addElement("PersonalPicture", $value, $imageData, "upload");
184 }
185 }
186
187
188 $this->__addElement("Gender", $row["gender"]);
189 $this->__addElement("Email", $row["email"]);
190 $this->__addElement("SecondEmail", $row["second_email"], null, "second_email");
191 $this->__addElement("Birthday", $row["birthday"]);
192 $this->__addElement("Institution", $row["institution"]);
193 $this->__addElement("Street", $row["street"]);
194 $this->__addElement("City", $row["city"]);
195 $this->__addElement("PostalCode", $row["zipcode"], null, "zipcode");
196 $this->__addElement("Country", $row["country"]);
197 $this->__addElement("SelCountry", $row["sel_country"], null, "sel_country");
198 $this->__addElement("PhoneOffice", $row["phone_office"], null, "phone_office");
199 $this->__addElement("PhoneHome", $row["phone_home"], null, "phone_home");
200 $this->__addElement("PhoneMobile", $row["phone_mobile"], null, "phone_mobile");
201 $this->__addElement("Fax", $row["fax"]);
202 $this->__addElement("Hobby", $row["hobby"]);
203
204 $this->__addElementMulti("GeneralInterest", $row["interests_general"], null, "interests_general");
205 $this->__addElementMulti("OfferingHelp", $row["interests_help_offered"], null, "interests_help_offered");
206 $this->__addElementMulti("LookingForHelp", $row["interests_help_looking"], null, "interests_help_looking");
207
208 $this->__addElement("Department", $row["department"]);
209 $this->__addElement("Comment", $row["referral_comment"], null, "referral_comment");
210 $this->__addElement("Matriculation", $row["matriculation"]);
211 $this->__addElement("Active", $row["active"] ? "true":"false");
212 $this->__addElement("ClientIP", $row["client_ip"], null, "client_ip");
213 $this->__addElement("TimeLimitOwner", $row["time_limit_owner"], null, "time_limit_owner");
214 $this->__addElement("TimeLimitUnlimited", $row["time_limit_unlimited"], null, "time_limit_unlimited");
215 $this->__addElement("TimeLimitFrom", $row["time_limit_from"], null, "time_limit_from");
216 $this->__addElement("TimeLimitUntil", $row["time_limit_until"], null, "time_limit_until");
217 $this->__addElement("TimeLimitMessage", $row["time_limit_message"], null, "time_limit_message");
218 $this->__addElement("ApproveDate", $row["approve_date"], null, "approve_date");
219 $this->__addElement("AgreeDate", $row["agree_date"], null, "agree_date");
220
221 if (strlen($row["auth_mode"])>0) {
222 $this->__addElement("AuthMode", null, array("type" => $row["auth_mode"]), "auth_mode", true);
223 }
224
225 if (strlen($row["ext_account"])>0) {
226 $this->__addElement("ExternalAccount", $row["ext_account"], null, "ext_account", true);
227 }
228
229 if ($this->canExport("Look", "skin_style")) {
230 $this->__addElement("Look", null, array(
231 "Skin" => $prefs["skin"], "Style" => $prefs["style"]
232 ), "skin_style", true);
233 }
234
235
236 $this->__addElement("LastUpdate", $row["last_update"], null, "last_update");
237 $this->__addElement("LastLogin", $row["last_login"], null, "last_login");
238
239 include_once("./Services/User/classes/class.ilUserDefinedData.php");
240 $udf_data = new ilUserDefinedData($row['usr_id']);
241 $udf_data->addToXML($this, $this->settings);
242
243 $this->__addElement("AccountInfo", $row["ext_account"], array("Type" => "external"));
244
245 $this->__addElement("GMapsInfo", null, array(
246 "longitude" => $row["longitude"],
247 "latitude" => $row["latitude"],
248 "zoom" => $row["loc_zoom"]));
249
250 $this->__addElement("Feedhash", $row["feed_hash"]);
251
252 if ($this->attachPreferences || $this->canExport("prefs", "preferences")) {
253 $this->__handlePreferences($prefs, $row);
254 }
255
256 $this->xmlEndTag('User');
257 }
258
259
260 private function __handlePreferences($prefs, $row)
261 {
262 //todo nadia: test mail_address_option
263 include_once("Services/Mail/classes/class.ilMailOptions.php");
264 $mailOptions = new ilMailOptions($row["usr_id"]);
265 $prefs["mail_incoming_type"] = $mailOptions->getIncomingType();
266 $prefs["mail_address_option"] = $mailOptions->getMailAddressOption();
267 $prefs["mail_signature"] = $mailOptions->getSignature();
268 $prefs["mail_linebreak"] = $mailOptions->getLinebreak();
269 if (count($prefs)) {
270 $this->xmlStartTag("Prefs");
271 foreach ($prefs as $key => $value) {
273 $this->xmlElement("Pref", array("key" => $key), $value);
274 }
275 }
276 $this->xmlEndTag("Prefs");
277 }
278 }
279
280 public function __addElementMulti($tagname, $value, $attrs = null, $settingsname = null, $requiredTag = false)
281 {
282 if (is_array($value) && sizeof($value)) {
283 foreach ($value as $idx => $item) {
284 $this->__addElement($tagname, $item, $attrs, $settingsname, $requiredTag);
285 }
286 }
287 }
288
289 public function __addElement($tagname, $value, $attrs = null, $settingsname = null, $requiredTag = false)
290 {
291 if ($this->canExport($tagname, $settingsname)) {
292 if (strlen($value) > 0 || $requiredTag || (is_array($attrs) && count($attrs) > 0)) {
293 $this->xmlElement($tagname, $attrs, $value);
294 }
295 }
296 }
297
298 private function canExport($tagname, $settingsname = null)
299 {
300 return !is_array($this->settings) ||
301 in_array(strtolower($tagname), $this->settings) !== false ||
302 in_array($settingsname, $this->settings) !== false;
303 }
304
310 public function setSettings($settings)
311 {
312 $this->settings = $settings;
313 }
314
320 private function getPictureValue($usr_id)
321 {
322 global $ilDB;
323 // personal picture
324 $q = sprintf(
325 "SELECT value FROM usr_pref WHERE usr_id = %s AND keyword = %s",
326 $ilDB->quote($usr_id, "integer"),
327 $ilDB->quote('profile_image', "text")
328 );
329 $r = $ilDB->query($q);
330 if ($ilDB->numRows($r) == 1) {
331 $personal_picture_data = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC);
332 $personal_picture = $personal_picture_data["value"];
333 $webspace_dir = ilUtil::getWebspaceDir();
334 $image_file = $webspace_dir . "/usr_images/" . $personal_picture;
335 if (@is_file($image_file)) {
336 $fh = fopen($image_file, "rb");
337 if ($fh) {
338 $image_data = fread($fh, filesize($image_file));
339 fclose($fh);
340 $base64 = base64_encode($image_data);
341 $imagetype = "image/jpeg";
342 if (preg_match("/.*\.(png|gif)$/", $personal_picture, $matches)) {
343 $imagetype = "image/" . $matches[1];
344 }
345 return array(
346 "value" => $base64,
347 "encoding" => "Base64",
348 "imagetype" => $imagetype
349 );
350 }
351 }
352 }
353 return false;
354 }
355
356
363 public function setAttachPreferences($attachPrefs)
364 {
365 $this->attachPreferences = $attachPrefs;
366 }
367
373 public static function getExportablePreferences()
374 {
375 return array(
376 'hits_per_page',
377 'public_city',
378 'public_country',
379 'public_department',
380 'public_email',
381 'public_second_email',
382 'public_fax',
383 'public_hobby',
384 'public_institution',
385 'public_matriculation',
386 'public_phone',
387 'public_phone_home',
388 'public_phone_mobile',
389 'public_phone_office',
390 'public_profile',
391 'public_street',
392 'public_upload',
393 'public_zip',
394 'send_info_mails',
395 /*'show_users_online',*/
396 'hide_own_online_status',
397 'bs_allow_to_contact_me',
398 'chat_osc_accept_msg',
399 'user_tz',
400 'weekstart',
401 'mail_incoming_type',
402 'mail_signature',
403 'mail_linebreak',
404 'public_interests_general',
405 'public_interests_help_offered',
406 'public_interests_help_looking'
407 );
408 }
409
416 public static function isPrefExportable($key)
417 {
419 }
420}
sprintf('%.4f', $callTime)
An exception for terminatinating execution or to throw for unit testing.
Class ilMailOptions this class handles user mails.
static getExportSettings()
getExport Settings
static _getPreferences($user_id)
get preferences for user
Class ilUserDefinedData.
static _getInstance()
Get instance.
XML writer class.
setSettings($settings)
write access to settings
static isPrefExportable($key)
returns wether a key from db is exportable or not
__handlePreferences($prefs, $row)
static getExportablePreferences()
return exportable preference keys as found in db
__addElement($tagname, $value, $attrs=null, $settingsname=null, $requiredTag=false)
canExport($tagname, $settingsname=null)
setAttachPreferences($attachPrefs)
if set to true, all preferences of a user will be set
__addElementMulti($tagname, $value, $attrs=null, $settingsname=null, $requiredTag=false)
getPictureValue($usr_id)
return array with baseencoded picture data as key value, encoding type as encoding,...
static getWebspaceDir($mode="filesystem")
get webspace directory
XML writer class.
xmlEndTag($tag)
Writes an endtag.
xmlSetGenCmt($genCmt)
Sets generated comment.
xmlDumpMem($format=true)
Returns xml document from memory.
xmlHeader()
Writes xml header @access public.
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
xmlSetDtdDef($dtdDef)
Sets dtd definition.
$key
Definition: croninfo.php:18
$r
Definition: example_031.php:79
redirection script todo: (a better solution should control the processing via a xml file)
global $lng
Definition: privfeed.php:17
$query
$type
settings()
Definition: settings.php:2
global $ilDB
$ilUser
Definition: imgupload.php:18