dolibarr  19.0.0-dev
card.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
6  * Copyright (C) 2015-2016 Alexandre Spangaro <aspangaro@open-dsi.fr>
7  * Copyright (C) 2018-2019 Thibault FOUCART <support@ptibogxiv.net>
8  * Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <https://www.gnu.org/licenses/>.
22  */
23 
30 // Load Dolibarr environment
31 require '../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/modules/dons/modules_don.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/lib/donation.lib.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
40 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formmargin.class.php';
41 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
42 if (isModEnabled('project')) {
43  require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
44  require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
45 }
46 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
47 
48 $langs->loadLangs(array('bills', 'companies', 'donations', 'users'));
49 
50 $id = GETPOST('rowid') ?GETPOST('rowid', 'int') : GETPOST('id', 'int');
51 $ref = GETPOST('ref', 'alpha');
52 $action = GETPOST('action', 'aZ09');
53 $cancel = GETPOST('cancel', 'alpha');
54 $confirm = GETPOST('confirm', 'alpha');
55 $backtopage = GETPOST('backtopage', 'alpha');
56 $socid = GETPOST('socid', 'int');
57 $amount = price2num(GETPOST('amount', 'alphanohtml'), 'MT');
58 $donation_date = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
59 $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0);
60 $public_donation = (int) GETPOST("public", 'int');
61 
62 $object = new Don($db);
63 if ($id > 0 || $ref) {
64  $object->fetch($id, $ref);
65 }
66 
67 if (!empty($socid) && $socid > 0) {
68  $soc = new Societe($db);
69  if ($socid > 0) {
70  $soc->fetch($socid);
71  }
72 }
73 
74 $extrafields = new ExtraFields($db);
75 
76 // fetch optionals attributes and labels
77 $extrafields->fetch_name_optionals_label($object->table_element);
78 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
79 
80 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
81 $hookmanager->initHooks(array($object->element.'card', 'globalcard'));
82 
83 $upload_dir = $conf->don->dir_output;
84 
85 
86 // Security check
87 $result = restrictedArea($user, 'don', $object->id);
88 
89 $permissiontoadd = $user->rights->don->creer;
90 
91 
92 /*
93  * Actions
94  */
95 
96 $parameters = array();
97 
98 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some
99 if ($reshook < 0) {
100  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
101 }
102 
103 if (empty($reshook)) {
104  $backurlforlist = DOL_URL_ROOT.'/don/list.php';
105 
106  if (empty($backtopage) || ($cancel && empty($id))) {
107  if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
108  if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
109  $backtopage = $backurlforlist;
110  } else {
111  $backtopage = DOL_URL_ROOT.'/don/card.php?id='.((!empty($id) && $id > 0) ? $id : '__ID__');
112  }
113  }
114  }
115 
116  if ($cancel) {
117  if (!empty($backtopageforcancel)) {
118  header("Location: ".$backtopageforcancel);
119  exit;
120  } elseif (!empty($backtopage)) {
121  header("Location: ".$backtopage);
122  exit;
123  }
124  $action = '';
125  }
126 
127  // Action reopen object
128  if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissiontoadd) {
129  $object->fetch($id);
130 
131  $result = $object->reopen($user);
132  if ($result >= 0) {
133  // Define output language
134  if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
135  if (method_exists($object, 'generateDocument')) {
136  $outputlangs = $langs;
137  $newlang = '';
138  if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && GETPOST('lang_id', 'aZ09')) {
139  $newlang = GETPOST('lang_id', 'aZ09');
140  }
141  if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
142  $newlang = $object->thirdparty->default_lang;
143  }
144  if (!empty($newlang)) {
145  $outputlangs = new Translate("", $conf);
146  $outputlangs->setDefaultLang($newlang);
147  }
148  $model = $object->model_pdf;
149  $ret = $object->fetch($id); // Reload to get new records
150 
151  $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
152  }
153  }
154 
155  header("Location: ".$_SERVER["PHP_SELF"].'?id='.$object->id);
156  exit;
157  } else {
158  setEventMessages($object->error, $object->errors, 'errors');
159  $action = 'create';
160  }
161  }
162 
163 
164  // Action update object
165  if ($action == 'update') {
166  if (!empty($cancel)) {
167  header("Location: ".$_SERVER['PHP_SELF']."?id=".urlencode($id));
168  exit;
169  }
170 
171  $error = 0;
172 
173  if (empty($donation_date)) {
174  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
175  $action = "create";
176  $error++;
177  }
178 
179  if (empty($amount)) {
180  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
181  $action = "create";
182  $error++;
183  }
184 
185  if (!$error) {
186  $object->fetch($id);
187 
188  $object->firstname = (string) GETPOST("firstname", 'alpha');
189  $object->lastname = (string) GETPOST("lastname", 'alpha');
190  $object->societe = (string) GETPOST("societe", 'alpha');
191  $object->address = (string) GETPOST("address", 'alpha');
192  $object->amount = price2num(GETPOST("amount", 'alpha'), '', 2);
193  $object->town = (string) GETPOST("town", 'alpha');
194  $object->zip = (string) GETPOST("zipcode", 'alpha');
195  $object->country_id = (int) GETPOST('country_id', 'int');
196  $object->email = (string) GETPOST("email", 'alpha');
197  $object->date = $donation_date;
198  $object->public = $public_donation;
199  $object->fk_project = (int) GETPOST("fk_project", 'int');
200  $object->modepaymentid = (int) GETPOST('modepayment', 'int');
201 
202  // Fill array 'array_options' with data from add form
203  $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
204  if ($ret < 0) {
205  $error++;
206  }
207 
208  if ($object->update($user) > 0) {
209  header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
210  exit;
211  } else {
212  setEventMessages($object->error, $object->errors, 'errors');
213  $action = "create";
214  }
215  }
216  }
217 
218 
219  // Action add/create object
220  if ($action == 'add') {
221  if (!empty($cancel)) {
222  header("Location: index.php");
223  exit;
224  }
225 
226  $error = 0;
227 
228  if (isModEnabled("societe") && !empty($conf->global->DONATION_USE_THIRDPARTIES) && !(GETPOST("socid", 'int') > 0)) {
229  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdParty")), null, 'errors');
230  $action = "create";
231  $error++;
232  }
233  if (empty($donation_date)) {
234  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
235  $action = "create";
236  $error++;
237  }
238 
239  if (empty($amount)) {
240  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
241  $action = "create";
242  $error++;
243  }
244 
245  if (!$error) {
246  $object->socid = (int) GETPOST("socid", 'int');
247  $object->firstname = (string) GETPOST("firstname", 'alpha');
248  $object->lastname = (string) GETPOST("lastname", 'alpha');
249  $object->societe = (string) GETPOST("societe", 'alpha');
250  $object->address = (string) GETPOST("address", 'alpha');
251  $object->amount = price2num(GETPOST("amount", 'alpha'), '', 2);
252  $object->zip = (string) GETPOST("zipcode", 'alpha');
253  $object->town = (string) GETPOST("town", 'alpha');
254  $object->country_id = (int) GETPOST('country_id', 'int');
255  $object->email = (string) GETPOST('email', 'alpha');
256  $object->date = $donation_date;
257  $object->note_private = (string) GETPOST("note_private", 'restricthtml');
258  $object->note_public = (string) GETPOST("note_public", 'restricthtml');
259  $object->public = $public_donation;
260  $object->fk_project = (int) GETPOST("fk_project", 'int');
261  $object->modepaymentid = (int) GETPOST('modepayment', 'int');
262 
263  // Fill array 'array_options' with data from add form
264  $ret = $extrafields->setOptionalsFromPost(null, $object);
265  if ($ret < 0) {
266  $error++;
267  }
268 
269  $res = $object->create($user);
270  if ($res > 0) {
271  header("Location: ".$_SERVER['PHP_SELF'].'?id='.$res);
272  exit;
273  } else {
274  setEventMessages($object->error, $object->errors, 'errors');
275  $action = "create";
276  }
277  }
278  }
279 
280  // Action delete object
281  if ($action == 'confirm_delete' && GETPOST("confirm") == "yes" && $user->rights->don->supprimer) {
282  $object->fetch($id);
283  $result = $object->delete($user);
284  if ($result > 0) {
285  header("Location: index.php");
286  exit;
287  } else {
288  dol_syslog($object->error, LOG_DEBUG);
289  setEventMessages($object->error, $object->errors, 'errors');
290  }
291  }
292 
293  // Action validation
294  if ($action == 'valid_promesse') {
295  $object->fetch($id);
296  if ($object->valid_promesse($id, $user->id) >= 0) {
297  setEventMessages($langs->trans("DonationValidated", $object->ref), null);
298  $action = '';
299  } else {
300  setEventMessages($object->error, $object->errors, 'errors');
301  }
302  }
303 
304  // Action cancel
305  if ($action == 'set_cancel') {
306  $object->fetch($id);
307  if ($object->set_cancel($id) >= 0) {
308  $action = '';
309  } else {
310  setEventMessages($object->error, $object->errors, 'errors');
311  }
312  }
313 
314  // Action set paid
315  if ($action == 'set_paid') {
316  $object->fetch($id);
317  if ($object->setPaid($id, $modepayment) >= 0) {
318  $action = '';
319  } else {
320  setEventMessages($object->error, $object->errors, 'errors');
321  }
322  } elseif ($action == 'classin' && $user->rights->don->creer) {
323  $object->fetch($id);
324  $object->setProject($projectid);
325  }
326 
327 
328  // Actions to build doc
329  include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
330 
331 
332  // Remove file in doc form
333  /*if ($action == 'remove_file')
334  {
335  $object = new Don($db, 0, GETPOST('id', 'int'));
336  if ($object->fetch($id))
337  {
338  require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
339 
340  $object->fetch_thirdparty();
341 
342  $langs->load("other");
343  $upload_dir = $conf->don->dir_output;
344  $file = $upload_dir . '/' . GETPOST('file');
345  $ret=dol_delete_file($file,0,0,0,$object);
346  if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
347  else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
348  $action='';
349  }
350  }
351  */
352 
353  /*
354  * Build doc
355  */
356  /*
357  if ($action == 'builddoc')
358  {
359  $object = new Don($db);
360  $result=$object->fetch($id);
361 
362  // Save last template used to generate document
363  if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
364 
365  // Define output language
366  $outputlangs = $langs;
367  $newlang='';
368  if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && !empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id'];
369  if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) $newlang=$object->thirdparty->default_lang;
370  if (!empty($newlang))
371  {
372  $outputlangs = new Translate("",$conf);
373  $outputlangs->setDefaultLang($newlang);
374  }
375  $result=don_create($db, $object->id, '', $object->model_pdf, $outputlangs);
376  if ($result <= 0)
377  {
378  dol_print_error($db,$result);
379  exit;
380  }
381  }
382  */
383 }
384 
385 
386 /*
387  * View
388  */
389 
390 $title = $langs->trans("Donation");
391 
392 $help_url = 'EN:Module_Donations|FR:Module_Dons|ES:M&oacute;dulo_Donaciones|DE:Modul_Spenden';
393 
394 llxHeader('', $title, $help_url);
395 
396 $form = new Form($db);
397 $formfile = new FormFile($db);
398 $formcompany = new FormCompany($db);
399 if (isModEnabled('project')) {
400  $formproject = new FormProjets($db);
401 }
402 
403 if ($action == 'create') {
404  print load_fiche_titre($langs->trans("AddDonation"), '', 'object_donation');
405 
406  print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
407  print '<input type="hidden" name="token" value="'.newToken().'">';
408  print '<input type="hidden" name="action" value="add">';
409  print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
410 
411  print dol_get_fiche_head('');
412 
413  print '<table class="border centpercent">';
414  print '<tbody>';
415 
416  // Ref
417  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans('Ref').'</td><td>'.$langs->trans('Draft').'</td></tr>';
418 
419  // Company
420  if (isModEnabled("societe") && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
421  // Thirdparty
422  if ($soc->id > 0) {
423  print '<td class="fieldrequired">'.$langs->trans('ThirdParty').'</td>';
424  print '<td>';
425  print $soc->getNomUrl(1);
426  print '<input type="hidden" name="socid" value="'.$soc->id.'">';
427  // Outstanding Bill
428  $arrayoutstandingbills = $soc->getOutstandingBills();
429  $outstandingBills = $arrayoutstandingbills['opened'];
430  print ' ('.$langs->trans('CurrentOutstandingBill').': ';
431  print price($outstandingBills, '', $langs, 0, 0, -1, $conf->currency);
432  if ($soc->outstanding_limit != '') {
433  if ($outstandingBills > $soc->outstanding_limit) {
434  print img_warning($langs->trans("OutstandingBillReached"));
435  }
436  print ' / '.price($soc->outstanding_limit, '', $langs, 0, 0, -1, $conf->currency);
437  }
438  print ')';
439  print '</td>';
440  } else {
441  print '<td class="fieldrequired">'.$langs->trans('ThirdParty').'</td>';
442  print '<td>';
443  $filter = '((s.client:IN:1,2,3) AND (status:=:1))';
444  print $form->select_company($soc->id, 'socid', $filter, 'SelectThirdParty', 0, 0, null, 0, 'minwidth300');
445  // Option to reload page to retrieve customer informations. Note, this clear other input
446  if (!empty($conf->global->RELOAD_PAGE_ON_CUSTOMER_CHANGE_DISABLED)) {
447  print '<script type="text/javascript">
448  $(document).ready(function() {
449  $("#socid").change(function() {
450  console.log("We have changed the company - Reload page");
451  var socid = $(this).val();
452  var fac_rec = $(\'#fac_rec\').val();
453  // reload page
454  $("input[name=action]").val("create");
455  $("form[name=add]").submit();
456  });
457  });
458  </script>';
459  }
460  print ' <a href="'.DOL_URL_ROOT.'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create').'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("AddThirdParty").'"></span></a>';
461  print '</td>';
462  }
463  print '</tr>'."\n";
464  }
465 
466  // Date
467  print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Date").'</td><td>';
468  print $form->selectDate($donation_date ? $donation_date : -1, '', '', '', '', "add", 1, 1);
469  print '</td>';
470 
471  // Amount
472  print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" value="'.dol_escape_htmltag(GETPOST("amount")).'" size="10"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
473 
474  // Public donation
475  print '<tr><td class="fieldrequired">'.$langs->trans("PublicDonation")."</td><td>";
476  print $form->selectyesno("public", $public_donation, 1);
477  print "</td></tr>\n";
478 
479  if (!isModEnabled('societe') || empty($conf->global->DONATION_USE_THIRDPARTIES)) {
480  print "<tr>".'<td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" value="'.dol_escape_htmltag(GETPOST("societe")).'" class="maxwidth200"></td></tr>';
481  print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" value="'.dol_escape_htmltag(GETPOST("lastname")).'" class="maxwidth200"></td></tr>';
482  print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" value="'.dol_escape_htmltag(GETPOST("firstname")).'" class="maxwidth200"></td></tr>';
483  print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
484  print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="3">'.dol_escape_htmltag(GETPOST("address", "alphanohtml"), 0, 1).'</textarea></td></tr>';
485 
486  // Zip / Town
487  print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
488  print $formcompany->select_ziptown((GETPOSTISSET("zipcode") ? GETPOST("zipcode") : $object->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6);
489  print ' ';
490  print $formcompany->select_ziptown((GETPOSTISSET("town") ? GETPOST("town") : $object->town), 'town', array('zipcode', 'selectcountry_id', 'state_id'));
491  print '</tr>';
492 
493  // Country
494  print '<tr><td><label for="selectcountry_id">'.$langs->trans('Country').'</label></td><td class="maxwidthonsmartphone">';
495  print img_picto('', 'globe-americas', 'class="paddingrightonly"').$form->select_country(GETPOST('country_id') != '' ?GETPOST('country_id') : $object->country_id);
496  if ($user->admin) {
497  print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
498  }
499  print '</td></tr>';
500 
501  print "<tr>".'<td>'.$langs->trans("EMail").'</td><td>'.img_picto('', 'object_email', 'class="paddingrightonly"').'<input type="text" name="email" value="'.dol_escape_htmltag(GETPOST("email")).'" class="maxwidth200"></td></tr>';
502  }
503 
504  // Payment mode
505  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>\n";
506  $selected = GETPOST('modepayment', 'int');
507  print img_picto('', 'payment', 'class="pictofixedwidth"');
508  print $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1, 0, 0, 1, 'maxwidth200 widthcentpercentminusx', 1);
509  print "</td></tr>\n";
510 
511  // Public note
512  print '<tr>';
513  print '<td class="tdtop">'.$langs->trans('NotePublic').'</td>';
514  print '<td>';
515  if (!isset($note_public)) {
516  $note_public = $object->getDefaultCreateValueFor('note_public');
517  }
518  $doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3, '90%');
519  print $doleditor->Create(1);
520  print '</td></tr>';
521 
522  // Private note
523  if (empty($user->socid)) {
524  print '<tr>';
525  print '<td class="tdtop">'.$langs->trans('NotePrivate').'</td>';
526  print '<td>';
527  if (!isset($note_private)) {
528  $note_private = $object->getDefaultCreateValueFor('note_private');
529  }
530  $doleditor = new DolEditor('note_private', $note_private, '', 80, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3, '90%');
531  print $doleditor->Create(1);
532  print '</td></tr>';
533  }
534 
535  if (isModEnabled('project')) {
536  print "<tr><td>".$langs->trans("Project")."</td><td>";
537  print img_picto('', 'project', 'class="pictofixedwidth"');
538  print $formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1, 0, 0, 0, '', 1, 0, 'maxwidth500');
539  print "</td></tr>\n";
540  }
541 
542  // Other attributes
543  $parameters = array();
544  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
545  print $hookmanager->resPrint;
546  if (empty($reshook)) {
547  print $object->showOptionals($extrafields, 'create', $parameters);
548  }
549 
550  print '</tbody>';
551  print "</table>\n";
552 
553  print dol_get_fiche_end();
554 
555  print $form->buttonsSaveCancel();
556 
557  print "</form>\n";
558 }
559 
560 
561 /* ************************************************************ */
562 /* */
563 /* Donation card in edit mode */
564 /* */
565 /* ************************************************************ */
566 
567 if (!empty($id) && $action == 'edit') {
568  $result = $object->fetch($id);
569  if ($result < 0) {
570  dol_print_error($db, $object->error); exit;
571  }
572  $result = $object->fetch_optionals();
573  if ($result < 0) {
574  dol_print_error($db); exit;
575  }
576 
577  $hselected = 'card';
578  $head = donation_prepare_head($object);
579 
580  print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
581  print '<input type="hidden" name="token" value="'.newToken().'">';
582  print '<input type="hidden" name="action" value="update">';
583  print '<input type="hidden" name="rowid" value="'.$object->id.'">';
584  print '<input type="hidden" name="amount" value="'.$object->amount.'">';
585  print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
586 
587  print dol_get_fiche_head($head, $hselected, $langs->trans("Donation"), 0, 'donation');
588 
589  print '<table class="border centpercent">';
590 
591  // Ref
592  print '<tr><td>'.$langs->trans("Ref").'</td><td colspan="2">';
593  print $object->getNomUrl();
594  print '</td>';
595  print '</tr>';
596 
597  // Date
598  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Date").'</td><td>';
599  print $form->selectDate($object->date, '', '', '', '', "update");
600  print '</td>';
601 
602  // Amount
603  if ($object->statut == 0) {
604  print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" size="10" value="'.price($object->amount).'"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
605  } else {
606  print '<tr><td>'.$langs->trans("Amount").'</td><td>';
607  print price($object->amount, 0, $langs, 0, 0, -1, $conf->currency);
608  print '</td></tr>';
609  }
610 
611  print '<tr><td class="fieldrequired">'.$langs->trans("PublicDonation")."</td><td>";
612  print $form->selectyesno("public", $object->public, 1);
613  print "</td>";
614  print "</tr>\n";
615 
616  if (isModEnabled("societe") && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
617  $company = new Societe($db);
618 
619  print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="2">';
620  if ($object->socid > 0) {
621  $result = $company->fetch($object->socid);
622  print $company->getNomUrl(1);
623  }
624  print '</td></tr>';
625  } else {
626  $langs->load("companies");
627  print '<tr><td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" class="maxwidth200" value="'.dol_escape_htmltag($object->societe).'"></td></tr>';
628  print '<tr><td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" class="maxwidth200" value="'.dol_escape_htmltag($object->lastname).'"></td></tr>';
629  print '<tr><td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" class="maxwidth200" value="'.dol_escape_htmltag($object->firstname).'"></td></tr>';
630  print '<tr><td>'.$langs->trans("Address").'</td><td>';
631  print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_3.'">'.dol_escape_htmltag($object->address, 0, 1).'</textarea></td></tr>';
632 
633  // Zip / Town
634  print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
635  print $formcompany->select_ziptown((GETPOSTISSET("zipcode") ? GETPOSTISSET("zipcode") : $object->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6);
636  print ' ';
637  print $formcompany->select_ziptown((GETPOSTISSET("town") ? GETPOST("town") : $object->town), 'town', array('zipcode', 'selectcountry_id', 'state_id'));
638  print '</tr>';
639 
640  // Country
641  print '<tr><td class="titlefieldcreate">'.$langs->trans('Country').'</td><td>';
642  print $form->select_country((!empty($object->country_id) ? $object->country_id : $mysoc->country_code), 'country_id');
643  if ($user->admin) {
644  print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
645  }
646  print '</td></tr>';
647 
648  print "<tr>".'<td>'.$langs->trans("EMail").'</td><td><input type="text" name="email" class="maxwidth200" value="'.dol_escape_htmltag($object->email).'"></td></tr>';
649  }
650  // Payment mode
651  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>\n";
652  if ($object->mode_reglement_id) {
653  $selected = $object->mode_reglement_id;
654  } else {
655  $selected = '';
656  }
657  $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1);
658  print "</td></tr>\n";
659 
660  // Status
661  print "<tr>".'<td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>';
662 
663  // Project
664  if (isModEnabled('project')) {
665  $formproject = new FormProjets($db);
666 
667  $langs->load('projects');
668  print '<tr><td>'.$langs->trans('Project').'</td><td>';
669  $formproject->select_projects(-1, $object->fk_project, 'fk_project', 0, 0, 1, 1, 0, 0, 0, '', 0, 0, 'maxwidth500');
670  print '</td></tr>';
671  }
672 
673  // Other attributes
674  $parameters = array();
675  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
676  print $hookmanager->resPrint;
677  if (empty($reshook)) {
678  print $object->showOptionals($extrafields, 'edit', $parameters);
679  }
680 
681  print "</table>\n";
682 
683  print dol_get_fiche_end();
684 
685  print $form->buttonsSaveCancel();
686 
687  print "</form>\n";
688 }
689 
690 
691 
692 /* ************************************************************ */
693 /* */
694 /* Donation card in view mode */
695 /* */
696 /* ************************************************************ */
697 if (!empty($id) && $action != 'edit') {
698  $formconfirm = "";
699  // Confirmation delete
700  if ($action == 'delete') {
701  $text = $langs->trans("ConfirmDeleteADonation");
702  print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteADonation"), $text, "confirm_delete", '', '', 1);
703  }
704 
705  $result = $object->fetch($id);
706  if ($result < 0) {
707  dol_print_error($db, $object->error); exit;
708  }
709  $result = $object->fetch_optionals();
710  if ($result < 0) {
711  dol_print_error($db); exit;
712  }
713 
714  $hselected = 'card';
715 
716  $head = donation_prepare_head($object);
717  print dol_get_fiche_head($head, $hselected, $langs->trans("Donation"), -1, 'donation');
718 
719  // Print form confirm
720  print $formconfirm;
721 
722  $linkback = '<a href="'.DOL_URL_ROOT.'/don/list.php'.(!empty($socid) ? '?socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
723 
724  $morehtmlref = '<div class="refidno">';
725  // Project
726  if (isModEnabled('project')) {
727  $langs->load("projects");
728  $morehtmlref .= $langs->trans('Project').' ';
729  if ($user->rights->don->creer) {
730  if ($action != 'classify') {
731  $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : ';
732  }
733  if ($action == 'classify') {
734  //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
735  $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
736  $morehtmlref .= '<input type="hidden" name="action" value="classin">';
737  $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
738  $morehtmlref .= '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
739  $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1, 0, 'maxwidth500');
740  $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
741  $morehtmlref .= '</form>';
742  } else {
743  $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
744  }
745  } else {
746  if (!empty($object->fk_project)) {
747  $proj = new Project($db);
748  $proj->fetch($object->fk_project);
749  $morehtmlref .= ' : '.$proj->getNomUrl(1);
750  if ($proj->title) {
751  $morehtmlref .= ' - '.$proj->title;
752  }
753  } else {
754  $morehtmlref .= '';
755  }
756  }
757  }
758  $morehtmlref .= '</div>';
759 
760 
761  dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
762 
763 
764  print '<div class="fichecenter">';
765  print '<div class="fichehalfleft">';
766  print '<div class="underbanner clearboth"></div>';
767 
768  print '<table class="border tableforfield" width="100%">';
769 
770  // Date
771  print '<tr><td class="titlefield">'.$langs->trans("Date").'</td><td colspan="2">';
772  print dol_print_date($object->date, "day");
773  print "</td>";
774 
775  print '<tr><td>'.$langs->trans("Amount").'</td><td colspan="2">';
776  print price($object->amount, 0, $langs, 0, 0, -1, $conf->currency);
777  print '</td></tr>';
778 
779  print '<tr><td>'.$langs->trans("PublicDonation").'</td><td colspan="2">';
780  print yn($object->public);
781  print '</td></tr>';
782 
783  if (isModEnabled("societe") && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
784  $company = new Societe($db);
785 
786  print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="2">';
787  if ($object->socid > 0) {
788  $result = $company->fetch($object->socid);
789  print $company->getNomUrl(1);
790  }
791  print '</td></tr>';
792  } else {
793  print '<tr><td>'.$langs->trans("Company").'</td><td colspan="2">'.$object->societe.'</td></tr>';
794  print '<tr><td>'.$langs->trans("Lastname").'</td><td colspan="2">'.$object->lastname.'</td></tr>';
795  print '<tr><td>'.$langs->trans("Firstname").'</td><td colspan="2">'.$object->firstname.'</td></tr>';
796  }
797 
798  // Payment mode
799  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>";
800  $form->form_modes_reglement(null, $object->mode_reglement_id, 'none');
801  print "</td></tr>\n";
802 
803  // Other attributes
804  $cols = 2;
805  include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
806 
807  print '</table>';
808 
809  print '</div>';
810  print '<div class="fichehalfright">';
811 
812  /*
813  * Payments
814  */
815  $sql = "SELECT p.rowid, p.num_payment, p.datep as dp, p.amount,";
816  $sql .= "c.code as type_code,c.libelle as paiement_type";
817  $sql .= " FROM ".MAIN_DB_PREFIX."payment_donation as p";
818  $sql .= ", ".MAIN_DB_PREFIX."c_paiement as c ";
819  $sql .= ", ".MAIN_DB_PREFIX."don as d";
820  $sql .= " WHERE d.rowid = ".((int) $id);
821  $sql .= " AND p.fk_donation = d.rowid";
822  $sql .= " AND d.entity IN (".getEntity('donation').")";
823  $sql .= " AND p.fk_typepayment = c.id";
824  $sql .= " ORDER BY dp";
825 
826  //print $sql;
827  $resql = $db->query($sql);
828  if ($resql) {
829  $num = $db->num_rows($resql);
830  $i = 0; $total = 0; $totalpaid = 0;
831  print '<table class="noborder paymenttable centpercent">';
832  print '<tr class="liste_titre">';
833  print '<td>'.$langs->trans("RefPayment").'</td>';
834  print '<td>'.$langs->trans("Date").'</td>';
835  print '<td>'.$langs->trans("Type").'</td>';
836  print '<td class="right">'.$langs->trans("Amount").'</td>';
837  print '</tr>';
838 
839  while ($i < $num) {
840  $objp = $db->fetch_object($resql);
841 
842  print '<tr class="oddeven"><td>';
843  print '<a href="'.DOL_URL_ROOT.'/don/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"), "payment").' '.$objp->rowid.'</a></td>';
844  print '<td>'.dol_print_date($db->jdate($objp->dp), 'day')."</td>\n";
845  $labeltype = $langs->trans("PaymentType".$objp->type_code) != ("PaymentType".$objp->type_code) ? $langs->trans("PaymentType".$objp->type_code) : $objp->paiement_type;
846  print "<td>".$labeltype.' '.$objp->num_payment."</td>\n";
847  print '<td class="right">'.price($objp->amount)."</td>\n";
848  print "</tr>";
849  $totalpaid += $objp->amount;
850  $i++;
851  }
852 
853  if ($object->paid == 0) {
854  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("AlreadyPaid")." :</td><td class=\"right\">".price($totalpaid)."</td></tr>\n";
855  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("AmountExpected")." :</td><td class=\"right\">".price($object->amount)."</td></tr>\n";
856 
857  $remaintopay = $object->amount - $totalpaid;
858 
859  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("RemainderToPay")." :</td>";
860  print '<td class="right'.(!empty($resteapayeraffiche) ? ' amountremaintopay' : '').'">'.price($remaintopay)."</td></tr>\n";
861  }
862  print "</table>";
863  $db->free($resql);
864  } else {
865  dol_print_error($db);
866  }
867 
868  print '</div>';
869  print '</div>';
870 
871  print '<div class="clearboth"></div>';
872 
873  print dol_get_fiche_end();
874 
875  $remaintopay = $object->amount - $totalpaid;
876 
877  // Actions buttons
878 
879  print '<div class="tabsAction">';
880 
881  // Re-open
882  if ($permissiontoadd && $object->statut == $object::STATUS_CANCELED) {
883  print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.newToken().'">'.$langs->trans("ReOpen").'</a>';
884  }
885 
886  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&rowid='.$object->id.'">'.$langs->trans('Modify').'</a></div>';
887 
888  if ($object->statut == $object::STATUS_DRAFT) {
889  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=valid_promesse&token='.newToken().'">'.$langs->trans("ValidPromess").'</a></div>';
890  }
891 
892  if (($object->statut == $object::STATUS_DRAFT || $object->statut == $object::STATUS_VALIDATED) && $totalpaid == 0 && $object->paid == 0) {
893  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=set_cancel&token='.newToken().'">'.$langs->trans("ClassifyCanceled")."</a></div>";
894  }
895 
896  // Create payment
897  if ($object->statut == $object::STATUS_VALIDATED && $object->paid == 0 && $user->rights->don->creer) {
898  if ($remaintopay == 0) {
899  print '<div class="inline-block divButAction"><span class="butActionRefused classfortooltip" title="'.$langs->trans("DisabledBecauseRemainderToPayIsZero").'">'.$langs->trans('DoPayment').'</span></div>';
900  } else {
901  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/don/payment/payment.php?rowid='.$object->id.'&action=create&token='.newToken().'">'.$langs->trans('DoPayment').'</a></div>';
902  }
903  }
904 
905  // Classify 'paid'
906  if ($object->statut == $object::STATUS_VALIDATED && round($remaintopay) == 0 && $object->paid == 0 && $user->rights->don->creer) {
907  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=set_paid&token='.newToken().'">'.$langs->trans("ClassifyPaid")."</a></div>";
908  }
909 
910  // Delete
911  if ($user->rights->don->supprimer) {
912  if ($object->statut == $object::STATUS_CANCELED || $object->statut == $object::STATUS_DRAFT) {
913  print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?rowid='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete")."</a></div>";
914  } else {
915  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans("Delete")."</a></div>";
916  }
917  } else {
918  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans("Delete")."</a></div>";
919  }
920 
921  print "</div>";
922 
923 
924  print '<div class="fichecenter"><div class="fichehalfleft">';
925 
926  /*
927  * Generated documents
928  */
929  $filename = dol_sanitizeFileName($object->id);
930  $filedir = $conf->don->dir_output."/".dol_sanitizeFileName($object->id);
931  $urlsource = $_SERVER['PHP_SELF'].'?rowid='.$object->id;
932  $genallowed = (($object->paid == 0 || $user->admin) && $user->rights->don->lire);
933  $delallowed = $user->rights->don->creer;
934 
935  print $formfile->showdocuments('donation', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf);
936 
937  // Show links to link elements
938  $linktoelem = $form->showLinkToObjectBlock($object, null, array('don'));
939  $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
940 
941  // Show online payment link
942  $useonlinepayment = (isModEnabled('paypal') || isModEnabled('stripe') || isModEnabled('paybox'));
943 
944  if ($useonlinepayment) { //$object->statut != Facture::STATUS_DRAFT &&
945  print '<br><!-- Link to pay -->'."\n";
946  require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
947  print showOnlinePaymentUrl('donation', $object->ref).'<br>';
948  }
949 
950  print '</div><div class="fichehalfright">';
951 
952  print '</div></div>';
953 }
954 
955 llxFooter();
956 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage a WYSIWYG editor.
Class to manage donations.
Definition: don.class.php:40
Class to manage standard extra fields.
Class to build HTML component for third parties management Only common components are here.
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 to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
$parameters
Actions.
Definition: card.php:83
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
donation_prepare_head($object)
Prepare array with list of tabs.
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.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
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.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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...
$formconfirm
if ($action == 'delbookkeepingyear') {
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.