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
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 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);
106if ($reshook < 0) {
107 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
108}
109
110if (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
222llxHeader("", $langs->trans("Categories"), $help_url);
223
224if ($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
300llxFooter();
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($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
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.
llxFooter()
Footer empty.
Definition document.php:107
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.