dolibarr  7.0.0-beta
edit.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
3  * Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2009-2011 Regis Houssin <regis.houssin@capnetworks.com>
5  * Copyright (C) 2016 Meziane Sof <virtualsof@yahoo.fr>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
27 require '../../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
30 
31 
32 $langs->load("admin");
33 $langs->load('other');
34 
35 if (! $user->admin) accessforbidden();
36 
37 $dirstandard = array();
38 $dirsmartphone = array();
39 $dirmenus=array_merge(array("/core/menus/"),(array) $conf->modules_parts['menus']);
40 foreach($dirmenus as $dirmenu)
41 {
42  $dirstandard[]=$dirmenu.'standard';
43  $dirsmartphone[]=$dirmenu.'smartphone';
44 }
45 
46 $action=GETPOST('action','aZ09');
47 
48 $menu_handler_top=$conf->global->MAIN_MENU_STANDARD;
49 $menu_handler_smartphone=$conf->global->MAIN_MENU_SMARTPHONE;
50 $menu_handler_top=preg_replace('/_backoffice.php/i','',$menu_handler_top);
51 $menu_handler_top=preg_replace('/_frontoffice.php/i','',$menu_handler_top);
52 $menu_handler_smartphone=preg_replace('/_backoffice.php/i','',$menu_handler_smartphone);
53 $menu_handler_smartphone=preg_replace('/_frontoffice.php/i','',$menu_handler_smartphone);
54 
55 $menu_handler=$menu_handler_top;
56 
57 if (GETPOST("handler_origine")) $menu_handler=GETPOST("handler_origine");
58 if (GETPOST("menu_handler")) $menu_handler=GETPOST("menu_handler");
59 
60 
61 
62 /*
63  * Actions
64  */
65 
66 if ($action == 'update')
67 {
68  if (! $_POST['cancel'])
69  {
70  $leftmenu=''; $mainmenu='';
71  if (! empty($_POST['menuIdParent']) && ! is_numeric($_POST['menuIdParent']))
72  {
73  $tmp=explode('&',$_POST['menuIdParent']);
74  foreach($tmp as $s)
75  {
76  if (preg_match('/fk_mainmenu=/',$s))
77  {
78  $mainmenu=preg_replace('/fk_mainmenu=/','',$s);
79  }
80  if (preg_match('/fk_leftmenu=/',$s))
81  {
82  $leftmenu=preg_replace('/fk_leftmenu=/','',$s);
83  }
84  }
85  }
86 
87  $menu = new Menubase($db);
88  $result=$menu->fetch(GETPOST('menuId', 'int'));
89  if ($result > 0)
90  {
91  $menu->titre=GETPOST('titre', 'alpha');
92  $menu->leftmenu=GETPOST('leftmenu', 'alpha');
93  $menu->url=GETPOST('url','alpha');
94  $menu->langs=GETPOST('langs','alpha');
95  $menu->position=GETPOST('position','int');
96  $menu->enabled=GETPOST('enabled','alpha');
97  $menu->perms=GETPOST('perms','alpha');
98  $menu->target=GETPOST('target','alpha');
99  $menu->user=GETPOST('user','alpha');
100  if (is_numeric(GETPOST('menuIdParent','alpha')))
101  {
102  $menu->fk_menu=GETPOST('menuIdParent','alpha');
103  }
104  else
105  {
106  if (GETPOST('type','alpha') == 'top') $menu->fk_menu=0;
107  else $menu->fk_menu=-1;
108  $menu->fk_mainmenu=$mainmenu;
109  $menu->fk_leftmenu=$leftmenu;
110  }
111 
112  $result=$menu->update($user);
113  if ($result > 0)
114  {
115  setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs');
116  }
117  else
118  {
119  setEventMessages($menu->error, $menu->errors, 'errors');
120  }
121  }
122  else
123  {
124  setEventMessages($menu->error, $menu->errors, 'errors');
125  }
126  $action = "edit";
127  }
128  else
129  {
130  header("Location: ".DOL_URL_ROOT."/admin/menus/index.php?menu_handler=".$menu_handler);
131  exit;
132  }
133 
134  if ($_GET['return'])
135  {
136  header("Location: ".DOL_URL_ROOT."/admin/menus/index.php?menu_handler=".$menu_handler);
137  exit;
138  }
139 }
140 
141 if ($action == 'add')
142 {
143  if ($_POST['cancel'])
144  {
145  header("Location: ".DOL_URL_ROOT."/admin/menus/index.php?menu_handler=".$menu_handler);
146  exit;
147  }
148 
149  $leftmenu=''; $mainmenu='';
150  if (GETPOST('menuId','int') && ! is_numeric(GETPOST('menuId','int')))
151  {
152  $tmp=explode('&',GETPOST('menuId','int'));
153  foreach($tmp as $s)
154  {
155  if (preg_match('/fk_mainmenu=/',$s))
156  {
157  $mainmenu=preg_replace('/fk_mainmenu=/','',$s);
158  }
159  if (preg_match('/fk_leftmenu=/',$s))
160  {
161  $leftmenu=preg_replace('/fk_leftmenu=/','',$s);
162  }
163  }
164  }
165 
166  $langs->load("errors");
167 
168  $error=0;
169  if (! $error && ! $_POST['menu_handler'])
170  {
171  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("MenuHandler")), null, 'errors');
172  $action = 'create';
173  $error++;
174  }
175  if (! $error && ! $_POST['type'])
176  {
177  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Type")), null, 'errors');
178  $action = 'create';
179  $error++;
180  }
181  if (! $error && ! $_POST['url'])
182  {
183  setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("URL")), null, 'errors');
184  $action = 'create';
185  $error++;
186  }
187  if (! $error && ! $_POST['titre'])
188  {
189  setEventMessages($langs->trans("ErrorFieldRequired", $langs->trans("Title")), null, 'errors');
190  $action = 'create';
191  $error++;
192  }
193  if (! $error && $_POST['menuId'] && $_POST['type'] == 'top')
194  {
195  setEventMessages($langs->trans("ErrorTopMenuMustHaveAParentWithId0"), null, 'errors');
196  $action = 'create';
197  $error++;
198  }
199  if (! $error && ! $_POST['menuId'] && $_POST['type'] == 'left')
200  {
201  setEventMessages($langs->trans("ErrorLeftMenuMustHaveAParentId"), null, 'errors');
202  $action = 'create';
203  $error++;
204  }
205 
206  if (! $error)
207  {
208  $menu = new Menubase($db);
209  $menu->menu_handler=preg_replace('/_menu$/','',GETPOST('menu_handler','aZ09'));
210  $menu->type=GETPOST('type','alpha');
211  $menu->titre=GETPOST('titre','alpha');
212  $menu->url=GETPOST('url','alpha');
213  $menu->langs=GETPOST('langs','alpha');
214  $menu->position=GETPOST('position','int');
215  $menu->enabled=GETPOST('enabled','alpha');
216  $menu->perms=GETPOST('perms','alpha');
217  $menu->target=GETPOST('target','alpha');
218  $menu->user=GETPOST('user','alpha');
219  if (is_numeric(GETPOST('menuId','int')))
220  {
221  $menu->fk_menu=GETPOST('menuId','int');
222  }
223  else
224  {
225  if (GETPOST('type','alpha') == 'top') $menu->fk_menu=0;
226  else $menu->fk_menu=-1;
227  $menu->fk_mainmenu=$mainmenu;
228  $menu->fk_leftmenu=$leftmenu;
229  }
230 
231  $result=$menu->create($user);
232  if ($result > 0)
233  {
234  header("Location: ".DOL_URL_ROOT."/admin/menus/index.php?menu_handler=".GETPOST('menu_handler','aZ09'));
235  exit;
236  }
237  else
238  {
239  $action = 'create';
240  setEventMessages($menu->error, $menu->errors, 'errors');
241  }
242  }
243 }
244 
245 // delete
246 if ($action == 'confirm_delete' && $_POST["confirm"] == 'yes')
247 {
248  $this->db->begin();
249 
250  $sql = "DELETE FROM ".MAIN_DB_PREFIX."menu WHERE rowid = ".GETPOST('menuId', 'int');
251  $result=$db->query($sql);
252 
253  if ($result == 0)
254  {
255  $this->db->commit();
256 
257  llxHeader();
258  setEventMessages($langs->trans("MenuDeleted"), null, 'mesgs');
259  llxFooter();
260  exit ;
261  }
262  else
263  {
264  $this->db->rollback();
265 
266  $reload = 0;
267  $_GET["action"]='';
268  }
269 }
270 
271 
272 
273 /*
274  * View
275  */
276 
277 $form=new Form($db);
278 $formadmin=new FormAdmin($db);
279 
280 llxHeader('',$langs->trans("Menu"));
281 
282 
283 if ($action == 'create')
284 {
285  print '<script type="text/javascript" language="javascript">
286  jQuery(document).ready(function() {
287  function init_topleft()
288  {
289  if (jQuery("#topleft").val() == \'top\')
290  {
291  jQuery("#menuId").prop("disabled", true);
292  jQuery("#menuId").val(\'\');
293  }
294  else
295  {
296  jQuery("#menuId").removeAttr("disabled");
297  }
298  }
299  init_topleft();
300  jQuery("#topleft").click(function() {
301  init_topleft();
302  });
303  });
304  </script>';
305 
306  print load_fiche_titre($langs->trans("NewMenu"),'','title_setup');
307 
308  print '<form action="./edit.php?action=add&menuId='.GETPOST('menuId', 'int').'" method="post" name="formmenucreate">';
309  print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
310 
311  dol_fiche_head();
312 
313  print '<table class="border" width="100%">';
314 
315  // Id
316  $parent_rowid = GETPOST('menuId', 'int');
317  if (GETPOST('menuId', 'int'))
318  {
319  $sql = "SELECT m.rowid, m.mainmenu, m.leftmenu, m.level, m.langs FROM ".MAIN_DB_PREFIX."menu as m WHERE m.rowid = ".GETPOST('menuId', 'int');
320  $res = $db->query($sql);
321  if ($res)
322  {
323 
324  while ($menu = $db->fetch_array($res))
325  {
326  $parent_rowid = $menu['rowid'];
327  $parent_mainmenu = $menu['mainmenu'];
328  $parent_leftmenu = $menu['leftmenu'];
329  $parent_langs = $menu['langs'];
330  $parent_level = $menu['level'];
331  }
332  }
333  }
334 
335  // Handler
336  print '<tr><td class="fieldrequired">'.$langs->trans('MenuHandler').'</td>';
337  print '<td>';
338  $formadmin->select_menu_families($menu_handler.(preg_match('/_menu/',$menu_handler)?'':'_menu'),'menu_handler',array_merge($dirstandard,$dirsmartphone));
339  print '</td>';
340  print '<td>'.$langs->trans('DetailMenuHandler').'</td></tr>';
341 
342  //User
343  print '<tr><td class="nowrap fieldrequired">'.$langs->trans('MenuForUsers').'</td>';
344  print '<td><select class="flat" name="user">';
345  print '<option value="2" selected>'.$langs->trans("AllMenus").'</option>';
346  print '<option value="0">'.$langs->trans('Internal').'</option>';
347  print '<option value="1">'.$langs->trans('External').'</option>';
348  print '</select></td>';
349  print '<td>'.$langs->trans('DetailUser').'</td></tr>';
350 
351  // Type
352  print '<tr><td class="fieldrequired">'.$langs->trans('Type').'</td><td>';
353  if ($parent_rowid)
354  {
355  print $langs->trans('Left');
356  print '<input type="hidden" name="type" value="left">';
357  }
358  else
359  {
360  print '<select name="type" class="flat" id="topleft">';
361  print '<option value="">&nbsp;</option>';
362  print '<option value="top"'.($_POST["type"] && $_POST["type"]=='top'?' selected':'').'>'.$langs->trans('Top').'</option>';
363  print '<option value="left"'.($_POST["type"] && $_POST["type"]=='left'?' selected':'').'>'.$langs->trans('Left').'</option>';
364  print '</select>';
365  }
366  // print '<input type="text" size="50" name="type" value="'.$type.'">';
367  print '</td><td>'.$langs->trans('DetailType').'</td></tr>';
368 
369  // MenuId Parent
370  print '<tr><td class="fieldrequired">'.$langs->trans('MenuIdParent').'</td>';
371  if ($parent_rowid)
372  {
373  print '<td>'.$parent_rowid.'<input type="hidden" name="menuId" value="'.$parent_rowid.'"></td>';
374  }
375  else
376  {
377  print '<td><input type="text" size="48" id="menuId" name="menuId" value="'.(GETPOST("menuId", 'int')?GETPOST("menuId", 'int'):'').'"></td>';
378  }
379  print '<td>'.$langs->trans('DetailMenuIdParent');
380  print ', '.$langs->trans("Example").': fk_mainmenu=abc&fk_leftmenu=def';
381  print '</td></tr>';
382 
383  // Title
384  print '<tr><td class="fieldrequired">'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.dol_escape_htmltag(GETPOST("titre",'alpha')).'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
385 
386  // URL
387  print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.GETPOST("url",'alpha').'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
388 
389  // Langs
390  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>';
391 
392  // Position
393  print '<tr><td>'.$langs->trans('Position').'</td><td><input type="text" size="5" name="position" value="'.dol_escape_htmltag(isset($_POST["position"])?$_POST["position"]:100).'"></td><td>'.$langs->trans('DetailPosition').'</td></tr>';
394 
395  // Target
396  print '<tr><td>'.$langs->trans('Target').'</td><td><select class="flat" name="target">';
397  print '<option value=""'.($menu->target==""?' selected':'').'>&nbsp;</option>';
398  print '<option value="_blank"'.($menu->target=="_blank"?' selected':'').'>'.$langs->trans('_blank').'</option>';
399  print '</select></td></td><td>'.$langs->trans('DetailTarget').'</td></tr>';
400 
401  // Enabled
402  print '<tr><td>'.$langs->trans('Enabled').'</td><td><input type="text" size="60" name="enabled" value="'.GETPOST("enabled",'alpha').'"></td><td>'.$langs->trans('DetailEnabled').'</td></tr>';
403 
404  // Perms
405  print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="perms" value="'.GETPOST('perms','alpha').'"></td><td>'.$langs->trans('DetailRight').'</td></tr>';
406 
407  print '</table>';
408 
409  dol_fiche_end();
410 
411  // Boutons
412  print '<div class="center">';
413  print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
414  print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
415  print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
416  print '</div>';
417 
418  print '</form>';
419 }
420 elseif ($action == 'edit')
421 {
422  print load_fiche_titre($langs->trans("ModifMenu"),'','title_setup');
423  print '<br>';
424 
425  print '<form action="./edit.php?action=update" method="POST" name="formmenuedit">';
426  print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
427  print '<input type="hidden" name="handler_origine" value="'.$menu_handler.'">';
428  print '<input type="hidden" name="menuId" value="'.GETPOST('menuId', 'int').'">';
429 
430  dol_fiche_head();
431 
432  print '<table class="border" width="100%">';
433 
434  $menu = new Menubase($db);
435  $result=$menu->fetch(GETPOST('menuId', 'int'));
436  //var_dump($menu);
437 
438  // Id
439  print '<tr><td>'.$langs->trans('Id').'</td><td>'.$menu->id.'</td><td>'.$langs->trans('DetailId').'</td></tr>';
440 
441  // Module
442  print '<tr><td>'.$langs->trans('MenuModule').'</td><td>'.$menu->module.'</td><td>'.$langs->trans('DetailMenuModule').'</td></tr>';
443 
444  // Handler
445  if ($menu->menu_handler == 'all') $handler = $langs->trans('AllMenus');
446  else $handler = $menu->menu_handler;
447  print '<tr><td class="fieldrequired">'.$langs->trans('MenuHandler').'</td><td>'.$handler.'</td><td>'.$langs->trans('DetailMenuHandler').'</td></tr>';
448 
449  // User
450  print '<tr><td class="nowrap fieldrequired">'.$langs->trans('MenuForUsers').'</td><td><select class="flat" name="user">';
451  print '<option value="2"'.($menu->user==2?' selected':'').'>'.$langs->trans("AllMenus").'</option>';
452  print '<option value="0"'.($menu->user==0?' selected':'').'>'.$langs->trans('Internal').'</option>';
453  print '<option value="1"'.($menu->user==1?' selected':'').'>'.$langs->trans('External').'</option>';
454  print '</select></td><td>'.$langs->trans('DetailUser').'</td></tr>';
455 
456  // Type
457  print '<tr><td class="fieldrequired">'.$langs->trans('Type').'</td><td>'.$langs->trans(ucfirst($menu->type)).'</td><td>'.$langs->trans('DetailType').'</td></tr>';
458 
459  // MenuId Parent
460  print '<tr><td class="fieldrequired">'.$langs->trans('MenuIdParent');
461  print '</td>';
462  $valtouse=$menu->fk_menu;
463  if ($menu->fk_mainmenu) $valtouse='fk_mainmenu='.$menu->fk_mainmenu;
464  if ($menu->fk_leftmenu) $valtouse.='&fk_leftmenu='.$menu->fk_leftmenu;
465  print '<td><input type="text" name="menuIdParent" value="'.$valtouse.'" size="48"></td>';
466  print '<td>'.$langs->trans('DetailMenuIdParent');
467  print ', '.$langs->trans("Example").': fk_mainmenu=abc&fk_leftmenu=def';
468  print '</td></tr>';
469 
470  // Niveau
471  //print '<tr><td>'.$langs->trans('Level').'</td><td>'.$menu->level.'</td><td>'.$langs->trans('DetailLevel').'</td></tr>';
472 
473  // Title
474  print '<tr><td class="fieldrequired">'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.dol_escape_htmltag($menu->titre).'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
475 
476  // Url
477  print '<tr><td class="fieldrequired">'.$langs->trans('URL').'</td><td><input type="text" class="quatrevingtpercent" name="url" value="'.$menu->url.'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
478 
479  // Langs
480  print '<tr><td>'.$langs->trans('LangFile').'</td><td><input type="text" size="30" name="langs" value="'.dol_escape_htmltag($menu->langs).'"></td><td>'.$langs->trans('DetailLangs').'</td></tr>';
481 
482  // Position
483  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>';
484 
485  // Target
486  print '<tr><td>'.$langs->trans('Target').'</td><td><select class="flat" name="target">';
487  print '<option value=""'.($menu->target==""?' selected':'').'>&nbsp;</option>';
488  print '<option value="_blank"'.($menu->target=="_blank"?' selected':'').'>'.$langs->trans('_blank').'</option>';
489  print '</select></td><td>'.$langs->trans('DetailTarget').'</td></tr>';
490 
491  // Enabled
492  print '<tr><td>'.$langs->trans('Enabled').'</td><td><input type="text" size="60" name="enabled" value="'.dol_escape_htmltag($menu->enabled).'"></td><td>'.$langs->trans('DetailEnabled');
493  if (! empty($menu->enabled)) print ' ('.$langs->trans("ConditionIsCurrently").': '.yn(dol_eval($menu->enabled,1)).')';
494  print '</td></tr>';
495 
496  // Perms
497  print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="perms" value="'.dol_escape_htmltag($menu->perms).'"></td><td>'.$langs->trans('DetailRight');
498  if (! empty($menu->perms)) print ' ('.$langs->trans("ConditionIsCurrently").': '.yn(dol_eval($menu->perms,1)).')';
499  print '</td></tr>';
500 
501  print '</table>';
502 
503  dol_fiche_end();
504 
505  // Bouton
506  print '<div class="center">';
507  print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
508  print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
509  print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
510  print '</div>';
511 
512  print '</form>';
513 
514  print '<br>';
515 }
516 
517 llxFooter();
518 $db->close();
llxFooter()
Empty footer.
Definition: wrapper.php:58
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_eval($s, $returnvalue=0, $hideerrors=1)
Replace eval function to add more security.
setEventMessages($mesg, $mesgs, $style='mesgs')
Set event messages in dol_events session object.
dol_fiche_head($links=array(), $active='0', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='')
Show tab header of a card.
Class to manage menu entries.
if(empty($reshook)) $form
View.
Definition: perms.php:103
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...
GETPOST($paramname, $check='none', $method=0, $filter=NULL, $options=NULL, $noreplace=0)
Return value of a param into GET or POST supervariable.
Class to generate html code for admin pages.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
Class to manage generation of HTML components Only common components must be here.
dol_fiche_end($notab=0)
Show tab footer of a card.
load_fiche_titre($titre, $morehtmlright='', $picto='title_generic.png', $pictoisfullpath=0, $id=0, $morecssontable='', $morehtmlcenter='')
Load a title with picto.
llxHeader()
Empty header.
Definition: wrapper.php:46
print
Draft customers invoices.
Definition: index.php:91