189 if (!isset($this->enabled)) {
190 $this->enabled =
'1';
192 $this->entity = (isset($this->entity) && (int) $this->entity >= 0 ? (
int) $this->entity :
$conf->entity);
193 $this->menu_handler = trim((
string) $this->menu_handler);
194 $this->module = trim((
string) $this->module);
195 $this->
type = trim((
string) $this->
type);
196 $this->mainmenu = trim((
string) $this->mainmenu);
197 $this->leftmenu = trim((
string) $this->leftmenu);
198 $this->fk_menu = (int) $this->fk_menu;
199 $this->fk_mainmenu = trim((
string) $this->fk_mainmenu);
200 $this->fk_leftmenu = trim((
string) $this->fk_leftmenu);
202 $this->url = trim((
string) $this->url);
203 $this->target = trim((
string) $this->target);
204 $this->title = trim((
string) $this->title);
205 $this->langs = trim((
string) $this->langs);
206 $this->perms = trim((
string) $this->perms);
207 $this->enabled = trim((
string) $this->enabled);
214 if (empty($this->menu_handler)) {
221 if (in_array($this->db->type, array(
'pgsql'))) {
222 $sql =
"SELECT MAX(rowid) as maxrowid FROM ".$this->db->prefix().
"menu";
223 $resqlrowid = $this->db->query($sql);
225 $obj = $this->db->fetch_object($resqlrowid);
226 $maxrowid = $obj->maxrowid;
229 if (empty($maxrowid)) {
233 $sql =
"SELECT setval('".$this->db->prefix().
"menu_rowid_seq', ".($maxrowid).
")";
235 $resqlrowidset = $this->db->query($sql);
236 if (!$resqlrowidset) {
245 $sql =
"SELECT count(*)";
246 $sql .=
" FROM ".$this->db->prefix().
"menu";
247 $sql .=
" WHERE menu_handler = '".$this->db->escape($this->menu_handler).
"'";
248 $sql .=
" AND fk_menu = ".((int) $this->fk_menu);
249 $sql .=
" AND position = ".((int) $this->
position);
250 $sql .=
" AND url = '".$this->db->escape($this->url).
"'";
251 $sql .=
" AND entity IN (0, ".$conf->entity.
")";
253 $result = $this->db->query($sql);
255 $row = $this->db->fetch_row($result);
259 $sql =
"INSERT INTO ".$this->db->prefix().
"menu(";
260 $sql .=
"menu_handler,";
267 $sql .=
"fk_mainmenu,";
268 $sql .=
"fk_leftmenu,";
278 $sql .=
"showtopmenuinframe";
279 $sql .=
") VALUES (";
280 $sql .=
" '".$this->db->escape($this->menu_handler).
"',";
281 $sql .=
" '".$this->db->escape((
string) $this->entity).
"',";
282 $sql .=
" '".$this->db->escape($this->module).
"',";
283 $sql .=
" '".$this->db->escape($this->type).
"',";
284 $sql .=
" ".($this->mainmenu ?
"'".$this->db->escape($this->mainmenu).
"'" :
"''").
",";
285 $sql .=
" ".($this->leftmenu ?
"'".$this->db->escape($this->leftmenu).
"'" :
"null").
",";
286 $sql .=
" ".((int) $this->fk_menu).
",";
287 $sql .=
" ".($this->fk_mainmenu ?
"'".$this->db->escape($this->fk_mainmenu).
"'" :
"null").
",";
288 $sql .=
" ".($this->fk_leftmenu ?
"'".$this->db->escape($this->fk_leftmenu).
"'" :
"null").
",";
289 $sql .=
" ".((int) $this->
position).
",";
290 $sql .=
" '".$this->db->escape($this->url).
"',";
291 $sql .=
" '".$this->db->escape($this->target).
"',";
292 $sql .=
" '".$this->db->escape($this->title).
"',";
293 $sql .=
" '".$this->db->escape($this->prefix).
"',";
294 $sql .=
" '".$this->db->escape($this->langs).
"',";
295 $sql .=
" '".$this->db->escape($this->perms).
"',";
296 $sql .=
" '".$this->db->escape($this->enabled).
"',";
297 $sql .=
" '".$this->db->escape((
string) $this->
user).
"',";
298 $sql .=
" ".((int) $this->showtopmenuinframe);
301 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
302 $resql = $this->db->query($sql);
304 $this->
id = $this->db->last_insert_id($this->db->prefix().
"menu");
305 dol_syslog(get_class($this).
"::create record added has rowid=".((
int) $this->
id), LOG_DEBUG);
309 $this->error =
"Error ".$this->db->lasterror();
313 dol_syslog(get_class($this).
"::create menu entry already exists", LOG_WARNING);
314 $this->error =
'Error Menu entry ('.$this->menu_handler.
','.$this->
position.
','.$this->url.
') already exists';
329 public function update($user =
null, $notrigger = 0)
334 $this->menu_handler = trim($this->menu_handler);
335 $this->module = trim($this->module);
337 $this->mainmenu = trim($this->mainmenu);
338 $this->leftmenu = trim($this->leftmenu);
339 $this->fk_menu = (int) $this->fk_menu;
340 $this->fk_mainmenu = trim($this->fk_mainmenu);
341 $this->fk_leftmenu = trim($this->fk_leftmenu);
343 $this->url = trim($this->url);
344 $this->target = trim($this->target);
345 $this->title = trim($this->title);
346 $this->prefix = trim($this->prefix);
347 $this->langs = trim($this->langs);
348 $this->perms = trim($this->perms);
349 $this->enabled = trim($this->enabled);
356 $sql =
"UPDATE ".$this->db->prefix().
"menu SET";
357 $sql .=
" menu_handler = '".$this->db->escape($this->menu_handler).
"',";
358 $sql .=
" module = '".$this->db->escape($this->module).
"',";
359 $sql .=
" type = '".$this->db->escape($this->
type).
"',";
360 $sql .=
" mainmenu = '".$this->db->escape($this->mainmenu).
"',";
361 $sql .=
" leftmenu = '".$this->db->escape($this->leftmenu).
"',";
362 $sql .=
" fk_menu = ".((int) $this->fk_menu).
",";
363 $sql .=
" fk_mainmenu = ".($this->fk_mainmenu ?
"'".$this->db->escape($this->fk_mainmenu).
"'" :
"null").
",";
364 $sql .=
" fk_leftmenu = ".($this->fk_leftmenu ?
"'".$this->db->escape($this->fk_leftmenu).
"'" :
"null").
",";
365 $sql .=
" position = ".($this->position > 0 ? ((int) $this->
position) : 0).
",";
366 $sql .=
" url = '".$this->db->escape($this->url).
"',";
367 $sql .=
" target = '".$this->db->escape($this->target).
"',";
368 $sql .=
" titre = '".$this->db->escape($this->title).
"',";
369 $sql .=
" prefix = '".$this->db->escape($this->prefix).
"',";
370 $sql .=
" langs = '".$this->db->escape($this->langs).
"',";
371 $sql .=
" perms = '".$this->db->escape($this->perms).
"',";
372 $sql .=
" enabled = '".$this->db->escape($this->enabled).
"',";
373 $sql .=
" usertype = '".$this->db->escape((
string) $this->
user).
"',";
374 $sql .=
" showtopmenuinframe = ".((int) $this->showtopmenuinframe);
375 $sql .=
" WHERE rowid = ".((int) $this->
id);
377 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
378 $resql = $this->db->query($sql);
380 $this->error =
"Error ".$this->db->lasterror();
395 public function fetch($id, $user =
null)
401 $sql .=
" t.menu_handler,";
402 $sql .=
" t.entity,";
403 $sql .=
" t.module,";
405 $sql .=
" t.mainmenu,";
406 $sql .=
" t.leftmenu,";
407 $sql .=
" t.fk_menu,";
408 $sql .=
" t.fk_mainmenu,";
409 $sql .=
" t.fk_leftmenu,";
410 $sql .=
" t.position,";
412 $sql .=
" t.target,";
413 $sql .=
" t.titre as title,";
414 $sql .=
" t.prefix,";
417 $sql .=
" t.enabled,";
418 $sql .=
" t.usertype as user,";
420 $sql .=
" t.showtopmenuinframe";
421 $sql .=
" FROM ".$this->db->prefix().
"menu as t";
422 $sql .=
" WHERE t.rowid = ".((int) $id);
424 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
425 $resql = $this->db->query($sql);
427 if ($this->db->num_rows($resql)) {
428 $obj = $this->db->fetch_object($resql);
430 $this->
id = $obj->rowid;
432 $this->menu_handler = $obj->menu_handler;
433 $this->entity = $obj->entity;
434 $this->module = $obj->module;
435 $this->
type = $obj->type;
436 $this->mainmenu = $obj->mainmenu;
437 $this->leftmenu = $obj->leftmenu;
438 $this->fk_menu = $obj->fk_menu;
439 $this->fk_mainmenu = $obj->fk_mainmenu;
440 $this->fk_leftmenu = $obj->fk_leftmenu;
442 $this->url = $obj->url;
443 $this->target = $obj->target;
444 $this->title = $obj->title;
445 $this->prefix = $obj->prefix;
446 $this->langs = $obj->langs;
447 $this->perms = (
string) str_replace(
"\"",
"'", $obj->perms);
448 $this->enabled = (
string) str_replace(
"\"",
"'", $obj->enabled);
449 $this->
user = $obj->user;
450 $this->tms = $this->db->jdate($obj->tms);
451 $this->showtopmenuinframe = $obj->showtopmenuinframe;
453 $this->db->free($resql);
457 $this->error =
"Error ".$this->db->lasterror();
559 public function menuLeftCharger($newmenu, $mymainmenu, $myleftmenu, $type_user, $menu_handler, &$tabMenu)
561 global $langs, $user,
$conf;
562 global $mainmenu, $leftmenu;
564 $mainmenu = $mymainmenu;
565 $leftmenu = $myleftmenu;
569 foreach ($tabMenu as $key => $val) {
571 if (empty($menutopid) && $val[
'type'] ==
'top' && $val[
'mainmenu'] == $mainmenu) {
572 $menutopid = (int) $val[
'rowid'];
578 $this->newmenu = $newmenu;
581 $this->
recur($tabMenu, $menutopid, 1);
584 foreach ($tabMenu as $key => $val) {
585 if ($val[
'fk_menu'] == -1 && $val[
'fk_mainmenu'] == $mainmenu) {
588 if (empty($val[
'fk_leftmenu'])) {
589 $this->newmenu->add($val[
'url'], $val[
'titre'], 0, (
int) $val[
'perms'], $val[
'target'], $val[
'mainmenu'], $val[
'leftmenu'], $val[
'position'],
'',
'',
'', $val[
'prefix']);
597 foreach ($this->newmenu->liste as $keyparent => $valparent) {
599 if ($searchlastsub) {
600 if ($valparent[
'level'] >= $searchlastsub) {
601 $lastid = $keyparent;
603 if ($valparent[
'level'] < $searchlastsub) {
604 $nextid = $keyparent;
608 if ($valparent[
'mainmenu'] == $val[
'fk_mainmenu'] && $valparent[
'leftmenu'] == $val[
'fk_leftmenu']) {
611 $searchlastsub = ($valparent[
'level'] + 1);
612 $lastid = $keyparent;
618 $this->newmenu->insert($lastid, $val[
'url'], $val[
'titre'], $searchlastsub, (
int) $val[
'perms'], $val[
'target'], $val[
'mainmenu'], $val[
'leftmenu'], $val[
'position'],
'',
'',
'', $val[
'prefix']);
620 dol_syslog(
"Error. Modules ".$val[
'module'].
" has defined a menu entry with a parent='fk_mainmenu=".$val[
'fk_leftmenu'].
",fk_leftmenu=".$val[
'fk_leftmenu'].
"' and position=".$val[
'position'].
'. The parent was not found. May be you forget it into your definition of menu, or may be the parent has a "position" that is after the child (fix field "position" of parent or child in this case).', LOG_WARNING);
627 return $this->newmenu;
641 public function menuLoad($mymainmenu, $myleftmenu, $type_user, $menu_handler, &$tabMenu)
643 global $langs, $user,
$conf;
644 global $mainmenu, $leftmenu;
646 $mainmenu = $mymainmenu;
647 $leftmenu = $myleftmenu;
649 $sql =
"SELECT m.rowid, m.type, m.module, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.url, m.titre,";
650 $sql .=
" m.prefix, m.langs, m.perms, m.enabled, m.target, m.mainmenu, m.leftmenu, m.position, m.showtopmenuinframe";
651 $sql .=
" FROM ".$this->db->prefix().
"menu as m";
652 $sql .=
" WHERE m.entity IN (0,".$conf->entity.
")";
653 $sql .=
" AND m.menu_handler IN ('".$this->db->escape($menu_handler).
"','all')";
654 if ($type_user == 0) {
655 $sql .=
" AND m.usertype IN (0,2)";
657 if ($type_user == 1) {
658 $sql .=
" AND m.usertype IN (1,2)";
660 $sql .=
" ORDER BY m.type DESC, m.position, m.rowid";
664 $resql = $this->db->query($sql);
666 $numa = $this->db->num_rows($resql);
672 $menu = $this->db->fetch_array($resql);
676 if (isset($menu[
'perms'])) {
677 $tmpcond = $menu[
'perms'];
678 if ($leftmenu ==
'all') {
679 $tmpcond = preg_replace(
'/\$leftmenu\s*==\s*["\'a-zA-Z_]+/',
'1==1', $tmpcond);
687 if (isset($menu[
'enabled'])) {
688 $tmpcond = $menu[
'enabled'];
689 if ($leftmenu ==
'all') {
690 $tmpcond = preg_replace(
'/\$leftmenu\s*==\s*["\'a-zA-Z_]+/',
'1==1', $tmpcond);
697 if ($enabled && isset($menu)) {
698 $title = $langs->trans($menu[
'titre']);
700 if ($title == $menu[
'titre']) {
701 if (!empty($menu[
'langs'])) {
703 $langs->load($menu[
'langs']);
706 $substitarray = array(
'__LOGIN__' => $user->login,
'__USER_ID__' => $user->id,
'__USER_SUPERVISOR_ID__' => $user->fk_user);
709 if (preg_match(
"/\//", $menu[
'titre'])) {
710 $tab_titre = explode(
"/", $menu[
'titre']);
711 $title = $langs->trans($tab_titre[0]).
"/".$langs->trans($tab_titre[1]);
712 } elseif (preg_match(
'/\|\|/', $menu[
'titre'])) {
714 $tab_title = explode(
"||", $menu[
'titre']);
715 $alt_title = explode(
"@", $tab_title[1]);
716 $title_enabled =
verifCond($alt_title[1]);
717 $title = ($title_enabled ? $langs->trans($alt_title[0]) : $langs->trans($tab_title[0]));
719 $title = $langs->trans($menu[
'titre']);
724 $tabMenu[$b][
'rowid'] = $menu[
'rowid'];
725 $tabMenu[$b][
'module'] = $menu[
'module'];
726 $tabMenu[$b][
'fk_menu'] = $menu[
'fk_menu'];
727 $tabMenu[$b][
'url'] = $menu[
'url'];
728 if (!preg_match(
"/^(http:\/\/|https:\/\/)/i", $tabMenu[$b][
'url'])) {
729 if (preg_match(
'/\?/', $tabMenu[$b][
'url'])) {
730 $tabMenu[$b][
'url'] .=
'&idmenu='.$menu[
'rowid'];
732 $tabMenu[$b][
'url'] .=
'?idmenu='.$menu[
'rowid'];
735 $tabMenu[$b][
'titre'] = $title;
736 $tabMenu[$b][
'prefix'] = $menu[
'prefix'];
737 $tabMenu[$b][
'target'] = $menu[
'target'];
738 $tabMenu[$b][
'mainmenu'] = $menu[
'mainmenu'];
739 $tabMenu[$b][
'leftmenu'] = $menu[
'leftmenu'];
740 $tabMenu[$b][
'perms'] = $perms;
741 $tabMenu[$b][
'langs'] = $menu[
'langs'];
742 $tabMenu[$b][
'enabled'] = $enabled;
743 $tabMenu[$b][
'type'] = $menu[
'type'];
744 $tabMenu[$b][
'fk_mainmenu'] = $menu[
'fk_mainmenu'];
745 $tabMenu[$b][
'fk_leftmenu'] = $menu[
'fk_leftmenu'];
746 $tabMenu[$b][
'position'] = (int) $menu[
'position'];
747 $tabMenu[$b][
'showtopmenuinframe'] = (int) $menu[
'showtopmenuinframe'];
754 $this->db->free($resql);