ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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 var $ilias;
23 var $xml;
24 var $users;
25 var $user_id = 0;
26 var $attachRoles = false;
27 var $attachPreferences = false;
28 private static $exportablePrefs;
29
35 private $settings;
36
44 function ilUserXMLWriter()
45 {
46 global $ilias,$ilUser;
47
48 parent::ilXmlWriter();
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 function setAttachRoles ($value)
63 {
64 $this->attachRoles = $value == 1? true : false;
65 }
66
67 function setObjects(& $users)
68 {
69 $this->users = & $users;
70 }
71
72
73 function start()
74 {
75 if (!is_array($this->users))
76 return false;
77
78 $this->__buildHeader();
79
80
81 include_once ("./Services/User/classes/class.ilUserDefinedFields.php");
83 $udf_data->addToXML($this);
84
85 foreach ($this->users as $user)
86 {
87
88 $this->__handleUser ($user);
89
90 }
91
92 $this->__buildFooter();
93
94 return true;
95 }
96
97 function getXML()
98 {
99 return $this->xmlDumpMem(FALSE);
100 }
101
102
103 function __buildHeader()
104 {
105 $this->xmlSetDtdDef("<!DOCTYPE Users PUBLIC \"-//ILIAS//DTD UserImport//EN\" \"".ILIAS_HTTP_PATH."/xml/ilias_user_4_0.dtd\">");
106 $this->xmlSetGenCmt("User of ilias system");
107 $this->xmlHeader();
108
109 $this->xmlStartTag('Users');
110
111 return true;
112 }
113
114 function __buildFooter()
115 {
116 $this->xmlEndTag('Users');
117 }
118
120 {
121 global $ilDB,$lng;
122 if (!is_array ($this->settings)) {
123 include_once ('./Services/User/classes/class.ilObjUserFolder.php');
125 }
126
127 $prefs = ilObjUser::_getPreferences($row["usr_id"]);
128
129 if (strlen($row["language"]) == 0)
130 {
131 $row["language"] = $lng->getDefaultLanguage();
132
133 }
134
135 $attrs = array (
136 'Id' => "il_".IL_INST_ID."_usr_".$row["usr_id"],
137 'Language' => $row["language"],
138 'Action' => "Update"
139 );
140
141 $this->xmlStartTag("User", $attrs);
142
143 $this->xmlElement("Login", null, $row["login"]);
144
145 if ($this->attachRoles == TRUE)
146 {
147 include_once './Services/AccessControl/classes/class.ilObjRole.php';
148
149 $query = sprintf("SELECT object_data.title, object_data.description, rbac_fa.* ".
150 "FROM object_data, rbac_ua, rbac_fa WHERE rbac_ua.usr_id = %s ".
151 "AND rbac_ua.rol_id = rbac_fa.rol_id AND object_data.obj_id = rbac_fa.rol_id",
152 $ilDB->quote($row["usr_id"],'integer')
153 );
154 $rbacresult = $ilDB->query($query);
155
156 while ($rbacrow = $rbacresult->fetchRow(DB_FETCHMODE_ASSOC))
157 {
158 if ($rbacrow["assign"] != "y")
159 continue;
160
161 $type = "";
162
163 if ($rbacrow["parent"] == ROLE_FOLDER_ID)
164 {
165 $type = "Global";
166 }
167 else
168 {
169 $type = "Local";
170 }
171 if (strlen($type))
172 {
173 $this->xmlElement("Role",
174 array ("Id" =>
175 "il_".IL_INST_ID."_role_".$rbacrow["rol_id"], "Type" => $type),
176 $rbacrow["title"]);
177 }
178
179 }
180 }
181
182 $this->__addElement ("Firstname", $row["firstname"]);
183 $this->__addElement ("Lastname", $row["lastname"]);
184 $this->__addElement ("Title", $row["title"]);
185
186 if ($this->canExport("PersonalPicture", "upload"))
187 {
188 $imageData = $this->getPictureValue($row["usr_id"]);
189 if ($imageData)
190 {
191 $value = array_shift($imageData); //$imageData["value"];
192 $this->__addElement ("PersonalPicture", $value, $imageData, "upload");
193 }
194 }
195
196
197 $this->__addElement ("Gender", $row["gender"]);
198 $this->__addElement ("Email", $row["email"]);
199 $this->__addElement ("Birthday", $row["birthday"]);
200 $this->__addElement ("Institution", $row["institution"]);
201 $this->__addElement ("Street", $row["street"]);
202 $this->__addElement ("City", $row["city"]);
203 $this->__addElement ("PostalCode", $row["zipcode"], null, "zipcode");
204 $this->__addElement ("Country", $row["country"]);
205 $this->__addElement ("PhoneOffice", $row["phone_office"], null, "phone_office");
206 $this->__addElement ("PhoneHome", $row["phone_home"], null, "phone_home");
207 $this->__addElement ("PhoneMobile", $row["phone_mobile"], null, "phone_mobile");
208 $this->__addElement ("Fax", $row["fax"]);
209 $this->__addElement ("Hobby", $row["hobby"]);
210
211 $this->__addElementMulti ("GeneralInterest", $row["interests_general"], null, "interests_general");
212 $this->__addElementMulti ("OfferingHelp", $row["interests_help_offered"], null, "interests_help_offered");
213 $this->__addElementMulti ("LookingForHelp", $row["interests_help_looking"], null, "interests_help_looking");
214
215 $this->__addElement ("Department", $row["department"]);
216 $this->__addElement ("Comment", $row["referral_comment"], null, "referral_comment");
217 $this->__addElement ("Matriculation", $row["matriculation"]);
218 $this->__addElement ("Active", $row["active"] ? "true":"false" );
219 $this->__addElement ("ClientIP", $row["client_ip"], null, "client_ip");
220 $this->__addElement ("TimeLimitOwner", $row["time_limit_owner"], null, "time_limit_owner");
221 $this->__addElement ("TimeLimitUnlimited", $row["time_limit_unlimited"], null, "time_limit_unlimited");
222 $this->__addElement ("TimeLimitFrom", $row["time_limit_from"], null, "time_limit_from");
223 $this->__addElement ("TimeLimitUntil", $row["time_limit_until"], null, "time_limit_until");
224 $this->__addElement ("TimeLimitMessage", $row["time_limit_message"], null, "time_limit_message");
225 $this->__addElement ("ApproveDate", $row["approve_date"], null, "approve_date");
226 $this->__addElement ("AgreeDate", $row["agree_date"], null, "agree_date");
227
228 if (strlen($row["auth_mode"])>0)
229 {
230 $this->__addElement ("AuthMode", null, array ("type" => $row["auth_mode"]),"auth_mode", true);
231 }
232
233 if (strlen($row["ext_account"])>0)
234 {
235 $this->__addElement ("ExternalAccount", $row["ext_account"], null, "ext_account", true);
236 }
237
238 if ($this->canExport("Look","skin_style"))
239 {
240 $this->__addElement("Look", null, array(
241 "Skin" => $prefs["skin"], "Style" => $prefs["style"]
242 ), "skin_style", true);
243
244 }
245
246
247 $this->__addElement ("LastUpdate", $row["last_update"], null, "last_update");
248 $this->__addElement ("LastLogin", $row["last_login"], null, "last_login");
249
250 include_once ("./Services/User/classes/class.ilUserDefinedData.php");
251 $udf_data = new ilUserDefinedData($row['usr_id']);
252 $udf_data->addToXML($this, $this->settings);
253
254 $msgrs = array ("skype" => "im_skype", "yahoo" => "im_yahoo", "msn"=>"im_msn", "aim"=>"im_aim", "icq"=>"im_icq", "delicious" => "delicious", "external" => "ext_account", "jabber" => "im_jabber", "voip" => "im_voip");
255 foreach ($msgrs as $type => $fieldname) {
256 $this->__addElement("AccountInfo", $row[$fieldname], array("Type" => $type), "instant_messengers");
257 }
258
259 $this->__addElement("GMapsInfo", null, array (
260 "longitude" => $row["longitude"],
261 "latitude" => $row["latitude"],
262 "zoom" => $row["loc_zoom"]));
263
264 $this->__addElement("Feedhash", $row["feed_hash"]);
265
266 if ($this->attachPreferences || $this->canExport("prefs", "preferences"))
267 $this->__handlePreferences ($prefs, $row);
268
269 $this->xmlEndTag('User');
270 }
271
272
273 private function __handlePreferences ($prefs, $row)
274 {
275
276 include_once ("Services/Mail/classes/class.ilMailOptions.php");
277 $mailOptions = new ilMailOptions($row["usr_id"]);
278 $prefs["mail_incoming_type"] = $mailOptions->getIncomingType();
279 $prefs["mail_signature"] = $mailOptions->getSignature();
280 $prefs["mail_linebreak"] = $mailOptions->getLinebreak();
281 if (count($prefs))
282 {
283 $this->xmlStartTag("Prefs");
284 foreach ($prefs as $key => $value)
285 {
287 $this->xmlElement("Pref", array("key" => $key), $value);
288 }
289 $this->xmlEndTag("Prefs");
290 }
291 }
292
293 function __addElementMulti ($tagname, $value, $attrs = null, $settingsname = null, $requiredTag = false)
294 {
295 if(is_array($value) && sizeof($value))
296 {
297 foreach($value as $idx => $item)
298 {
299 $this->__addElement ($tagname, $item, $attrs, $settingsname, $requiredTag);
300 }
301 }
302 }
303
304 function __addElement ($tagname, $value, $attrs = null, $settingsname = null, $requiredTag = false)
305 {
306 if ($this->canExport($tagname, $settingsname))
307 if (strlen($value) > 0 || $requiredTag || (is_array($attrs) && count($attrs) > 0))
308 $this->xmlElement ($tagname, $attrs, $value);
309
310 }
311
312 private function canExport ($tagname, $settingsname = null)
313 {
314 return !is_array($this->settings) ||
315 in_array(strtolower($tagname), $this->settings) !== FALSE ||
316 in_array($settingsname, $this->settings) !== FALSE;
317 }
318
325 $this->settings = $settings;
326 }
327
333 private function getPictureValue ($usr_id) {
334 global $ilDB;
335 // personal picture
336 $q = sprintf("SELECT value FROM usr_pref WHERE usr_id = %s AND keyword = %s",
337 $ilDB->quote($usr_id, "integer"), $ilDB->quote('profile_image', "text"));
338 $r = $ilDB->query($q);
339 if ($ilDB->numRows($r) == 1)
340 {
341 $personal_picture_data = $r->fetchRow(DB_FETCHMODE_ASSOC);
342 $personal_picture = $personal_picture_data["value"];
343 $webspace_dir = ilUtil::getWebspaceDir();
344 $image_file = $webspace_dir."/usr_images/".$personal_picture;
345 if (@is_file($image_file))
346 {
347 $fh = fopen($image_file, "rb");
348 if ($fh)
349 {
350 $image_data = fread($fh, filesize($image_file));
351 fclose($fh);
352 $base64 = base64_encode($image_data);
353 $imagetype = "image/jpeg";
354 if (preg_match("/.*\.(png|gif)$/", $personal_picture, $matches))
355 {
356 $imagetype = "image/".$matches[1];
357 }
358 return array (
359 "value" => $base64,
360 "encoding" => "Base64",
361 "imagetype" => $imagetype
362 );
363 }
364 }
365 }
366 return false;
367 }
368
369
376 public function setAttachPreferences ($attachPrefs)
377 {
378 $this->attachPreferences = $attachPrefs;
379 }
380
386 public static function getExportablePreferences() {
387 return array (
388 'hits_per_page',
389 'public_city',
390 'public_country',
391 'public_department',
392 'public_email',
393 'public_fax',
394 'public_hobby',
395 'public_institution',
396 'public_matriculation',
397 'public_phone',
398 'public_phone_home',
399 'public_phone_mobile',
400 'public_phone_office',
401 'public_profile',
402 'public_street',
403 'public_upload',
404 'public_zip',
405 'send_info_mails',
406 'show_users_online',
407 'hide_own_online_status',
408 'user_tz',
409 'weekstart',
410 'mail_incoming_type',
411 'mail_signature',
412 'mail_linebreak',
413 'public_interests_general',
414 'public_interests_help_offered',
415 'public_interests_help_looking'
416 );
417 }
418
425 public static function isPrefExportable($key) {
426 return in_array($key, ilUserXMLWriter::getExportablePreferences());
427 }
428
429}
430
431
432?>
const DB_FETCHMODE_ASSOC
Definition: class.ilDB.php:10
Class UserMail 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
ilUserXMLWriter()
constructor
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.
xmlDumpMem($format=TRUE)
Returns xml document from memory.
xmlSetGenCmt($genCmt)
Sets generated comment.
xmlStartTag($tag, $attrs=NULL, $empty=FALSE, $encode=TRUE, $escape=TRUE)
Writes a starttag.
xmlHeader()
Writes xml header @access public.
xmlSetDtdDef($dtdDef)
Sets dtd definition.
xmlElement($tag, $attrs=NULL, $data=Null, $encode=TRUE, $escape=TRUE)
Writes a basic element (no children, just textual content)
redirection script todo: (a better solution should control the processing via a xml file)
global $lng
Definition: privfeed.php:40
global $ilDB
global $ilUser
Definition: imgupload.php:15