dolibarr  17.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
26 require '../../main.inc.php';
27 
28 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
31 require_once DOL_DOCUMENT_ROOT.'/printing/lib/printing.lib.php';
32 use 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 
43 if (!empty($driver)) {
44  $langs->load($driver);
45 }
46 
47 if (!$mode) {
48  $mode = 'config';
49 }
50 
51 $OAUTH_SERVICENAME_GOOGLE = 'Google';
52 
53 if (!$user->admin) {
55 }
56 
57 
58 /*
59  * Action
60  */
61 
62 if (($mode == 'test' || $mode == 'setup') && empty($driver)) {
63  setEventMessages($langs->trans('PleaseSelectaDriverfromList'), null);
64  header("Location: ".$_SERVER['PHP_SELF'].'?mode=config');
65  exit;
66 }
67 
68 if ($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 
89 if ($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 
114 llxHeader('', $langs->trans("PrintingSetup"));
115 
116 $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
117 print load_fiche_titre($langs->trans("PrintingSetup"), $linkback, 'title_setup');
118 
119 $head = printingAdminPrepareHead($mode);
120 
121 if ($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 size="32" type="'.(empty($key['type']) ? 'text' : $key['type']).'" name="setupdriver['.$i.'][value]" value="'.$conf->global->{$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("Modify")).'"></div>';
243  }
244  }
245 
246  print '</form>';
247 }
248 if ($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 $driver) {
272  foreach ($dirmodels as $dir) {
273  if (file_exists(dol_buildpath($dir, 0).$driver.'.modules.php')) {
274  $classfile = dol_buildpath($dir, 0).$driver.'.modules.php';
275  break;
276  }
277  }
278  require_once $classfile;
279  $classname = 'printing_'.$driver;
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 (empty($conf->global->{$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 
306 if ($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 
348 if ($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
384 llxFooter();
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).
Definition: admin.lib.php:632
ajax_constantonoff($code, $input=array(), $entity=null, $revertonoff=0, $strict=0, $forcereload=0, $marginleftonlyshort=2, $forcenoajax=0, $setzeroinsteadofdel=0, $suffix='', $mode='')
On/off button for constant.
Definition: ajax.lib.php:600
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 generation of HTML components Only common components must be here.
Parent class of emailing target selectors modules.
if(isModEnabled('facture') &&!empty($user->rights->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') &&!empty($user->rights->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)) $resql
Social contributions to pay.
Definition: index.php:745
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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='')
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
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.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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.