app=$app;
}
function Drucken($drucker,$dokument,$parameter="",$anzahl="1", $spoolerId = 0)
{
if($spoolerId > 0 && empty($dokument)) {
$spooler = $this->app->DB->SelectRow(
"SELECT `content`, `filename` FROM `drucker_spooler` WHERE `id` = {$spoolerId}"
);
if(empty($spooler)) {
return 0;
}
$dokument = @base64_decode(
(string)$spooler['content']
);
$fileName = $this->app->erp->GetTMP() . empty($spooler['filename']) ? 'print.pdf' : $spooler['filename'];
if(file_put_contents($fileName, $dokument)) {
$dokument = $fileName;
}
}
if($dokument=='') {
return 0;
}
$printerRow = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM drucker WHERE id = %d',
$drucker
)
);
$befehl = $printerRow['befehl'];
$anbindung = $printerRow['anbindung'];
$format = $printerRow['format'];
if($anbindung=='') {
//$anbindung='cups'; hat nie funktioniert
}
//sicherung in spooler
if(is_file($dokument)) {
$spooler_content = base64_encode(file_get_contents($dokument));
$spooler_filename = basename($dokument);
$spooler_description = $description;
}
else {
$spooler_content = base64_encode($dokument);
}
$spooler_anzahl = $anzahl;
$spooler_befehl = $befehl;
$spooler_anbindung = $anbindung;
if($spoolerId <= 0){
$this->app->DB->Insert("INSERT INTO drucker_spooler (id,drucker,filename,content,description,anzahl,befehl,anbindung,zeitstempel,user,gedruckt) VALUES
('','$drucker','$spooler_filename','$spooler_content','$spooler_description','$spooler_anzahl','$spooler_befehl','$spooler_anbindung',NOW(),'" . $this->app->User->GetID() . "',0)");
$druckauftrag = $this->app->DB->GetInsertID();
}
else {
$druckauftrag = $spoolerId;
$spooler= $this->app->DB->SelectRow(sprintf(
'SELECT content FROM drucker_spooler WHERE id = %d',
$spoolerId
));
if(!empty($spooler) && empty($spooler['gedruckt'])) {
$this->app->DB->Update(sprintf('UPDATE `drucker_spooler` SET `gedruckt` = 0 WHERE `id` = %d', $spoolerId));
}
if(empty($dokument)) {
if(empty($spooler)) {
return 0;
}
$spooler_filename = $spooler['filename'];
$dokument = base64_decode(
(string)$spooler['content']
);
if(empty($dokument)) {
return 0;
}
}
}
//$this->app->erp->LogFile("HUHUH");
if(!empty($anbindung)) {
/** @var Drucker $obj */
$obj = $this->app->erp->LoadModul('drucker');
$printerObj = $obj->loadPrinterModul($anbindung, $drucker);
if(!empty($printerObj) && method_exists($printerObj, 'printDocument')) {
if($printerObj->printDocument($dokument, $anzahl)) {
$this->app->DB->Update("UPDATE drucker_spooler SET gedruckt=1 WHERE id='$druckauftrag' LIMIT 1");
}
return $druckauftrag;
}
}
switch($anbindung)
{
case "cups":
$befehl = str_replace('{FAX}',$parameter,$befehl);
exec("$befehl $dokument");
$this->app->DB->Update("UPDATE drucker_spooler SET gedruckt=1 WHERE id='$druckauftrag' LIMIT 1");
break;
case "pdf":
if(is_file($dokument)) {
if((String)$befehl !== '') {
$this->app->erp->CreatePath($befehl);
$path_parts = pathinfo($dokument);
if($path_parts['extension'] === 'pdf') {
copy($dokument, $befehl . '/' . basename($dokument));
}
else {
copy($dokument, $befehl . '/' . basename($dokument) . '.pdf');
}
}
$this->app->DB->Update("UPDATE drucker_spooler SET gedruckt=1 WHERE id='$druckauftrag' LIMIT 1");
}
break;
case "download":
$printerId = (int)$drucker;
try {
$this->CreateSpoolerNotification($printerId, $spooler_filename);
} catch (Exception $e) {
}
break;
case "spooler":
// damit wawisionsspooler bescheid weiss das er als drucker arbeiten muss um pdf dateien auszugeben
$art ="printer";
case "adapterbox":
// wenn intern
$deviceiddest = $this->app->DB->Select("SELECT adapterboxseriennummer FROM drucker WHERE id='".$drucker."' LIMIT 1");
$ip = $this->app->DB->Select("SELECT adapterboxip FROM drucker WHERE id='".$drucker."' LIMIT 1");
if($art=="")
$art = $this->app->DB->Select("SELECT art FROM drucker WHERE id='".$drucker."' LIMIT 1");
$description = $this->app->DB->Select("SELECT bezeichnung FROM drucker WHERE id='".$drucker."' LIMIT 1");
switch($art)
{
case 0: $art = "printer"; break;
case 1: $art = "fax"; break;
case 2: $art = "labelprinter"; break;
default: $art = "unknown"; break;
}
if(is_file($dokument))
{
$job = base64_encode(json_encode(
array('label'=>base64_encode(file_get_contents($dokument)),
'filename'=>basename($dokument),
'amount'=>$anzahl,'filetype'=>filetype($dokument),'description'=>$description,'format'=>$format)));//."".$anzahl."");
}
else {
$job = base64_encode(json_encode(array('label'=>base64_encode($dokument),'amount'=>$anzahl,'format'=>$format)));//."".$anzahl."");
}
if($this->app->erp->Firmendaten("deviceenable")=="1")
{
if($deviceiddest!="")
{
$this->app->erp->AdapterboxAPI($deviceiddest,$art,$job,false);
//$this->app->DB->Insert("INSERT INTO device_jobs (id,zeitstempel,deviceidsource,deviceiddest,job,art) VALUES ('',NOW(),'000000000','$deviceiddest','$job','$art')");
}
} else {
$xml = $dokument;
if($ip!="")
HttpClient::quickPost("http://".$this->app->erp->GetIPAdapterbox($drucker)."/labelprinter.php",array('label'=>$xml,'amount'=>$anzahl));
}
$this->app->DB->Update("UPDATE drucker_spooler SET gedruckt=1 WHERE id='$druckauftrag' LIMIT 1");
break;
case "email":
$tomail = $this->app->DB->Select("SELECT tomail FROM drucker WHERE id='$drucker'
AND firma='".$this->app->User->GetFirma()."' LIMIT 1");
$tomailsubject = $this->app->DB->Select("SELECT tomailsubject FROM drucker WHERE id='$drucker'
AND firma='".$this->app->User->GetFirma()."' LIMIT 1");
$tomailsubject = str_replace('{FAX}',$parameter,$tomailsubject);
$tomailtext = $this->app->DB->Select("SELECT tomailtext FROM drucker WHERE id='$drucker'
AND firma='".$this->app->User->GetFirma()."' LIMIT 1");
if($dokument!="")
{
$this->app->erp->MailSend($this->app->erp->GetFirmaMail(),$this->app->erp->GetFirmaName(),
$tomail,"",$tomailsubject,$tomailtext,array($dokument),"",true);
}
$this->app->DB->Update("UPDATE drucker_spooler SET gedruckt=1 WHERE id='$druckauftrag' LIMIT 1");
break;
}
if($spoolerId > 0 && !empty($fileName) && is_file($fileName)) {
@unlink($fileName);
}
return $druckauftrag;
}
/**
* @param int $printerId
* @param string $filename
*
* @return void
*/
protected function CreateSpoolerNotification($printerId, $filename)
{
/** @var \Xentral\Modules\DownloadSpooler\DownloadSpoolerGateway $gateway */
$gateway = $this->app->Container->get('DownloadSpoolerGateway');
$unprintedFilesCount = $gateway->getUnprintedFilesCountByUser($this->app->User->GetID(), $printerId);
$printerName = $gateway->getPrinterNameById($printerId);
$notificationTitle = !empty($printerName) ? 'Drucker: ' . $printerName : 'Download-Drucker';
if ($unprintedFilesCount > 1) {
$notificationText = 'Es stehen ' . $unprintedFilesCount . ' Druckaufträge zum Download bereit.';
} else {
$notificationText = 'Ein Druckauftrag steht zum Download bereit: ' . $filename;
}
// Notification erstellen
$message = new NotificationMessageData('default', $notificationTitle);
$message->setMessage($notificationText);
$message->addTags(['spooler', 'printer', 'download']);
$message->setOption('id', 'notification_spooler_' . $printerId);
$message->setOption('printerId', $printerId);
$message->setPriority(true);
$messageButtons = [[
'text' => 'Download',
'link' => sprintf('index.php?module=welcome&action=spooler&cmd=download-unprinted&id=%s', $printerId),
], [
'text' => 'Zum Spooler',
'link' => '#',
'data-printer' => $printerId,
'data-action' => 'open-dialog'
]];
$message->setOption('buttons', $messageButtons);
/** @var NotificationService $notification */
$notification = $this->app->Container->get('NotificationService');
$notification->createFromData($this->app->User->GetID(), $message);
}
}