ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilExSubmissionTeamGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
13{
14 protected $exercise; // [ilObjExercise]
15 protected $assignment; // [ilExAssignment]
16 protected $submission; // [ilExSubmission]
17 protected $team; // [ilExAssignmentTeam]
18
19 public function __construct(ilObjExercise $a_exercise, ilExSubmission $a_submission)
20 {
21 global $ilCtrl, $ilTabs, $lng, $tpl;
22
23 $this->exercise = $a_exercise;
24 $this->submission = $a_submission;
25 $this->assignment = $a_submission->getAssignment();
26
27 // :TODO:
28 $this->ctrl = $ilCtrl;
29 $this->tabs_gui = $ilTabs;
30 $this->lng = $lng;
31 $this->tpl = $tpl;
32 }
33
34 public function executeCommand()
35 {
36 global $ilCtrl;
37
38 $class = $ilCtrl->getNextClass($this);
39 $cmd = $ilCtrl->getCmd("submissionScreenTeam");
40
41 if(!$this->assignment->hasTeam() ||
42 !$this->submission->canView())
43 {
44 return;
45 }
46 $this->team = $this->submission->getTeam();
47
48 if(!$this->submission->isTutor())
49 {
51 $this->tabs_gui->activateTab("team");
52 }
53
54 switch($class)
55 {
56 case 'ilrepositorysearchgui':
57 $this->ctrl->setReturn($this,'submissionScreenTeam');
58 include_once('./Services/Search/classes/class.ilRepositorySearchGUI.php');
59 $rep_search = new ilRepositorySearchGUI();
60 $rep_search->setTitle($this->lng->txt("exc_team_member_add"));
61 $rep_search->setCallback($this,'addTeamMemberActionObject');
62 $this->ctrl->forwardCommand($rep_search);
63 break;
64
65 default:
66 $this->{$cmd."Object"}();
67 break;
68 }
69 }
70
71 public static function getOverviewContent(ilInfoScreenGUI $a_info, ilExSubmission $a_submission)
72 {
73 global $lng, $ilCtrl;
74
75 if(!$a_submission->getAssignment()->hasTeam())
76 {
77 return;
78 }
79
80 $team_members = $a_submission->getTeam()->getMembers();
81 if(sizeof($team_members))
82 {
83 $team = array();
84 foreach($team_members as $member_id)
85 {
86 $team[] = ilObjUser::_lookupFullname($member_id);
87 }
88 $team = implode(", ", $team);
89
90 // any team member upload?
91 if(!$a_submission->getLastSubmission())
92 {
93 $button = ilLinkButton::getInstance();
94 $button->setCaption("exc_delete_team");
95 $button->setUrl($ilCtrl->getLinkTargetByClass(array("ilExSubmissionGUI", "ilExSubmissionTeamGUI"), "confirmDeleteTeam"));
96 $team .= " ".$button->render();
97 }
98
99 $button = ilLinkButton::getInstance();
100
101 if(!$a_submission->getAssignment()->getTeamTutor())
102 {
103 $button->setCaption("exc_manage_team");
104 $button->setUrl($ilCtrl->getLinkTargetByClass(array("ilExSubmissionGUI", "ilExSubmissionTeamGUI"), "submissionScreenTeam"));
105 }
106 else
107 {
108 $button->setCaption("exc_team_log");
109 $button->setUrl($ilCtrl->getLinkTargetByClass(array("ilExSubmissionGUI", "ilExSubmissionTeamGUI"), "submissionScreenTeamLog"));
110 }
111 $team .= " ".$button->render();
112
113 $a_info->addProperty($lng->txt("exc_team_members"), $team);
114 }
115 else
116 {
117 if($a_submission->getAssignment()->beforeDeadline())
118 {
119 if(!$a_submission->hasSubmitted())
120 {
121 $team_info = $lng->txt("exc_no_team_yet_notice");
122 }
123 else
124 {
125 $team_info = '<span class="warning">'.$lng->txt("exc_no_team_yet_notice").'</span>';
126 }
127
128 if(!$a_submission->getAssignment()->getTeamTutor())
129 {
130 $button = ilLinkButton::getInstance();
131 $button->setPrimary(true);
132 $button->setCaption("exc_create_team");
133 $button->setUrl($ilCtrl->getLinkTargetByClass(array("ilExSubmissionGUI", "ilExSubmissionTeamGUI"), "createTeam"));
134 $team_info .= " ".$button->render();
135
136 $team_info .= '<div class="ilFormInfo">'.$lng->txt("exc_no_team_yet_info").'</div>';
137 }
138 else
139 {
140 $team_info .= '<div class="ilFormInfo">'.$lng->txt("exc_no_team_yet_info_tutor").'</div>';
141 }
142 }
143 else
144 {
145 $team_info = '<span class="warning">'.$lng->txt("exc_create_team_times_up_warning").'</span>';
146 }
147
148 $a_info->addProperty($lng->txt("exc_team_members"), $team_info);
149 }
150 }
151
153 {
154 $this->ctrl->returnToParent($this);
155 }
156
157 public static function handleTabs()
158 {
159 global $ilTabs, $ilCtrl, $lng;
160
161 $ilTabs->addTab("team", $lng->txt("exc_team"),
162 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "submissionScreenTeam"));
163
164 $ilTabs->addTab("log", $lng->txt("exc_team_log"),
165 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "submissionScreenTeamLog"));
166 }
167
168 protected function canEditTeam()
169 {
170 return (($this->submission->canSubmit() &&
171 !$this->submission->getAssignment()->getTeamTutor()) ||
172 $this->submission->isTutor());
173 }
174
181 {
182 global $ilToolbar;
183
184 // #13414
185 $read_only = !$this->canEditTeam();
186
187 if ($this->submission->getAssignment()->afterDeadlineStrict())
188 {
189 ilUtil::sendInfo($this->lng->txt("exercise_time_over"));
190 }
191 else if(!$read_only)
192 {
193 // add member
194 include_once './Services/Search/classes/class.ilRepositorySearchGUI.php';
196 $this,
197 $ilToolbar,
198 array(
199 'auto_complete_name' => $this->lng->txt('user'),
200 'submit_name' => $this->lng->txt('add'),
201 'add_search' => true,
202 'add_from_container' => $this->exercise->getRefId()
203 )
204 );
205 }
206 else if($this->submission->getAssignment()->getTeamTutor())
207 {
208 ilUtil::sendInfo($this->lng->txt("exc_no_team_yet_info_tutor"));
209 }
210
211 include_once "Modules/Exercise/classes/class.ilExAssignmentTeamTableGUI.php";
213 $this,
214 "submissionScreenTeam",
216 $this->exercise->getRefId(),
217 $this->team,
218 $read_only
219 );
220
221 $this->tpl->setContent($tbl->getHTML());
222 }
223
224 public function addTeamMemberActionObject($a_user_ids = array())
225 {
226 if(!$this->canEditTeam())
227 {
228 $this->ctrl->redirect("submissionScreenTeam");
229 }
230
231 if(!count($a_user_ids))
232 {
233 ilUtil::sendFailure($this->lng->txt("no_checkbox"));
234 return false;
235 }
236
237 foreach($a_user_ids as $user_id)
238 {
239 if($this->team->addTeamMember($user_id, $this->exercise->getRefId()))
240 {
241 $new_users[] = $user_id;
242
243 // #14277
244 if (!$this->exercise->members_obj->isAssigned($user_id))
245 {
246 $this->exercise->members_obj->assignMember($user_id);
247 }
248 }
249 else
250 {
251 // #11959
252 ilUtil::sendFailure($this->lng->txt("exc_members_already_assigned_team"), true);
253 }
254 }
255
256 if(sizeof($new_users))
257 {
258 // re-evaluate complete team, as new member could have already submitted
259 $this->exercise->processExerciseStatus(
260 $this->assignment,
261 $this->team->getMembers(),
262 $this->submission->hasSubmitted(),
263 $this->submission->validatePeerReviews()
264 );
265 // :TODO: notification?
266 }
267
268 ilUtil::sendSuccess($this->lng->txt("settings_saved"), true);
269 $this->ctrl->redirect($this, "submissionScreenTeam");
270 }
271
272 public function confirmDeleteTeamObject()
273 {
275 }
276
277 public function confirmRemoveTeamMemberObject($a_full_delete = false)
278 {
279 global $ilUser, $tpl;
280
281 if(!$this->submission->isTutor())
282 {
283 $ids = (bool)$a_full_delete
284 ? $this->team->getMembers()
285 : $_POST["id"];
286
287 if(!sizeof($ids) &&
288 !$this->canEditTeam())
289 {
290 ilUtil::sendFailure($this->lng->txt("select_one"), true);
291 $this->ctrl->redirect($this, "submissionScreenTeam");
292 }
293 }
294 else
295 {
296 $ids = array($_GET["id"]);
297 if(!sizeof($ids))
298 {
299 $this->returnToParentObject();
300 }
301 }
302
303 $members = $this->team->getMembers();
304 if(sizeof($members) <= sizeof($ids))
305 {
306 if(sizeof($members) == 1 && $members[0] == $ilUser->getId())
307 {
308 // direct team deletion - no confirmation
309 return $this->removeTeamMemberObject($a_full_delete);
310 }
311 else
312 {
313 ilUtil::sendFailure($this->lng->txt("exc_team_at_least_one"), true);
314 $this->ctrl->redirect($this, "submissionScreenTeam");
315 }
316 }
317
318 include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
319 $cgui = new ilConfirmationGUI();
320 $cgui->setFormAction($this->ctrl->getFormAction($this));
321 $cgui->setHeaderText($this->lng->txt("exc_team_member_remove_sure"));
322 $cgui->setConfirm($this->lng->txt("remove"), "removeTeamMember");
323 $cgui->setCancel($this->lng->txt("cancel"), $this->submission->isTutor()
324 ? "returnToParent"
325 : "submissionScreenTeam");
326
327 $files = $this->submission->getFiles();
328
329 include_once "Services/User/classes/class.ilUserUtil.php";
330
331 foreach($ids as $id)
332 {
333 $details = array();
334 foreach ($files as $file)
335 {
336 if($file["owner_id"] == $id)
337 {
338 $details[] = $file["filetitle"];
339 }
340 }
342 if(sizeof($details))
343 {
344 $uname .= ": ".implode(", ", $details);
345 }
346 $cgui->addItem("id[]", $id, $uname);
347 }
348
349 $tpl->setContent($cgui->getHTML());
350 }
351
352 public function removeTeamMemberObject($a_full_delete = false)
353 {
354 global $ilUser;
355
356 $cancel_cmd = $this->submission->isTutor()
357 ? "returnToParent"
358 : "submissionScreenTeam";
359
360 $ids = (bool)$a_full_delete
361 ? $this->team->getMembers()
362 : $_POST["id"];
363
364 if(!sizeof($ids) ||
365 !$this->canEditTeam())
366 {
367 ilUtil::sendFailure($this->lng->txt("select_one"), true);
368 $this->ctrl->redirect($this, $cancel_cmd);
369 }
370
371 $team_deleted = (bool)$a_full_delete;
372 if(!$team_deleted)
373 {
374 $members = $this->team->getMembers();
375 if(sizeof($members) <= sizeof($ids))
376 {
377 if(sizeof($members) == 1 && $members[0] == $ilUser->getId())
378 {
379 $team_deleted = true;
380 }
381 else
382 {
383 ilUtil::sendFailure($this->lng->txt("exc_team_at_least_one"), true);
384 $this->ctrl->redirect($this, $cancel_cmd);
385 }
386 }
387 }
388
389 foreach($ids as $user_id)
390 {
391 $this->team->removeTeamMember($user_id, $this->exercise->getRefId());
392 }
393
394 // reset ex team members, as any submission is not valid without team
395 $this->exercise->processExerciseStatus(
396 $this->assignment,
397 $ids,
398 false
399 );
400
401 if(!$team_deleted)
402 {
403 // re-evaluate complete team, as removed member might have had submitted
404 $this->exercise->processExerciseStatus(
405 $this->assignment,
406 $this->team->getMembers(),
407 $this->submission->hasSubmitted(),
408 $this->submission->validatePeerReviews()
409 );
410 }
411
412 ilUtil::sendSuccess($this->lng->txt("settings_saved"), true);
413 if(!$team_deleted)
414 {
415 $this->ctrl->redirect($this, $cancel_cmd);
416 }
417 else
418 {
419 $this->ctrl->redirect($this, "returnToParent");
420 }
421 }
422
424 {
425 $this->tabs_gui->activateTab("log");
426
427 include_once "Modules/Exercise/classes/class.ilExAssignmentTeamLogTableGUI.php";
428 $tbl = new ilExAssignmentTeamLogTableGUI($this, "submissionScreenTeamLog",
429 $this->team);
430
431 $this->tpl->setContent($tbl->getHTML());
432 }
433
435 {
437 $this->assignment->getId(),
438 $this->submission->getUserId(),
439 true
440 );
441 ilUtil::sendSuccess($this->lng->txt("settings_saved"), true);
442 $this->returnToParentObject();
443 }
444
446 {
447 include_once "Modules/Exercise/classes/class.ilExAssignmentTeamLogTableGUI.php";
448 $tbl = new ilExAssignmentTeamLogTableGUI($this, "showTeamLog", $this->team);
449 $this->tpl->setContent($tbl->getHTML());
450 }
451
452 public function createTeamObject()
453 {
454 global $ilCtrl, $ilUser, $lng, $tpl;
455
456 if($this->submission->canSubmit())
457 {
458 $options = ilExAssignmentTeam::getAdoptableTeamAssignments($this->assignment->getExerciseId(), $this->assignment->getId(), $ilUser->getId());
459 if(sizeof($options))
460 {
461 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
462 $form = new ilPropertyFormGUI();
463 $form->setTitle($lng->txt("exc_team_assignment_adopt_user"));
464 $form->setFormAction($ilCtrl->getFormAction($this, "createAdoptedTeam"));
465
466 $teams = new ilRadioGroupInputGUI($lng->txt("exc_assignment"), "ass_adpt");
467 $teams->setValue(-1);
468
469 $teams->addOption(new ilRadioOption($lng->txt("exc_team_assignment_adopt_none_user"), -1));
470
471 $current_map = ilExAssignmentTeam::getAssignmentTeamMap($this->assignment->getId());
472
473 include_once "Services/User/classes/class.ilUserUtil.php";
474 foreach($options as $id => $item)
475 {
476 $members = array();
477 $free = false;
478 foreach($item["user_team"] as $user_id)
479 {
480 $members[$user_id] = ilUserUtil::getNamePresentation($user_id);
481
482 if(array_key_exists($user_id, $current_map))
483 {
484 $members[$user_id] .= " (".$lng->txt("exc_team_assignment_adopt_already_assigned").")";
485 }
486 else
487 {
488 $free = true;
489 }
490 }
491 asort($members);
492 $members = implode("<br />", $members);
493 $option = new ilRadioOption($item["title"], $id);
494 $option->setInfo($members);
495 if(!$free)
496 {
497 $option->setDisabled(true);
498 }
499 $teams->addOption($option);
500 }
501
502 $form->addItem($teams);
503
504 $form->addCommandButton("createAdoptedTeam", $lng->txt("save"));
505 $form->addCommandButton("returnToParent", $lng->txt("cancel"));
506
507 $tpl->setContent($form->getHTML());
508 return;
509 }
510
511 ilExAssignmentTeam::getTeamId($this->assignment->getId(), $ilUser->getId(), true);
512
513 // #18046
514 if(!$this->exercise->members_obj->isAssigned($ilUser->getId()))
515 {
516 $this->exercise->members_obj->assignMember($ilUser->getId());
517 }
518
519 ilUtil::sendSuccess($this->lng->txt("settings_saved"), true);
520 }
521
522 $ilCtrl->redirect($this, "returnToParent");
523 }
524
525 public function createAdoptedTeamObject()
526 {
527 global $ilCtrl, $ilUser, $lng;
528
529 if($this->submission->canSubmit())
530 {
531 $src_ass_id = (int)$_POST["ass_adpt"];
532 if($src_ass_id > 0)
533 {
534 ilExAssignmentTeam::adoptTeams($src_ass_id, $this->assignment->getId(), $ilUser->getId(), $this->exercise->getRefId());
535 }
536 else
537 {
538 ilExAssignmentTeam::getTeamId($this->assignment->getId(), $ilUser->getId(), true);
539 }
540
541 ilUtil::sendSuccess($lng->txt("settings_saved"), true);
542 }
543
544 $ilCtrl->redirect($this, "returnToParent");
545 }
546
547
552 {
553 if(!strlen(trim($_POST['user_login'])))
554 {
555 ilUtil::sendFailure($this->lng->txt('msg_no_search_string'));
557 return false;
558 }
559
560 $users = explode(',', $_POST['user_login']);
561
562 $user_ids = array();
563 foreach($users as $user)
564 {
565 $user_id = ilObjUser::_lookupId($user);
566
567 if(!$user_id)
568 {
569 ilUtil::sendFailure($this->lng->txt('user_not_known'));
570 return $this->submissionScreenTeamObject();
571 }
572
573 $user_ids[] = $user_id;
574 }
575
576 return $this->addTeamMemberActionObject($user_ids);
577 }
578}
579
print $file
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
Confirmation screen class.
List all team members of an assignment.
static getAssignmentTeamMap($a_ass_id)
Get team structure for assignment.
static getTeamId($a_assignment_id, $a_user_id, $a_create_on_demand=false)
Get team id for member id.
static getAdoptableTeamAssignments($a_exercise_id, $a_exclude_ass_id=null, $a_user_id=null)
static adoptTeams($a_source_ass_id, $a_target_ass_id, $a_user_id=null, $a_exc_ref_id=null)
addTeamMemberActionObject($a_user_ids=array())
submissionScreenTeamObject()
Displays a form which allows members to manage team uploads.
static getOverviewContent(ilInfoScreenGUI $a_info, ilExSubmission $a_submission)
addUserFromAutoCompleteObject()
Add user as member.
removeTeamMemberObject($a_full_delete=false)
confirmRemoveTeamMemberObject($a_full_delete=false)
__construct(ilObjExercise $a_exercise, ilExSubmission $a_submission)
Exercise submission.
getLastSubmission()
Get the date of the last submission of a user for the assignment.
Class ilInfoScreenGUI.
addProperty($a_name, $a_value, $a_link="")
add a property to current section
static getInstance()
Factory.
Class ilObjExercise.
static _lookupId($a_user_str)
Lookup id by login.
_lookupFullname($a_user_id)
Lookup Full Name.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
static getNamePresentation($a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false)
Default behaviour is:
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$_POST['username']
Definition: cron.php:12
$tbl
Definition: example_048.php:81
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
if(!is_array($argv)) $options
global $ilUser
Definition: imgupload.php:15