dolibarr 20.0.0
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
32require '../main.inc.php';
33require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
35require_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');
42if (!$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
61if ($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
82if ($catorigin && $type == Categorie::TYPE_PRODUCT) {
83 $idCatOrigin = $catorigin;
84}
85if (!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 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
104$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);
105// Note that $action and $object may be modified by some hooks
106$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action);
107if ($reshook < 0) {
108 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
109}
110
111if (empty($reshook)) {
112 // Add action
113 if ($action == 'add' && $user->hasRight('categorie', 'creer')) {
114 // Action add a category
115 if ($cancel) {
116 if ($urlfrom) {
117 header("Location: ".$urlfrom);
118 exit;
119 } elseif ($backtopage) {
120 header("Location: ".$backtopage);
121 exit;
122 } elseif ($idProdOrigin) {
123 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProdOrigin.'&type='.$type);
124 exit;
125 } elseif ($idCompanyOrigin) {
126 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idCompanyOrigin.'&type='.$type);
127 exit;
128 } elseif ($idSupplierOrigin) {
129 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idSupplierOrigin.'&type='.$type);
130 exit;
131 } elseif ($idMemberOrigin) {
132 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idMemberOrigin.'&type='.$type);
133 exit;
134 } elseif ($idContactOrigin) {
135 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idContactOrigin.'&type='.$type);
136 exit;
137 } elseif ($idProjectOrigin) {
138 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProjectOrigin.'&type='.$type);
139 exit;
140 } else {
141 header("Location: ".DOL_URL_ROOT.'/categories/index.php?leftmenu=cat&type='.$type);
142 exit;
143 }
144 }
145 $object->label = $label;
146 $object->color = $color;
147 $object->position = $position;
148 $object->description = dol_htmlcleanlastbr($description);
149 $object->socid = ($socid > 0 ? $socid : 0);
150 $object->visible = $visible;
151 $object->type = $type;
152
153 if ($parent != "-1") {
154 $object->fk_parent = $parent;
155 }
156
157 $ret = $extrafields->setOptionalsFromPost(null, $object);
158 if ($ret < 0) {
159 $error++;
160 }
161
162 if (!$object->label) {
163 $error++;
164 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors');
165 $action = 'create';
166 }
167
168 // Create category in database
169 if (!$error) {
170 $result = $object->create($user);
171 if ($result > 0) {
172 $action = 'confirmed';
173 } else {
174 setEventMessages($object->error, $object->errors, 'errors');
175 }
176 }
177 }
178 // Action confirmation of creation category
179 if ($action == 'confirmed' && $user->hasRight('categorie', 'creer')) {
180 if ($urlfrom) {
181 header("Location: ".$urlfrom);
182 exit;
183 } elseif ($backtopage) {
184 header("Location: ".$backtopage);
185 exit;
186 } elseif ($idProdOrigin) {
187 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProdOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
188 exit;
189 } elseif ($idCompanyOrigin) {
190 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idCompanyOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
191 exit;
192 } elseif ($idSupplierOrigin) {
193 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idSupplierOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
194 exit;
195 } elseif ($idMemberOrigin) {
196 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idMemberOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
197 exit;
198 } elseif ($idContactOrigin) {
199 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idContactOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
200 exit;
201 } elseif ($idProjectOrigin) {
202 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProjectOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
203 exit;
204 }
205
206 header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$result.'&type='.$type);
207 exit;
208 }
209}
210
211
212/*
213 * View
214 */
215
216$form = new Form($db);
217$formother = new FormOther($db);
218
219$help_url = 'EN:Module_Categories|FR:Module_Catégories|DE:Modul_Kategorien';
220
221llxHeader("", $langs->trans("Categories"), $help_url);
222
223if ($user->hasRight('categorie', 'creer')) {
224 // Create or add
225 if ($action == 'create' || $action == 'add') {
226 dol_set_focus('#label');
227
228 print '<form action="'.$_SERVER['PHP_SELF'].'?type='.$type.'" method="POST">';
229 print '<input type="hidden" name="token" value="'.newToken().'">';
230 print '<input type="hidden" name="urlfrom" value="'.$urlfrom.'">';
231 print '<input type="hidden" name="action" value="add">';
232 print '<input type="hidden" name="id" value="'.GETPOST('origin', 'alpha').'">';
233 print '<input type="hidden" name="type" value="'.$type.'">';
234 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
235 if ($origin) {
236 print '<input type="hidden" name="origin" value="'.$origin.'">';
237 }
238 if ($catorigin) {
239 print '<input type="hidden" name="catorigin" value="'.$catorigin.'">';
240 }
241
242 print load_fiche_titre($langs->trans("CreateCat"));
243
244 print dol_get_fiche_head();
245
246 print '<table class="border centpercent">';
247
248 // Ref
249 print '<tr>';
250 print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input id="label" class="minwidth100" name="label" value="'.dol_escape_htmltag($label).'">';
251 print'</td></tr>';
252
253 // Description
254 print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
255 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
256 $doleditor = new DolEditor('description', $description, '', 160, 'dolibarr_notes', '', false, true, isModEnabled('fckeditor') && getDolGlobalInt('FCKEDITOR_ENABLE_SOCIETE'), ROWS_5, '90%');
257 $doleditor->Create();
258 print '</td></tr>';
259
260 // Color
261 print '<tr><td>'.$langs->trans("Color").'</td><td>';
262 print $formother->selectColor($color, 'color');
263 print '</td></tr>';
264
265 // Position
266 print '<tr>';
267 print '<td class="titlefieldcreate">'.$langs->trans("Position").'</td><td><input id="position" type="number" class="minwidth50 maxwidth50" name="position" value="'.$position.'">';
268 print'</td></tr>';
269
270 // Parent category
271 print '<tr><td>'.$langs->trans("AddIn").'</td><td>';
272 print img_picto($langs->trans("ParentCategory"), 'category', 'class="pictofixedwidth"');
273 print $form->select_all_categories($type, $parent, 'parent');
274 print ajax_combobox('parent');
275 print '</td></tr>';
276
277 $parameters = array();
278 $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
279 print $hookmanager->resPrint;
280 if (empty($reshook)) {
281 print $object->showOptionals($extrafields, 'create', $parameters);
282 }
283
284 print '</table>';
285
286 print dol_get_fiche_end();
287
288 print '<div class="center">';
289 print '<input type="submit" class="button b" value="'.$langs->trans("CreateThisCat").'" name="creation" />';
290 print '&nbsp; &nbsp; &nbsp;';
291 print '<input type="submit" class="button button-cancel" value="'.$langs->trans("Cancel").'" name="cancel" />';
292 print '</div>';
293
294 print '</form>';
295 }
296}
297
298// End of page
299llxFooter();
300$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.
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.
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.