dolibarr 19.0.3
empty.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2006-2013 Laurent Destailleur <eldy@users.sourceforge.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
26class MenuManager
27{
31 public $db;
32
33 public $type_user = 0; // Put 0 for internal users, 1 for external users
34 public $atarget = ""; // To store default target to use onto links
35 public $name = "empty";
36
37 public $menu;
38 public $menu_array_after;
39
40 public $tabMenu;
41
42 public $topmenu;
43 public $leftmenu;
44
51 public function __construct($db, $type_user)
52 {
53 $this->type_user = $type_user;
54 $this->db = $db;
55 }
56
57
65 public function loadMenu($forcemainmenu = '', $forceleftmenu = '')
66 {
67 // Do nothing
68 $this->tabMenu = array();
69 }
70
71
79 public function showmenu($mode, $moredata = null)
80 {
81 global $user, $conf, $langs, $dolibarr_main_db_name;
82
83 $id = 'mainmenu';
84
85 require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php';
86 $this->menu = new Menu();
87
88 $res = 'ErrorBadParameterForMode';
89
90 $noout = 0;
91 //if ($mode == 'jmobile') $noout=1;
92
93 if ($mode == 'topnb') {
94 return 1;
95 }
96
97 if ($mode == 'top') {
98 if (empty($noout)) {
100 }
101
102 $usemenuhider = 1;
103
104 // Show/Hide vertical menu
105 if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && !getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) {
106 $showmode = 1;
107 $classname = 'class="tmenu menuhider nohover"';
108 $idsel = 'menu';
109
110 $this->menu->add('#', '', 0, $showmode, $this->atarget, "xxx", '', 0, $id, $idsel, $classname);
111 }
112
113 // Home
114 $showmode = 1;
115 $classname = 'class="tmenusel"';
116 $idsel = 'home';
117
118 $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname);
119
120
121 // Sort on position
122 $this->menu->liste = dol_sort_array($this->menu->liste, 'position');
123
124 // Output menu entries
125 foreach ($this->menu->liste as $menkey => $menuval) {
126 if (empty($noout)) {
127 print_start_menu_entry_empty($menuval['idsel'], $menuval['classname'], $menuval['enabled']);
128 }
129 if (empty($noout)) {
130 print_text_menu_entry_empty($menuval['titre'], $menuval['enabled'], ($menuval['url'] != '#' ? DOL_URL_ROOT : '').$menuval['url'], $menuval['id'], $menuval['idsel'], $menuval['classname'], ($menuval['target'] ? $menuval['target'] : $this->atarget));
131 }
132 if (empty($noout)) {
133 print_end_menu_entry_empty($menuval['enabled']);
134 }
135 }
136
137 $showmode = 1;
138 if (empty($noout)) {
139 print_start_menu_entry_empty('', 'class="tmenuend"', $showmode);
140 }
141 if (empty($noout)) {
143 }
144
145 if (empty($noout)) {
147 }
148
149 if ($mode == 'jmobile') {
150 $this->topmenu = clone $this->menu;
151 unset($this->menu->liste);
152 }
153 }
154
155 if ($mode == 'jmobile') { // Used to get menu in xml ul/li
156 // Home
157 $showmode = 1;
158 $classname = 'class="tmenusel"';
159 $idsel = 'home';
160
161 $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname);
162
163 $substitarray = getCommonSubstitutionArray($langs, 0, null, null);
164
165 // $this->menu->liste is top menu
166 //var_dump($this->menu->liste);exit;
167 $lastlevel = array();
168 $showmenu = true; // Is current menu shown - define here to keep static code checker happy
169 print '<!-- Generate menu list from menu handler '.$this->name.' -->'."\n";
170 foreach ($this->menu->liste as $key => $val) { // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
171 print '<ul class="ulmenu" data-inset="true">';
172 print '<li class="lilevel0">';
173
174 $val['url'] = make_substitutions($val['url'], $substitarray);
175
176 if ($val['enabled'] == 1) {
177 $relurl = dol_buildpath($val['url'], 1);
178 $canonurl = preg_replace('/\?.*$/', '', $val['url']);
179
180 print '<a class="alilevel0" href="#">';
181
182 // Add font-awesome
183 if ($val['level'] == 0 && $val['mainmenu'] == 'home') {
184 print '<span class="fas fa-home fa-fw paddingright" aria-hidden="true"></span>';
185 }
186
187 print $val['titre'];
188 print '</a>'."\n";
189
190 // Search submenu fot this mainmenu entry
191 $tmpmainmenu = $val['mainmenu'];
192 $tmpleftmenu = 'all';
193 $submenu = new Menu();
194
195 $langs->load("admin"); // Load translation file admin.lang
196 $submenu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0);
197 $submenu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1);
198 $submenu->add("/admin/modules.php", $langs->trans("Modules"), 1);
199 $submenu->add("/admin/menus.php", $langs->trans("Menus"), 1);
200 $submenu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1);
201 $submenu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1);
202 $submenu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1);
203
204 $submenu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1);
205 $submenu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1);
206 $submenu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1);
207 $submenu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1);
208 $submenu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1);
209 $submenu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1);
210 $submenu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1);
211 $submenu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1);
212 $submenu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1);
213
214 //if ($tmpmainmenu.'-'.$tmpleftmenu == 'home-all') {
215 //var_dump($submenu); exit;
216 //}
217 //if ($tmpmainmenu=='accountancy') {
218 //var_dump($submenu->liste); exit;
219 //}
220 $nexturl = dol_buildpath($submenu->liste[0]['url'], 1);
221
222 $canonrelurl = preg_replace('/\?.*$/', '', $relurl);
223 $canonnexturl = preg_replace('/\?.*$/', '', $nexturl);
224
225 print '<ul>'."\n";
226 if (($canonrelurl != $canonnexturl && !in_array($val['mainmenu'], array('tools')))
227 || (strpos($canonrelurl, '/product/index.php') !== false || strpos($canonrelurl, '/compta/bank/list.php') !== false)) {
228 // We add sub entry
229 print str_pad('', 1).'<li class="lilevel1 ui-btn-icon-right ui-btn">'; // ui-btn to highlight on clic
230 print '<a href="'.$relurl.'">';
231 if ($langs->trans(ucfirst($val['mainmenu'])."Dashboard") == ucfirst($val['mainmenu'])."Dashboard") { // No translation
232 if (in_array($val['mainmenu'], array('cashdesk', 'websites'))) {
233 print $langs->trans("Access");
234 } else {
235 print $langs->trans("Dashboard");
236 }
237 } else {
238 print $langs->trans(ucfirst($val['mainmenu'])."Dashboard");
239 }
240 print '</a>';
241 print '</li>'."\n";
242 }
243
244 if ($val['level'] == 0) {
245 if ($val['enabled']) {
246 $lastlevel[0] = 'enabled';
247 } elseif ($showmenu) { // Not enabled but visible (so greyed)
248 $lastlevel[0] = 'greyed';
249 } else {
250 $lastlevel[0] = 'hidden';
251 }
252 }
253
254 $lastlevel2 = array();
255 foreach ($submenu->liste as $key2 => $val2) { // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
256 $showmenu = true;
257 if (getDolGlobalString('MAIN_MENU_HIDE_UNAUTHORIZED') && empty($val2['enabled'])) {
258 $showmenu = false;
259 }
260
261 // If at least one parent is not enabled, we do not show any menu of all children
262 if ($val2['level'] > 0) {
263 $levelcursor = $val2['level'] - 1;
264 while ($levelcursor >= 0) {
265 if ($lastlevel2[$levelcursor] != 'enabled') {
266 $showmenu = false;
267 }
268 $levelcursor--;
269 }
270 }
271
272 if ($showmenu) { // Visible (option to hide when not allowed is off or allowed)
273 $val2['url'] = make_substitutions($val2['url'], $substitarray);
274
275 $relurl2 = dol_buildpath($val2['url'], 1);
276 $canonurl2 = preg_replace('/\?.*$/', '', $val2['url']);
277 //var_dump($val2['url'].' - '.$canonurl2.' - '.$val2['level']);
278 if (in_array($canonurl2, array('/admin/index.php', '/admin/tools/index.php', '/core/tools.php'))) {
279 $relurl2 = '';
280 }
281
282 $disabled = '';
283 if (!$val2['enabled']) {
284 $disabled = " vsmenudisabled";
285 }
286
287 print str_pad('', $val2['level'] + 1);
288 print '<li class="lilevel'.($val2['level'] + 1);
289 if ($val2['level'] == 0) {
290 print ' ui-btn-icon-right ui-btn'; // ui-btn to highlight on clic
291 }
292 print $disabled.'">'; // ui-btn to highlight on clic
293 if ($relurl2) {
294 if ($val2['enabled']) {
295 // Allowed
296 print '<a href="'.$relurl2.'">';
297 $lastlevel2[$val2['level']] = 'enabled';
298 } else {
299 // Not allowed but visible (greyed)
300 print '<a href="#" class="vsmenudisabled">';
301 $lastlevel2[$val2['level']] = 'greyed';
302 }
303 } else {
304 if ($val2['enabled']) { // Allowed
305 $lastlevel2[$val2['level']] = 'enabled';
306 } else {
307 $lastlevel2[$val2['level']] = 'greyed';
308 }
309 }
310 print $val2['titre'];
311 if ($relurl2) {
312 if ($val2['enabled']) {
313 // Allowed
314 print '</a>';
315 } else {
316 // Not allowed
317 print '</a>';
318 }
319 }
320 print '</li>'."\n";
321 }
322 }
323 print '</ul>';
324 }
325 if ($val['enabled'] == 2) {
326 print '<span class="vsmenudisabled">'.$val['titre'].'</span>';
327 }
328 print '</li>';
329 print '</ul>'."\n";
330 }
331 }
332
333 if ($mode == 'left') {
334 // Put here left menu entries
335 // ***** START *****
336
337 $langs->load("admin"); // Load translation file admin.lang
338 $this->menu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0);
339 $this->menu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1);
340 $this->menu->add("/admin/modules.php", $langs->trans("Modules"), 1);
341 $this->menu->add("/admin/menus.php", $langs->trans("Menus"), 1);
342 $this->menu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1);
343 $this->menu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1);
344 $this->menu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1);
345
346 $this->menu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1);
347 $this->menu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1);
348 $this->menu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1);
349 $this->menu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1);
350 $this->menu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1);
351 $this->menu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1);
352 $this->menu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1);
353 $this->menu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1);
354 $this->menu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1);
355
356 // ***** END *****
357
358 $menu_array_before = array();
359 $menu_array_after = array();
360
361 // do not change code after this
362
363 $menu_array = $this->menu->liste;
364 if (is_array($menu_array_before)) {
365 $menu_array = array_merge($menu_array_before, $menu_array);
366 }
367 if (is_array($menu_array_after)) {
368 $menu_array = array_merge($menu_array, $menu_array_after);
369 }
370 //var_dump($menu_array);exit;
371 if (!is_array($menu_array)) {
372 return 0;
373 }
374
375 if (empty($noout)) {
376 $alt = 0;
377 $altok = 0;
378 $blockvmenuopened = false;
379 $num = count($menu_array);
380 for ($i = 0; $i < $num; $i++) {
381 $alt++;
382 if (empty($menu_array[$i]['level'])) {
383 $altok++;
384 $blockvmenuopened = true;
385 $lastopened = true;
386 for ($j = ($i + 1); $j < $num; $j++) {
387 if (empty($menu_array[$j]['level'])) {
388 $lastopened = false;
389 }
390 }
391 $alt = 0; // For menu manager "empty", we force to not have blockvmenufirst defined
392 $lastopened = 1; // For menu manager "empty", we force to not have blockvmenulast defined
393 if (($alt % 2 == 0)) {
394 print '<div class="blockvmenub lockvmenuimpair blockvmenuunique'.($lastopened ? ' blockvmenulast' : '').($alt == 1 ? ' blockvmenufirst' : '').'">'."\n";
395 } else {
396 print '<div class="blockvmenu blockvmenupair blockvmenuunique'.($lastopened ? ' blockvmenulast' : '').($alt == 1 ? ' blockvmenufirst' : '').'">'."\n";
397 }
398 }
399
400 // Add tabulation
401 $tabstring = '';
402 $tabul = ($menu_array[$i]['level'] - 1);
403 if ($tabul > 0) {
404 for ($j = 0; $j < $tabul; $j++) {
405 $tabstring .= '&nbsp; &nbsp;';
406 }
407 }
408
409 if ($menu_array[$i]['level'] == 0) {
410 if ($menu_array[$i]['enabled']) {
411 print '<div class="menu_titre">'.$tabstring.'<a class="vmenu" href="'.dol_buildpath($menu_array[$i]['url'], 1).'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>'.$menu_array[$i]['titre'].'</a></div>'."\n";
412 } else {
413 print '<div class="menu_titre">'.$tabstring.'<span class="vmenudisabled">'.$menu_array[$i]['titre'].'</span></div>'."\n";
414 }
415 print '<div class="menu_top"></div>'."\n";
416 }
417
418 if ($menu_array[$i]['level'] > 0) {
419 $cssmenu = '';
420 if ($menu_array[$i]['url']) {
421 $cssmenu = ' menu_contenu'.dol_string_nospecial(preg_replace('/\.php.*$/', '', $menu_array[$i]['url']));
422 }
423
424 print '<div class="menu_contenu'.$cssmenu.'">';
425
426 if ($menu_array[$i]['enabled']) {
427 print $tabstring;
428 if ($menu_array[$i]['url']) {
429 print '<a class="vsmenu" itle="'.dol_escape_htmltag($menu_array[$i]['titre']).'" href="'.dol_buildpath($menu_array[$i]['url'], 1).'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>';
430 } else {
431 print '<span class="vsmenu" title="'.dol_escape_htmltag($menu_array[$i]['titre']).'">';
432 }
433 if ($menu_array[$i]['url']) {
434 print $menu_array[$i]['titre'].'</a>';
435 } else {
436 print '</span>';
437 }
438 } else {
439 print $tabstring.'<span class="vsmenudisabled vsmenudisabledmargin">'.$menu_array[$i]['titre'].'</span>';
440 }
441
442 // If title is not pure text and contains a table, no carriage return added
443 if (!strstr($menu_array[$i]['titre'], '<table')) {
444 print '<br>';
445 }
446 print '</div>'."\n";
447 }
448
449 // If next is a new block or end
450 if (empty($menu_array[$i + 1]['level'])) {
451 print '<div class="menu_end"></div>'."\n";
452 print "</div>\n";
453 }
454 }
455
456 if ($altok) {
457 print '<div class="blockvmenuend"></div>';
458 }
459 }
460
461 if ($mode == 'jmobile') {
462 $this->leftmenu = clone $this->menu;
463 unset($menu_array);
464 }
465 }
466 unset($this->menu);
467
468 return $res;
469 }
470}
471
472
479{
480 global $conf;
481
482 print '<div class="tmenudiv">';
483 print '<ul role="navigation" class="tmenu"'.(!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER') ? '' : ' title="Top menu"').'>';
484}
485
494function print_start_menu_entry_empty($idsel, $classname, $showmode)
495{
496 if ($showmode) {
497 print '<li '.$classname.' id="mainmenutd_'.$idsel.'">';
498 //print '<div class="tmenuleft tmenusep"></div>';
499 print '<div class="tmenucenter">';
500 }
501}
502
516function print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $classname, $atarget, $menuval = array())
517{
518 global $conf, $langs;
519
520 $classnameimg = str_replace('class="', 'class="tmenuimage ', $classname);
521 $classnametxt = str_replace('class="', 'class="tmenulabel ', $classname);
522
523 if ($showmode == 1) {
524 print '<a '.$classnameimg.' tabindex="-1" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').' title="'.dol_escape_htmltag($text).'">';
525 print '<div class="'.$id.' '.$idsel.' topmenuimage">';
526 if (!empty($menuval['prefix']) && strpos($menuval['prefix'], '<span') === 0) {
527 print $menuval['prefix'];
528 } elseif (!empty($menuval['prefix']) && strpos($menuval['prefix'], 'fa-') === 0) {
529 print '<span class="'.$id.' '.$menuval['prefix'].'" id="mainmenuspan_'.$idsel.'"></span>';
530 } else {
531 print '<span class="'.$id.' tmenuimageforpng" id="mainmenuspan_'.$idsel.'"></span>';
532 }
533 print '</div>';
534 print '</a>';
535 if (!getDolGlobalString('THEME_TOPMENU_DISABLE_TEXT')) {
536 print '<a '.$classnametxt.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').'>';
537 print '<span class="mainmenuaspan">';
538 print $text;
539 print '</span>';
540 print '</a>';
541 }
542 }
543 if ($showmode == 2) {
544 print '<div '.$classnameimg.' title="'.dol_escape_htmltag($text.' - '.$langs->trans("NotAllowed")).'">';
545 print '<div class="'.$id.' '.$idsel.' topmenuimage tmenudisabled">';
546 print '<span class="'.$id.' tmenuimageforpng tmenudisabled" id="mainmenuspan_'.$idsel.'"></span>';
547 print '</div>';
548 print '</div>';
549 if (!getDolGlobalString('THEME_TOPMENU_DISABLE_TEXT')) {
550 print '<span '.$classnametxt.' id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($text.' - '.$langs->trans("NotAllowed")).'">';
551 print '<span class="mainmenuaspan">';
552 print $text;
553 print '</span>';
554 print '</span>';
555 }
556 }
557}
558
565function print_end_menu_entry_empty($showmode)
566{
567 if ($showmode) {
568 print '</div></li>';
569 print "\n";
570 }
571}
572
579{
580 print '</ul>';
581 print '</div>';
582 print "\n";
583}
Class to manage left menus.
Class to manage menu Auguria.
__construct($db, $type_user)
Constructor.
Definition empty.php:51
loadMenu($forcemainmenu='', $forceleftmenu='')
Load this->tabMenu.
Definition empty.php:65
showmenu($mode, $moredata=null)
Show menu.
Definition empty.php:79
print_end_menu_entry_empty($showmode)
Output end menu entry.
Definition empty.php:565
print_start_menu_array_empty()
Output menu entry.
Definition empty.php:478
print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $classname, $atarget, $menuval=array())
Output menu entry.
Definition empty.php:516
print_end_menu_array_empty()
Output menu array.
Definition empty.php:578
print_start_menu_entry_empty($idsel, $classname, $showmode)
Output start menu entry.
Definition empty.php:494
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by second index function, which produces ascending (default) or descending output...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...