ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilMemberExport.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
24include_once('Services/Membership/classes/class.ilMemberAgreement.php');
25include_once('Modules/Course/classes/class.ilCourseParticipants.php');
26include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
27include_once('Services/User/classes/class.ilUserDefinedData.php');
28include_once('Services/User/classes/class.ilUserFormSettings.php');
29
30define("IL_MEMBER_EXPORT_CSV_FIELD_SEPERATOR",',');
31define("IL_MEMBER_EXPORT_CSV_STRING_DELIMITER",'"');
32
33
43{
44 const EXPORT_CSV = 1;
45 const EXPORT_EXCEL = 2;
46
47
48 private $ref_id;
49 private $obj_id;
50 private $type;
51 private $members;
52
53 private $lng;
54
55 private $settings;
56
57 private $export_type = null;
58 private $filename = null;
59
60 private $user_ids = array();
61 private $user_course_data = array();
62 private $user_course_fields = array();
63 private $user_profile_data = array();
64 private $privacy;
65
72 public function __construct($a_ref_id, $a_type = self::EXPORT_CSV)
73 {
74 global $ilObjDataCache,$lng;
75
76 $this->lng = $lng;
77
78 $this->export_type = $a_type;
79
80 $this->ref_id = $a_ref_id;
81 $this->obj_id = $ilObjDataCache->lookupObjId($this->ref_id);
82 $this->type = ilObject::_lookupType($this->obj_id);
83
84 $this->initMembers();
85
86 $this->agreement = ilMemberAgreement::_readByObjId($this->obj_id);
87 $this->settings = new ilUserFormSettings('memexp');
88 $this->privacy = ilPrivacySettings::_getInstance();
89 }
90
96 public function setFilename($a_file)
97 {
98 $this->filename = $a_file;
99 }
100
105 public function getFilename()
106 {
107 return $this->filename;
108 }
109
114 public function getRefId()
115 {
116 return $this->ref_id;
117 }
118
123 public function getType()
124 {
125 return $this->type;
126 }
127
132 public function getExportType()
133 {
134 return $this->export_type;
135 }
136
141 public function getObjId()
142 {
143 return $this->obj_id;
144 }
145
152 public function create()
153 {
154 $this->fetchUsers();
155
156 // DONE: Switch different export types
157 switch($this->getExportType())
158 {
159 case self::EXPORT_CSV:
160 $this->createCSV();
161 break;
162
164 $this->createExcel();
165 break;
166 }
167 }
168
176 public function getCSVString()
177 {
178 return $this->csv->getCSVString();
179 }
180
181
186 public function createExcel()
187 {
188 include_once "./Services/Excel/classes/class.ilExcelUtils.php";
189 include_once "./Services/Excel/classes/class.ilExcelWriterAdapter.php";
190 $adapter = new ilExcelWriterAdapter($this->getFilename(), false);
191 $workbook = $adapter->getWorkbook();
192 $this->worksheet = $workbook->addWorksheet();
193 $this->write();
194 $workbook->close();
195 }
196
203 public function createCSV()
204 {
205 include_once('Services/Utilities/classes/class.ilCSVWriter.php');
206 $this->csv = new ilCSVWriter();
207
208 $this->write();
209 }
210
211
212
220 protected function addCol($a_value,$a_row,$a_col)
221 {
222 switch($this->getExportType())
223 {
224 case self::EXPORT_CSV:
225 $this->csv->addColumn($a_value);
226 break;
227
229 $this->worksheet->write($a_row,$a_col,$a_value);
230 break;
231 }
232 }
233
238 protected function addRow()
239 {
240 switch($this->getExportType())
241 {
242 case self::EXPORT_CSV:
243 $this->csv->addRow();
244 break;
245
247 break;
248 }
249 }
250
258 protected function getOrderedExportableFields()
259 {
260 include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
261 include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
262 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
263 include_once('Services/User/classes/class.ilUserDefinedFields.php');
264
266 $field_info->sortExportFields();
267 $fields[] = 'role';
268 // Append agreement info
270 if($privacy->courseConfirmationRequired())
271 {
272 $fields[] = 'agreement';
273 }
274
275 foreach($field_info->getExportableFields() as $field)
276 {
277 if($this->settings->enabled($field))
278 {
279 $fields[] = $field;
280 }
281 }
282
284 foreach($udf->getCourseExportableFields() as $field_id => $udf_data)
285 {
286 if($this->settings->enabled('udf_'.$field_id))
287 {
288 $fields[] = 'udf_'.$field_id;
289 }
290 }
291
292 // Add course specific fields
293 foreach(ilCourseDefinedFieldDefinition::_getFields($this->obj_id) as $field_obj)
294 {
295 if($this->settings->enabled('cdf_'.$field_obj->getId()))
296 {
297 $fields[] = 'cdf_'.$field_obj->getId();
298 }
299 }
300 return $fields ? $fields : array();
301 }
302
307 protected function write()
308 {
309 // Add header line
310 $row = 0;
311 $col = 0;
312 foreach($all_fields = $this->getOrderedExportableFields() as $field)
313 {
314 switch($field)
315 {
316 case 'role':
317 #$this->csv->addColumn($this->lng->txt($this->getType().'_role_status'));
318 $this->addCol($this->lng->txt($this->getType().'_role_status'), $row, $col++);
319 break;
320 case 'agreement':
321 #$this->csv->addColumn($this->lng->txt('ps_agreement_accepted'));
322 $this->addCol($this->lng->txt('ps_agreement_accepted'), $row, $col++);
323 break;
324 case 'consultation_hour':
325 $this->lng->loadLanguageModule('dateplaner');
326 $this->addCol($this->lng->txt('cal_ch_field_ch'), $row, $col++);
327 break;
328
329 default:
330 if(substr($field,0,4) == 'udf_')
331 {
332 $field_id = explode('_',$field);
333 include_once('Services/User/classes/class.ilUserDefinedFields.php');
335 $def = $udf->getDefinition($field_id[1]);
336 #$this->csv->addColumn($def['field_name']);
337 $this->addCol($def['field_name'], $row, $col++);
338 }
339 elseif(substr($field,0,4) == 'cdf_')
340 {
341 $field_id = explode('_',$field);
342 #$this->csv->addColumn(ilCourseDefinedFieldDefinition::_lookupName($field_id[1]));
343 $this->addCol(ilCourseDefinedFieldDefinition::_lookupName($field_id[1]),$row,$col++);
344 }elseif($field == "username")//User Name Presentation Guideline; username should be named login
345 {
346 $this->addCol($this->lng->txt("login"), $row, $col++);
347 }
348 else
349 {
350 #$this->csv->addColumn($this->lng->txt($field));
351 $this->addCol($this->lng->txt($field), $row, $col++);
352 }
353 break;
354 }
355 }
356 #$this->csv->addRow();
357 $this->addRow();
358 // Add user data
359 foreach($this->user_ids as $usr_id)
360 {
361 $row++;
362 $col = 0;
363
364 $udf_data = new ilUserDefinedData($usr_id);
365 foreach($all_fields as $field)
366 {
367 // Handle course defined fields
368 if($this->addUserDefinedField($udf_data,$field,$row,$col))
369 {
370 $col++;
371 continue;
372 }
373
374 if($this->addCourseField($usr_id,$field,$row,$col))
375 {
376 $col++;
377 continue;
378 }
379
380 switch($field)
381 {
382 case 'role':
383 switch($this->user_course_data[$usr_id]['role'])
384 {
385 case IL_CRS_ADMIN:
386 #$this->csv->addColumn($this->lng->txt('crs_admin'));
387 $this->addCol($this->lng->txt('crs_admin'), $row, $col++);
388 break;
389
390 case IL_CRS_TUTOR:
391 #$this->csv->addColumn($this->lng->txt('crs_tutor'));
392 $this->addCol($this->lng->txt('crs_tutor'), $row, $col++);
393 break;
394
395 case IL_CRS_MEMBER:
396 #$this->csv->addColumn($this->lng->txt('crs_member'));
397 $this->addCol($this->lng->txt('crs_member'), $row, $col++);
398 break;
399
400 case IL_GRP_ADMIN:
401 #$this->csv->addColumn($this->lng->txt('il_grp_admin'));
402 $this->addCol($this->lng->txt('il_grp_admin'), $row, $col++);
403 break;
404
405 case IL_GRP_MEMBER:
406 #$this->csv->addColumn($this->lng->txt('il_grp_member'));
407 $this->addCol($this->lng->txt('il_grp_member'), $row, $col++);
408 break;
409
410 case 'subscriber':
411 #$this->csv->addColumn($this->lng->txt($this->getType().'_subscriber'));
412 $this->addCol($this->lng->txt($this->getType().'_subscriber'), $row, $col++);
413 break;
414
415 default:
416 #$this->csv->addColumn($this->lng->txt('crs_waiting_list'));
417 $this->addCol($this->lng->txt('crs_waiting_list'), $row, $col++);
418 break;
419
420 }
421 break;
422
423 case 'agreement':
424 if(isset($this->agreement[$usr_id]))
425 {
426 if($this->agreement[$usr_id]['accepted'])
427 {
428 #$this->csv->addColumn(ilFormat::formatUnixTime($this->agreement[$usr_id]['acceptance_time'],true));
429 $this->addCol(ilFormat::formatUnixTime($this->agreement[$usr_id]['acceptance_time'],true),$row,$col++);
430 }
431 else
432 {
433 #$this->csv->addColumn($this->lng->txt('ps_not_accepted'));
434 $this->addCol($this->lng->txt('ps_not_accepted'),$row,$col++);
435 }
436 }
437 else
438 {
439 #$this->csv->addColumn($this->lng->txt('ps_not_accepted'));
440 $this->addCol($this->lng->txt('ps_not_accepted'),$row,$col++);
441 }
442 break;
443
444 // These fields are always enabled
445 case 'username':
446 #$this->csv->addColumn($this->user_profile_data[$usr_id]['login']);
447 $this->addCol($this->user_profile_data[$usr_id]['login'],$row,$col++);
448 break;
449
450 case 'firstname':
451 case 'lastname':
452 #$this->csv->addColumn($this->user_profile_data[$usr_id][$field]);
453 $this->addCol($this->user_profile_data[$usr_id][$field],$row,$col++);
454 break;
455
456 case 'consultation_hour':
457 include_once './Services/Booking/classes/class.ilBookingEntry.php';
458 $bookings = ilBookingEntry::lookupManagedBookingsForObject($this->obj_id, $GLOBALS['ilUser']->getId());
459
460 $uts = array();
461 foreach((array) $bookings[$usr_id] as $ut)
462 {
465 new ilDateTime($ut['dt'],IL_CAL_UNIX),
466 new ilDateTime($ut['dtend'],IL_CAL_UNIX)
467 );
468 if(strlen($ut['explanation']))
469 {
470 $tmp .= ' '.$ut['explanation'];
471 }
472 $uts[] = $tmp;
473 }
474 $uts_str = implode(',',$uts);
475 $this->addCol($uts_str, $row, $col++);
476 break;
477
478 default:
479 // Check aggreement
480 if(!$this->privacy->courseConfirmationRequired() or $this->agreement[$usr_id]['accepted'])
481 {
482 #$this->csv->addColumn($this->user_profile_data[$usr_id][$field]);
483 $this->addCol($this->user_profile_data[$usr_id][$field],$row,$col++);
484 }
485 else
486 {
487 #$this->csv->addColumn('');
488 $this->addCol('', $row, $col++);
489 }
490 break;
491
492 }
493 }
494 #$this->csv->addRow();
495 $this->addRow();
496 }
497
498 }
499
500
501
508 private function fetchUsers()
509 {
511
512 if($this->settings->enabled('admin'))
513 {
514 $this->user_ids = $tmp_ids = $this->members->getAdmins();
515 $this->readCourseData($tmp_ids);
516 }
517 if($this->settings->enabled('tutor'))
518 {
519 $this->user_ids = array_merge($tmp_ids = $this->members->getTutors(),$this->user_ids);
520 $this->readCourseData($tmp_ids);
521 }
522 if($this->settings->enabled('member'))
523 {
524 $this->user_ids = array_merge($tmp_ids = $this->members->getMembers(),$this->user_ids);
525 $this->readCourseData($tmp_ids);
526 }
527 if($this->settings->enabled('subscribers'))
528 {
529 $this->user_ids = array_merge($tmp_ids = $this->members->getSubscribers(),$this->user_ids);
530 $this->readCourseData($tmp_ids,'subscriber');
531 }
532 if($this->settings->enabled('waiting_list'))
533 {
534 include_once('Modules/Course/classes/class.ilCourseWaitingList.php');
535 $waiting_list = new ilCourseWaitingList($this->obj_id);
536 $this->user_ids = array_merge($waiting_list->getUserIds(),$this->user_ids);
537
538 }
539 // Sort by lastname
540 $this->user_ids = ilUtil::_sortIds($this->user_ids,'usr_data','lastname','usr_id');
541
542 // Finally read user profile data
543 $this->user_profile_data = ilObjUser::_readUsersProfileData($this->user_ids);
544 }
545
552 private function readCourseData($a_user_ids,$a_status = 'member')
553 {
554 foreach($a_user_ids as $user_id)
555 {
556 // Read course related data
557 if($this->members->isAdmin($user_id))
558 {
559 $this->user_course_data[$user_id]['role'] = $this->getType() == 'crs' ? IL_CRS_ADMIN : IL_GRP_ADMIN;
560 }
561 elseif($this->members->isTutor($user_id))
562 {
563 $this->user_course_data[$user_id]['role'] = IL_CRS_TUTOR;
564 }
565 elseif($this->members->isMember($user_id))
566 {
567 $this->user_course_data[$user_id]['role'] = $this->getType() == 'crs' ? IL_CRS_MEMBER : IL_GRP_MEMBER;
568 }
569 else
570 {
571 $this->user_course_data[$user_id]['role'] = 'subscriber';
572 }
573 }
574 }
575
584 {
585 include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
586 $this->user_course_fields = ilCourseUserData::_getValuesByObjId($this->obj_id);
587 }
588
598 private function addCourseField($a_usr_id,$a_field,$row,$col)
599 {
600 if(substr($a_field,0,4) != 'cdf_')
601 {
602 return false;
603 }
604 if(!$this->privacy->courseConfirmationRequired() or $this->agreement[$a_usr_id]['accepted'])
605 {
606 $field_info = explode('_',$a_field);
607 $field_id = $field_info[1];
608 $value = $this->user_course_fields[$a_usr_id][$field_id];
609 #$this->csv->addColumn($value);
610 $this->addCol($value, $row, $col);
611 return true;
612 }
613 #$this->csv->addColumn('');
614 $this->addCol('', $row, $col);
615 return true;
616
617 }
618
627 private function addUserDefinedField($udf_data,$a_field,$row,$col)
628 {
629 if(substr($a_field,0,4) != 'udf_')
630 {
631 return false;
632 }
633 if(!$this->privacy->courseConfirmationRequired() or $this->agreement[$udf_data->getUserId()]['accepted'])
634 {
635 $field_info = explode('_',$a_field);
636 $field_id = $field_info[1];
637 $value = $udf_data->get('f_'.$field_id);
638 #$this->csv->addColumn($value);
639 $this->addCol($value, $row, $col);
640 return true;
641 }
642 #$this->csv->addColumn('');
643 $this->addCol('', $row, $col);
644 }
645
650 protected function initMembers()
651 {
652 if($this->getType() == 'crs')
653 {
654 $this->members = ilCourseParticipants::_getInstanceByObjId($this->getObjId());
655 }
656 if($this->getType() == 'grp')
657 {
658 $this->members = ilGroupParticipants::_getInstanceByObjId($this->getObjId());
659 }
660 return true;
661 }
662}
663
664
665?>
const IL_CAL_UNIX
const IL_CRS_ADMIN
Base class for course and group participants.
const IL_CRS_MEMBER
const IL_GRP_MEMBER
const IL_CRS_TUTOR
const IL_GRP_ADMIN
static lookupManagedBookingsForObject($a_obj_id, $a_usr_id)
Lookup bookings for own and managed consultation hours of an object.
Helper class to generate CSV files.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.
static _lookupName($a_field_id)
Lookup field name.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
static setUseRelativeDates($a_status)
set use relative dates
@classDescription Date and time handling
Class ilExcelWriterAdapter.
static _getInstanceByType($a_type)
Get Singleton Instance.
formatUnixTime($ut, $with_time=false)
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
static _readByObjId($a_obj_id)
Read user data by object id.
Class for generation of member export files.
__construct($a_ref_id, $a_type=self::EXPORT_CSV)
Constructor.
addCol($a_value, $a_row, $a_col)
Write on column.
addUserDefinedField($udf_data, $a_field, $row, $col)
Add user defined fields.
readCourseData($a_user_ids, $a_status='member')
Read All User related course data.
getCSVString()
toString method
fetchUsers()
Fetch all users that will be exported.
initMembers()
Init member object.
setFilename($a_file)
set filename
create()
Create Export File.
getFilename()
get filename
createCSV()
Create CSV File.
getExportType()
get current export type
readCourseSpecificFieldsData()
Read course specific fields data.
addCourseField($a_usr_id, $a_field, $row, $col)
fill course specific fields
getOrderedExportableFields()
Get ordered enabled fields.
static _readUsersProfileData($a_user_ids)
STATIC METHOD get user data of selected users.
static _lookupType($a_id, $a_reference=false)
lookup object type
static _getInstance()
Get instance of ilPrivacySettings.
Class ilUserDefinedData.
static _getInstance()
Get instance.
static _sortIds($a_ids, $a_table, $a_field, $a_id_name)
Function that sorts ids by a given table field using WHERE IN E.g: __sort(array(6,...
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276