ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilMainMenuGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
7 
15 {
16 
20  protected $rbacsystem;
24  protected $user;
28  protected $lng;
32  protected $plugin_admin;
36  protected $tree;
40  protected $access;
44  protected $nav_history;
48  protected $settings;
52  protected $ctrl;
56  protected $help;
60  public $tpl;
61  public $target;
66  protected $main_tpl;
67  protected $mode; // [int]
68  protected $topbar_back_url; // [stringt]
69  protected $topbar_back_caption; // [string]
70  const MODE_FULL = 1;
71  const MODE_TOPBAR_ONLY = 2;
74 
75 
81  public function __construct($a_target = "_top", $a_use_start_template = false, ilGlobalTemplate $a_main_tpl = null)
82  {
83  global $DIC;
84 
85  if ($a_main_tpl != null) {
86  $this->main_tpl = $a_main_tpl;
87  } else {
88  $this->main_tpl = $DIC["tpl"];
89  }
90 
91  $this->rbacsystem = $DIC->rbac()->system();
92  $this->user = $DIC->user();
93  $this->lng = $DIC->language();
94  $this->plugin_admin = $DIC["ilPluginAdmin"];
95  $this->tree = $DIC->repositoryTree();
96  $this->access = $DIC->access();
97  $this->nav_history = $DIC["ilNavigationHistory"];
98  $this->settings = $DIC->settings();
99  $this->ctrl = $DIC->ctrl();
100  $this->help = $DIC["ilHelp"];
101  $this->ui = $DIC->ui();
102  $rbacsystem = $DIC->rbac()->system();
103  $ilUser = $DIC->user();
104 
105  $this->tpl = new ilTemplate(
106  "tpl.main_menu.html",
107  true,
108  true,
109  "Services/MainMenu"
110  );
111  $this->target = $a_target;
112  $this->start_template = $a_use_start_template;
113 
114  $this->setMode(self::MODE_FULL);
115 
116  // member view
118  if ($set->isActive()) {
119  $this->initMemberView();
120  }
121  }
122 
123 
131  public function setMode(int $a_value)
132  {
133  $this->mode = (int) $a_value;
134  }
135 
136 
140  public function getMode() : int
141  {
142  return $this->mode;
143  }
144 
145 
150  public function setTopBarBack($a_url, $a_caption = null)
151  {
152  $this->topbar_back_url = $a_url;
153  $this->topbar_back_caption = trim($a_caption);
154  }
155 
156 
160  public function getSpacerClass()
161  {
162  switch ($this->getMode()) {
163  case self::MODE_TOPBAR_ONLY:
164  case self::MODE_TOPBAR_REDUCED:
165  case self::MODE_TOPBAR_MEMBERVIEW:
166  return "ilFixedTopSpacerBarOnly";
167 
168  case self::MODE_FULL:
169  return "ilFixedTopSpacer";
170  }
171  }
172 
173 
180  public function setActive($a_active)
181  {
182  $this->active = $a_active;
183  }
184 
185 
191  public function setLoginTargetPar($a_val)
192  {
193  $this->login_target_par = $a_val;
194  }
195 
196 
201  public function getLoginTargetPar()
202  {
203  return $this->login_target_par;
204  }
205 
206 
210  private function setTemplateVars()
211  {
213  $lng = $this->lng;
215  $ilPluginAdmin = $this->plugin_admin;
217 
218  if ($this->logo_only) {
219  $this->tpl->setVariable("HEADER_URL", $this->getHeaderURL());
220  $this->tpl->setVariable("HEADER_ICON", ilUtil::getImagePath("HeaderIcon.svg"));
221  $this->tpl->setVariable("HEADER_ICON_RESPONSIVE", ilUtil::getImagePath("HeaderIconResponsive.svg"));
222 
223  // #15759
224  $header_top_title = ilObjSystemFolder::_getHeaderTitle();
225  if (trim($header_top_title) != "" && $this->tpl->blockExists("header_top_title")) {
226  $this->tpl->setCurrentBlock("header_top_title");
227  $this->tpl->setVariable("TXT_HEADER_TITLE", $header_top_title);
228  $this->tpl->parseCurrentBlock();
229  }
230 
231  return;
232  }
233 
234  // get user interface plugins
235 
236  if ($this->getMode() != self::MODE_TOPBAR_REDUCED
237  && $this->getMode() != self::MODE_TOPBAR_MEMBERVIEW
238  ) {
239  // search
240  if ($rbacsystem->checkAccess('search', ilSearchSettings::_getSearchSettingRefId())) {
241  $main_search = new ilMainMenuSearchGUI();
242  $html = "";
243 
244  // user interface plugin slot + default rendering
245  $uip = new ilUIHookProcessor(
246  "Services/MainMenu",
247  "main_menu_search",
248  array("main_menu_gui" => $this, "main_menu_search_gui" => $main_search)
249  );
250  if (!$uip->replaced()) {
251  $html = $main_search->getHTML();
252  }
253  $html = $uip->getHTML($html);
254 
255  if (strlen($html)) {
256  $this->tpl->setVariable('SEARCHBOX', $html);
257  $this->addToolbarTooltip("ilMMSearch", "mm_tb_search");
258  }
259  }
260 
261  $this->renderStatusBox($this->tpl);
262 
263  // online help
264  $this->renderHelpButtons();
265 
266  $this->renderOnScreenChatMenu();
267  $this->renderBackgroundTasks();
268  $this->renderAwareness();
269  }
270 
271  if ($this->getMode() == self::MODE_FULL) {
272  $this->tpl->setVariable("MAIN_MENU_LIST_ENTRIES", "-");
273  }
274 
275  if ($this->getMode() != self::MODE_TOPBAR_MEMBERVIEW) {
276  $link_dir = (defined("ILIAS_MODULE"))
277  ? "../"
278  : "";
279 
280  // login stuff
281  if ($GLOBALS['DIC']['ilUser']->getId() == ANONYMOUS_USER_ID) {
283  $this->tpl->setCurrentBlock("registration_link");
284  $this->tpl->setVariable("TXT_REGISTER", $lng->txt("register"));
285  $this->tpl->setVariable("LINK_REGISTER", $link_dir . "register.php?client_id=" . rawurlencode(CLIENT_ID) . "&lang=" . $ilUser->getCurrentLanguage());
286  $this->tpl->parseCurrentBlock();
287  }
288 
289 
290  $this->tpl->setCurrentBlock("userisanonymous");
291  $this->tpl->setVariable("TXT_NOT_LOGGED_IN", $lng->txt("not_logged_in"));
292  $this->tpl->setVariable("TXT_LOGIN", $lng->txt("log_in"));
293 
294  // #13058
295  $target_str = ($this->getLoginTargetPar() != "")
296  ? $this->getLoginTargetPar()
297  : $this->buildLoginTarget();
298  $this->tpl->setVariable(
299  "LINK_LOGIN",
300  $link_dir . "login.php?target=" . $target_str . "&client_id=" . rawurlencode(CLIENT_ID) . "&cmd=force_login&lang=" . $ilUser->getCurrentLanguage()
301  );
302  $this->tpl->parseCurrentBlock();
303  } else {
304  $this->tpl->setCurrentBlock("userisloggedin");
305  $this->tpl->setVariable("TXT_LOGIN_AS", $lng->txt("login_as"));
306  $user_img_src = $ilUser->getPersonalPicturePath("small", true);
307  $user_img_alt = $ilUser->getFullname();
308  $this->tpl->setVariable("USER_IMG", ilUtil::img($user_img_src, $user_img_alt));
309  $this->tpl->setVariable("USR_LINK_PROFILE", "ilias.php?baseClass=ilDashboardGUI&cmd=jumpToProfile");
310  $this->tpl->setVariable("USR_TXT_PROFILE", $lng->txt("personal_profile"));
311  $this->tpl->setVariable("USR_LINK_SETTINGS", "ilias.php?baseClass=ilDashboardGUI&cmd=jumpToSettings");
312  $this->tpl->setVariable("USR_TXT_SETTINGS", $lng->txt("personal_settings"));
313  $this->tpl->setVariable("TXT_LOGOUT2", $lng->txt("logout"));
314  $this->tpl->setVariable("LINK_LOGOUT2", $link_dir . "logout.php?lang=" . $ilUser->getCurrentLanguage());
315  $this->tpl->setVariable("USERNAME", $ilUser->getFullname());
316  $this->tpl->setVariable("LOGIN", $ilUser->getLogin());
317  $this->tpl->setVariable("MATRICULATION", $ilUser->getMatriculation());
318  $this->tpl->setVariable("EMAIL", $ilUser->getEmail());
319  $this->tpl->parseCurrentBlock();
320 
321  $this->addToolbarTooltip("userlog", "mm_tb_user");
322  }
323  } else {
324  // member view info
325  $this->tpl->setVariable("TOPBAR_CLASS", " ilMemberViewMainHeader");
326  $this->tpl->setVariable("MEMBER_VIEW_INFO", $lng->txt("mem_view_long"));
327  }
328 
329  if (!$this->topbar_back_url) {
330  $header_top_title = ilObjSystemFolder::_getHeaderTitle();
331  if (trim($header_top_title) != "" && $this->tpl->blockExists("header_top_title")) {
332  $this->tpl->setCurrentBlock("header_top_title");
333  // php7-workaround alex: added phpversion() to help during development of php7 compatibility
334  $this->tpl->setVariable("TXT_HEADER_TITLE", $header_top_title);
335  $this->tpl->parseCurrentBlock();
336  }
337  } else {
338  $this->tpl->setCurrentBlock("header_back_bl");
339  $this->tpl->setVariable("URL_HEADER_BACK", $this->topbar_back_url);
340  $this->tpl->setVariable(
341  "TXT_HEADER_BACK",
342  $this->topbar_back_caption
343  ? $this->topbar_back_caption
344  : $lng->txt("back")
345  );
346  $this->tpl->parseCurrentBlock();
347  }
348 
349  $this->tpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
350 
351  if ($this->getMode() == self::MODE_FULL) {
352  // $this->tpl->setVariable("TXT_LOGOUT", $lng->txt("logout"));
353  $this->tpl->setVariable("HEADER_URL", $this->getHeaderURL());
354  $this->tpl->setVariable("HEADER_ICON", ilUtil::getImagePath("HeaderIcon.svg"));
355  $this->tpl->setVariable("HEADER_ICON_RESPONSIVE", ilUtil::getImagePath("HeaderIconResponsive.svg"));
356  }
357 
358  $this->tpl->setVariable("TXT_MAIN_MENU", $lng->txt("main_menu"));
359 
360  $this->tpl->parseCurrentBlock();
361  }
362 
363 
367  private function renderStatusBox(ilTemplate $a_tpl)
368  {
370  $ui_factory = $this->ui->factory();
371  $ui_renderer = $this->ui->renderer();
372  }
373 
374 
379  public static function _checkAdministrationPermission()
380  {
381  global $DIC;
382 
383  $rbacsystem = $DIC->rbac()->system();
384 
385  //if($rbacsystem->checkAccess("visible,read", SYSTEM_FOLDER_ID))
386  if ($rbacsystem->checkAccess("visible", SYSTEM_FOLDER_ID)) {
387  return true;
388  }
389 
390  return false;
391  }
392 
393 
399  public function getHTML()
400  {
401  // this is a workaround for bugs like 14016
402  // the main menu does not need the YUI connection, but many other
403  // features since they rely on il.Util.sendAjaxGetRequestToUrl (see Services/Javascript)
404  // which still uses YUI. This should be migrated to jQuery with a future major release
406 
407  $this->setTemplateVars();
408 
409  return $this->tpl->get();
410  }
411 
412 
416  protected function initMemberView() : bool
417  {
418  $lng = $this->lng;
419 
420  $ref_id = ilMemberViewSettings::getInstance()->getCurrentRefId();
421 
422  if (!$ref_id) {
423  return false;
424  }
425 
427  $ref_id,
429  array('mv' => 0)
430  );
431 
432  $this->setMode(self::MODE_TOPBAR_MEMBERVIEW);
433  $this->setTopBarBack($url, $lng->txt('mem_view_close'));
434 
435  return true;
436  }
437 
438 
439  private function renderHelpButtons()
440  {
441  $ilHelp = $this->help;
442  $lng = $this->lng;
447 
448  // screen id
449  if ((defined("OH_REF_ID") && OH_REF_ID > 0) || DEVMODE == 1) {
450  if ($ilHelp->getScreenId() != "") {
451  if ($this->getMode() == self::MODE_FULL) {
452  $this->tpl->setCurrentBlock("screen_id");
453  $this->tpl->setVariable("SCREEN_ID", $ilHelp->getScreenId());
454  $this->tpl->parseCurrentBlock();
455  }
456  }
457  }
458 
459  $help_active = false;
460 
461  $helpl = new ilGroupedListGUI();
462  $helpl->setAsDropDown(true, true);
463 
464  if ($ilHelp->hasSections()) {
465  $help_active = true;
466 
467  $lng->loadLanguageModule("help");
468  //$this->tpl->setCurrentBlock("help_icon");
469 
470  // add javascript needed by help (to do: move to help class)
471  $main_tpl->addJavascript("./Services/Help/js/ilHelp.js");
472  $acc = new ilAccordionGUI();
473  $acc->addJavascript($main_tpl);
474  $acc->addCss();
475 
477  "help_tr",
478  $lng->txt("help_open_online_help"),
479  "",
480  "bottom center",
481  "top center",
482  false
483  );
484  $helpl->addEntry("<span>&nbsp;</span> " . $lng->txt("help_topcis"), "#", "", "il.Help.listHelp(event, false);");
485  }
486 
487  $module_id = (int) $ilSetting->get("help_module");
488  if ((OH_REF_ID > 0 || $module_id > 0) && $ilUser->getLanguage() == "de"
489  && $ilSetting->get("help_mode") != "1"
490  ) {
491  $help_active = true;
492 
493  $lng->loadLanguageModule("help");
494  $main_tpl->addJavascript("./Services/Help/js/ilHelp.js");
495 
497  "help_tt",
498  $lng->txt("help_toggle_tooltips"),
499  "",
500  "bottom center",
501  "top center",
502  false
503  );
504  $helpl->addEntry('<span id="help_tt_switch_on" class="glyphicon glyphicon-ok"></span> ' . $lng->txt("help_tooltips"), "#", "", "return il.Help.switchTooltips(event);");
505  }
506 
507  if ($help_active && $ilHelp->hasSections()) {
508  $this->tpl->setCurrentBlock("help");
509  $this->tpl->setVariable("TXT_HELP", $lng->txt("help"));
510  $this->tpl->setVariable("HELP_CLICK", "il.Help.listHelp(event, false);");
511  $this->tpl->parseCurrentBlock();
512 
513  $this->addToolbarTooltip("mm_help", "mm_tb_help");
514 
515  // always set ajax url
516  $ilHelp->setCtrlPar();
517  $this->main_tpl->addOnLoadCode(
518  "il.Help.setAjaxUrl('" .
519  $ilCtrl->getLinkTargetByClass("ilhelpgui", "", "", true)
520  . "');"
521  );
522  }
523  }
524 
525  private function renderOnScreenChatMenu()
526  {
527  $menu = new ilOnScreenChatMenuGUI();
528  $this->tpl->setVariable('ONSCREENCHAT', $menu->getMainMenuHTML());
529  $this->addToolbarTooltip("onscreenchatmenu-dropdown", "mm_tb_oschat");
530  }
531 
532 
536  public function renderAwareness()
537  {
538  include_once("./Services/Awareness/classes/class.ilAwarenessGUI.php");
540 
541  $this->tpl->setVariable("AWARENESS", $aw->getMainMenuHTML());
542  $this->addToolbarTooltip("awareness_trigger", "mm_tb_aware");
543  }
544 
554  public function showLogoOnly(bool $a_value)
555  {
556  $this->logo_only = (bool) $a_value;
557  }
558 
559 
563  private function getHeaderURL() : string
564  {
566 
567  if (!$url) {
568  $url = "./goto.php?target=root_1";
569  }
570 
571  return $url;
572  }
573 
574 
575  private function renderBackgroundTasks()
576  {
577  global $DIC;
578 
580 
581  if ($DIC->user()->isAnonymous() || (int) $DIC->user()->getId() === 0) {
582  return;
583  }
584 
585  $DIC->language()->loadLanguageModule("background_tasks");
586  $factory = $DIC->ui()->factory();
587  $persistence = $DIC->backgroundTasks()->persistence();
588  $metas = $persistence->getBucketMetaOfUser($DIC->user()->getId());
589  if (!count($metas)) {
590  return;
591  }
592 
593  $numberOfUserInteractions = count(
594  array_filter(
595  $metas,
596  function (BucketMeta $meta) {
597  return $meta->getState() == State::USER_INTERACTION;
598  }
599  )
600  );
601  $numberOfNotUserInteractions = count($metas) - $numberOfUserInteractions;
602 
603  $popover = $factory->popover()
604  ->listing(array())
605  ->withFixedPosition()
606  ->withTitle($DIC->language()->txt("background_tasks_running")); // needs to have empty content
607  $DIC->ctrl()->clearParametersByClass(ilBTControllerGUI::class);
608  $DIC->ctrl()->setParameterByClass(
609  ilBTControllerGUI::class,
611  ilBTControllerGUI::hash("//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}")
612  );
613  $DIC->ctrl()->setParameterByClass(
614  ilBTControllerGUI::class,
615  ilBTControllerGUI::REPLACE_SIGNAL,
616  $popover->getReplaceContentSignal()->getId()
617  );
618 
619  $url = $DIC->ctrl()->getLinkTargetByClass([ilBTControllerGUI::class], ilBTControllerGUI::CMD_GET_POPOVER_CONTENT, "", true);
620  $popover = $popover->withAsyncContentUrl($url);
621 
622  $glyph = $factory->symbol()->glyph()
623  ->briefcase()
624  ->withOnClick($popover->getShowSignal())
625  ->withCounter($factory->counter()->novelty($numberOfUserInteractions))
626  ->withCounter($factory->counter()->status($numberOfNotUserInteractions));
627 
628  $main_tpl->addJavascript('./Services/BackgroundTasks/js/background_task_refresh.js');
629 
630  $this->tpl->setVariable(
631  'BACKGROUNDTASKS',
632  $DIC->ui()->renderer()->render([$glyph, $popover])
633  );
634 
635  $this->tpl->setVariable('BACKGROUNDTASKS_REFRESH_URI', $url);
636 
637  $this->addToolbarTooltip("mm_tb_background_tasks", "mm_tb_bgtasks");
638  }
639 
640 
647  protected function addToolbarTooltip(string $element_id, string $help_id)
648  {
649  if (ilHelp::getMainMenuTooltip($help_id) != "") {
651  $element_id,
652  ilHelp::getMainMenuTooltip($help_id),
653  "",
654  "top right",
655  "top left",
656  false
657  );
658  }
659  }
660 
661 
662  protected function buildLoginTarget()
663  {
664  global $DIC;
665 
666  $tree = $DIC->repositoryTree();
667  $ilUser = $DIC->user();
668 
669  $target_str = "";
670 
671  // repository
672  if ($_GET["ref_id"] != "") {
673  if ($tree->isInTree($_GET["ref_id"]) && $_GET["ref_id"] != $tree->getRootId()) {
674  $obj_id = ilObject::_lookupObjId($_GET["ref_id"]);
675  $type = ilObject::_lookupType($obj_id);
676  $target_str = $type . "_" . $_GET["ref_id"];
677  }
678  } // personal workspace
679  else {
680  if ($_GET["wsp_id"] != "" && $_GET["wsp_id"] > 0) {
681  include_once "Services/PersonalWorkspace/classes/class.ilWorkspaceTree.php";
682  $tree = new ilWorkspaceTree($ilUser->getId());
683  $obj_id = $tree->lookupObjectId((int) $_GET["wsp_id"]);
684  if ($obj_id) {
685  $type = ilObject::_lookupType($obj_id);
686  $target_str = $type . "_" . (int) $_GET["wsp_id"] . "_wsp";
687  }
688  } // portfolio
689  else {
690  if ($_GET["prt_id"] != "") {
691  $target_str = "prtf_" . (int) $_GET["prt_id"];
692  }
693  }
694  }
695 
696  return $target_str;
697  }
698 }
static addTooltip( $a_el_id, $a_text, $a_container="", $a_my="bottom center", $a_at="top center", $a_use_htmlspecialchars=true)
Adds a tooltip to an HTML element.
Handles display of the main menu.
settings()
Definition: settings.php:2
setMode(int $a_value)
special template class to simplify handling of ITX/PEAR
$type
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
$_GET["client_id"]
static getInstance()
Get instance.
static initConnection(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
static getStartingPointAsUrl()
Get current starting point setting as URL.
user()
Definition: user.php:4
Tree handler for personal workspace.
global $ilCtrl
Definition: ilias.php:18
showLogoOnly(bool $a_value)
Toggle rendering of main menu, search, user info.
help()
Definition: help.php:2
renderAwareness()
Render awareness tool.
setTopBarBack($a_url, $a_caption=null)
renderStatusBox(ilTemplate $a_tpl)
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Grouped list GUI class.
static _lookupObjId($a_id)
static _getSearchSettingRefId()
Read the ref_id of Search Settings object.
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
$ilUser
Definition: imgupload.php:18
ui()
Definition: ui.php:5
static getMainMenuTooltip($a_item_id)
Get main menu tooltip.
static img($a_src, $a_alt=null, $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static _lookupType($a_id, $a_reference=false)
lookup object type
global $ilSetting
Definition: privfeed.php:17
__construct($a_target="_top", $a_use_start_template=false, ilGlobalTemplate $a_main_tpl=null)
static _checkAdministrationPermission()
$DIC
Definition: xapitoken.php:46
setTemplateVars()
Set all template variables (images, scripts, target frames, ...)
$url
Accordion user interface class.
addToolbarTooltip(string $element_id, string $help_id)
Add toolbar tooltip.
$factory
Definition: metadata.php:58