dolibarr 19.0.4
printing.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2013-2016 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2014-2015 Frederic France <frederic.france@free.fr>
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
25// Load Dolibarr environment
26require '../../main.inc.php';
27
28require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
30require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
31require_once DOL_DOCUMENT_ROOT.'/printing/lib/printing.lib.php';
32use OAuth\Common\Storage\DoliStorage;
33
34// Load translation files required by the page
35$langs->loadLangs(array('admin', 'printing', 'oauth'));
36
37$action = GETPOST('action', 'aZ09');
38$mode = GETPOST('mode', 'alpha');
39$value = GETPOST('value', 'alpha', 0, null, null, 1); // The value may be __google__docs so we force disable of replace
40$varname = GETPOST('varname', 'alpha');
41$driver = GETPOST('driver', 'alpha');
42
43if (!empty($driver)) {
44 $langs->load($driver);
45}
46
47if (!$mode) {
48 $mode = 'config';
49}
50
51$OAUTH_SERVICENAME_GOOGLE = 'Google';
52
53if (!$user->admin) {
55}
56
57
58/*
59 * Action
60 */
61
62if (($mode == 'test' || $mode == 'setup') && empty($driver)) {
63 setEventMessages($langs->trans('PleaseSelectaDriverfromList'), null);
64 header("Location: ".$_SERVER['PHP_SELF'].'?mode=config');
65 exit;
66}
67
68if ($action == 'setconst' && $user->admin) {
69 $error = 0;
70 $db->begin();
71 foreach ($_POST['setupdriver'] as $setupconst) {
72 //print '<pre>'.print_r($setupconst, true).'</pre>';
73 $result = dolibarr_set_const($db, $setupconst['varname'], $setupconst['value'], 'chaine', 0, '', $conf->entity);
74 if (!($result > 0)) {
75 $error++;
76 }
77 }
78
79 if (!$error) {
80 $db->commit();
81 setEventMessages($langs->trans("SetupSaved"), null);
82 } else {
83 $db->rollback();
84 dol_print_error($db);
85 }
86 $action = '';
87}
88
89if ($action == 'setvalue' && $user->admin) {
90 $db->begin();
91
92 $result = dolibarr_set_const($db, $varname, $value, 'chaine', 0, '', $conf->entity);
93 if (!($result > 0)) {
94 $error++;
95 }
96
97 if (!$error) {
98 $db->commit();
99 setEventMessages($langs->trans("SetupSaved"), null);
100 } else {
101 $db->rollback();
102 dol_print_error($db);
103 }
104 $action = '';
105}
106
107
108/*
109 * View
110 */
111
112$form = new Form($db);
113
114llxHeader('', $langs->trans("PrintingSetup"));
115
116$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
117print load_fiche_titre($langs->trans("PrintingSetup"), $linkback, 'title_setup');
118
119$head = printingAdminPrepareHead($mode);
120
121if ($mode == 'setup' && $user->admin) {
122 print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?mode=setup&amp;driver='.$driver.'" autocomplete="off">';
123 print '<input type="hidden" name="token" value="'.newToken().'">';
124 print '<input type="hidden" name="action" value="setconst">';
125
126 print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic');
127
128 print $langs->trans("PrintingDriverDesc".$driver)."<br><br>\n";
129
130 print '<table class="noborder centpercent">'."\n";
131 print '<tr class="liste_titre">';
132 print '<th>'.$langs->trans("Parameters").'</th>';
133 print '<th>'.$langs->trans("Value").'</th>';
134 print '<th>&nbsp;</th>';
135 print "</tr>\n";
136 $submit_enabled = 0;
137
138 if (!empty($driver)) {
139 if (!empty($conf->modules_parts['printing'])) {
140 $dirmodels = array_merge(array('/core/modules/printing/'), (array) $conf->modules_parts['printing']);
141 } else {
142 $dirmodels = array('/core/modules/printing/');
143 }
144
145 foreach ($dirmodels as $dir) {
146 if (file_exists(dol_buildpath($dir, 0).$driver.'.modules.php')) {
147 $classfile = dol_buildpath($dir, 0).$driver.'.modules.php';
148 break;
149 }
150 }
151 require_once $classfile;
152 $classname = 'printing_'.$driver;
153 $printer = new $classname($db);
154 $langs->load($printer::LANGFILE);
155
156 $i = 0;
157 $submit_enabled = 0;
158 foreach ($printer->conf as $key) {
159 switch ($key['type']) {
160 case "text":
161 case "password":
162 print '<tr class="oddeven">';
163 print '<td'.($key['required'] ? ' class=required' : '').'>'.$langs->trans($key['varname']).'</td>';
164 print '<td><input class="width100" type="'.(empty($key['type']) ? 'text' : $key['type']).'" name="setupdriver['.$i.'][value]" value="'.getDolGlobalString($key['varname']).'"';
165 print isset($key['moreattributes']) ? ' '.$key['moreattributes'] : '';
166 print '><input type="hidden" name="setupdriver['.$i.'][varname]" value="'.$key['varname'].'"></td>';
167 print '<td>&nbsp;'.($key['example'] != '' ? $langs->trans("Example").' : '.$key['example'] : '').'</td>';
168 print '</tr>'."\n";
169 break;
170 case "info": // Google Api setup or Google OAuth Token
171 print '<tr class="oddeven">';
172 print '<td'.($key['required'] ? ' class=required' : '').'>';
173 if ($key['varname'] == 'PRINTGCP_TOKEN_ACCESS') {
174 print $langs->trans("IsTokenGenerated");
175 } else {
176 print $langs->trans($key['varname']);
177 }
178 print '</td>';
179 print '<td>'.$langs->trans($key['info']).'</td>';
180 print '<td>';
181 //var_dump($key);
182 if ($key['varname'] == 'PRINTGCP_TOKEN_ACCESS') {
183 // Delete remote tokens
184 if (!empty($key['delete'])) {
185 print '<a class="button" href="'.$key['delete'].'">'.$langs->trans('DeleteAccess').'</a><br><br>';
186 }
187 // Request remote token
188 print '<a class="button" href="'.$key['renew'].'">'.$langs->trans('RequestAccess').'</a><br><br>';
189 // Check remote access
190 print $langs->trans("ToCheckDeleteTokenOnProvider", $OAUTH_SERVICENAME_GOOGLE).': <a href="https://security.google.com/settings/security/permissions" target="_google">https://security.google.com/settings/security/permissions</a>';
191 }
192 print '</td>';
193 print '</tr>'."\n";
194 break;
195 case "submit":
196 if ($key['enabled']) {
197 $submit_enabled = 1;
198 }
199 break;
200 }
201 $i++;
202
203 if ($key['varname'] == 'PRINTGCP_TOKEN_ACCESS') {
204 $keyforprovider = ''; // @BUG This must be set
205
206 // Token
207 print '<tr class="oddeven">';
208 print '<td>'.$langs->trans("Token").'</td>';
209 print '<td colspan="2">';
210 $tokenobj = null;
211 // Dolibarr storage
212 $storage = new DoliStorage($db, $conf, $keyforprovider);
213 try {
214 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME_GOOGLE);
215 } catch (Exception $e) {
216 // Return an error if token not found
217 }
218 if (is_object($tokenobj)) {
219 //var_dump($tokenobj);
220 print $tokenobj->getAccessToken().'<br>';
221 //print 'Refresh: '.$tokenobj->getRefreshToken().'<br>';
222 //print 'EndOfLife: '.$tokenobj->getEndOfLife().'<br>';
223 //var_dump($tokenobj->getExtraParams());
224 /*print '<br>Extra: <br><textarea class="quatrevingtpercent">';
225 print ''.join(',',$tokenobj->getExtraParams());
226 print '</textarea>';*/
227 }
228 print '</td>';
229 print '</tr>'."\n";
230 }
231 }
232 } else {
233 print $langs->trans('PleaseSelectaDriverfromList');
234 }
235
236 print '</table>';
237
238 print dol_get_fiche_end();
239
240 if (!empty($driver)) {
241 if ($submit_enabled) {
242 print '<div class="center"><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Save")).'"></div>';
243 }
244 }
245
246 print '</form>';
247}
248if ($mode == 'config' && $user->admin) {
249 print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic');
250
251 print $langs->trans("PrintingDesc")."<br><br>\n";
252
253 print '<table class="noborder centpercent">'."\n";
254
255 print '<tr class="liste_titre">';
256 print '<th>'.$langs->trans("Description").'</th>';
257 print '<th class="center">'.$langs->trans("Active").'</th>';
258 print '<th class="center">'.$langs->trans("Setup").'</th>';
259 print '<th class="center">'.$langs->trans("TargetedPrinter").'</th>';
260 print "</tr>\n";
261
262 $object = new PrintingDriver($db);
263 $result = $object->listDrivers($db, 10);
264
265 if (!empty($conf->modules_parts['printing'])) {
266 $dirmodels = array_merge(array('/core/modules/printing/'), (array) $conf->modules_parts['printing']);
267 } else {
268 $dirmodels = array('/core/modules/printing/');
269 }
270
271 foreach ($result as $tmpdriver) {
272 foreach ($dirmodels as $dir) {
273 if (file_exists(dol_buildpath($dir, 0).$tmpdriver.'.modules.php')) {
274 $classfile = dol_buildpath($dir, 0).$tmpdriver.'.modules.php';
275 break;
276 }
277 }
278 require_once $classfile;
279 $classname = 'printing_'.$tmpdriver;
280 $printer = new $classname($db);
281 $langs->load($printer::LANGFILE);
282 //print '<pre>'.print_r($printer, true).'</pre>';
283
284 print '<tr class="oddeven">';
285 print '<td>'.img_picto('', $printer->picto).' '.$langs->trans($printer->desc).'</td>';
286 print '<td class="center">';
287 if (!empty($conf->use_javascript_ajax)) {
288 print ajax_constantonoff($printer->active);
289 } else {
290 if (!getDolGlobalString($printer->conf)) {
291 print '<a href="'.$_SERVER['PHP_SELF'].'?action=setvalue&token='.newToken().'&varname='.urlencode($printer->active).'&value=1">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
292 } else {
293 print '<a href="'.$_SERVER['PHP_SELF'].'?action=setvalue&token='.newToken().'&varname='.urlencode($printer->active).'&value=0">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
294 }
295 }
296 print '<td class="center"><a href="'.$_SERVER['PHP_SELF'].'?mode=setup&token='.newToken().'&driver='.urlencode($printer->name).'">'.img_picto('', 'setup').'</a></td>';
297 print '<td class="center"><a href="'.$_SERVER['PHP_SELF'].'?mode=test&token='.newToken().'&driver='.urlencode($printer->name).'">'.img_picto('', 'setup').'</a></td>';
298 print '</tr>'."\n";
299 }
300
301 print '</table>';
302
303 print dol_get_fiche_end();
304}
305
306if ($mode == 'test' && $user->admin) {
307 print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic');
308
309 print $langs->trans('PrintTestDesc'.$driver)."<br><br>\n";
310
311 print '<table class="noborder centpercent">';
312 if (!empty($driver)) {
313 if (!empty($conf->modules_parts['printing'])) {
314 $dirmodels = array_merge(array('/core/modules/printing/'), (array) $conf->modules_parts['printing']);
315 } else {
316 $dirmodels = array('/core/modules/printing/');
317 }
318
319 foreach ($dirmodels as $dir) {
320 if (file_exists(dol_buildpath($dir, 0).$driver.'.modules.php')) {
321 $classfile = dol_buildpath($dir, 0).$driver.'.modules.php';
322 break;
323 }
324 }
325 require_once $classfile;
326 $classname = 'printing_'.$driver;
327 $langs->load($driver);
328 $printer = new $classname($db);
329 $langs->load($printer::LANGFILE);
330 //print '<pre>'.print_r($printer, true).'</pre>';
331 if (count($printer->getlistAvailablePrinters())) {
332 if ($printer->listAvailablePrinters() == 0) {
333 print $printer->resprint;
334 } else {
335 setEventMessages($printer->error, $printer->errors, 'errors');
336 }
337 } else {
338 print $langs->trans('PleaseConfigureDriverfromList');
339 }
340 } else {
341 print $langs->trans('PleaseSelectaDriverfromList');
342 }
343 print '</table>';
344
345 print dol_get_fiche_end();
346}
347
348if ($mode == 'userconf' && $user->admin) {
349 print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic');
350
351 print $langs->trans('PrintUserConfDesc'.$driver)."<br><br>\n";
352
353 print '<table class="noborder centpercent">';
354 print '<tr class="liste_titre">';
355 print '<th>'.$langs->trans("User").'</th>';
356 print '<th>'.$langs->trans("PrintModule").'</th>';
357 print '<th>'.$langs->trans("PrintDriver").'</th>';
358 print '<th>'.$langs->trans("Printer").'</th>';
359 print '<th>'.$langs->trans("PrinterLocation").'</th>';
360 print '<th>'.$langs->trans("PrinterId").'</th>';
361 print '<th>'.$langs->trans("NumberOfCopy").'</th>';
362 print '<th class="center">'.$langs->trans("Delete").'</th>';
363 print "</tr>\n";
364 $sql = 'SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login FROM '.MAIN_DB_PREFIX.'printing as p, '.MAIN_DB_PREFIX.'user as u WHERE p.userid=u.rowid';
365 $resql = $db->query($sql);
366 while ($row = $db->fetch_array($resql)) {
367 print '<tr class="oddeven">';
368 print '<td>'.$row['login'].'</td>';
369 print '<td>'.$row['module'].'</td>';
370 print '<td>'.$row['driver'].'</td>';
371 print '<td>'.$row['printer_name'].'</td>';
372 print '<td>'.$row['printer_location'].'</td>';
373 print '<td>'.$row['printer_id'].'</td>';
374 print '<td>'.$row['copy'].'</td>';
375 print '<td class="center">'.img_picto($langs->trans("Delete"), 'delete').'</td>';
376 print "</tr>\n";
377 }
378 print '</table>';
379
380 print dol_get_fiche_end();
381}
382
383// End of page
384llxFooter();
385$db->close();
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).
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 generation of HTML components Only common components must be here.
Parent class of emailing target selectors modules.
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.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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.
printingAdminPrepareHead($mode)
Define head array for tabs of printing tools setup pages.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.