dolibarr 20.0.0
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2013-2014 Jean-François Ferry <jfefe@aternatik.fr>
3 * Copyright (C) 2023-2024 William Mead <william.mead@manchenumerique.fr>
4 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
27// Load Dolibarr environment
28require '../main.inc.php';
29require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
30require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
31require_once DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php';
32require_once DOL_DOCUMENT_ROOT.'/core/lib/resource.lib.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
35
36// Load translation files required by the page
37$langs->loadLangs(array('resource', 'companies', 'other', 'main'));
38
39// Get parameters
40$id = GETPOSTINT('id');
41$action = GETPOST('action', 'aZ09');
42$cancel = GETPOST('cancel', 'alpha');
43$ref = GETPOST('ref', 'alpha');
44$address = GETPOST('address', 'alpha');
45$zip = GETPOST('zipcode', 'alpha');
46$town = GETPOST('town', 'alpha');
47$country_id = GETPOSTINT('country_id');
48$state_id = GETPOSTINT('state_id');
49$description = GETPOST('description', 'restricthtml');
50$phone = GETPOST('phone', 'alpha');
51$email = GETPOST('email', 'alpha');
52$max_users = GETPOSTINT('max_users');
53$url = GETPOST('url', 'alpha');
54$confirm = GETPOST('confirm', 'aZ09');
55$fk_code_type_resource = GETPOST('fk_code_type_resource', 'aZ09');
56
57// Protection if external user
58if ($user->socid > 0) {
60}
61
62$object = new Dolresource($db);
63$extrafields = new ExtraFields($db);
64
65// fetch optionals attributes and labels
66$extrafields->fetch_name_optionals_label($object->table_element);
67
68// Load object
69include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
70
71
72$result = restrictedArea($user, 'resource', $object->id, 'resource');
73
74$permissiontoadd = $user->hasRight('resource', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
75$permissiontodelete = $user->hasRight('resource', 'delete');
76
77
78/*
79 * Actions
80 */
81
82$hookmanager->initHooks(array('resource', 'resource_card', 'globalcard'));
83$parameters = array('resource_id' => $id);
84$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
85if ($reshook < 0) {
86 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
87}
88
89if (empty($reshook)) {
90 if ($cancel) {
91 if (!empty($backtopage)) {
92 header("Location: ".$backtopage);
93 exit;
94 }
95 if ($action == 'add') {
96 header("Location: ".DOL_URL_ROOT.'/resource/list.php');
97 exit;
98 }
99 $action = '';
100 }
101
102 if ($action == 'add' && $user->hasRight('resource', 'write')) {
103 if (!$cancel) {
104 $error = '';
105
106 if (empty($ref)) {
107 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors');
108 $action = 'create';
109 } else {
110 $object->ref = $ref;
111 $object->address = $address;
112 $object->zip = $zip;
113 $object->town = $town;
114 $object->country_id = $country_id;
115 $object->state_id = $state_id;
116 $object->description = $description;
117 $object->phone = $phone;
118 $object->email = $email;
119 $object->max_users = $max_users;
120 $object->url = $url;
121 $object->fk_code_type_resource = $fk_code_type_resource;
122
123 // Fill array 'array_options' with data from add form
124 $ret = $extrafields->setOptionalsFromPost(null, $object);
125 if ($ret < 0) {
126 $error++;
127 }
128
129 $result = $object->create($user);
130 if ($result > 0) {
131 // Creation OK
132 setEventMessages($langs->trans('ResourceCreatedWithSuccess'), null);
133 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
134 exit;
135 } else {
136 // Creation KO
137 setEventMessages($object->error, $object->errors, 'errors');
138 $action = 'create';
139 }
140 }
141 } else {
142 header("Location: list.php");
143 exit;
144 }
145 }
146
147 if ($action == 'update' && !$cancel && $user->hasRight('resource', 'write')) {
148 $error = 0;
149
150 if (empty($ref)) {
151 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors');
152 $error++;
153 }
154
155 if (!$error) {
156 $res = $object->fetch($id);
157 if ($res > 0) {
158 $object->ref = $ref;
159 $object->address = $address;
160 $object->zip = $zip;
161 $object->town = $town;
162 $object->country_id = $country_id;
163 $object->state_id = $state_id;
164 $object->description = $description;
165 $object->phone = $phone;
166 $object->email = $email;
167 $object->max_users = $max_users;
168 $object->url = $url;
169 $object->fk_code_type_resource = $fk_code_type_resource;
170
171 // Fill array 'array_options' with data from add form
172 $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
173 if ($ret < 0) {
174 $error++;
175 }
176
177 $result = $object->update($user);
178 if ($result > 0) {
179 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
180 exit;
181 } else {
182 setEventMessages($object->error, $object->errors, 'errors');
183 $error++;
184 }
185 } else {
186 setEventMessages($object->error, $object->errors, 'errors');
187 $error++;
188 }
189 }
190
191 if ($error) {
192 $action = 'edit';
193 }
194 }
195
196 if ($action == 'confirm_delete_resource' && $user->hasRight('resource', 'delete') && $confirm === 'yes') {
197 $res = $object->fetch($id);
198 if ($res > 0) {
199 $result = $object->delete($user);
200
201 if ($result >= 0) {
202 setEventMessages($langs->trans('RessourceSuccessfullyDeleted'), null);
203 header('Location: '.DOL_URL_ROOT.'/resource/list.php');
204 exit;
205 } else {
206 setEventMessages($object->error, $object->errors, 'errors');
207 }
208 } else {
209 setEventMessages($object->error, $object->errors, 'errors');
210 }
211 }
212}
213
214
215/*
216 * View
217 */
218
219$title = $langs->trans($action == 'create' ? 'AddResource' : 'ResourceSingular');
220$help_url = '';
221llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-resource page-card');
222
223$form = new Form($db);
224$formresource = new FormResource($db);
225
226if ($action == 'create' || $object->fetch($id, $ref) > 0) {
227 if ($action == 'create') {
228 print load_fiche_titre($title, '', 'object_resource');
229 print dol_get_fiche_head();
230 } else {
232 print dol_get_fiche_head($head, 'resource', $title, -1, 'resource');
233 }
234
235 if ($action == 'create' || $action == 'edit') {
236 if (!$user->hasRight('resource', 'write')) {
237 accessforbidden('', 0);
238 }
239
240 if (!empty($conf->use_javascript_ajax)) {
241 print '<script type="text/javascript">';
242 print '$(document).ready(function () {
243 $("#selectcountry_id").change(function() {
244 console.log("selectcountry_id change");
245 document.formresource.action.value="create";
246 document.formresource.submit();
247 });
248 });';
249 print '</script>'."\n";
250 }
251
252
253 // Create/Edit object
254
255 print '<form enctype="multipart/form-data" action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="POST" name="formresource">';
256 print '<input type="hidden" name="token" value="'.newToken().'">';
257 print '<input type="hidden" name="action" value="'.($action == "create" ? "add" : "update").'">';
258
259 print '<table class="border centpercent">';
260
261 // Ref
262 print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("ResourceFormLabel_ref").'</td>';
263 print '<td><input class="minwidth200" name="ref" value="'.($ref ?: $object->ref).'" autofocus="autofocus"></td></tr>';
264
265 // Type
266 print '<tr><td>'.$langs->trans("ResourceType").'</td>';
267 print '<td>';
268 $formresource->select_types_resource($object->fk_code_type_resource, 'fk_code_type_resource', '', 2, 0, 0, 0, 1, 'minwidth200');
269 print '</td></tr>';
270
271 // Description
272 print '<tr><td class="tdtop">'.$langs->trans("Description").'</td>';
273 print '<td>';
274 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
275 $doleditor = new DolEditor('description', ($description ?: $object->description), '', '200', 'dolibarr_notes', false);
276 $doleditor->Create();
277 print '</td></tr>';
278
279 // Address
280 print '<tr><td class="tdtop">'.$form->editfieldkey('Address', 'address', '', $object, 0).'</td>';
281 print '<td><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
282 print dol_escape_htmltag(GETPOSTISSET('address') ? GETPOST('address') : $object->address, 0, 1);
283 print '</textarea>';
284 print $form->widgetForTranslation("address", $object, $permissiontoadd, 'textarea', 'alphanohtml', 'quatrevingtpercent');
285 print '</td></tr>';
286
287 // Zip
288 print '<tr><td>'.$form->editfieldkey('Zip', 'zipcode', '', $object, 0).'</td><td>';
289 print $formresource->select_ziptown(GETPOSTISSET('zipcode') ? GETPOST('zipcode') : $object->zip, 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth100');
290 print '</td>';
291 print '</tr>';
292
293 // Town
294 print '<tr>';
295 print '<td>'.$form->editfieldkey('Town', 'town', '', $object, 0).'</td><td>';
296 print $formresource->select_ziptown(GETPOSTISSET('town') ? GETPOST('town') : $object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id'));
297 print $form->widgetForTranslation("town", $object, $permissiontoadd, 'string', 'alphanohtml', 'maxwidth100 quatrevingtpercent');
298 print '</td></tr>';
299
300 // Origin country
301 print '<tr><td>'.$langs->trans("CountryOrigin").'</td><td>';
302 print $form->select_country(GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : $object->country_id, 'country_id');
303 if ($user->admin) {
304 print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
305 }
306 print '</td></tr>';
307
308 // State
309 $countryid = GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : $object->country_id;
310 if (!getDolGlobalString('SOCIETE_DISABLE_STATE') && $countryid > 0) {
311 if ((getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 1 || getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 2)) {
312 print '<tr><td>'.$form->editfieldkey('Region-State', 'state_id', '', $object, 0).'</td><td class="maxwidthonsmartphone">';
313 } else {
314 print '<tr><td>'.$form->editfieldkey('State', 'state_id', '', $object, 0).'</td><td class="maxwidthonsmartphone">';
315 }
316
317 if ($country_id > 0) {
318 print img_picto('', 'state', 'class="pictofixedwidth"');
319 print $formresource->select_state($countryid, $country_id);
320 } else {
321 print '<span class="opacitymedium">'.$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')</span>';
322 }
323 print '</td></tr>';
324 }
325
326 // Phone
327 print '<td>'.$form->editfieldkey('Phone', 'phone', '', $object, 0).'</td>';
328 print '<td>';
329 print img_picto('', 'object_phoning', 'class="pictofixedwidth"');
330 print '<input type="tel" name="phone" id="phone" value="'.(GETPOSTISSET('phone') ? GETPOST('phone', 'alpha') : $object->phone).'"></td>';
331 print '</tr>';
332
333 // Email
334 print '<tr><td>'.$form->editfieldkey('EMail', 'email', '', $object, 0).'</td>';
335 print '<td>';
336 print img_picto('', 'object_email', 'class="pictofixedwidth"');
337 print '<input type="email" name="email" id="email" value="'.(GETPOSTISSET('email') ? GETPOST('email', 'alpha') : $object->email).'"></td>';
338 print '</tr>';
339
340 // Max users
341 print '<tr><td>'.$form->editfieldkey('MaxUsers', 'max_users', '', $object, 0).'</td>';
342 print '<td>';
343 print img_picto('', 'object_user', 'class="pictofixedwidth"');
344 print '<input type="text" class="width75 right" name="max_users" id="max_users" value="'.(GETPOSTISSET('max_users') ? GETPOST('max_users', 'int') : $object->max_users).'"></td>';
345 print '</tr>';
346
347 // URL
348 print '<tr><td>'.$form->editfieldkey('URL', 'url', '', $object, 0).'</td>';
349 print '<td>';
350 print img_picto('', 'object_url', 'class="pictofixedwidth"');
351 print '<input type="url" name="url" id="url" value="'.(GETPOSTISSET('url') ? GETPOST('url', 'alpha') : $object->url).'"></td>';
352 print '</tr>';
353
354 // Other attributes
355 $parameters = array();
356 $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
357 print $hookmanager->resPrint;
358 if (empty($reshook)) {
359 print $object->showOptionals($extrafields, 'edit');
360 }
361
362 print '</table>';
363
364 print dol_get_fiche_end();
365
366 $button_label = ($action == "create" ? "Create" : "Modify");
367 print $form->buttonsSaveCancel($button_label);
368
369 print '</div>';
370
371 print '</form>';
372 } else {
373 $formconfirm = '';
374
375 // Confirm deleting resource line
376 if ($action == 'delete' || ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile))) {
377 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteResource"), $langs->trans("ConfirmDeleteResource"), "confirm_delete_resource", '', 0, "action-delete");
378 }
379
380 // Print form confirm
381 print $formconfirm;
382
383
384 $linkback = '<a href="'.DOL_URL_ROOT.'/resource/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&id='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
385
386 dol_banner_tab($object, 'ref', $linkback, 1, 'ref');
387
388
389 print '<div class="fichecenter">';
390 print '<div class="underbanner clearboth"></div>';
391
392 /*---------------------------------------
393 * View object
394 */
395 print '<table class="border tableforfield centpercent">';
396
397 // Resource type
398 print '<tr>';
399 print '<td class="titlefield">'.$langs->trans("ResourceType").'</td>';
400 print '<td>';
401 print $object->type_label;
402 print '</td>';
403 print '</tr>';
404
405 // Description
406 print '<tr>';
407 print '<td>'.$langs->trans("ResourceFormLabel_description").'</td>';
408 print '<td>';
409 print $object->description;
410 print '</td>';
411 print '</tr>';
412
413 // Max users
414 print '<tr>';
415 print '<td>'.$langs->trans("MaxUsers").'</td>';
416 print '<td>';
417 print $object->max_users;
418 print '</td>';
419 print '</tr>';
420
421 // Other attributes
422 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
423
424 print '</tr>';
425
426 print '</table>';
427
428 print '</div>';
429
430 print '<div class="clearboth"></div><br>';
431
432 print dol_get_fiche_end();
433 }
434
435
436 /*
437 * Boutons actions
438 */
439 print '<div class="tabsAction">';
440 $parameters = array();
441 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been
442 // modified by hook
443 if (empty($reshook)) {
444 if ($action != "create" && $action != "edit") {
445 // Edit resource
446 if ($user->hasRight('resource', 'write')) {
447 print '<div class="inline-block divButAction">';
448 print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$id.'&action=edit&token='.newToken().'" class="butAction">'.$langs->trans('Modify').'</a>';
449 print '</div>';
450 }
451 }
452 if ($action != "create" && $action != "edit") {
453 $deleteUrl = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken();
454 $buttonId = 'action-delete-no-ajax';
455 if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) { // We can't use preloaded confirm form with jmobile
456 $deleteUrl = '';
457 $buttonId = 'action-delete';
458 }
459 print dolGetButtonAction('', $langs->trans("Delete"), 'delete', $deleteUrl, $buttonId, $permissiontodelete);
460 }
461 }
462 print '</div>';
463} else {
465}
466
467// End of page
468llxFooter();
469$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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 a WYSIWYG editor.
DAO Resource object.
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
Class to manage forms for the module resource.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
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...
resource_prepare_head($object)
Prepare head for tabs.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.