diff --git a/htdocs/core/actions_printing.inc.php b/htdocs/core/actions_printing.inc.php index eeecc25fbd2..030e7016a55 100644 --- a/htdocs/core/actions_printing.inc.php +++ b/htdocs/core/actions_printing.inc.php @@ -47,17 +47,19 @@ if ($action == 'print_file' and $user->rights->printing->read) if (! empty($conf->global->{$printer->active})) { $subdir=(GETPOST('printer', 'alpha')=='expedition'?'sending':''); $ret = $printer->print_file(GETPOST('file', 'alpha'), GETPOST('printer', 'alpha'), $subdir); - if ($ret < 0) { + if ($ret > 0) { + //print '
'.print_r($printer->errors, true).'
'; setEventMessages($printer->error, $printer->errors, 'errors'); } if ($ret==0) { - setEventMessages($printer->error, $printer->errors, 'warning'); + //print '
'.print_r($printer->errors, true).'
'; + setEventMessages($printer->error, $printer->errors); setEventMessages($langs->trans("FileWasSentToPrinter", basename(GETPOST('file'))).' '.$langs->trans("ViaModule").' '.$printer->name, null); $printed++; } } } - if ($printed==0) setEventMessages($langs->trans("NoActivePrintingModuleFound"), null); + if ($printed==0) setEventMessages($langs->trans("NoActivePrintingModuleFound"), null, 'warning'); } else { setEventMessages($langs->trans("NoModuleFound"), null, 'warning'); } diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index 4ce1e18b390..ab838270372 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -42,6 +42,8 @@ class printing_printgcp extends PrintingDriver var $conf = array(); var $google_id = ''; var $google_secret = ''; + var $error; + var $errors = array(); var $db; const LOGIN_URL = 'https://accounts.google.com/o/oauth2/token'; @@ -122,11 +124,12 @@ class printing_printgcp extends PrintingDriver /** * Return list of available printers * - * @return string html list of printers + * @return int 0 if OK, >0 if KO */ function listAvailablePrinters() { global $bc, $conf, $langs; + $error = 0; $langs->load('printing'); $var=true; @@ -145,7 +148,7 @@ class printing_printgcp extends PrintingDriver $var = true; foreach ($list['available'] as $printer_det) { - $var=!$var; + $var = !$var; $html.= ""; $html.= ''.$printer_det['name'].''; $html.= ''.$printer_det['displayName'].''; @@ -165,8 +168,8 @@ class printing_printgcp extends PrintingDriver $html.= ''; $html.= ''."\n"; } - - return $html; + $this->resprint = $html; + return $error; } @@ -240,15 +243,19 @@ class printing_printgcp extends PrintingDriver * @param string $file file * @param string $module module * @param string $subdir subdir for file - * @return int 0 if OK, <0 if KO + * @return int 0 if OK, >0 if KO */ function print_file($file, $module, $subdir='') { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + global $conf, $user, $db; + $error = 0; $fileprint=$conf->{$module}->dir_output; if ($subdir!='') $fileprint.='/'.$subdir; $fileprint.='/'.$file; + $mimetype = dol_mimetype($fileprint); // select printer uri for module order, propal,... $sql = "SELECT rowid, printer_id, copy FROM ".MAIN_DB_PREFIX."printing WHERE module='".$module."' AND driver='printgcp' AND userid=".$user->id; $result = $db->query($sql); @@ -267,18 +274,18 @@ class printing_printgcp extends PrintingDriver } else { - return 'NoDefaultPrinterDefined'; + $this->errors[] = 'NoDefaultPrinterDefined'; + $error++; + return $error; } } } else dol_print_error($db); - $ret = $this->sendPrintToPrinter($printer_id, $file, $fileprint, 'application/pdf'); - $this->error = 'PRINTGCP: '.$ret['errormessage']; - if ($ret['status']==1) - return 0; - else - return -1; + $ret = $this->sendPrintToPrinter($printer_id, $file, $fileprint, $mimetype); + $this->errors = 'PRINTGCP: '.mb_convert_encoding($ret['errormessage'], "UTF-8"); + if ($ret['status']!=1) $error++; + return $error; } /** diff --git a/htdocs/core/modules/printing/printipp.modules.php b/htdocs/core/modules/printing/printipp.modules.php index 6e8ad305339..eaf655d7edf 100644 --- a/htdocs/core/modules/printing/printipp.modules.php +++ b/htdocs/core/modules/printing/printipp.modules.php @@ -41,6 +41,7 @@ class printing_printipp extends PrintingDriver var $user; var $password; var $error; + var $errors = array(); var $db; @@ -72,11 +73,12 @@ class printing_printipp extends PrintingDriver * @param string $module module * @param string $subdir subdirectory of document like for expedition subdir is sendings * - * @return int 0 if OK, <0 if KO + * @return int 0 if OK, >0 if KO */ function print_file($file, $module, $subdir='') { global $conf, $user, $db; + $error = 0; include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php'; @@ -108,8 +110,9 @@ class printing_printipp extends PrintingDriver } else { - $this->error = 'NoDefaultPrinterDefined'; - return -1; + $this->errors[] = 'NoDefaultPrinterDefined'; + $error++; + return $error; } } } @@ -121,19 +124,26 @@ class printing_printipp extends PrintingDriver if ($subdir!='') $fileprint.='/'.$subdir; $fileprint.='/'.$file; $ipp->setData($fileprint); - $ipp->printJob(); + try { + $ipp->printJob(); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $error++; + } + if ($error==0) $this->errors[] = 'PRINTIPP: Job added'; - return 0; + return $error; } /** * Return list of available printers * - * @return string html list of printers + * @return int 0 if OK, >0 if KO */ function listAvailablePrinters() { global $bc, $conf, $langs; + $error = 0; $var=true; $html = ''; @@ -180,8 +190,8 @@ class printing_printipp extends PrintingDriver $html.= ''; $html.= ''."\n"; } - - return $html; + $this->resprint = $html; + return $error; } /** diff --git a/htdocs/printing/admin/printing.php b/htdocs/printing/admin/printing.php index da7de1bbdfb..6a28f352578 100644 --- a/htdocs/printing/admin/printing.php +++ b/htdocs/printing/admin/printing.php @@ -256,7 +256,11 @@ if ($mode == 'test' && $user->admin) $printer = new $classname($db); //print '
'.print_r($printer, true).'
'; if (count($printer->getlist_available_printers())) { - print $printer->listAvailablePrinters(); + if ($printer->listAvailablePrinters()==0) { + print $printer->resprint; + } else { + setEventMessages($printer->error, $printer->errors, 'errors'); + } } else { print $langs->trans('PleaseConfigureDriverfromList');