dolibarr 19.0.3
supplier_invoice.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
6 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
7 * Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
8 * Copyright (C) 2011-2018 Philippe Grand <philippe.grand@atoo-net.com>
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
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/fourn.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
36require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
37
38// Load translation files required by the page
39$langs->loadLangs(array("admin", "other", "orders"));
40
41$action = GETPOST('action', 'aZ09');
42
43$type = GETPOST('type', 'alpha');
44$value = GETPOST('value', 'alpha');
45$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
46
47$label = GETPOST('label', 'alpha');
48$scandir = GETPOST('scan_dir', 'alpha');
49
50$specimenthirdparty = new Societe($db);
51$specimenthirdparty->initAsSpecimen();
52
53$error = 0;
54
55if (!$user->admin) {
57}
58
59
60/*
61 * Actions
62 */
63
64include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
65
66if ($action == 'updateMask') {
67 $maskconstinvoice = GETPOST('maskconstinvoice', 'aZ09');
68 $maskconstcredit = GETPOST('maskconstcredit', 'aZ09');
69 $maskconstdeposit = GETPOST('maskconstdeposit', 'aZ09');
70 $maskinvoice = GETPOST('maskinvoice', 'alpha');
71 $maskcredit = GETPOST('maskcredit', 'alpha');
72 $maskdeposit = GETPOST('maskdeposit', 'alpha');
73
74 if ($maskconstinvoice && preg_match('/_MASK$/', $maskconstinvoice)) {
75 $res = dolibarr_set_const($db, $maskconstinvoice, $maskinvoice, 'chaine', 0, '', $conf->entity);
76 }
77 if ($maskconstcredit && preg_match('/_MASK$/', $maskconstcredit)) {
78 $res = dolibarr_set_const($db, $maskconstcredit, $maskcredit, 'chaine', 0, '', $conf->entity);
79 }
80 if ($maskconstdeposit && preg_match('/_MASK$/', $maskconstdeposit)) {
81 $res = dolibarr_set_const($db, $maskconstdeposit, $maskdeposit, 'chaine', 0, '', $conf->entity);
82 }
83
84 if (!($res > 0)) {
85 $error++;
86 }
87
88 if (!$error) {
89 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
90 } else {
91 setEventMessages($langs->trans("Error"), null, 'errors');
92 }
93}
94
95if ($action == 'specimen') { // For invoices
96 $modele = GETPOST('module', 'alpha');
97
98 $facture = new FactureFournisseur($db);
99 $facture->initAsSpecimen();
100 $facture->thirdparty = $specimenthirdparty; // Define who should has build the invoice (so the supplier)
101
102 // Search template files
103 $file = '';
104 $classname = '';
105 $filefound = 0;
106 $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
107 foreach ($dirmodels as $reldir) {
108 $file = dol_buildpath($reldir."core/modules/supplier_invoice/doc/pdf_".$modele.".modules.php", 0);
109 if (file_exists($file)) {
110 $filefound = 1;
111 $classname = "pdf_".$modele;
112 break;
113 }
114 }
115
116 if ($filefound) {
117 require_once $file;
118
119 $module = new $classname($db, $facture);
120
121 if ($module->write_file($facture, $langs) > 0) {
122 header("Location: ".DOL_URL_ROOT."/document.php?modulepart=facture_fournisseur&file=SPECIMEN.pdf");
123 return;
124 } else {
125 setEventMessages($module->error, $module->errors, 'errors');
126 dol_syslog($module->error, LOG_ERR);
127 }
128 } else {
129 setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
130 dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
131 }
132} elseif ($action == 'set') {
133 // Activate a model
134 $ret = addDocumentModel($value, $type, $label, $scandir);
135} elseif ($action == 'del') {
136 $ret = delDocumentModel($value, $type);
137 if ($ret > 0) {
138 if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF == "$value") {
139 dolibarr_del_const($db, 'INVOICE_SUPPLIER_ADDON_PDF', $conf->entity);
140 }
141 }
142} elseif ($action == 'setdoc') {
143 // Set default model
144 if (dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) {
145 // La constante qui a ete lue en avant du nouveau set
146 // on passe donc par une variable pour avoir un affichage coherent
147 $conf->global->INVOICE_SUPPLIER_ADDON_PDF = $value;
148 }
149
150 // On active le modele
151 $ret = delDocumentModel($value, $type);
152 if ($ret > 0) {
153 $ret = addDocumentModel($value, $type, $label, $scandir);
154 }
155} elseif ($action == 'unsetdoc') {
156 dolibarr_del_const($db, "INVOICE_SUPPLIER_ADDON_PDF", $conf->entity);
157}
158
159if ($action == 'setmod') {
160 // TODO Verifier si module numerotation choisi peut etre active
161 // par appel methode canBeActivated
162
163 dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_NUMBER", $value, 'chaine', 0, '', $conf->entity);
164}
165
166if ($action == 'addcat') {
167 $fourn = new Fournisseur($db);
168 $fourn->CreateCategory($user, GETPOST('cat', 'alphanohtml'));
169}
170
171if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') {
172 $freetext = GETPOST('SUPPLIER_INVOICE_FREE_TEXT', 'restricthtml'); // No alpha here, we want exact string
173
174 $res = dolibarr_set_const($db, "SUPPLIER_INVOICE_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity);
175
176 if (!($res > 0)) {
177 $error++;
178 }
179
180 if (!$error) {
181 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
182 } else {
183 setEventMessages($langs->trans("Error"), null, 'errors');
184 }
185}
186
187
188/*
189 * View
190 */
191
192$form = new Form($db);
193
194$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
195
196llxHeader("", "");
197
198$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
199print load_fiche_titre($langs->trans("SuppliersSetup"), $linkback, 'title_setup');
200
201print "<br>";
202
204
205print dol_get_fiche_head($head, 'invoice', $langs->trans("Suppliers"), -1, 'company');
206
207
208// Supplier invoice numbering module
209
210print load_fiche_titre($langs->trans("SuppliersInvoiceNumberingModel"), '', '');
211
212print '<div class="div-table-responsive-no-min">';
213print '<table class="noborder centpercent">';
214print '<tr class="liste_titre">';
215print '<td width="100">'.$langs->trans("Name").'</td>';
216print '<td>'.$langs->trans("Description").'</td>';
217print '<td>'.$langs->trans("Example").'</td>';
218print '<td align="center" width="60">'.$langs->trans("Status").'</td>';
219print '<td align="center" width="16">'.$langs->trans("ShortInfo").'</td>';
220print "</tr>\n";
221
222clearstatcache();
223
224foreach ($dirmodels as $reldir) {
225 $dir = dol_buildpath($reldir."core/modules/supplier_invoice");
226
227 if (is_dir($dir)) {
228 $handle = opendir($dir);
229 if (is_resource($handle)) {
230 while (($file = readdir($handle)) !== false) {
231 if (substr($file, 0, 24) == 'mod_facture_fournisseur_' && substr($file, dol_strlen($file) - 3, 3) == 'php') {
232 $file = substr($file, 0, dol_strlen($file) - 4);
233
234 require_once $dir.'/'.$file.'.php';
235
236 $module = new $file();
237
238 if ($module->isEnabled()) {
239 // Show modules according to features level
240 if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) {
241 continue;
242 }
243 if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) {
244 continue;
245 }
246
247
248 print '<tr class="oddeven"><td>'.$module->nom."</td><td>\n";
249 print $module->info($langs);
250 print '</td>';
251
252 // Show example of numbering module
253 print '<td class="nowrap">';
254 $tmp = $module->getExample();
255 if (preg_match('/^Error/', $tmp)) {
256 $langs->load("errors");
257 print '<div class="error">'.$langs->trans($tmp).'</div>';
258 } elseif ($tmp == 'NotConfigured') {
259 print '<span class="opacitymedium">'.$langs->trans($tmp).'</span>';
260 } else {
261 print $tmp;
262 }
263 print '</td>'."\n";
264
265 print '<td class="center">';
266 if ($conf->global->INVOICE_SUPPLIER_ADDON_NUMBER == "$file") {
267 print img_picto($langs->trans("Activated"), 'switch_on');
268 } else {
269 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setmod&token='.newToken().'&value='.urlencode($file).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
270 }
271 print '</td>';
272
273 $invoice = new FactureFournisseur($db);
274 $invoice->initAsSpecimen();
275
276 // Info
277 $htmltooltip = '';
278 $htmltooltip .= ''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
279 $nextval = $module->getNextValue($mysoc, $invoice);
280 if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
281 $htmltooltip .= ''.$langs->trans("NextValue").': ';
282 if ($nextval) {
283 if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured') {
284 $nextval = $langs->trans($nextval);
285 }
286 $htmltooltip .= $nextval.'<br>';
287 } else {
288 $htmltooltip .= $langs->trans($module->error).'<br>';
289 }
290 }
291
292 print '<td class="center">';
293 print $form->textwithpicto('', $htmltooltip, 1, 0);
294 print '</td>';
295
296 print '</tr>';
297 }
298 }
299 }
300 closedir($handle);
301 }
302 }
303}
304
305print '</table></div><br>';
306
307
308
309
310/*
311 * Documents models for supplier invoices
312 */
313
314print load_fiche_titre($langs->trans("BillsPDFModules"), '', '');
315
316// Defini tableau def de modele
317$def = array();
318
319$sql = "SELECT nom";
320$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
321$sql .= " WHERE type = 'invoice_supplier'";
322$sql .= " AND entity = ".$conf->entity;
323
324$resql = $db->query($sql);
325if ($resql) {
326 $i = 0;
327 $num_rows = $db->num_rows($resql);
328 while ($i < $num_rows) {
329 $array = $db->fetch_array($resql);
330 array_push($def, $array[0]);
331 $i++;
332 }
333} else {
334 dol_print_error($db);
335}
336
337print '<div class="div-table-responsive-no-min">';
338print '<table class="noborder centpercent">'."\n";
339print '<tr class="liste_titre">'."\n";
340print '<td width="100">'.$langs->trans("Name").'</td>'."\n";
341print '<td>'.$langs->trans("Description").'</td>'."\n";
342print '<td align="center" width="60">'.$langs->trans("Status").'</td>'."\n";
343print '<td align="center" width="60">'.$langs->trans("Default").'</td>'."\n";
344print '<td align="center" width="40">'.$langs->trans("ShortInfo").'</td>';
345print '<td align="center" width="40">'.$langs->trans("Preview").'</td>';
346print '</tr>'."\n";
347
348clearstatcache();
349
350foreach ($dirmodels as $reldir) {
351 $realpath = $reldir."core/modules/supplier_invoice/doc";
352 $dir = dol_buildpath($realpath);
353
354 if (is_dir($dir)) {
355 $handle = opendir($dir);
356
357
358 if (is_resource($handle)) {
359 while (($file = readdir($handle)) !== false) {
360 if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
361 $name = substr($file, 4, dol_strlen($file) - 16);
362 $classname = substr($file, 0, dol_strlen($file) - 12);
363
364 require_once $dir.'/'.$file;
365 $module = new $classname($db, new FactureFournisseur($db));
366
367
368 print "<tr class=\"oddeven\">\n";
369 print "<td>";
370 print(empty($module->name) ? $name : $module->name);
371 print "</td>\n";
372 print "<td>\n";
373 require_once $dir.'/'.$file;
374 $module = new $classname($db, $specimenthirdparty);
375 if (method_exists($module, 'info')) {
376 print $module->info($langs);
377 } else {
378 print $module->description;
379 }
380
381 print "</td>\n";
382
383 // Active
384 if (in_array($name, $def)) {
385 print '<td class="center">'."\n";
386 //if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name")
387 //{
388 // Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
389 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&amp;type=invoice_supplier">';
390 print img_picto($langs->trans("Enabled"), 'switch_on');
391 print '</a>';
392 /*}
393 else
394 {
395 print img_picto($langs->trans("Enabled"),'switch_on');
396 }*/
397 print "</td>";
398 } else {
399 print '<td class="center">'."\n";
400 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&amp;type=invoice_supplier">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
401 print "</td>";
402 }
403
404 // Default
405 print '<td class="center">';
406 if (getDolGlobalString("INVOICE_SUPPLIER_ADDON_PDF") == "$name") {
407 //print img_picto($langs->trans("Default"),'on');
408 // Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
409 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
410 } else {
411 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
412 }
413 print '</td>';
414
415 // Info
416 $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
417 $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
418 $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
419 $htmltooltip .= '<br>'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file;
420
421 $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
422 $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
423 $htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
424 $htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
425 print '<td class="center">';
426 print $form->textwithpicto('', $htmltooltip, 1, 0);
427 print '</td>';
428 print '<td class="center">';
429 print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.urlencode($name).'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
430 print '</td>';
431
432 print "</tr>\n";
433 }
434 }
435
436 closedir($handle);
437 }
438 }
439}
440
441print '</table></div><br>';
442
443/*
444 * Other options
445 */
446
447print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
448print '<input type="hidden" name="token" value="'.newToken().'">';
449print '<input type="hidden" name="action" value="set_SUPPLIER_INVOICE_FREE_TEXT">';
450
451print load_fiche_titre($langs->trans("OtherOptions"), '', '');
452
453print '<div class="div-table-responsive-no-min">';
454print '<table class="noborder centpercent">';
455print '<tr class="liste_titre">';
456print '<td>'.$langs->trans("Parameter").'</td>';
457print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
458print '<td width="80">&nbsp;</td>';
459print "</tr>\n";
460
461$substitutionarray = pdf_getSubstitutionArray($langs, null, null, 2);
462$substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
463$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
464foreach ($substitutionarray as $key => $val) {
465 $htmltext .= $key.'<br>';
466}
467$htmltext .= '</i>';
468
469print '<tr class="oddeven"><td colspan="2">';
470print $form->textwithpicto($langs->trans("FreeLegalTextOnInvoices"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'<br>';
471$variablename = 'SUPPLIER_INVOICE_FREE_TEXT';
472if (!getDolGlobalString('PDF_ALLOW_HTML_FOR_FREE_TEXT')) {
473 print '<textarea name="'.$variablename.'" class="flat" cols="120">'.getDolGlobalString($variablename).'</textarea>';
474} else {
475 include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
476 $doleditor = new DolEditor($variablename, getDolGlobalString($variablename), '', 80, 'dolibarr_notes');
477 print $doleditor->Create();
478}
479print '</td><td class="right">';
480print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'">';
481print "</td></tr>\n";
482
483print '</table></div><br>';
484
485print '</form>';
486
487
488/*
489 * Notifications
490 */
491
492print load_fiche_titre($langs->trans("Notifications"), '', '');
493
494print '<div class="div-table-responsive-no-min">';
495print '<table class="noborder centpercent">';
496print '<tr class="liste_titre">';
497print '<td>'.$langs->trans("Parameter").'</td>';
498print '<td align="center" width="60"></td>';
499print '<td width="80">&nbsp;</td>';
500print "</tr>\n";
501
502print '<tr class="oddeven"><td colspan="2">';
503print $langs->trans("YouMayFindNotificationsFeaturesIntoModuleNotification").'<br>';
504print '</td><td class="right">';
505print "</td></tr>\n";
506
507print '</table>';
508print '</div>';
509
510// End of page
511llxFooter();
512$db->close();
addDocumentModel($name, $type, $label='', $description='')
Add document model used by doc generator.
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).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
delDocumentModel($name, $type)
Delete document model used by doc generator.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to manage a WYSIWYG editor.
Class to manage suppliers invoices.
Class to manage generation of HTML components Only common components must be here.
Class to manage suppliers.
Class to manage third parties objects (customers, suppliers, prospects...)
supplierorder_admin_prepare_head()
Return array head with list of tabs to view object informations.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
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.
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_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getDolGlobalInt($key, $default=0)
Return a 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)
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
Definition pdf.lib.php:762
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:124
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.