ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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() or ilCourseDefinedFieldDefinition::_hasFields($this->obj_id))
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() and !ilCourseDefinedFieldDefinition::_getFields($this->obj_id))
481 or $this->agreement[$usr_id]['accepted'])
482 {
483 #$this->csv->addColumn($this->user_profile_data[$usr_id][$field]);
484 $this->addCol($this->user_profile_data[$usr_id][$field],$row,$col++);
485 }
486 else
487 {
488 #$this->csv->addColumn('');
489 $this->addCol('', $row, $col++);
490 }
491 break;
492
493 }
494 }
495 #$this->csv->addRow();
496 $this->addRow();
497 }
498
499 }
500
501
502
509 private function fetchUsers()
510 {
512
513 if($this->settings->enabled('admin'))
514 {
515 $this->user_ids = $tmp_ids = $this->members->getAdmins();
516 $this->readCourseData($tmp_ids);
517 }
518 if($this->settings->enabled('tutor'))
519 {
520 $this->user_ids = array_merge($tmp_ids = $this->members->getTutors(),$this->user_ids);
521 $this->readCourseData($tmp_ids);
522 }
523 if($this->settings->enabled('member'))
524 {
525 $this->user_ids = array_merge($tmp_ids = $this->members->getMembers(),$this->user_ids);
526 $this->readCourseData($tmp_ids);
527 }
528 if($this->settings->enabled('subscribers'))
529 {
530 $this->user_ids = array_merge($tmp_ids = $this->members->getSubscribers(),$this->user_ids);
531 $this->readCourseData($tmp_ids,'subscriber');
532 }
533 if($this->settings->enabled('waiting_list'))
534 {
535 include_once('Modules/Course/classes/class.ilCourseWaitingList.php');
536 $waiting_list = new ilCourseWaitingList($this->obj_id);
537 $this->user_ids = array_merge($waiting_list->getUserIds(),$this->user_ids);
538
539 }
540 // Sort by lastname
541 $this->user_ids = ilUtil::_sortIds($this->user_ids,'usr_data','lastname','usr_id');
542
543 // Finally read user profile data
544 $this->user_profile_data = ilObjUser::_readUsersProfileData($this->user_ids);
545 }
546
553 private function readCourseData($a_user_ids,$a_status = 'member')
554 {
555 foreach($a_user_ids as $user_id)
556 {
557 // Read course related data
558 if($this->members->isAdmin($user_id))
559 {
560 $this->user_course_data[$user_id]['role'] = $this->getType() == 'crs' ? IL_CRS_ADMIN : IL_GRP_ADMIN;
561 }
562 elseif($this->members->isTutor($user_id))
563 {
564 $this->user_course_data[$user_id]['role'] = IL_CRS_TUTOR;
565 }
566 elseif($this->members->isMember($user_id))
567 {
568 $this->user_course_data[$user_id]['role'] = $this->getType() == 'crs' ? IL_CRS_MEMBER : IL_GRP_MEMBER;
569 }
570 else
571 {
572 $this->user_course_data[$user_id]['role'] = 'subscriber';
573 }
574 }
575 }
576
585 {
586 include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
587 $this->user_course_fields = ilCourseUserData::_getValuesByObjId($this->obj_id);
588 }
589
599 private function addCourseField($a_usr_id,$a_field,$row,$col)
600 {
601 if(substr($a_field,0,4) != 'cdf_')
602 {
603 return false;
604 }
605 if((!$this->privacy->courseConfirmationRequired() and ilCourseDefinedFieldDefinition::_getFields($this->obj_id))
606 or $this->agreement[$a_usr_id]['accepted'])
607 {
608 $field_info = explode('_',$a_field);
609 $field_id = $field_info[1];
610 $value = $this->user_course_fields[$a_usr_id][$field_id];
611 #$this->csv->addColumn($value);
612 $this->addCol($value, $row, $col);
613 return true;
614 }
615 #$this->csv->addColumn('');
616 $this->addCol('', $row, $col);
617 return true;
618
619 }
620
629 private function addUserDefinedField($udf_data,$a_field,$row,$col)
630 {
631 if(substr($a_field,0,4) != 'udf_')
632 {
633 return false;
634 }
635 if(!$this->privacy->courseConfirmationRequired() or $this->agreement[$udf_data->getUserId()]['accepted'])
636 {
637 $field_info = explode('_',$a_field);
638 $field_id = $field_info[1];
639 $value = $udf_data->get('f_'.$field_id);
640 #$this->csv->addColumn($value);
641 $this->addCol($value, $row, $col);
642 return true;
643 }
644 #$this->csv->addColumn('');
645 $this->addCol('', $row, $col);
646 }
647
652 protected function initMembers()
653 {
654 if($this->getType() == 'crs')
655 {
656 $this->members = ilCourseParticipants::_getInstanceByObjId($this->getObjId());
657 }
658 if($this->getType() == 'grp')
659 {
660 $this->members = ilGroupParticipants::_getInstanceByObjId($this->getObjId());
661 }
662 return true;
663 }
664}
665
666
667?>
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 _hasFields($a_container_id)
Check if there are any define fields.
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['ct_recipient']