dolibarr  21.0.0-alpha
card.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2005 Matthieu Valleton <mv@seeschloss.org>
3  * Copyright (C) 2006-2021 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2014 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
6  * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
7  * Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
8  * Copyright (C) 2020 Frédéric France <frederic.france@netlogic.fr>
9  * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see <https://www.gnu.org/licenses/>.
23  */
24 
31 // Load Dolibarr environment
32 require '../main.inc.php';
33 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
36 
37 // Load translation files required by the page
38 $langs->load("categories");
39 
40 // Security check
41 $socid = GETPOSTINT('socid');
42 if (!$user->hasRight('categorie', 'lire')) {
44 }
45 
46 $action = GETPOST('action', 'alpha');
47 $cancel = GETPOST('cancel', 'alpha');
48 $origin = GETPOST('origin', 'alpha');
49 $catorigin = GETPOSTINT('catorigin');
50 $type = GETPOST('type', 'aZ09');
51 $urlfrom = GETPOST('urlfrom', 'alpha');
52 $backtopage = GETPOST('backtopage', 'alpha');
53 
54 $label = (string) GETPOST('label', 'alphanohtml');
55 $description = (string) GETPOST('description', 'restricthtml');
56 $color = preg_replace('/[^0-9a-f#]/i', '', (string) GETPOST('color', 'alphanohtml'));
57 $position = GETPOSTINT('position');
58 $visible = GETPOSTINT('visible');
59 $parent = GETPOSTINT('parent');
60 
61 if ($origin) {
62  if ($type == Categorie::TYPE_PRODUCT) {
63  $idProdOrigin = $origin;
64  }
65  if ($type == Categorie::TYPE_SUPPLIER) {
66  $idSupplierOrigin = $origin;
67  }
68  if ($type == Categorie::TYPE_CUSTOMER) {
69  $idCompanyOrigin = $origin;
70  }
71  if ($type == Categorie::TYPE_MEMBER) {
72  $idMemberOrigin = $origin;
73  }
74  if ($type == Categorie::TYPE_CONTACT) {
75  $idContactOrigin = $origin;
76  }
77  if ($type == Categorie::TYPE_PROJECT) {
78  $idProjectOrigin = $origin;
79  }
80 }
81 
82 if ($catorigin && $type == Categorie::TYPE_PRODUCT) {
83  $idCatOrigin = $catorigin;
84 }
85 if (!GETPOSTISSET('parent') && $catorigin) {
86  $parent = $catorigin;
87 }
88 
89 $object = new Categorie($db);
90 
91 $extrafields = new ExtraFields($db);
92 $extrafields->fetch_name_optionals_label($object->table_element);
93 
94 // Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array array
95 $hookmanager->initHooks(array('categorycard'));
96 
97 $error = 0;
98 
99 
100 /*
101  * Actions
102  */
103 $parameters = array('socid' => $socid, 'origin' => $origin, 'catorigin' => $catorigin, 'type' => $type, 'urlfrom' => $urlfrom, 'backtopage' => $backtopage, 'label' => $label, 'description' => $description, 'color' => $color, 'position' => $position, 'visible' => $visible, 'parent' => $parent);
104 // Note that $action and $object may be modified by some hooks
105 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action);
106 if ($reshook < 0) {
107  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
108 }
109 
110 if (empty($reshook)) {
111  // Add action
112  if ($action == 'add' && $user->hasRight('categorie', 'creer')) {
113  // Action add a category
114  if ($cancel) {
115  if ($urlfrom) {
116  header("Location: ".$urlfrom);
117  exit;
118  } elseif ($backtopage) {
119  header("Location: ".$backtopage);
120  exit;
121  } elseif ($idProdOrigin) {
122  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProdOrigin.'&type='.$type);
123  exit;
124  } elseif ($idCompanyOrigin) {
125  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idCompanyOrigin.'&type='.$type);
126  exit;
127  } elseif ($idSupplierOrigin) {
128  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idSupplierOrigin.'&type='.$type);
129  exit;
130  } elseif ($idMemberOrigin) {
131  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idMemberOrigin.'&type='.$type);
132  exit;
133  } elseif ($idContactOrigin) {
134  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idContactOrigin.'&type='.$type);
135  exit;
136  } elseif ($idProjectOrigin) {
137  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProjectOrigin.'&type='.$type);
138  exit;
139  } else {
140  header("Location: ".DOL_URL_ROOT.'/categories/index.php?leftmenu=cat&type='.$type);
141  exit;
142  }
143  }
144  $object->label = $label;
145  $object->color = $color;
146  $object->position = $position;
147  $object->description = dol_htmlcleanlastbr($description);
148  $object->socid = ($socid > 0 ? $socid : 0);
149  $object->visible = $visible;
150  $object->type = $type;
151 
152  if ($parent != "-1") {
153  $object->fk_parent = $parent;
154  }
155 
156  $ret = $extrafields->setOptionalsFromPost(null, $object);
157  if ($ret < 0) {
158  $error++;
159  }
160 
161  if (!$object->label) {
162  $error++;
163  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors');
164  $action = 'create';
165  }
166 
167  // Create category in database
168  if (!$error) {
169  $result = $object->create($user);
170  if ($result > 0) {
171  $action = 'confirmed';
172  } else {
173  setEventMessages($object->error, $object->errors, 'errors');
174  }
175  }
176  }
177  // Confirm action
178  if (($action == 'add' || $action == 'confirmed') && $user->hasRight('categorie', 'creer')) {
179  // Action confirmation of creation category
180  if ($action == 'confirmed') {
181  if ($urlfrom) {
182  header("Location: ".$urlfrom);
183  exit;
184  } elseif ($backtopage) {
185  header("Location: ".$backtopage);
186  exit;
187  } elseif ($idProdOrigin) {
188  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProdOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
189  exit;
190  } elseif ($idCompanyOrigin) {
191  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idCompanyOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
192  exit;
193  } elseif ($idSupplierOrigin) {
194  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idSupplierOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
195  exit;
196  } elseif ($idMemberOrigin) {
197  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idMemberOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
198  exit;
199  } elseif ($idContactOrigin) {
200  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idContactOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
201  exit;
202  } elseif ($idProjectOrigin) {
203  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProjectOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
204  exit;
205  }
206 
207  header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$result.'&type='.$type);
208  exit;
209  }
210  }
211 }
212 
213 /*
214  * View
215  */
216 
217 $form = new Form($db);
218 $formother = new FormOther($db);
219 
220 $help_url = 'EN:Module_Categories|FR:Module_Catégories|DE:Modul_Kategorien';
221 
222 llxHeader("", $langs->trans("Categories"), $help_url);
223 
224 if ($user->hasRight('categorie', 'creer')) {
225  // Create or add
226  if ($action == 'create' || $action == 'add') {
227  dol_set_focus('#label');
228 
229  print '<form action="'.$_SERVER['PHP_SELF'].'?type='.$type.'" method="POST">';
230  print '<input type="hidden" name="token" value="'.newToken().'">';
231  print '<input type="hidden" name="urlfrom" value="'.$urlfrom.'">';
232  print '<input type="hidden" name="action" value="add">';
233  print '<input type="hidden" name="id" value="'.GETPOST('origin', 'alpha').'">';
234  print '<input type="hidden" name="type" value="'.$type.'">';
235  print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
236  if ($origin) {
237  print '<input type="hidden" name="origin" value="'.$origin.'">';
238  }
239  if ($catorigin) {
240  print '<input type="hidden" name="catorigin" value="'.$catorigin.'">';
241  }
242 
243  print load_fiche_titre($langs->trans("CreateCat"));
244 
245  print dol_get_fiche_head();
246 
247  print '<table class="border centpercent">';
248 
249  // Ref
250  print '<tr>';
251  print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input id="label" class="minwidth100" name="label" value="'.dol_escape_htmltag($label).'">';
252  print'</td></tr>';
253 
254  // Description
255  print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
256  require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
257  $doleditor = new DolEditor('description', $description, '', 160, 'dolibarr_notes', '', false, true, isModEnabled('fckeditor') && getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_5, '90%');
258  $doleditor->Create();
259  print '</td></tr>';
260 
261  // Color
262  print '<tr><td>'.$langs->trans("Color").'</td><td>';
263  print $formother->selectColor($color, 'color');
264  print '</td></tr>';
265 
266  // Position
267  print '<tr>';
268  print '<td class="titlefieldcreate">'.$langs->trans("Position").'</td><td><input id="position" type="number" class="minwidth50 maxwidth50" name="position" value="'.$position.'">';
269  print'</td></tr>';
270 
271  // Parent category
272  print '<tr><td>'.$langs->trans("AddIn").'</td><td>';
273  print img_picto($langs->trans("ParentCategory"), 'category', 'class="pictofixedwidth"');
274  print $form->select_all_categories($type, $parent, 'parent');
275  print ajax_combobox('parent');
276  print '</td></tr>';
277 
278  $parameters = array();
279  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
280  print $hookmanager->resPrint;
281  if (empty($reshook)) {
282  print $object->showOptionals($extrafields, 'create', $parameters);
283  }
284 
285  print '</table>';
286 
287  print dol_get_fiche_end();
288 
289  print '<div class="center">';
290  print '<input type="submit" class="button b" value="'.$langs->trans("CreateThisCat").'" name="creation" />';
291  print '&nbsp; &nbsp; &nbsp;';
292  print '<input type="submit" class="button button-cancel" value="'.$langs->trans("Cancel").'" name="cancel" />';
293  print '</div>';
294 
295  print '</form>';
296  }
297 }
298 
299 // End of page
300 llxFooter();
301 $db->close();
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition: card.php:58
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Definition: ajax.lib.php:456
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:55
llxFooter()
Empty footer.
Definition: wrapper.php:69
Class to manage categories.
Class to manage a WYSIWYG editor.
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
$parameters
Actions.
Definition: card.php:84
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.