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 
5 include_once "./Services/Xml/classes/class.ilXmlWriter.php";
6 include_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");
83  $udf_data = &ilUserDefinedFields::_getInstance();
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 }
getPictureValue($usr_id)
return array with baseencoded picture data as key value, encoding type as encoding, and image type as key type.
Class ilMailOptions this class handles user mails.
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
xmlSetGenCmt($genCmt)
Sets generated comment.
static _getInstance()
Get instance.
Class ilUserDefinedData.
__handlePreferences($prefs, $row)
__addElement($tagname, $value, $attrs=null, $settingsname=null, $requiredTag=false)
xmlSetDtdDef($dtdDef)
Sets dtd definition.
$type
xmlDumpMem($format=true)
Returns xml document from memory.
setSettings($settings)
write access to settings
XML writer class.
static isPrefExportable($key)
returns wether a key from db is exportable or not
canExport($tagname, $settingsname=null)
xmlEndTag($tag)
Writes an endtag.
static getExportSettings()
getExport Settings
$r
Definition: example_031.php:79
setAttachPreferences($attachPrefs)
if set to true, all preferences of a user will be set
XML writer class.
$ilUser
Definition: imgupload.php:18
redirection script todo: (a better solution should control the processing via a xml file) ...
xmlHeader()
Writes xml header public.
$query
Create styles array
The data for the language used.
__addElementMulti($tagname, $value, $attrs=null, $settingsname=null, $requiredTag=false)
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
settings()
Definition: settings.php:2
global $lng
Definition: privfeed.php:17
global $ilDB
static getExportablePreferences()
return exportable preference keys as found in db
static _getPreferences($user_id)
get preferences for user
static getWebspaceDir($mode="filesystem")
get webspace directory
$key
Definition: croninfo.php:18
__construct()
constructor