ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMailSearchCoursesGUI.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 
5 require_once './Services/User/classes/class.ilObjUser.php';
6 require_once "Services/Mail/classes/class.ilMailbox.php";
7 require_once "Services/Mail/classes/class.ilFormatMail.php";
8 require_once 'Services/Contact/BuddySystem/classes/class.ilBuddySystem.php';
9 
17 {
21  protected $tpl;
22 
26  protected $ctrl;
27 
31  protected $lng;
32 
36  protected $user;
37 
41  protected $error;
42 
46  protected $rbacsystem;
47 
51  protected $rbacreview;
52 
56  protected $tree;
57 
61  protected $cache;
62 
66  protected $umail;
67 
71  protected $mailing_allowed;
72 
73  public function __construct($wsp_access_handler = null, $wsp_node_id = null)
74  {
75  global $DIC;
76 
77  $this->tpl = $DIC['tpl'];
78  $this->ctrl = $DIC['ilCtrl'];
79  $this->lng = $DIC['lng'];
80  $this->user = $DIC['ilUser'];
81  $this->error = $DIC['ilErr'];
82  $this->rbacsystem = $DIC['rbacsystem'];
83  $this->rbacreview = $DIC['rbacreview'];
84  $this->tree = $DIC['tree'];
85  $this->cache = $DIC['ilObjDataCache'];
86 
87  // personal workspace
88  $this->wsp_access_handler = $wsp_access_handler;
89  $this->wsp_node_id = $wsp_node_id;
90 
91  // check if current user may send mails
92  include_once "Services/Mail/classes/class.ilMail.php";
93  $mail = new ilMail($this->user->getId());
94  $this->mailing_allowed = $this->rbacsystem->checkAccess('internal_mail', $mail->getMailObjectReferenceId());
95 
96  $this->ctrl->saveParameter($this, "mobj_id");
97  $this->ctrl->saveParameter($this, "ref");
98 
99  $this->umail = new ilFormatMail($this->user->getId());
100  }
101 
102  public function executeCommand()
103  {
104  $forward_class = $this->ctrl->getNextClass($this);
105  switch ($forward_class) {
106  case 'ilbuddysystemgui':
107  if (!ilBuddySystem::getInstance()->isEnabled()) {
108  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
109  }
110 
111  require_once 'Services/Contact/BuddySystem/classes/class.ilBuddySystemGUI.php';
112  $this->ctrl->saveParameter($this, 'search_crs');
113  $this->ctrl->setReturn($this, 'showMembers');
114  $this->ctrl->forwardCommand(new ilBuddySystemGUI());
115  break;
116 
117  default:
118  if (!($cmd = $this->ctrl->getCmd())) {
119  $cmd = "showMyCourses";
120  }
121 
122  $this->$cmd();
123  break;
124  }
125  return true;
126  }
127 
128  public function mail()
129  {
130  if ($_GET["view"] == "mycourses") {
131  $ids = ((int) $_GET['search_crs']) ? array((int) $_GET['search_crs']) : $_POST['search_crs'];
132 
133  if ($ids) {
134  $this->mailCourses();
135  } else {
136  ilUtil::sendInfo($this->lng->txt("mail_select_course"));
137  $this->showMyCourses();
138  }
139  } elseif ($_GET["view"] == "crs_members") {
140  $ids = ((int) $_GET['search_members']) ? array((int) $_GET['search_members']) : $_POST['search_members'];
141  if ($ids) {
142  $this->mailMembers();
143  } else {
144  ilUtil::sendInfo($this->lng->txt("mail_select_one_entry"));
145  $this->showMembers();
146  }
147  } else {
148  $this->showMyCourses();
149  }
150  }
151 
152  public function mailCourses()
153  {
154  $members = array();
155 
156  if (!is_array($old_mail_data = $this->umail->getSavedData())) {
157  $this->umail->savePostData(
158  $this->user->getId(),
159  array(),
160  "",
161  "",
162  "",
163  "",
164  "",
165  "",
166  "",
167  ""
168  );
169  }
170 
171  require_once './Services/Object/classes/class.ilObject.php';
172  require_once 'Services/Mail/classes/Address/Type/class.ilMailRoleAddressType.php';
173  $ids = ((int) $_GET['search_crs']) ? array((int) $_GET['search_crs']) : $_POST['search_crs'];
174 
175  foreach ($ids as $crs_id) {
176  $ref_ids = ilObject::_getAllReferences($crs_id);
177 
178  foreach ($ref_ids as $ref_id) {
179  $roles = $this->rbacreview->getAssignableChildRoles($ref_id);
180  foreach ($roles as $role) {
181  if (substr($role['title'], 0, 14) == 'il_crs_member_' ||
182  substr($role['title'], 0, 13) == 'il_crs_tutor_' ||
183  substr($role['title'], 0, 13) == 'il_crs_admin_') {
184  if (isset($old_mail_data['rcp_to']) &&
185  trim($old_mail_data['rcp_to']) != '') {
186  $rcpt = (new \ilRoleMailboxAddress($role['obj_id']))->value();
187  if (!$this->umail->existsRecipient($rcpt, (string) $old_mail_data['rcp_to'])) {
188  array_push($members, $rcpt);
189  }
190  } else {
191  array_push($members, (new \ilRoleMailboxAddress($role['obj_id']))->value());
192  }
193  }
194  }
195  }
196  }
197 
198  if (count($members)) {
199  $mail_data = $this->umail->appendSearchResult($members, 'to');
200  } else {
201  $mail_data = $this->umail->getSavedData();
202  }
203 
204  $this->umail->savePostData(
205  $mail_data["user_id"],
206  $mail_data["attachments"],
207  $mail_data["rcp_to"],
208  $mail_data["rcp_cc"],
209  $mail_data["rcp_bcc"],
210  $mail_data["m_type"],
211  $mail_data["m_email"],
212  $mail_data["m_subject"],
213  $mail_data["m_message"],
214  $mail_data["use_placeholders"],
215  $mail_data['tpl_ctx_id'],
216  $mail_data['tpl_ctx_params']
217  );
218 
219  #$this->ctrl->returnToParent($this);
220  ilUtil::redirect("ilias.php?baseClass=ilMailGUI&type=search_res");
221  }
222 
223  public function mailMembers()
224  {
225  $members = array();
226 
227  if (!is_array($this->umail->getSavedData())) {
228  $this->umail->savePostData(
229  $this->user->getId(),
230  array(),
231  "",
232  "",
233  "",
234  "",
235  "",
236  "",
237  "",
238  ""
239  );
240  }
241 
242  $ids = ((int) $_GET['search_members']) ? array((int) $_GET['search_members']) : $_POST['search_members'];
243 
244  foreach ($ids as $member) {
245  $login = ilObjUser::_lookupLogin($member);
246  array_push($members, $login);
247  }
248  $mail_data = $this->umail->appendSearchResult($members, "to");
249 
250  $this->umail->savePostData(
251  $mail_data["user_id"],
252  $mail_data["attachments"],
253  $mail_data["rcp_to"],
254  $mail_data["rcp_cc"],
255  $mail_data["rcp_bcc"],
256  $mail_data["m_type"],
257  $mail_data["m_email"],
258  $mail_data["m_subject"],
259  $mail_data["m_message"],
260  $mail_data["use_placeholders"],
261  $mail_data['tpl_ctx_id'],
262  $mail_data['tpl_ctx_params']
263  );
264 
265  #$this->ctrl->returnToParent($this);
266  ilUtil::redirect("ilias.php?baseClass=ilMailGUI&type=search_res");
267  }
268 
272  public function cancel()
273  {
274  if ($_GET["view"] == "mycourses" &&
275  $_GET["ref"] == "mail") {
276  $this->ctrl->returnToParent($this);
277  } else {
278  $this->showMyCourses();
279  }
280  }
281 
285  public function showMyCourses()
286  {
287  include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
288 
289  $this->tpl->setTitle($this->lng->txt('mail_addressbook'));
290 
291  $searchTpl = new ilTemplate('tpl.mail_search_template.html', true, true, 'Services/Contact');
292 
293  $_GET['view'] = 'mycourses';
294 
295  $this->lng->loadLanguageModule('crs');
296 
297  include_once 'Services/Contact/classes/class.ilMailSearchCoursesTableGUI.php';
298  $table = new ilMailSearchCoursesTableGUI($this, "crs", $_GET["ref"]);
299  $table->setId('search_crs_tbl');
300  include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
301  $crs_ids = ilCourseParticipants::_getMembershipByType($this->user->getId(), 'crs');
302  $counter = 0;
303  $tableData = array();
304  if (is_array($crs_ids) && count($crs_ids) > 0) {
305  $num_courses_hidden_members = 0;
306  include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
307  foreach ($crs_ids as $crs_id) {
311  $oTmpCrs = ilObjectFactory::getInstanceByObjId($crs_id);
312 
313  $isOffline = !$oTmpCrs->isActivated();
314  $hasUntrashedReferences = ilObject::_hasUntrashedReference($crs_id);
315  $showMemberListEnabled = (boolean) $oTmpCrs->getShowMembers();
316  $ref_ids = array_keys(ilObject::_getAllReferences($crs_id));
317  $isPrivilegedUser = $this->rbacsystem->checkAccess('write', $ref_ids[0]);
318 
319  if ($hasUntrashedReferences && ((!$isOffline && $showMemberListEnabled) || $isPrivilegedUser)) {
320  $oCrsParticipants = ilCourseParticipants::_getInstanceByObjId($crs_id);
321  $crs_members = $oCrsParticipants->getParticipants();
322 
323  foreach ($crs_members as $key => $member) {
324  $tmp_usr = new ilObjUser($member);
325  if (!$tmp_usr->getActive()) {
326  unset($crs_members[$key]);
327  }
328  }
329 
330  $hiddenMembers = false;
331  if ((int) $oTmpCrs->getShowMembers() == $oTmpCrs->SHOW_MEMBERS_DISABLED) {
332  ++$num_courses_hidden_members;
333  $hiddenMembers = true;
334  }
335  unset($oTmpCrs);
336 
337  $ref_ids = ilObject::_getAllReferences($crs_id);
338  $ref_id = current($ref_ids);
339  $path_arr = $this->tree->getPathFull($ref_id, $this->tree->getRootId());
340  $path_counter = 0;
341  $path = '';
342  foreach ($path_arr as $data) {
343  if ($path_counter++) {
344  $path .= " -> ";
345  }
346  $path .= $data['title'];
347  }
348  $path = $this->lng->txt('path') . ': ' . $path;
349 
350  $current_selection_list = new ilAdvancedSelectionListGUI();
351  $current_selection_list->setListTitle($this->lng->txt("actions"));
352  $current_selection_list->setId("act_" . $counter);
353 
354  $this->ctrl->setParameter($this, 'search_crs', $crs_id);
355  $this->ctrl->setParameter($this, 'view', 'mycourses');
356 
357  if ($_GET["ref"] == "mail") {
358  if ($this->mailing_allowed) {
359  $current_selection_list->addItem($this->lng->txt("mail_members"), '', $this->ctrl->getLinkTarget($this, "mail"));
360  }
361  } elseif ($_GET["ref"] == "wsp") {
362  $current_selection_list->addItem($this->lng->txt("wsp_share_with_members"), '', $this->ctrl->getLinkTarget($this, "share"));
363  }
364  $current_selection_list->addItem($this->lng->txt("mail_list_members"), '', $this->ctrl->getLinkTarget($this, "showMembers"));
365 
366  $this->ctrl->clearParameters($this);
367 
368  $rowData = array(
369  "CRS_ID" => $crs_id,
370  "CRS_NAME" => $this->cache->lookupTitle($crs_id),
371  "CRS_NO_MEMBERS" => count($crs_members),
372  "CRS_PATH" => $path,
373  'COMMAND_SELECTION_LIST' => $current_selection_list->getHTML(),
374  "hidden_members" => $hiddenMembers,
375  );
376  $counter++;
377  $tableData[] = $rowData;
378  }
379  }
380 
381  if ($num_courses_hidden_members > 0) {
382  $searchTpl->setCurrentBlock('caption_block');
383  $searchTpl->setVariable('TXT_LIST_MEMBERS_NOT_AVAILABLE', $this->lng->txt('mail_crs_list_members_not_available'));
384  $searchTpl->parseCurrentBlock();
385  }
386  }
387 
388  $searchTpl->setVariable('TXT_MARKED_ENTRIES', $this->lng->txt('marked_entries'));
389 
390  $table->setData($tableData);
391  if ($_GET['ref'] == 'mail') {
392  $this->tpl->setVariable('BUTTON_CANCEL', $this->lng->txt('cancel'));
393  }
394 
395  $searchTpl->setVariable('TABLE', $table->getHtml());
396  $this->tpl->setContent($searchTpl->get());
397 
398  if ($_GET["ref"] != "wsp") {
399  $this->tpl->show();
400  }
401  }
402 
406  public function showMembers()
407  {
408  include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
409 
410  if ($_GET["search_crs"] != "") {
411  $_POST["search_crs"] = explode(",", $_GET["search_crs"]);
412  $_GET["search_crs"] = "";
413  } elseif ($_SESSION["search_crs"] != "") {
414  $_POST["search_crs"] = explode(",", $_SESSION["search_crs"]);
415  $_SESSION["search_crs"] = "";
416  }
417 
418  if (is_array($_POST['search_crs'])) {
419  $_POST['search_crs'] = array_filter(array_map('intval', $_POST['search_crs']));
420  }
421 
422  if (!is_array($_POST["search_crs"]) ||
423  count($_POST["search_crs"]) == 0) {
424  ilUtil::sendInfo($this->lng->txt("mail_select_course"));
425  $this->showMyCourses();
426  } else {
427  foreach ($_POST['search_crs'] as $crs_id) {
428  $oTmpCrs = ilObjectFactory::getInstanceByObjId($crs_id);
429  if ($oTmpCrs->getShowMembers() == $oTmpCrs->SHOW_MEMBERS_DISABLED) {
430  unset($_POST['search_crs']);
431  ilUtil::sendInfo($this->lng->txt('mail_crs_list_members_not_available_for_at_least_one_crs'));
432  return $this->showMyCourses();
433  }
434  unset($oTmpCrs);
435  }
436 
437  $this->tpl->setTitle($this->lng->txt("mail_addressbook"));
438 
439  $this->ctrl->setParameter($this, "view", "crs_members");
440  if ($_GET["ref"] != "") {
441  $this->ctrl->setParameter($this, "ref", $_GET["ref"]);
442  }
443  if (is_array($_POST["search_crs"])) {
444  $this->ctrl->setParameter($this, "search_crs", implode(",", $_POST["search_crs"]));
445  }
446  $this->tpl->setVariable("ACTION", $this->ctrl->getFormAction($this));
447  $this->ctrl->clearParameters($this);
448 
449  $this->lng->loadLanguageModule('crs');
450  include_once 'Services/Contact/classes/class.ilMailSearchCoursesMembersTableGUI.php';
451  $context = $_GET["ref"] ? $_GET["ref"] : "mail";
452  $table = new ilMailSearchCoursesMembersTableGUI($this, 'crs', $context, $_POST["search_crs"]);
453  $tableData = array();
454  $searchTpl = new ilTemplate('tpl.mail_search_template.html', true, true, 'Services/Contact');
455  foreach ($_POST["search_crs"] as $crs_id) {
456  $members_obj = ilCourseParticipants::_getinstanceByObjId($crs_id);
457  $tmp_members = $members_obj->getParticipants();
458  $course_members = ilUtil::_sortIds($tmp_members, 'usr_data', 'lastname', 'usr_id');
459 
460  foreach ($course_members as $member) {
461  $tmp_usr = new ilObjUser($member);
462  if (!$tmp_usr->getActive()) {
463  continue;
464  }
465 
466  $name = ilObjUser::_lookupName($member);
467  $login = ilObjUser::_lookupLogin($member);
468 
469  $fullname = "";
470  if (in_array(ilObjUser::_lookupPref($member, 'public_profile'), array("g", 'y'))) {
471  $fullname = $name['lastname'] . ', ' . $name['firstname'];
472  }
473 
474  $rowData = array(
475  'members_id' => $member,
476  'members_login' => $login,
477  'members_name' => $fullname,
478  'members_crs_grp' => $this->cache->lookupTitle($crs_id),
479  'search_crs' => $crs_id
480  );
481 
482  if ('mail' == $context && ilBuddySystem::getInstance()->isEnabled()) {
483  $relation = ilBuddyList::getInstanceByGlobalUser()->getRelationByUserId($member);
484  $state_name = ilStr::convertUpperCamelCaseToUnderscoreCase($relation->getState()->getName());
485  $rowData['status'] = '';
486  if ($member != $this->user->getId()) {
487  if ($relation->isOwnedByRequest()) {
488  $rowData['status'] = $this->lng->txt('buddy_bs_state_' . $state_name . '_a');
489  } else {
490  $rowData['status'] = $this->lng->txt('buddy_bs_state_' . $state_name . '_p');
491  }
492  }
493  }
494 
495  $tableData[] = $rowData;
496  }
497  }
498  $table->setData($tableData);
499 
500  if (count($tableData)) {
501  $searchTpl->setVariable("TXT_MARKED_ENTRIES", $this->lng->txt("marked_entries"));
502  }
503 
504  $searchTpl->setVariable('TABLE', $table->getHtml());
505  $this->tpl->setContent($searchTpl->get());
506 
507  if ($_GET["ref"] != "wsp") {
508  $this->tpl->show();
509  }
510  }
511  }
512 
513  public function share()
514  {
515  if ($_GET["view"] == "mycourses") {
516  $ids = $_REQUEST["search_crs"];
517  if (is_array($ids) && sizeof($ids)) {
518  $this->addPermission($ids);
519  } else {
520  ilUtil::sendInfo($this->lng->txt("mail_select_course"));
521  $this->showMyCourses();
522  }
523  } elseif ($_GET["view"] == "crs_members") {
524  $ids = $_REQUEST["search_members"];
525  if (is_array($ids) && sizeof($ids)) {
526  $this->addPermission($ids);
527  } else {
528  ilUtil::sendInfo($this->lng->txt("mail_select_one_entry"));
529  $this->showMembers();
530  }
531  } else {
532  $this->showMyCourses();
533  }
534  }
535 
536  protected function addPermission($a_obj_ids)
537  {
538  if (!is_array($a_obj_ids)) {
539  $a_obj_ids = array($a_obj_ids);
540  }
541 
542  $existing = $this->wsp_access_handler->getPermissions($this->wsp_node_id);
543  $added = false;
544  foreach ($a_obj_ids as $object_id) {
545  if (!in_array($object_id, $existing)) {
546  $added = $this->wsp_access_handler->addPermission($this->wsp_node_id, $object_id);
547  }
548  }
549 
550  if ($added) {
551  ilUtil::sendSuccess($this->lng->txt("wsp_share_success"), true);
552  }
553  $this->ctrl->redirectByClass("ilworkspaceaccessgui", "share");
554  }
555 }
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
$path
Definition: aliased.php:25
Class ilBuddySystemGUI.
static _hasUntrashedReference($a_obj_id)
checks wether an object has at least one reference that is not in trash
static convertUpperCamelCaseToUnderscoreCase($value)
Convert a value given in camel case conversion to underscore case conversion (e.g.
$context
Definition: webdav.php:25
static getInstanceByGlobalUser()
$_SESSION["AccountId"]
global $DIC
Definition: saml.php:7
$_GET["client_id"]
static _getMembershipByType($a_usr_id, $a_type, $a_only_member_role=false)
get membership by type Get course or group membership
Class ilRoleMailboxAddress.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
__construct($wsp_access_handler=null, $wsp_node_id=null)
user()
Definition: user.php:4
static _getAllReferences($a_id)
get all reference ids of object
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
Class UserMail this class handles user mails.
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,7),&#39;usr_data&#39;,&#39;lastname&#39;,&#39;usr_id&#39;) => sorts by lastname.
special template class to simplify handling of ITX/PEAR
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
User interface class for advanced drop-down selection lists.
static _lookupPref($a_usr_id, $a_keyword)
$login
Definition: cron.php:13
if(empty($password)) $table
Definition: pwgen.php:24
static redirect($a_script)
$key
Definition: croninfo.php:18
$_POST["username"]
$data
Definition: bench.php:6