ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilCourseMembershipGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once './Services/Membership/classes/class.ilMembershipGUI.php';
6
19{
20
26 public function filterUserIdsByRbacOrPositionOfCurrentUser($a_user_ids)
27 {
28 return $GLOBALS['DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
29 'manage_members',
30 'manage_members',
31 $this->getParentObject()->getRefId(),
32 $a_user_ids
33 );
34 }
35
36
37
45 public function assignMembers(array $a_usr_ids, $a_type)
46 {
47 global $rbacsystem, $ilErr;
48
49 if (!$this->checkRbacOrPositionAccessBool('manage_members', 'manage_members')) {
50 $ilErr->raiseError($this->lng->txt("msg_no_perm_read"), $ilErr->FATAL);
51 }
52
53 if (!count($a_usr_ids)) {
54 ilUtil::sendFailure($this->lng->txt("crs_no_users_selected"), true);
55 return false;
56 }
57
58 $a_usr_ids = $this->filterUserIdsByRbacOrPositionOfCurrentUser($a_usr_ids);
59
60 $added_users = 0;
61 foreach ($a_usr_ids as $user_id) {
62 if (!$tmp_obj = ilObjectFactory::getInstanceByObjId($user_id, false)) {
63 continue;
64 }
65 if ($this->getMembersObject()->isAssigned($user_id)) {
66 continue;
67 }
68 switch ($a_type) {
69 case $this->getParentObject()->getDefaultMemberRole():
70 $this->getMembersObject()->add($user_id, IL_CRS_MEMBER);
71 break;
72 case $this->getParentObject()->getDefaultTutorRole():
73 $this->getMembersObject()->add($user_id, IL_CRS_TUTOR);
74 break;
75 case $this->getParentObject()->getDefaultAdminRole():
76 $this->getMembersObject()->add($user_id, IL_CRS_ADMIN);
77 break;
78 default:
79 if (in_array($a_type, $this->getParentObject()->getLocalCourseRoles(true))) {
80 $this->getMembersObject()->add($user_id, IL_CRS_MEMBER);
81 $this->getMembersObject()->updateRoleAssignments($user_id, (array) $a_type);
82 } else {
83 ilLoggerFactory::getLogger('crs')->notice('Can\'t find role with id .' . $a_type . ' to assign users.');
84 ilUtil::sendFailure($this->lng->txt("crs_cannot_find_role"), true);
85 return false;
86 }
87 break;
88 }
89 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_ACCEPT_USER, $user_id);
90
91 $this->getParentObject()->checkLPStatusSync($user_id);
92
93 ++$added_users;
94 }
95 if ($added_users) {
96 ilUtil::sendSuccess($this->lng->txt("crs_users_added"), true);
97 $this->ctrl->redirect($this, 'participants');
98 }
99 ilUtil::sendFailure($this->lng->txt("crs_users_already_assigned"), true);
100 return false;
101 }
102
106 protected function updateParticipantsStatus()
107 {
108 global $ilAccess,$ilErr,$ilUser,$rbacadmin;
109
110 $visible_members = (array) $_POST['visible_member_ids'];
111 $passed = (array) $_POST['passed'];
112 $blocked = (array) $_POST['blocked'];
113 $contact = (array) $_POST['contact'];
114 $notification = (array) $_POST['notification'];
115
116 foreach ($visible_members as $member_id) {
117 if ($ilAccess->checkAccess("grade", "", $this->getParentObject()->getRefId())) {
118 $this->getMembersObject()->updatePassed($member_id, in_array($member_id, $passed), true);
119 $this->updateLPFromStatus($member_id, in_array($member_id, $passed));
120 }
121
122 if ($this->getMembersObject()->isAdmin($member_id) or $this->getMembersObject()->isTutor($member_id)) {
123 // remove blocked
124 $this->getMembersObject()->updateBlocked($member_id, 0);
125 $this->getMembersObject()->updateNotification($member_id, in_array($member_id, $notification));
126 $this->getMembersObject()->updateContact($member_id, in_array($member_id, $contact));
127 } else {
128 // send notifications => unblocked
129 if ($this->getMembersObject()->isBlocked($member_id) && !in_array($member_id, $blocked)) {
130 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_UNBLOCK_MEMBER, $member_id);
131 }
132 // => blocked
133 if (!$this->getMembersObject()->isBlocked($member_id) && in_array($member_id, $blocked)) {
134 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_BLOCK_MEMBER, $member_id);
135 }
136
137 // normal member => remove notification, contact
138 $this->getMembersObject()->updateNotification($member_id, false);
139 $this->getMembersObject()->updateContact($member_id, false);
140 $this->getMembersObject()->updateBlocked($member_id, in_array($member_id, $blocked));
141 }
142 }
143
144
145 ilUtil::sendSuccess($this->lng->txt('settings_saved'), true);
146 $this->ctrl->redirect($this, 'participants');
147 }
148
149
153 protected function initParticipantTableGUI()
154 {
155 include_once './Services/Tracking/classes/class.ilObjUserTracking.php';
156 $show_tracking =
158 ;
159 if ($show_tracking) {
160 include_once('./Services/Object/classes/class.ilObjectLP.php');
161 $olp = ilObjectLP::getInstance($this->getParentObject()->getId());
162 $show_tracking = $olp->isActive();
163 }
164
165 include_once('./Services/Object/classes/class.ilObjectActivation.php');
166 $timings_enabled =
167 (ilObjectActivation::hasTimings($this->getParentObject()->getRefId()) && ($this->getParentObject()->getViewMode() == IL_CRS_VIEW_TIMING))
168 ;
169
170
171 include_once './Modules/Course/classes/class.ilCourseParticipantsTableGUI.php';
173 $this,
174 $this->getParentObject(),
175 $show_tracking,
176 $timings_enabled,
177 $this->getParentObject()->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP
178 );
179 }
180
186 protected function initEditParticipantTableGUI(array $participants)
187 {
188 include_once './Modules/Course/classes/class.ilCourseEditParticipantsTableGUI.php';
190 $table->setTitle($this->lng->txt($this->getParentObject()->getType() . '_header_edit_members'));
191 $table->setData($this->getParentGUI()->readMemberData($participants));
192
193 return $table;
194 }
195
199 protected function initParticipantTemplate()
200 {
201 $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.crs_edit_members.html', 'Modules/Course');
202 }
203
207 public function getLocalTypeRole($a_translation = false)
208 {
209 return $this->getParentObject()->getLocalCourseRoles($a_translation);
210 }
211
215 protected function updateLPFromStatus($a_member_id, $a_passed)
216 {
217 return $this->getParentGUI()->updateLPFromStatus($a_member_id, $a_passed);
218 }
219
224 protected function initWaitingList()
225 {
226 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
227 $wait = new ilCourseWaitingList($this->getParentObject()->getId());
228 return $wait;
229 }
230
234 protected function getDefaultRole()
235 {
236 return $this->getParentGUI()->object->getDefaultMemberRole();
237 }
238
243 protected function deliverCertificate()
244 {
245 return $this->getParentGUI()->deliverCertificateObject($user_id);
246 }
247
252 protected function getPrintMemberData($a_members)
253 {
254 global $ilAccess,$lng;
255
256 $lng->loadLanguageModule('trac');
257
258 $is_admin = true;
259 include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
261
262 if ($privacy->enabledCourseAccessTimes()) {
263 include_once('./Services/Tracking/classes/class.ilLearningProgress.php');
264 $progress = ilLearningProgress::_lookupProgressByObjId($this->getParentObject()->getId());
265 }
266
267 include_once './Services/Tracking/classes/class.ilObjUserTracking.php';
268 $show_tracking =
270 if ($show_tracking) {
271 include_once('./Services/Object/classes/class.ilObjectLP.php');
272 $olp = ilObjectLP::getInstance($this->getParentObject()->getId());
273 $show_tracking = $olp->isActive();
274 }
275
276 if ($show_tracking) {
277 include_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php';
279 $in_progress = ilLPStatusWrapper::_lookupInProgressForObject($this->getParentObject()->getId());
281 }
282
283 $profile_data = ilObjUser::_readUsersProfileData($a_members);
284
285 // course defined fields
286 include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
287 $cdfs = ilCourseUserData::_getValuesByObjId($this->getParentObject()->getId());
288
289 foreach ($a_members as $member_id) {
290 // GET USER OBJ
291 if ($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id, false)) {
292 // udf
293 include_once './Services/User/classes/class.ilUserDefinedData.php';
294 $udf_data = new ilUserDefinedData($member_id);
295 foreach ($udf_data->getAll() as $field => $value) {
296 list($f, $field_id) = explode('_', $field);
297 $print_member[$member_id]['udf_' . $field_id] = (string) $value;
298 }
299
300 foreach ((array) $cdfs[$member_id] as $cdf_field => $cdf_value) {
301 $print_member[$member_id]['cdf_' . $cdf_field] = (string) $cdf_value;
302 }
303
304 foreach ((array) $profile_data[$member_id] as $field => $value) {
305 $print_member[$member_id][$field] = $value;
306 }
307
308 $print_member[$member_id]['login'] = $tmp_obj->getLogin();
309 $print_member[$member_id]['name'] = $tmp_obj->getLastname() . ', ' . $tmp_obj->getFirstname();
310
311 if ($this->getMembersObject()->isAdmin($member_id)) {
312 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_admin");
313 } elseif ($this->getMembersObject()->isTutor($member_id)) {
314 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_tutor");
315 } elseif ($this->getMembersObject()->isMember($member_id)) {
316 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_member");
317 }
318 if ($this->getMembersObject()->isAdmin($member_id) or $this->getMembersObject()->isTutor($member_id)) {
319 if ($this->getMembersObject()->isNotificationEnabled($member_id)) {
320 $print_member[$member_id]['status'] = $this->lng->txt("crs_notify");
321 } else {
322 $print_member[$member_id]['status'] = $this->lng->txt("crs_no_notify");
323 }
324 } else {
325 if ($this->getMembersObject()->isBlocked($member_id)) {
326 $print_member[$member_id]['status'] = $this->lng->txt("crs_blocked");
327 } else {
328 $print_member[$member_id]['status'] = $this->lng->txt("crs_unblocked");
329 }
330 }
331
332 if ($is_admin) {
333 $print_member[$member_id]['passed'] = $this->getMembersObject()->hasPassed($member_id) ?
334 $this->lng->txt('crs_member_passed') :
335 $this->lng->txt('crs_member_not_passed');
336 }
337 if ($privacy->enabledCourseAccessTimes()) {
338 if (isset($progress[$member_id]['ts']) and $progress[$member_id]['ts']) {
340 $print_member[$member_id]['access'] = ilDatePresentation::formatDate(new ilDateTime($progress[$member_id]['ts'], IL_CAL_UNIX));
342 } else {
343 $print_member[$member_id]['access'] = $this->lng->txt('no_date');
344 }
345 }
346 if ($show_tracking) {
347 if (in_array($member_id, $completed)) {
348 $print_member[$member_id]['progress'] = $this->lng->txt(ilLPStatus::LP_STATUS_COMPLETED);
349 } elseif (in_array($member_id, $in_progress)) {
350 $print_member[$member_id]['progress'] = $this->lng->txt(ilLPStatus::LP_STATUS_IN_PROGRESS);
351 } elseif (in_array($member_id, $failed)) {
352 $print_member[$member_id]['progress'] = $this->lng->txt(ilLPStatus::LP_STATUS_FAILED);
353 } else {
354 $print_member[$member_id]['progress'] = $this->lng->txt(ilLPStatus::LP_STATUS_NOT_ATTEMPTED);
355 }
356 }
357 }
358 }
359 return ilUtil::sortArray($print_member, 'name', $_SESSION['crs_print_order'], false, true);
360 }
361
365 public function getAttendanceListUserData($a_user_id)
366 {
367 if ($this->filterUserIdsByRbacOrPositionOfCurrentUser([$a_user_id])) {
368 return $this->member_data[$a_user_id];
369 }
370 return [];
371 }
372}
$failed
Definition: Utf8Test.php:85
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CRS_VIEW_TIMING
const IL_CAL_UNIX
const IL_CRS_ADMIN
Base class for course and group participants.
const IL_CRS_MEMBER
const IL_CRS_TUTOR
getAttendanceListUserData($a_user_id)
Callback from attendance list.
filterUserIdsByRbacOrPositionOfCurrentUser($a_user_ids)
Filter user ids by access.
getPrintMemberData($a_members)
Get print member data.
initParticipantTemplate()
Init participant view template.
deliverCertificate()
Deliver certificate for an user on the member list.
updateParticipantsStatus()
=> save button in member table
initEditParticipantTableGUI(array $participants)
init edit participants table gui
getLocalTypeRole($a_translation=false)
assignMembers(array $a_usr_ids, $a_type)
callback from repository search gui @global ilRbacSystem $rbacsystem
updateLPFromStatus($a_member_id, $a_passed)
Update lp from status.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date @access public.
static setUseRelativeDates($a_status)
set use relative dates
@classDescription Date and time handling
static _lookupCompletedForObject($a_obj_id, $a_user_ids=null)
Get completed users for object.
static _lookupFailedForObject($a_obj_id, $a_user_ids=null)
Get failed users for object.
static _lookupInProgressForObject($a_obj_id, $a_user_ids=null)
Get in progress users for object.
const LP_STATUS_COMPLETED
const LP_STATUS_FAILED
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
static _lookupProgressByObjId($a_obj_id)
lookup progress for a specific object
static getLogger($a_component_id)
Get component logger.
Base class for member tab content.
getParentGUI()
Get parent gui.
checkRbacOrPositionAccessBool($a_rbac_perm, $a_pos_perm, $a_ref_id=0)
Check if rbac or position access is granted.
getParentObject()
Get parent object.
getMembersObject()
Get member object.
readMemberData(array $usr_ids, array $columns)
Required for member table guis.
const STATUS_DETERMINATION_LP
static _enabledLearningProgress()
check wether learing progress is enabled or not
static _enabledUserRelatedData()
check wether user related tracking is enabled or not
static _readUsersProfileData($a_user_ids)
STATIC METHOD get user data of selected users.
static hasTimings($a_ref_id)
Check if there is any active timing (in subtree)
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static getInstance($a_obj_id)
static _getInstance()
Get instance of ilPrivacySettings.
Class ilUserDefinedData.
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
if(empty($password)) $table
Definition: pwgen.php:24
global $ilErr
Definition: raiseError.php:16
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:92