31 require
'../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/pdf.lib.php';
34 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/propal.lib.php';
38 $langs->loadLangs(array(
"admin",
"other",
"errors",
"propal"));
44 $action =
GETPOST(
'action',
'aZ09');
45 $value =
GETPOST(
'value',
'alpha');
46 $modulepart =
GETPOST(
'modulepart',
'aZ09');
48 $label =
GETPOST(
'label',
'alpha');
49 $scandir =
GETPOST(
'scan_dir',
'alpha');
56 include DOL_DOCUMENT_ROOT.
'/core/actions_setmoduleoptions.inc.php';
59 if ($action ==
'updateMask') {
60 $maskconstpropal =
GETPOST(
'maskconstpropal',
'alpha');
61 $maskpropal =
GETPOST(
'maskpropal',
'alpha');
62 if ($maskconstpropal) {
63 $res =
dolibarr_set_const($db, $maskconstpropal, $maskpropal,
'chaine', 0,
'', $conf->entity);
75 } elseif ($action ==
'specimen') {
76 $modele =
GETPOST(
'module',
'alpha');
79 $propal->initAsSpecimen();
82 $file =
''; $classname =
''; $filefound = 0;
83 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
84 foreach ($dirmodels as $reldir) {
85 $file =
dol_buildpath($reldir.
"core/modules/propale/doc/pdf_".$modele.
".modules.php");
86 if (file_exists($file)) {
88 $classname =
"pdf_".$modele;
96 $module =
new $classname($db);
98 if ($module->write_file($propal, $langs) > 0) {
99 header(
"Location: ".DOL_URL_ROOT.
"/document.php?modulepart=propal&file=SPECIMEN.pdf");
107 dol_syslog($langs->trans(
"ErrorModuleNotFound"), LOG_ERR);
109 } elseif ($action ==
'setribchq') {
110 $rib =
GETPOST(
'rib',
'alpha');
111 $chq =
GETPOST(
'chq',
'alpha');
113 $res =
dolibarr_set_const($db,
"FACTURE_RIB_NUMBER", $rib,
'chaine', 0,
'', $conf->entity);
114 $res =
dolibarr_set_const($db,
"FACTURE_CHQ_NUMBER", $chq,
'chaine', 0,
'', $conf->entity);
125 } elseif ($action ==
'set_PROPALE_DRAFT_WATERMARK') {
126 $draft =
GETPOST(
'PROPALE_DRAFT_WATERMARK',
'alpha');
128 $res =
dolibarr_set_const($db,
"PROPALE_DRAFT_WATERMARK", trim($draft),
'chaine', 0,
'', $conf->entity);
138 } elseif ($action ==
'set_PROPOSAL_FREE_TEXT') {
139 $freetext =
GETPOST(
'PROPOSAL_FREE_TEXT',
'restricthtml');
141 $res =
dolibarr_set_const($db,
"PROPOSAL_FREE_TEXT", $freetext,
'chaine', 0,
'', $conf->entity);
152 } elseif ($action ==
'setdefaultduration') {
153 $res =
dolibarr_set_const($db,
"PROPALE_VALIDITY_DURATION", $value,
'chaine', 0,
'', $conf->entity);
164 } elseif ($action ==
'set_BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') {
165 $res =
dolibarr_set_const($db,
"BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL", $value,
'chaine', 0,
'', $conf->entity);
176 } elseif ($action ==
'set') {
179 } elseif ($action ==
'del') {
182 if ($conf->global->PROPALE_ADDON_PDF ==
"$value") {
186 } elseif ($action ==
'setdoc') {
187 if (
dolibarr_set_const($db,
"PROPALE_ADDON_PDF", $value,
'chaine', 0,
'', $conf->entity)) {
188 $conf->global->PROPALE_ADDON_PDF = $value;
196 } elseif ($action ==
'setmod') {
201 } elseif (preg_match(
'/set_(.*)/', $action, $reg)) {
214 header(
"Location: " . $_SERVER[
"PHP_SELF"]);
217 } elseif (preg_match(
'/del_(.*)/', $action, $reg)) {
229 header(
"Location: " . $_SERVER[
"PHP_SELF"]);
241 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
243 llxHeader(
'', $langs->trans(
"PropalSetup"));
247 $linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToModuleList").
'</a>';
248 print
load_fiche_titre($langs->trans(
"PropalSetup"), $linkback,
'title_setup');
259 print
'<table class="noborder centpercent">';
260 print
'<tr class="liste_titre">';
261 print
'<td>'.$langs->trans(
"Name").
"</td>\n";
262 print
'<td>'.$langs->trans(
"Description").
"</td>\n";
263 print
'<td class="nowrap">'.$langs->trans(
"Example").
"</td>\n";
264 print
'<td align="center" width="60">'.$langs->trans(
"Status").
'</td>';
265 print
'<td align="center" width="16">'.$langs->trans(
"ShortInfo").
'</td>';
270 foreach ($dirmodels as $reldir) {
274 $handle = opendir($dir);
275 if (is_resource($handle)) {
276 while (($file = readdir($handle)) !==
false) {
277 if (substr($file, 0, 12) ==
'mod_propale_' && substr($file,
dol_strlen($file) - 3, 3) ==
'php') {
278 $file = substr($file, 0,
dol_strlen($file) - 4);
280 require_once $dir.
'/'.$file.
'.php';
285 if ($module->version ==
'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) {
288 if ($module->version ==
'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
292 if ($module->isEnabled()) {
293 print
'<tr class="oddeven"><td>'.$module->nom.
"</td><td>\n";
294 print $module->info();
298 print
'<td class="nowrap">';
299 $tmp = $module->getExample();
300 if (preg_match(
'/^Error/', $tmp)) {
301 $langs->load(
"errors");
302 print
'<div class="error">'.$langs->trans($tmp).
'</div>';
303 } elseif ($tmp ==
'NotConfigured') {
304 print
'<span class="opacitymedium">'.$langs->trans($tmp).
'</span>';
310 print
'<td class="center">';
311 if ($conf->global->PROPALE_ADDON ==
"$file") {
312 print
img_picto($langs->trans(
"Activated"),
'switch_on');
314 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=setmod&token='.
newToken().
'&value='.urlencode($file).
'">';
315 print
img_picto($langs->trans(
"Disabled"),
'switch_off');
320 $propal =
new Propal($db);
321 $propal->initAsSpecimen();
325 $htmltooltip .=
''.$langs->trans(
"Version").
': <b>'.$module->getVersion().
'</b><br>';
327 $nextval = $module->getNextValue($mysoc, $propal);
328 if (
"$nextval" != $langs->trans(
"NotAvailable")) {
329 $htmltooltip .=
''.$langs->trans(
"NextValue").
': ';
331 if (preg_match(
'/^Error/', $nextval) || $nextval ==
'NotConfigured') {
332 $nextval = $langs->trans($nextval);
334 $htmltooltip .= $nextval.
'<br>';
336 $htmltooltip .= $langs->trans($module->error).
'<br>';
340 print
'<td class="center">';
341 print
$form->textwithpicto(
'', $htmltooltip, 1, 0);
352 print
"</table><br>\n";
364 $sql .=
" FROM ".MAIN_DB_PREFIX.
"document_model";
365 $sql .=
" WHERE type = '".$db->escape($type).
"'";
366 $sql .=
" AND entity = ".$conf->entity;
367 $resql = $db->query($sql);
370 $num_rows = $db->num_rows(
$resql);
371 while ($i < $num_rows) {
372 $array = $db->fetch_array(
$resql);
373 array_push($def, $array[0]);
381 print
"<table class=\"noborder\" width=\"100%\">\n";
382 print
"<tr class=\"liste_titre\">\n";
383 print
" <td>".$langs->trans(
"Name").
"</td>\n";
384 print
" <td>".$langs->trans(
"Description").
"</td>\n";
385 print
'<td align="center" width="40">'.$langs->trans(
"Status").
"</td>\n";
386 print
'<td align="center" width="40">'.$langs->trans(
"Default").
"</td>\n";
387 print
'<td align="center" width="40">'.$langs->trans(
"ShortInfo").
'</td>';
388 print
'<td align="center" width="40">'.$langs->trans(
"Preview").
'</td>';
393 foreach ($dirmodels as $reldir) {
394 foreach (array(
'',
'/doc') as $valdir) {
395 $realpath = $reldir.
"core/modules/propale".$valdir;
399 $handle = opendir($dir);
400 if (is_resource($handle)) {
401 while (($file = readdir($handle)) !==
false) {
407 foreach ($filelist as $file) {
408 if (preg_match(
'/\.modules\.php$/i', $file) && preg_match(
'/^(pdf_|doc_)/', $file)) {
409 if (file_exists($dir.
'/'.$file)) {
410 $name = substr($file, 4,
dol_strlen($file) - 16);
411 $classname = substr($file, 0,
dol_strlen($file) - 12);
413 require_once $dir.
'/'.$file;
414 $module =
new $classname($db);
416 $modulequalified = 1;
417 if ($module->version ==
'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) {
418 $modulequalified = 0;
420 if ($module->version ==
'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
421 $modulequalified = 0;
424 if ($modulequalified) {
425 print
'<tr class="oddeven"><td width="100">';
426 print (empty($module->name) ? $name : $module->name);
428 if (method_exists($module,
'info')) {
429 print $module->info($langs);
431 print $module->description;
436 if (in_array($name, $def)) {
437 print
'<td class="center">'.
"\n";
438 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=del&token='.
newToken().
'&value='.urlencode($name).
'">';
439 print
img_picto($langs->trans(
"Enabled"),
'switch_on');
443 print
"<td align=\"center\">\n";
444 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=set&token='.
newToken().
'&value='.urlencode($name).
'&scan_dir='.urlencode($module->scandir).
'&label='.urlencode($module->name).
'">'.
img_picto($langs->trans(
"Disabled"),
'switch_off').
'</a>';
449 print
"<td align=\"center\">";
450 if ($conf->global->PROPALE_ADDON_PDF ==
"$name") {
451 print
img_picto($langs->trans(
"Default"),
'on');
453 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=setdoc&token='.
newToken().
'&value='.$name.
'&scan_dir='.$module->scandir.
'&label='.urlencode($module->name).
'" alt="'.$langs->trans(
"Default").
'">'.
img_picto($langs->trans(
"Disabled"),
'off').
'</a>';
458 $htmltooltip = $langs->trans(
"Name").
': '.$module->name;
459 $htmltooltip .=
'<br>'.$langs->trans(
"Type").
': '.($module->type ? $module->type : $langs->trans(
"Unknown"));
460 if ($module->type ==
'pdf') {
461 $htmltooltip .=
'<br>'.$langs->trans(
"Width").
'/'.$langs->trans(
"Height").
': '.$module->page_largeur.
'/'.$module->page_hauteur;
463 $htmltooltip .=
'<br>'.$langs->trans(
"Path").
': '.preg_replace(
'/^\//',
'', $realpath).
'/'.$file;
465 $htmltooltip .=
'<br><br><u>'.$langs->trans(
"FeaturesSupported").
':</u>';
466 $htmltooltip .=
'<br>'.$langs->trans(
"Logo").
': '.
yn($module->option_logo, 1, 1);
467 $htmltooltip .=
'<br>'.$langs->trans(
"PaymentMode").
': '.
yn($module->option_modereg, 1, 1);
468 $htmltooltip .=
'<br>'.$langs->trans(
"PaymentConditions").
': '.
yn($module->option_condreg, 1, 1);
469 $htmltooltip .=
'<br>'.$langs->trans(
"MultiLanguage").
': '.
yn($module->option_multilang, 1, 1);
472 $htmltooltip .=
'<br>'.$langs->trans(
"WatermarkOnDraftProposal").
': '.
yn($module->option_draft_watermark, 1, 1);
475 print
'<td class="center">';
476 print
$form->textwithpicto(
'', $htmltooltip, 1, 0);
480 print
'<td class="center">';
481 if ($module->type ==
'pdf') {
482 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?action=specimen&module='.$name.
'">'.
img_object($langs->trans(
"Preview"),
'pdf').
'</a>';
484 print
img_object($langs->trans(
"PreviewNotAvailable"),
'generic');
506 print
load_fiche_titre($langs->trans(
"SuggestedPaymentModesIfNotDefinedInProposal"),
'',
'');
508 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
509 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
511 print
'<table class="noborder centpercent">';
513 print
'<tr class="liste_titre">';
515 print
'<input type="hidden" name="action" value="setribchq">';
516 print $langs->trans(
"PaymentMode").
'</td>';
517 print
'<td align="right">';
518 if (empty($conf->facture->enabled)) {
519 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
"Modify").
'">';
524 print
'<tr class="oddeven">';
525 print
"<td>".$langs->trans(
"SuggestPaymentByRIBOnAccount").
"</td>";
527 if (empty($conf->facture->enabled)) {
528 if (!empty($conf->banque->enabled)) {
529 $sql =
"SELECT rowid, label";
530 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank_account";
531 $sql .=
" WHERE clos = 0";
532 $sql .=
" AND courant = 1";
533 $sql .=
" AND entity IN (".getEntity(
'bank_account').
")";
534 $resql = $db->query($sql);
536 $num = $db->num_rows(
$resql);
539 print
'<select name="rib" class="flat" id="rib">';
540 print
'<option value="0">'.$langs->trans(
"DoNotSuggestPaymentMode").
'</option>';
542 $row = $db->fetch_row(
$resql);
544 print
'<option value="'.$row[0].
'"';
545 print $conf->global->FACTURE_RIB_NUMBER == $row[0] ?
' selected' :
'';
546 print
'>'.$row[1].
'</option>';
552 print
"<i>".$langs->trans(
"NoActiveBankAccountDefined").
"</i>";
556 print
'<span class="opacitymedium">'.$langs->trans(
"BankModuleNotActive").
'</span>';
559 print
'<span class="opacitymedium">'.$langs->trans(
"SeeSetupOfModule", $langs->transnoentitiesnoconv(
"Module30Name")).
'</span>';
563 print
'<tr class="oddeven">';
564 print
"<td>".$langs->trans(
"SuggestPaymentByChequeToAddress").
"</td>";
566 if (empty($conf->facture->enabled)) {
567 print
'<select class="flat" name="chq" id="chq">';
568 print
'<option value="0">'.$langs->trans(
"DoNotSuggestPaymentMode").
'</option>';
569 print
'<option value="-1"'.($conf->global->FACTURE_CHQ_NUMBER ?
' selected' :
'').
'>'.$langs->trans(
"MenuCompanySetup").
' ('.($mysoc->name ? $mysoc->name : $langs->trans(
"NotDefined")).
')</option>';
571 $sql =
"SELECT rowid, label";
572 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank_account";
573 $sql .=
" WHERE clos = 0";
574 $sql .=
" AND courant = 1";
575 $sql .=
" AND entity IN (".getEntity(
'bank_account').
")";
577 $resql = $db->query($sql);
579 $num = $db->num_rows(
$resql);
582 $row = $db->fetch_row(
$resql);
584 print
'<option value="'.$row[0].
'"';
585 print $conf->global->FACTURE_CHQ_NUMBER == $row[0] ?
' selected' :
'';
586 print
'>'.$langs->trans(
"OwnerOfBankAccount", $row[1]).
'</option>';
593 print
'<span class="opacitymedium">'.$langs->trans(
"SeeSetupOfModule", $langs->transnoentitiesnoconv(
"Module30Name")).
'</span>';
609 print
"<table class=\"noborder\" width=\"100%\">";
610 print
"<tr class=\"liste_titre\">";
611 print
"<td>".$langs->trans(
"Parameter").
"</td>\n";
612 print
'<td width="60" align="center">'.$langs->trans(
"Value").
"</td>\n";
613 print
"<td> </td>\n";
617 print
"<form method=\"post\" action=\"".$_SERVER[
"PHP_SELF"].
"\">";
618 print
'<input type="hidden" name="token" value="'.newToken().
'">';
619 print
"<input type=\"hidden\" name=\"action\" value=\"setdefaultduration\">";
620 print
'<tr class="oddeven">';
621 print
'<td>'.$langs->trans(
"DefaultProposalDurationValidity").
'</td>';
622 print
'<td width="60" align="center">'.
"<input size=\"3\" class=\"flat\" type=\"text\" name=\"value\" value=\"".$conf->global->PROPALE_VALIDITY_DURATION.
"\"></td>";
623 print
'<td class="right"><input type="submit" class="button button-edit" value="'.$langs->trans(
"Modify").
'"></td>';
664 $substitutionarray[
'__(AnyTranslationKey)__'] = $langs->trans(
"Translation");
665 $htmltext =
'<i>'.$langs->trans(
"AvailableVariables").
':<br>';
666 foreach ($substitutionarray as $key => $val) {
667 $htmltext .= $key.
'<br>';
671 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
672 print
'<input type="hidden" name="token" value="'.newToken().
'">';
673 print
'<input type="hidden" name="action" value="set_PROPOSAL_FREE_TEXT">';
674 print
'<tr class="oddeven"><td colspan="2">';
675 print
$form->textwithpicto($langs->trans(
"FreeLegalTextOnProposal"), $langs->trans(
"AddCRIfTooLong").
'<br><br>'.$htmltext, 1,
'help',
'', 0, 2,
'freetexttooltip').
'<br>';
676 $variablename =
'PROPOSAL_FREE_TEXT';
677 if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
678 print
'<textarea name="'.$variablename.
'" class="flat" cols="120">'.
getDolGlobalString($variablename).
'</textarea>';
680 include_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
682 print $doleditor->Create();
684 print
'</td><td class="right">';
685 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
"Modify").
'">';
686 print
"</td></tr>\n";
690 print
"<form method=\"post\" action=\"".$_SERVER[
"PHP_SELF"].
"\">";
691 print
'<input type="hidden" name="token" value="'.newToken().
'">';
692 print
"<input type=\"hidden\" name=\"action\" value=\"set_PROPALE_DRAFT_WATERMARK\">";
693 print
'<tr class="oddeven"><td>';
694 print
$form->textwithpicto($langs->trans(
"WatermarkOnDraftProposal"), $htmltext, 1,
'help',
'', 0, 2,
'watermarktooltip').
'<br>';
696 print
'<input class="flat minwidth200" type="text" name="PROPALE_DRAFT_WATERMARK" value="'.dol_escape_htmltag(
getDolGlobalString(
'PROPALE_DRAFT_WATERMARK')).
'">';
697 print
'</td><td class="right">';
698 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
"Modify").
'">';
699 print
"</td></tr>\n";
743 print
"<table class=\"noborder\" width=\"100%\">\n";
744 print
"<tr class=\"liste_titre\">\n";
745 print
" <td>".$langs->trans(
"Name").
"</td>\n";
746 print
" <td>".$langs->trans(
"Value").
"</td>\n";
748 print
"<tr class=\"oddeven\">\n <td width=\"140\">".$langs->trans(
"PathDirectory").
"</td>\n <td>".$conf->propal->multidir_output[$conf->entity].
"</td>\n</tr>\n";
749 print
"</table>\n<br>";
757 print
'<table class="noborder centpercent">';
758 print
'<tr class="liste_titre">';
759 print
'<td>'.$langs->trans(
"Parameter").
'</td>';
760 print
'<td align="center" width="60"></td>';
761 print
'<td width="80"> </td>';
764 print
'<tr class="oddeven"><td colspan="2">';
765 print $langs->trans(
"YouMayFindNotificationsFeaturesIntoModuleNotification").
'<br>';
766 print
'</td><td class="right">';
767 print
"</td></tr>\n";
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
delDocumentModel($name, $type)
Delete document model used by doc generator.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
if($cancel &&!$id) if($action== 'add'&&!$cancel) if($action== 'delete') if($id) $form
Actions.
dolibarr_set_const($db, $name, $value, $type= 'chaine', $visible=0, $note= '', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
addDocumentModel($name, $type, $label= '', $description= '')
Add document model used by doc generator.
if(!function_exists('utf8_encode')) if(!function_exists('utf8_decode')) getDolGlobalString($key, $default= '')
Return dolibarr global constant string value.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOCSRFCHECK')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
dol_strlen($string, $stringencoding= 'UTF-8')
Make a strlen call.
propal_admin_prepare_head()
Return array head with list of tabs to view object informations.
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
img_picto($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt= '', $morecss= '', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
img_object($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
if(isModEnabled('facture')&&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur')&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)&&$user->rights->fournisseur->facture->lire)||(isModEnabled('supplier_invoice')&&$user->rights->supplier_invoice->lire)) if(isModEnabled('don')&&!empty($user->rights->don->lire)) if(isModEnabled('tax')&&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture')&&isModEnabled('commande')&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0)
Return array of possible substitutions for PDF content (without external module substitutions).
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
Class to manage a WYSIWYG editor.
Class to manage proposals.