dolibarr 19.0.4
myobject_card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) ---Put here your own copyright and developer email---
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
26// General defined Options
27//if (! defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET
28//if (! defined('MAIN_AUTHENTICATION_MODE')) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler
29//if (! defined('MAIN_LANG_DEFAULT')) define('MAIN_LANG_DEFAULT', 'auto'); // Force LANG (language) to a particular value
30//if (! defined('MAIN_SECURITY_FORCECSP')) define('MAIN_SECURITY_FORCECSP', 'none'); // Disable all Content Security Policies
31//if (! defined('NOBROWSERNOTIF')) define('NOBROWSERNOTIF', '1'); // Disable browser notification
32//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip
33//if (! defined('NOLOGIN')) define('NOLOGIN', '1'); // Do not use login - if this page is public (can be called outside logged session). This includes the NOIPCHECK too.
34//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library
35//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db
36//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // Do not load html.form.class.php
37//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // Do not load and show top and left menu
38//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc
39//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs
40//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user
41//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters
42//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters
43//if (! defined('NOSESSION')) define('NOSESSION', '1'); // On CLI mode, no need to use web sessions
44//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data
45//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on)
46
47
48// Load Dolibarr environment
49$res = 0;
50// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
51if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
52 $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
53}
54// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
55$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1;
56while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
57 $i--;
58 $j--;
59}
60if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {
61 $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";
62}
63if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) {
64 $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
65}
66// Try main.inc.php using relative path
67if (!$res && file_exists("../main.inc.php")) {
68 $res = @include "../main.inc.php";
69}
70if (!$res && file_exists("../../main.inc.php")) {
71 $res = @include "../../main.inc.php";
72}
73if (!$res && file_exists("../../../main.inc.php")) {
74 $res = @include "../../../main.inc.php";
75}
76if (!$res) {
77 die("Include of main fails");
78}
79
80require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
81require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
82require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
83dol_include_once('/mymodule/class/myobject.class.php');
84dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');
85
86// Load translation files required by the page
87$langs->loadLangs(array("mymodule@mymodule", "other"));
88
89// Get parameters
90$id = GETPOST('id', 'int');
91$ref = GETPOST('ref', 'alpha');
92$lineid = GETPOST('lineid', 'int');
93
94$action = GETPOST('action', 'aZ09');
95$confirm = GETPOST('confirm', 'alpha');
96$cancel = GETPOST('cancel', 'aZ09');
97$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
98$backtopage = GETPOST('backtopage', 'alpha'); // if not set, a default page will be used
99$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); // if not set, $backtopage will be used
100$backtopagejsfields = GETPOST('backtopagejsfields', 'alpha');
101$dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09');
102
103if (!empty($backtopagejsfields)) {
104 $tmpbacktopagejsfields = explode(':', $backtopagejsfields);
105 $dol_openinpopup = $tmpbacktopagejsfields[0];
106}
107
108// Initialize technical objects
109$object = new MyObject($db);
110$extrafields = new ExtraFields($db);
111$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;
112$hookmanager->initHooks(array($object->element.'card', 'globalcard')); // Note that conf->hooks_modules contains array
113
114// Fetch optionals attributes and labels
115$extrafields->fetch_name_optionals_label($object->table_element);
116
117$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
118
119// Initialize array of search criterias
120$search_all = trim(GETPOST("search_all", 'alpha'));
121$search = array();
122foreach ($object->fields as $key => $val) {
123 if (GETPOST('search_'.$key, 'alpha')) {
124 $search[$key] = GETPOST('search_'.$key, 'alpha');
125 }
126}
127
128if (empty($action) && empty($id) && empty($ref)) {
129 $action = 'view';
130}
131
132// Load object
133include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
134
135// There is several ways to check permission.
136// Set $enablepermissioncheck to 1 to enable a minimum low level of checks
137$enablepermissioncheck = 0;
138if ($enablepermissioncheck) {
139 $permissiontoread = $user->hasRight('mymodule', 'myobject', 'read');
140 $permissiontoadd = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
141 $permissiontodelete = $user->hasRight('mymodule', 'myobject', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
142 $permissionnote = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_setnotes.inc.php
143 $permissiondellink = $user->hasRight('mymodule', 'myobject', 'write'); // Used by the include of actions_dellink.inc.php
144} else {
145 $permissiontoread = 1;
146 $permissiontoadd = 1; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
147 $permissiontodelete = 1;
148 $permissionnote = 1;
149 $permissiondellink = 1;
150}
151
152$upload_dir = $conf->mymodule->multidir_output[isset($object->entity) ? $object->entity : 1].'/myobject';
153
154// Security check (enable the most restrictive one)
155//if ($user->socid > 0) accessforbidden();
156//if ($user->socid > 0) $socid = $user->socid;
157//$isdraft = (isset($object->status) && ($object->status == $object::STATUS_DRAFT) ? 1 : 0);
158//restrictedArea($user, $object->module, $object, $object->table_element, $object->element, 'fk_soc', 'rowid', $isdraft);
159if (!isModEnabled("mymodule")) {
161}
162if (!$permissiontoread) {
164}
165
166
167/*
168 * Actions
169 */
170
171$parameters = array();
172$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
173if ($reshook < 0) {
174 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
175}
176
177if (empty($reshook)) {
178 $error = 0;
179
180 $backurlforlist = dol_buildpath('/mymodule/myobject_list.php', 1);
181
182 if (empty($backtopage) || ($cancel && empty($id))) {
183 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
184 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
185 $backtopage = $backurlforlist;
186 } else {
187 $backtopage = dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.((!empty($id) && $id > 0) ? $id : '__ID__');
188 }
189 }
190 }
191
192 $triggermodname = 'MYMODULE_MYOBJECT_MODIFY'; // Name of trigger action code to execute when we modify record
193
194 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
195 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
196
197 // Actions when linking object each other
198 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
199
200 // Actions when printing a doc from card
201 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
202
203 // Action to move up and down lines of object
204 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
205
206 // Action to build doc
207 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
208
209 if ($action == 'set_thirdparty' && $permissiontoadd) {
210 $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname);
211 }
212 if ($action == 'classin' && $permissiontoadd) {
213 $object->setProject(GETPOST('projectid', 'int'));
214 }
215
216 // Actions to send emails
217 $triggersendname = 'MYMODULE_MYOBJECT_SENTBYMAIL';
218 $autocopy = 'MAIN_MAIL_AUTOCOPY_MYOBJECT_TO';
219 $trackid = 'myobject'.$object->id;
220 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
221}
222
223
224
225
226/*
227 * View
228 */
229
230$form = new Form($db);
231$formfile = new FormFile($db);
232$formproject = new FormProjets($db);
233
234$title = $langs->trans("MyObject")." - ".$langs->trans('Card');
235//$title = $object->ref." - ".$langs->trans('Card');
236if ($action == 'create') {
237 $title = $langs->trans("NewObject", $langs->transnoentitiesnoconv("MyObject"));
238}
239$help_url = '';
240
241llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-mymodule page-card');
242
243// Example : Adding jquery code
244// print '<script type="text/javascript">
245// jQuery(document).ready(function() {
246// function init_myfunc()
247// {
248// jQuery("#myid").removeAttr(\'disabled\');
249// jQuery("#myid").attr(\'disabled\',\'disabled\');
250// }
251// init_myfunc();
252// jQuery("#mybutton").click(function() {
253// init_myfunc();
254// });
255// });
256// </script>';
257
258
259// Part to create
260if ($action == 'create') {
261 if (empty($permissiontoadd)) {
262 accessforbidden('NotEnoughPermissions', 0, 1);
263 }
264
265 print load_fiche_titre($title, '', 'object_'.$object->picto);
266
267 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
268 print '<input type="hidden" name="token" value="'.newToken().'">';
269 print '<input type="hidden" name="action" value="add">';
270 if ($backtopage) {
271 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
272 }
273 if ($backtopageforcancel) {
274 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
275 }
276 if ($backtopagejsfields) {
277 print '<input type="hidden" name="backtopagejsfields" value="'.$backtopagejsfields.'">';
278 }
279 if ($dol_openinpopup) {
280 print '<input type="hidden" name="dol_openinpopup" value="'.$dol_openinpopup.'">';
281 }
282
283 print dol_get_fiche_head(array(), '');
284
285 // Set some default values
286 //if (! GETPOSTISSET('fieldname')) $_POST['fieldname'] = 'myvalue';
287
288 print '<table class="border centpercent tableforfieldcreate">'."\n";
289
290 // Common attributes
291 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
292
293 // Other attributes
294 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
295
296 print '</table>'."\n";
297
298 print dol_get_fiche_end();
299
300 print $form->buttonsSaveCancel("Create");
301
302 print '</form>';
303
304 //dol_set_focus('input[name="ref"]');
305}
306
307// Part to edit record
308if (($id || $ref) && $action == 'edit') {
309 print load_fiche_titre($langs->trans("MyObject"), '', 'object_'.$object->picto);
310
311 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
312 print '<input type="hidden" name="token" value="'.newToken().'">';
313 print '<input type="hidden" name="action" value="update">';
314 print '<input type="hidden" name="id" value="'.$object->id.'">';
315 if ($backtopage) {
316 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
317 }
318 if ($backtopageforcancel) {
319 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
320 }
321
322 print dol_get_fiche_head();
323
324 print '<table class="border centpercent tableforfieldedit">'."\n";
325
326 // Common attributes
327 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
328
329 // Other attributes
330 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
331
332 print '</table>';
333
334 print dol_get_fiche_end();
335
336 print $form->buttonsSaveCancel();
337
338 print '</form>';
339}
340
341// Part to show record
342if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
343 $head = myobjectPrepareHead($object);
344
345 print dol_get_fiche_head($head, 'card', $langs->trans("MyObject"), -1, $object->picto, 0, '', '', 0, '', 1);
346
347 $formconfirm = '';
348
349 // Confirmation to delete (using preloaded confirm popup)
350 if ($action == 'delete' || ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile))) {
351 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteMyObject'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 'action-delete');
352 }
353 // Confirmation to delete line
354 if ($action == 'deleteline') {
355 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1);
356 }
357
358 // Clone confirmation
359 if ($action == 'clone') {
360 // Create an array for form
361 $formquestion = array();
362 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
363 }
364
365 // Confirmation of action xxxx (You can use it for xxx = 'close', xxx = 'reopen', ...)
366 if ($action == 'xxx') {
367 $text = $langs->trans('ConfirmActionMyObject', $object->ref);
368 /*if (isModEnabled('notification'))
369 {
370 require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php';
371 $notify = new Notify($db);
372 $text .= '<br>';
373 $text .= $notify->confirmMessage('MYOBJECT_CLOSE', $object->socid, $object);
374 }*/
375
376 $formquestion = array();
377
378 /*
379 $forcecombo=0;
380 if ($conf->browser->name == 'ie') $forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
381 $formquestion = array(
382 // 'text' => $langs->trans("ConfirmClone"),
383 // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1),
384 // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1),
385 // array('type' => 'other', 'name' => 'idwarehouse', 'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOST('idwarehouse')?GETPOST('idwarehouse'):'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo))
386 );
387 */
388 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220);
389 }
390
391 // Call Hook formConfirm
392 $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
393 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
394 if (empty($reshook)) {
395 $formconfirm .= $hookmanager->resPrint;
396 } elseif ($reshook > 0) {
397 $formconfirm = $hookmanager->resPrint;
398 }
399
400 // Print form confirm
401 print $formconfirm;
402
403
404 // Object card
405 // ------------------------------------------------------------
406 $linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
407
408 $morehtmlref = '<div class="refidno">';
409 /*
410 // Ref customer
411 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1);
412 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string'.(getDolGlobalInt('THIRDPARTY_REF_INPUT_SIZE') ? ':'.getDolGlobalInt('THIRDPARTY_REF_INPUT_SIZE') : ''), '', null, null, '', 1);
413 // Thirdparty
414 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1, 'customer');
415 if (!getDolGlobalInt('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
416 $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/commande/list.php?socid='.$object->thirdparty->id.'&search_societe='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherOrders").'</a>)';
417 }
418 // Project
419 if (isModEnabled('project')) {
420 $langs->load("projects");
421 $morehtmlref .= '<br>';
422 if ($permissiontoadd) {
423 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
424 if ($action != 'classify') {
425 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
426 }
427 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
428 } else {
429 if (!empty($object->fk_project)) {
430 $proj = new Project($db);
431 $proj->fetch($object->fk_project);
432 $morehtmlref .= $proj->getNomUrl(1);
433 if ($proj->title) {
434 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
435 }
436 }
437 }
438 }
439 */
440 $morehtmlref .= '</div>';
441
442
443 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
444
445
446 print '<div class="fichecenter">';
447 print '<div class="fichehalfleft">';
448 print '<div class="underbanner clearboth"></div>';
449 print '<table class="border centpercent tableforfield">'."\n";
450
451 // Common attributes
452 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
453 //unset($object->fields['fk_project']); // Hide field already shown in banner
454 //unset($object->fields['fk_soc']); // Hide field already shown in banner
455 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
456
457 // Other attributes. Fields from hook formObjectOptions and Extrafields.
458 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
459
460 print '</table>';
461 print '</div>';
462 print '</div>';
463
464 print '<div class="clearboth"></div>';
465
466 print dol_get_fiche_end();
467
468
469 /*
470 * Lines
471 */
472
473 if (!empty($object->table_element_line)) {
474 // Show object lines
475 $result = $object->getLinesArray();
476
477 print ' <form name="addproduct" id="addproduct" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.(($action != 'editline') ? '' : '#line_'.GETPOST('lineid', 'int')).'" method="POST">
478 <input type="hidden" name="token" value="' . newToken().'">
479 <input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline').'">
480 <input type="hidden" name="mode" value="">
481 <input type="hidden" name="page_y" value="">
482 <input type="hidden" name="id" value="' . $object->id.'">
483 ';
484
485 if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
486 include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
487 }
488
489 print '<div class="div-table-responsive-no-min">';
490 if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
491 print '<table id="tablelines" class="noborder noshadow" width="100%">';
492 }
493
494 if (!empty($object->lines)) {
495 $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1);
496 }
497
498 // Form to add new line
499 if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') {
500 if ($action != 'editline') {
501 // Add products/services form
502
503 $parameters = array();
504 $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
505 if ($reshook < 0) {
506 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
507 }
508 if (empty($reshook)) {
509 $object->formAddObjectLine(1, $mysoc, $soc);
510 }
511 }
512 }
513
514 if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
515 print '</table>';
516 }
517 print '</div>';
518
519 print "</form>\n";
520 }
521
522
523 // Buttons for actions
524
525 if ($action != 'presend' && $action != 'editline') {
526 print '<div class="tabsAction">'."\n";
527 $parameters = array();
528 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
529 if ($reshook < 0) {
530 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
531 }
532
533 if (empty($reshook)) {
534 // Send
535 if (empty($user->socid)) {
536 print dolGetButtonAction('', $langs->trans('SendMail'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&token='.newToken().'&mode=init#formmailbeforetitle');
537 }
538
539 // Back to draft
540 if ($object->status == $object::STATUS_VALIDATED) {
541 print dolGetButtonAction('', $langs->trans('SetToDraft'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes&token='.newToken(), '', $permissiontoadd);
542 }
543
544 // Modify
545 print dolGetButtonAction('', $langs->trans('Modify'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
546
547 // Validate
548 if ($object->status == $object::STATUS_DRAFT) {
549 if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
550 print dolGetButtonAction('', $langs->trans('Validate'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes&token='.newToken(), '', $permissiontoadd);
551 } else {
552 $langs->load("errors");
553 print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Validate"), 'default', '#', '', 0);
554 }
555 }
556
557 // Clone
558 if ($permissiontoadd) {
559 print dolGetButtonAction('', $langs->trans('ToClone'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.(!empty($object->socid) ? '&socid='.$object->socid : '').'&action=clone&token='.newToken(), '', $permissiontoadd);
560 }
561
562 /*
563 // Disable / Enable
564 if ($permissiontoadd) {
565 if ($object->status == $object::STATUS_ENABLED) {
566 print dolGetButtonAction('', $langs->trans('Disable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=disable&token='.newToken(), '', $permissiontoadd);
567 } else {
568 print dolGetButtonAction('', $langs->trans('Enable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=enable&token='.newToken(), '', $permissiontoadd);
569 }
570 }
571 if ($permissiontoadd) {
572 if ($object->status == $object::STATUS_VALIDATED) {
573 print dolGetButtonAction('', $langs->trans('Cancel'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=close&token='.newToken(), '', $permissiontoadd);
574 } else {
575 print dolGetButtonAction('', $langs->trans('Re-Open'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=reopen&token='.newToken(), '', $permissiontoadd);
576 }
577 }
578 */
579
580 // Delete (with preloaded confirm popup)
581 $deleteUrl = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken();
582 $buttonId = 'action-delete-no-ajax';
583 if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) { // We can use preloaded confirm if not jmobile
584 $deleteUrl = '';
585 $buttonId = 'action-delete';
586 }
587 $params = array();
588 print dolGetButtonAction('', $langs->trans("Delete"), 'delete', $deleteUrl, $buttonId, $permissiontodelete, $params);
589 }
590 print '</div>'."\n";
591 }
592
593
594 // Select mail models is same action as presend
595 if (GETPOST('modelselected')) {
596 $action = 'presend';
597 }
598
599 if ($action != 'presend') {
600 print '<div class="fichecenter"><div class="fichehalfleft">';
601 print '<a name="builddoc"></a>'; // ancre
602
603 $includedocgeneration = 0;
604
605 // Documents
606 if ($includedocgeneration) {
607 $objref = dol_sanitizeFileName($object->ref);
608 $relativepath = $objref.'/'.$objref.'.pdf';
609 $filedir = $conf->mymodule->dir_output.'/'.$object->element.'/'.$objref;
610 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
611 $genallowed = $permissiontoread; // If you can read, you can build the PDF to read content
612 $delallowed = $permissiontoadd; // If you can create/edit, you can remove a file on card
613 print $formfile->showdocuments('mymodule:MyObject', $object->element.'/'.$objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
614 }
615
616 // Show links to link elements
617 $linktoelem = $form->showLinkToObjectBlock($object, null, array('myobject'));
618 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
619
620
621 print '</div><div class="fichehalfright">';
622
623 $MAXEVENT = 10;
624
625 $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', dol_buildpath('/mymodule/myobject_agenda.php', 1).'?id='.$object->id);
626
627 // List of actions on element
628 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
629 $formactions = new FormActions($db);
630 $somethingshown = $formactions->showactions($object, $object->element.'@'.$object->module, (is_object($object->thirdparty) ? $object->thirdparty->id : 0), 1, '', $MAXEVENT, '', $morehtmlcenter);
631
632 print '</div></div>';
633 }
634
635 //Select mail models is same action as presend
636 if (GETPOST('modelselected')) {
637 $action = 'presend';
638 }
639
640 // Presend form
641 $modelmail = 'myobject';
642 $defaulttopic = 'InformationMessage';
643 $diroutput = $conf->mymodule->dir_output;
644 $trackid = 'myobject'.$object->id;
645
646 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
647}
648
649// End of page
650llxFooter();
651$db->close();
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
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 standard extra fields.
Class to manage building of HTML components.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class for MyObject.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
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.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
myobjectPrepareHead($object)
Prepare array of tabs for MyObject.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.