diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index 346d316b5d37fd3c7f64554fc40e047e4963fbea..fff20023c05e8e6af1e3a4cf24c0403fad10fec1 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -1,6 +1,6 @@ <?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>'; diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php index 124fee94f97308e83c3f800407c59189bafb10c4..fe210eae8c532ae1490a135eaf3b85424aaaa297 100644 --- a/htdocs/admin/menus/index.php +++ b/htdocs/admin/menus/index.php @@ -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>'; diff --git a/htdocs/core/lib/treeview.lib.php b/htdocs/core/lib/treeview.lib.php index 06eda753b3d9f08bc00ef83d4c20c6ba3357f357..d76db9f837a03e503594daa453000095fd418f8b 100644 --- a/htdocs/core/lib/treeview.lib.php +++ b/htdocs/core/lib/treeview.lib.php @@ -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> <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> <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 diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7204d730bc924b0aad39a684da800b72eb717ed2..3e3de47279307994ac2e177cff2357dd773f528a 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -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 diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 358fa5fe168abb9908ab9466b91a95fa14ffe09d..b17cee9cfe1eb55bbc4a578ba12eb15bfee4a37d 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -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