Skip to content
Snippets Groups Projects
Commit 051b93c7 authored by Laurent Destailleur's avatar Laurent Destailleur
Browse files

Qual: Code cleaner using field name instead of index number.

New: Can use new syntax to define parent of a menu
(fk_mainmenu=&fk_leftmenu=)
parent 2d87b0c0
No related branches found
No related tags found
No related merge requests found
<?php
/* Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
* Copyright (C) 2007-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2009-2011 Regis Houssin <regis@dolibarr.fr>
*
* This program is free software; you can redistribute it and/or modify
......@@ -113,6 +113,23 @@ if ($action == 'add')
exit;
}
$leftmenu=''; $mainmenu='';
if (! empty($_POST['menuId']) && ! is_numeric($_POST['menuId']))
{
$tmp=explode('&',$_POST['menuId']);
foreach($tmp as $s)
{
if (preg_match('/fk_mainmenu=/',$s))
{
$mainmenu=preg_replace('/fk_mainmenu=/','',$s);
}
if (preg_match('/fk_leftmenu=/',$s))
{
$leftmenu=preg_replace('/fk_leftmenu=/','',$s);
}
}
}
$langs->load("errors");
$error=0;
......@@ -146,7 +163,7 @@ if ($action == 'add')
$action = 'create';
$error++;
}
if (! $error && ! $_POST['menuId'] && $_POST['type'] == 'left')
if (! $error && empty($_POST['menuId']) && $_POST['type'] == 'left')
{
$mesg='<div class="error">'.$langs->trans("ErrorLeftMenuMustHaveAParentId").'</div>';
$action = 'create';
......@@ -156,11 +173,9 @@ if ($action == 'add')
if (! $error)
{
$menu = new Menubase($db);
$menu->fk_menu=$_POST['menuId'];
$menu->menu_handler=$_POST['menu_handler'];
$menu->type=$_POST['type'];
$menu->titre=$_POST['titre'];
$menu->leftmenu=$_POST['leftmenu'];
$menu->url=$_POST['url'];
$menu->langs=$_POST['langs'];
$menu->position=$_POST['position'];
......@@ -168,6 +183,18 @@ if ($action == 'add')
$menu->perms=$_POST['perms'];
$menu->target=$_POST['target'];
$menu->user=$_POST['user'];
if (is_numeric($_POST['menuId']))
{
$menu->fk_menu=$_POST['menuId'];
}
else
{
if ($_POST['type'] == 'top') $menu->fk_menu=0;
else $menu->fk_menu=-1;
$menu->fk_mainmenu=$mainmenu;
$menu->fk_leftmenu=$leftmenu;
}
$result=$menu->create($user);
if ($result > 0)
{
......@@ -311,22 +338,22 @@ if ($action == 'create')
}
else
{
print '<td><input type="text" size="8" id="menuId" name="menuId" value="'.($parent_rowid?$parent_rowid:'').'"></td>';
print '<td><input type="text" size="20" id="menuId" name="menuId" value="'.($_POST["menuId"]?$_POST["menuId"]:'').'"></td>';
}
print '<td>'.$langs->trans('DetailMenuIdParent').'</td></tr>';
// Title
print '<tr><td class="fieldrequired">'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.$_POST["titre"].'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
// URL
print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.$_POST["url"].'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
// Langs
print '<tr><td>'.$langs->trans('LangFile').'</td><td><input type="text" size="30" name="langs" value="'.$parent_langs.'"></td><td>'.$langs->trans('DetailLangs').'</td></tr>';
// Position
print '<tr><td>'.$langs->trans('Position').'</td><td><input type="text" size="5" name="position" value="'.(isset($_POST["position"])?$_POST["position"]:100).'"></td><td>'.$langs->trans('DetailPosition').'</td></tr>';
// URL
print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.$_POST["url"].'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
// Target
print '<tr><td>'.$langs->trans('Target').'</td><td><select class="flat" name="target">';
print '<option value=""'.($menu->target==""?' selected="true"':'').'>'.$langs->trans('').'</option>';
......@@ -397,18 +424,18 @@ elseif ($action == 'edit')
// Niveau
//print '<tr><td>'.$langs->trans('Level').'</td><td>'.$menu->level.'</td><td>'.$langs->trans('DetailLevel').'</td></tr>';
// Titre
// Title
print '<tr><td class="fieldrequired">'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.$menu->titre.'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
// Url
print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.$menu->url.'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
// Langs
print '<tr><td>'.$langs->trans('LangFile').'</td><td><input type="text" size="30" name="langs" value="'.$menu->langs.'"></td><td>'.$langs->trans('DetailLangs').'</td></tr>';
// Position
print '<tr><td>'.$langs->trans('Position').'</td><td><input type="text" size="5" name="position" value="'.$menu->position.'"></td><td>'.$langs->trans('DetailPosition').'</td></tr>';
// Url
print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.$menu->url.'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
// Target
print '<tr><td>'.$langs->trans('Target').'</td><td><select class="flat" name="target">';
print '<option value=""'.($menu->target==""?' selected="true"':'').'>'.$langs->trans('').'</option>';
......
......@@ -288,11 +288,11 @@ if ($conf->use_javascript_ajax)
*/
//il faut d'abord declarer un element racine de l'arbre
$data[] = array(0,-1,"racine");
$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
//puis tous les elements enfants
$sql = "SELECT m.rowid, m.fk_menu, m.titre, m.langs";
$sql = "SELECT m.rowid, m.titre, m.langs, m.mainmenu, m.leftmenu, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu";
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql.= " WHERE menu_handler = '".$menu_handler."'";
$sql.= " AND entity = ".$conf->entity;
......@@ -310,15 +310,15 @@ if ($conf->use_javascript_ajax)
{
if (! empty($menu['langs'])) $langs->load($menu['langs']);
$titre = $langs->trans($menu['titre']);
$data[] = array($menu['rowid'],$menu['fk_menu'],$titre);
$data[] = array('rowid'=>$menu['rowid'],'fk_menu'=>$menu['fk_menu'],'title'=>$titre,'mainmenu'=>$menu['mainmenu'],'leftmenu'=>$menu['leftmenu'],'fk_mainmenu'=>$menu['fk_mainmenu'],'fk_leftmenu'=>$menu['fk_leftmenu']);
$i++;
}
}
// Appelle de la fonction recursive (ammorce)
// avec recherche depuis la racine.
// array($menu['rowid'],$menu['fk_menu'],$titre);
tree_recur($data,0,0);
//var_dump($data);
tree_recur($data,$data[0],0);
print '</td>';
......
......@@ -198,20 +198,20 @@ function tree_showline($tab,$rang)
}
}
print '<li id=li'.$tab[0].'>';
print '<li id=li'.$tab['rowid'].'>';
// Content of line
print '<strong> &nbsp;<a href="edit.php?menu_handler='.$menu_handler.'&action=edit&menuId='.$tab[0].'">'.$tab[2].'</a></strong>';
print '<div class="menuEdit"><a href="edit.php?menu_handler='.$menu_handler.'&action=edit&menuId='.$tab[0].'">'.img_edit('default',0,'class="menuEdit" id="edit'.$tab[0].'"').'</a></div>';
print '<div class="menuNew"><a href="edit.php?menu_handler='.$menu_handler.'&action=create&menuId='.$tab[0].'">'.img_edit_add('default',0,'class="menuNew" id="new'.$tab[0].'"').'</a></div>';
print '<div class="menuDel"><a href="index.php?menu_handler='.$menu_handler.'&action=delete&menuId='.$tab[0].'">'.img_delete('default',0,'class="menuDel" id="del'.$tab[0].'"').'</a></div>';
print '<div class="menuFleche"><a href="index.php?menu_handler='.$menu_handler.'&action=up&menuId='.$tab[0].'">'.img_picto("Monter","1uparrow").'</a><a href="index.php?menu_handler='.$menu_handler.'&action=down&menuId='.$tab[0].'">'.img_picto("Descendre","1downarrow").'</a></div>';
print '<strong> &nbsp;<a href="edit.php?menu_handler='.$menu_handler.'&action=edit&menuId='.$tab['rowid'].'">'.$tab['title'].'</a></strong>';
print '<div class="menuEdit"><a href="edit.php?menu_handler='.$menu_handler.'&action=edit&menuId='.$tab['rowid'].'">'.img_edit('default',0,'class="menuEdit" id="edit'.$tab['rowid'].'"').'</a></div>';
print '<div class="menuNew"><a href="edit.php?menu_handler='.$menu_handler.'&action=create&menuId='.$tab['rowid'].'">'.img_edit_add('default',0,'class="menuNew" id="new'.$tab['rowid'].'"').'</a></div>';
print '<div class="menuDel"><a href="index.php?menu_handler='.$menu_handler.'&action=delete&menuId='.$tab['rowid'].'">'.img_delete('default',0,'class="menuDel" id="del'.$tab['rowid'].'"').'</a></div>';
print '<div class="menuFleche"><a href="index.php?menu_handler='.$menu_handler.'&action=up&menuId='.$tab['rowid'].'">'.img_picto("Monter","1uparrow").'</a><a href="index.php?menu_handler='.$menu_handler.'&action=down&menuId='.$tab['rowid'].'">'.img_picto("Descendre","1downarrow").'</a></div>';
print '</li>';
echo "\n";
$rangLast = $rang;
$idLast = $tab[0];
$idLast = $tab['rowid'];
}
......@@ -219,13 +219,13 @@ function tree_showline($tab,$rang)
* Recursive function to output menu tree
*
* @param array $tab Array of elements
* @param int $pere Id of parent
* @param int $pere Array with parent ids ('rowid'=>,'mainmenu'=>,'leftmenu'=>,'fk_mainmenu=>,'fk_leftmenu=>)
* @param int $rang Level of element
* @return void
*/
function tree_recur($tab,$pere,$rang)
{
if ($pere == 0) print '<ul class="arbre">';
if (empty($pere['rowid'])) print '<ul class="arbre">';
if ($rang > 10) return; // Protection contre boucle infinie
......@@ -233,18 +233,27 @@ function tree_recur($tab,$pere,$rang)
$sizeoftab=count($tab);
for ($x=0; $x < $sizeoftab; $x++)
{
//var_dump($tab[$x]);exit;
// If an element has $pere for parent
if ($tab[$x][1]==$pere)
if ($tab[$x]['fk_menu'] != -1 && $tab[$x]['fk_menu'] == $pere['rowid'])
{
// We shot it with an offset
tree_showline($tab[$x],$rang);
// And now we search all its sons of lower level
tree_recur($tab,$tab[$x][0],$rang+1);
tree_recur($tab,$tab[$x],$rang+1);
}
elseif (! empty($tab[$x]['rowid']) && $tab[$x]['fk_menu'] == -1 && $tab[$x]['fk_mainmenu'] == $pere['mainmenu'] && $tab[$x]['fk_leftmenu'] == $pere['leftmenu'])
{
// We shot it with an offset
tree_showline($tab[$x],$rang);
// And now we search all its sons of lower level
tree_recur($tab,$tab[$x],$rang+1);
}
}
if ($pere == 0) print '</ul>';
if (empty($pere['rowid'])) print '</ul>';
}
?>
\ No newline at end of file
......@@ -80,7 +80,7 @@ UserSetup=User management setup
MenuSetup=Menu management setup
MenuLimits=Limits and accuracy
MenuIdParent=Parent menu ID
DetailMenuIdParent=ID of parent menu (0 for a top menu)
DetailMenuIdParent=ID of parent menu (empty for a top menu)
DetailPosition=Sort number to define menu position
PersonalizedMenusNotSupported=Personalized menus not supported
AllMenus=All
......
......@@ -80,7 +80,7 @@ UserSetup= Configuration gestion des utilisateurs
MenuSetup= Administration des menus par base de données
MenuLimits= Limites et précision
MenuIdParent= Id du menu parent
DetailMenuIdParent= Id du menu parent (0 pour un menu du haut)
DetailMenuIdParent= Id du menu parent (vide pour un menu du haut)
DetailPosition= Numéro d'ordre déterminant la position du menu
PersonalizedMenusNotSupported= Menus personnalisés non gérés
AllMenus= Tous
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment