dolibarr  13.0.2
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 
26 class 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 
49  public function __construct($db, $type_user)
50  {
51  $this->type_user = $type_user;
52  $this->db = $db;
53  }
54 
55 
63  public function loadMenu($forcemainmenu = '', $forceleftmenu = '')
64  {
65  // Do nothing
66  $this->tabMenu = array();
67  }
68 
69 
77  public function showmenu($mode, $moredata = null)
78  {
79  global $user, $conf, $langs, $dolibarr_main_db_name;
80 
81  $id = 'mainmenu';
82 
83  require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php';
84  $this->menu = new Menu();
85 
86  $res = 'ErrorBadParameterForMode';
87 
88  $noout = 0;
89  //if ($mode == 'jmobile') $noout=1;
90 
91  if ($mode == 'topnb') {
92  return 1;
93  }
94 
95  if ($mode == 'top') {
96  if (empty($noout)) {
98  }
99 
100  $usemenuhider = 1;
101 
102  // Show/Hide vertical menu
103  if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
104  $showmode = 1;
105  $classname = 'class="tmenu menuhider"';
106  $idsel = 'menu';
107 
108  $this->menu->add('#', '', 0, $showmode, $atarget, "xxx", '', 0, $id, $idsel, $classname);
109  }
110 
111  // Home
112  $showmode = 1;
113  $classname = 'class="tmenusel"';
114  $idsel = 'home';
115 
116  $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname);
117 
118 
119  // Sort on position
120  $this->menu->liste = dol_sort_array($this->menu->liste, 'position');
121 
122  // Output menu entries
123  foreach ($this->menu->liste as $menkey => $menuval) {
124  if (empty($noout)) {
125  print_start_menu_entry_empty($menuval['idsel'], $menuval['classname'], $menuval['enabled']);
126  }
127  if (empty($noout)) {
128  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'] : $atarget));
129  }
130  if (empty($noout)) {
131  print_end_menu_entry_empty($menuval['enabled']);
132  }
133  }
134 
135  $showmode = 1;
136  if (empty($noout)) {
137  print_start_menu_entry_empty('', 'class="tmenuend"', $showmode);
138  }
139  if (empty($noout)) {
140  print_end_menu_entry_empty($showmode);
141  }
142 
143  if (empty($noout)) {
145  }
146 
147  if ($mode == 'jmobile') {
148  $this->topmenu = clone $this->menu;
149  unset($this->menu->liste);
150  }
151  }
152 
153  if ($mode == 'jmobile') { // Used to get menu in xml ul/li
154  // Home
155  $showmode = 1;
156  $classname = 'class="tmenusel"';
157  $idsel = 'home';
158 
159  $this->menu->add('/index.php', $langs->trans("Home"), 0, $showmode, $this->atarget, 'home', '', 10, $id, $idsel, $classname);
160 
161  $substitarray = getCommonSubstitutionArray($langs, 0, null, null);
162 
163  // $this->menu->liste is top menu
164  //var_dump($this->menu->liste);exit;
165  $lastlevel = array();
166  print '<!-- Generate menu list from menu handler '.$this->name.' -->'."\n";
167  foreach ($this->menu->liste as $key => $val) { // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
168  print '<ul class="ulmenu" data-inset="true">';
169  print '<li class="lilevel0">';
170 
171  $val['url'] = make_substitutions($val['url'], $substitarray);
172 
173  if ($val['enabled'] == 1) {
174  $relurl = dol_buildpath($val['url'], 1);
175  $canonurl = preg_replace('/\?.*$/', '', $val['url']);
176 
177  print '<a class="alilevel0" href="#">';
178 
179  // Add font-awesome
180  if ($val['level'] == 0 && $val['mainmenu'] == 'home') {
181  print '<span class="fa fa-home fa-fw paddingright" aria-hidden="true"></span>';
182  }
183 
184  print $val['titre'];
185  print '</a>'."\n";
186 
187  // Search submenu fot this mainmenu entry
188  $tmpmainmenu = $val['mainmenu'];
189  $tmpleftmenu = 'all';
190  $submenu = new Menu();
191 
192  $langs->load("admin"); // Load translation file admin.lang
193  $submenu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0);
194  $submenu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1);
195  $submenu->add("/admin/modules.php", $langs->trans("Modules"), 1);
196  $submenu->add("/admin/menus.php", $langs->trans("Menus"), 1);
197  $submenu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1);
198  $submenu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1);
199  $submenu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1);
200 
201  $submenu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1);
202  $submenu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1);
203  $submenu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1);
204  $submenu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1);
205  $submenu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1);
206  $submenu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1);
207  $submenu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1);
208  $submenu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1);
209  $submenu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1);
210 
211  //if ($tmpmainmenu.'-'.$tmpleftmenu == 'home-all') { var_dump($submenu); exit; }
212  //if ($tmpmainmenu=='accountancy') { var_dump($submenu->liste); exit; }
213  $nexturl = dol_buildpath($submenu->liste[0]['url'], 1);
214 
215  $canonrelurl = preg_replace('/\?.*$/', '', $relurl);
216  $canonnexturl = preg_replace('/\?.*$/', '', $nexturl);
217  //var_dump($canonrelurl);
218  //var_dump($canonnexturl);
219  print '<ul>'."\n";
220  if (($canonrelurl != $canonnexturl && !in_array($val['mainmenu'], array('tools')))
221  || (strpos($canonrelurl, '/product/index.php') !== false || strpos($canonrelurl, '/compta/bank/list.php') !== false)) {
222  // We add sub entry
223  print str_pad('', 1).'<li class="lilevel1 ui-btn-icon-right ui-btn">'; // ui-btn to highlight on clic
224  print '<a href="'.$relurl.'">';
225  if ($langs->trans(ucfirst($val['mainmenu'])."Dashboard") == ucfirst($val['mainmenu'])."Dashboard") { // No translation
226  if (in_array($val['mainmenu'], array('cashdesk', 'websites'))) {
227  print $langs->trans("Access");
228  } else {
229  print $langs->trans("Dashboard");
230  }
231  } else {
232  print $langs->trans(ucfirst($val['mainmenu'])."Dashboard");
233  }
234  print '</a>';
235  print '</li>'."\n";
236  }
237 
238  if ($val['level'] == 0) {
239  if ($val['enabled']) {
240  $lastlevel[0] = 'enabled';
241  } elseif ($showmenu) { // Not enabled but visible (so greyed)
242  $lastlevel[0] = 'greyed';
243  } else {
244  $lastlevel[0] = 'hidden';
245  }
246  }
247 
248  $lastlevel2 = array();
249  foreach ($submenu->liste as $key2 => $val2) { // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
250  $showmenu = true;
251  if (!empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED) && empty($val2['enabled'])) {
252  $showmenu = false;
253  }
254 
255  // If at least one parent is not enabled, we do not show any menu of all children
256  if ($val2['level'] > 0) {
257  $levelcursor = $val2['level'] - 1;
258  while ($levelcursor >= 0) {
259  if ($lastlevel2[$levelcursor] != 'enabled') {
260  $showmenu = false;
261  }
262  $levelcursor--;
263  }
264  }
265 
266  if ($showmenu) { // Visible (option to hide when not allowed is off or allowed)
267  $val2['url'] = make_substitutions($val2['url'], $substitarray);
268 
269  $relurl2 = dol_buildpath($val2['url'], 1);
270  $canonurl2 = preg_replace('/\?.*$/', '', $val2['url']);
271  //var_dump($val2['url'].' - '.$canonurl2.' - '.$val2['level']);
272  if (in_array($canonurl2, array('/admin/index.php', '/admin/tools/index.php', '/core/tools.php'))) {
273  $relurl2 = '';
274  }
275 
276  $disabled = '';
277  if (!$val2['enabled']) {
278  $disabled = " vsmenudisabled";
279  }
280 
281  print str_pad('', $val2['level'] + 1);
282  print '<li class="lilevel'.($val2['level'] + 1);
283  if ($val2['level'] == 0) {
284  print ' ui-btn-icon-right ui-btn'; // ui-btn to highlight on clic
285  }
286  print $disabled.'">'; // ui-btn to highlight on clic
287  if ($relurl2) {
288  if ($val2['enabled']) { // Allowed
289  print '<a href="'.$relurl2.'"';
290  //print ' data-ajax="false"';
291  print '>';
292  $lastlevel2[$val2['level']] = 'enabled';
293  } else // Not allowed but visible (greyed)
294  {
295  print '<a href="#" class="vsmenudisabled">';
296  $lastlevel2[$val2['level']] = 'greyed';
297  }
298  } else {
299  if ($val2['enabled']) { // Allowed
300  $lastlevel2[$val2['level']] = 'enabled';
301  } else {
302  $lastlevel2[$val2['level']] = 'greyed';
303  }
304  }
305  //var_dump($val2['level']);
306  //var_dump($lastlevel2);
307  print $val2['titre'];
308  if ($relurl2) {
309  if ($val2['enabled']) {
310  // Allowed
311  print '</a>';
312  } else {
313  print '</a>';
314  }
315  }
316  print '</li>'."\n";
317  }
318  }
319  //var_dump($submenu);
320  print '</ul>';
321  }
322  if ($val['enabled'] == 2) {
323  print '<font class="vsmenudisabled">'.$val['titre'].'</font>';
324  }
325  print '</li>';
326  print '</ul>'."\n";
327  }
328  }
329 
330  if ($mode == 'left') {
331  // Put here left menu entries
332  // ***** START *****
333 
334  $langs->load("admin"); // Load translation file admin.lang
335  $this->menu->add("/admin/index.php?leftmenu=setup", $langs->trans("Setup"), 0);
336  $this->menu->add("/admin/company.php", $langs->trans("MenuCompanySetup"), 1);
337  $this->menu->add("/admin/modules.php", $langs->trans("Modules"), 1);
338  $this->menu->add("/admin/menus.php", $langs->trans("Menus"), 1);
339  $this->menu->add("/admin/ihm.php", $langs->trans("GUISetup"), 1);
340  $this->menu->add("/admin/translation.php?mainmenu=home", $langs->trans("Translation"), 1);
341  $this->menu->add("/admin/defaultvalues.php?mainmenu=home", $langs->trans("DefaultValues"), 1);
342 
343  $this->menu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"), 1);
344  $this->menu->add("/admin/delais.php?mainmenu=home", $langs->trans("Alerts"), 1);
345  $this->menu->add("/admin/proxy.php?mainmenu=home", $langs->trans("Security"), 1);
346  $this->menu->add("/admin/limits.php?mainmenu=home", $langs->trans("MenuLimits"), 1);
347  $this->menu->add("/admin/pdf.php?mainmenu=home", $langs->trans("PDF"), 1);
348  $this->menu->add("/admin/mails.php?mainmenu=home", $langs->trans("Emails"), 1);
349  $this->menu->add("/admin/sms.php?mainmenu=home", $langs->trans("SMS"), 1);
350  $this->menu->add("/admin/dict.php?mainmenu=home", $langs->trans("DictionarySetup"), 1);
351  $this->menu->add("/admin/const.php?mainmenu=home", $langs->trans("OtherSetup"), 1);
352 
353  // ***** END *****
354 
355  $menu_array_before = array();
356  $menu_array_after = array();
357 
358  // do not change code after this
359 
360  $menu_array = $this->menu->liste;
361  if (is_array($menu_array_before)) {
362  $menu_array = array_merge($menu_array_before, $menu_array);
363  }
364  if (is_array($menu_array_after)) {
365  $menu_array = array_merge($menu_array, $menu_array_after);
366  }
367  //var_dump($menu_array);exit;
368  if (!is_array($menu_array)) {
369  return 0;
370  }
371 
372  if (empty($noout)) {
373  $alt = 0; $altok = 0; $blockvmenuopened = false;
374  $num = count($menu_array);
375  for ($i = 0; $i < $num; $i++) {
376  $alt++;
377  if (empty($menu_array[$i]['level'])) {
378  $altok++;
379  $blockvmenuopened = true;
380  $lastopened = true;
381  for ($j = ($i + 1); $j < $num; $j++) {
382  if (empty($menu_array[$j]['level'])) {
383  $lastopened = false;
384  }
385  }
386  $alt = 0; // For menu manager "empty", we force to not have blockvmenufirst defined
387  $lastopened = 1; // For menu manager "empty", we force to not have blockvmenulast defined
388  if (($alt % 2 == 0)) {
389  print '<div class="blockvmenub lockvmenuimpair blockvmenuunique'.($lastopened ? ' blockvmenulast' : '').($alt == 1 ? ' blockvmenufirst' : '').'">'."\n";
390  } else {
391  print '<div class="blockvmenu blockvmenupair blockvmenuunique'.($lastopened ? ' blockvmenulast' : '').($alt == 1 ? ' blockvmenufirst' : '').'">'."\n";
392  }
393  }
394 
395  // Add tabulation
396  $tabstring = '';
397  $tabul = ($menu_array[$i]['level'] - 1);
398  if ($tabul > 0) {
399  for ($j = 0; $j < $tabul; $j++) {
400  $tabstring .= '&nbsp; &nbsp;';
401  }
402  }
403 
404  if ($menu_array[$i]['level'] == 0) {
405  if ($menu_array[$i]['enabled']) {
406  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";
407  } else {
408  print '<div class="menu_titre">'.$tabstring.'<font class="vmenudisabled">'.$menu_array[$i]['titre'].'</font></div>'."\n";
409  }
410  print '<div class="menu_top"></div>'."\n";
411  }
412 
413  if ($menu_array[$i]['level'] > 0) {
414  $cssmenu = '';
415  if ($menu_array[$i]['url']) {
416  $cssmenu = ' menu_contenu'.dol_string_nospecial(preg_replace('/\.php.*$/', '', $menu_array[$i]['url']));
417  }
418 
419  print '<div class="menu_contenu'.$cssmenu.'">';
420 
421  if ($menu_array[$i]['enabled']) {
422  print $tabstring;
423  if ($menu_array[$i]['url']) {
424  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'].'"' : '').'>';
425  } else {
426  print '<span class="vsmenu" title="'.dol_escape_htmltag($menu_array[$i]['titre']).'">';
427  }
428  if ($menu_array[$i]['url']) {
429  print $menu_array[$i]['titre'].'</a>';
430  } else {
431  print '</span>';
432  }
433  } else {
434  print $tabstring.'<font class="vsmenudisabled vsmenudisabledmargin">'.$menu_array[$i]['titre'].'</font>';
435  }
436 
437  // If title is not pure text and contains a table, no carriage return added
438  if (!strstr($menu_array[$i]['titre'], '<table')) {
439  print '<br>';
440  }
441  print '</div>'."\n";
442  }
443 
444  // If next is a new block or end
445  if (empty($menu_array[$i + 1]['level'])) {
446  print '<div class="menu_end"></div>'."\n";
447  print "</div>\n";
448  }
449  }
450 
451  if ($altok) {
452  print '<div class="blockvmenuend"></div>';
453  }
454  }
455 
456  if ($mode == 'jmobile') {
457  $this->leftmenu = clone $this->menu;
458  unset($menu_array);
459  }
460  }
461  unset($this->menu);
462 
463  return $res;
464  }
465 }
466 
467 
474 {
475  global $conf;
476 
477  print '<div class="tmenudiv">';
478  print '<ul role="navigation" class="tmenu"'.(empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '' : ' title="Top menu"').'>';
479 }
480 
489 function print_start_menu_entry_empty($idsel, $classname, $showmode)
490 {
491  if ($showmode) {
492  print '<li '.$classname.' id="mainmenutd_'.$idsel.'">';
493  //print '<div class="tmenuleft tmenusep"></div>';
494  print '<div class="tmenucenter">';
495  }
496 }
497 
510 function print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $classname, $atarget)
511 {
512  global $conf, $langs;
513 
514  if ($showmode == 1) {
515  print '<a class="tmenuimage" tabindex="-1" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').'>';
516  print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
517  print '</a>';
518  print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').'>';
519  print '<span class="mainmenuaspan">';
520  print $text;
521  print '</span>';
522  print '</a>';
523  }
524  if ($showmode == 2) {
525  print '<div class="'.$id.' '.$idsel.' tmenudisabled"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
526  print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
527  }
528 }
529 
536 function print_end_menu_entry_empty($showmode)
537 {
538  if ($showmode) {
539  print '</div></li>';
540  print "\n";
541  }
542 }
543 
550 {
551  print '</ul>';
552  print '</div>';
553  print "\n";
554 }
print_end_menu_entry_empty($showmode)
Output end menu entry.
Definition: empty.php:536
Class to manage left menus.
Definition: menu.class.php:29
Class to manage menu Auguria.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
$conf db
API class for accounts.
Definition: inc.php:54
print_end_menu_array_empty()
Output menu array.
Definition: empty.php:549
print_start_menu_entry_empty($idsel, $classname, $showmode)
Output start menu entry.
Definition: empty.php:489
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null)
Return array of possible common substitutions.
print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $classname, $atarget)
Output menu entry.
Definition: empty.php:510
print_start_menu_array_empty()
Output menu entry.
Definition: empty.php:473
loadMenu($forcemainmenu= '', $forceleftmenu= '')
Load this-&gt;tabMenu.
Definition: empty.php:63
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...
__construct($db, $type_user)
Constructor.
Definition: empty.php:49
print
Draft customers invoices.
Definition: index.php:89
showmenu($mode, $moredata=null)
Show menu.
Definition: empty.php:77
make_substitutions($text, $substitutionarray, $outputlangs=null)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=&gt;newva...
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...