', $object->cutlery, $this->template);
// parse template
$p = xml_parser_create();
xml_parse_into_struct($p, $this->template, $vals, $index);
xml_parser_free($p);
//print ''.print_r($index, true).'
';
//print ''.print_r($vals, true).'
';
// print ticket
$level = 0;
$html = '';
$ret = $this->InitPrinter($printerid);
if ($ret>0) {
setEventMessages($this->error, $this->errors, 'errors');
}
else
{
$nboflines = count($vals);
for ($line=0; $line < $nboflines; $line++)
{
switch ($vals[$line]['tag']) {
case 'DOL_ALIGN_CENTER':
$this->printer->setJustification(Escpos::JUSTIFY_CENTER);
$html.='';
$this->printer->text($vals[$line]['value']);
break;
case 'DOL_ALIGN_RIGHT':
$this->printer->setJustification(Escpos::JUSTIFY_RIGHT);
$html.='';
break;
case 'DOL_ALIGN_LEFT':
$this->printer->setJustification(Escpos::JUSTIFY_LEFT);
$html.='';
break;
case 'DOL_OPEN_DRAWER':
$this->printer->pulse();
$html.= ' ϟ'.nl2br($vals[$line]['value']);
break;
case 'DOL_ACTIVATE_BUZZER':
//$this->printer->buzzer();
$html.= ' ♫'.nl2br($vals[$line]['value']);
break;
case 'DOL_PRINT_BARCODE':
// $vals[$line]['value'] -> barcode($content, $type)
$this->printer->barcode($object->barcode);
break;
case 'DOL_PRINT_BARCODE_CUSTOMER_ID':
// $vals[$line]['value'] -> barcode($content, $type)
$this->printer->barcode($object->customer_id);
break;
case 'DOL_PRINT_QRCODE':
// $vals[$line]['value'] -> qrCode($content, $ec, $size, $model)
$this->printer->qrcode($vals[$line]['value']);
$html.='QRCODE: '.$vals[$line]['value'];
break;
case 'DOL_CUT_PAPER_FULL':
$this->printer->cut(Escpos::CUT_FULL);
$html.= ' ✂'.nl2br($vals[$line]['value']);
break;
case 'DOL_CUT_PAPER_PARTIAL':
$this->printer->cut(Escpos::CUT_PARTIAL);
$html.= ' ✂'.nl2br($vals[$line]['value']);
break;
case 'DOL_USE_FONT_A':
$this->printer->setFont(Escpos::FONT_A);
$this->printer->text($vals[$line]['value']);
break;
case 'DOL_USE_FONT_B':
$this->printer->setFont(Escpos::FONT_B);
$this->printer->text($vals[$line]['value']);
break;
case 'DOL_USE_FONT_C':
$this->printer->setFont(Escpos::FONT_C);
$this->printer->text($vals[$line]['value']);
break;
default:
$this->printer->text($vals[$line]['value']);
$html.= nl2br($vals[$line]['value']);
$this->errors[] = 'UnknowTag: <'.strtolower($vals[$line]['tag']).'>';
$error++;
break;
}
}
$html.= '
';
print $html;
// Close and print
// uncomment next line to see content sent to printer
//print ''.print_r($this->connector, true).'
';
$this->printer->close();
}
return $error;
}
/**
* Function to load Template
*
* @param int $templateid Template id
* @return int 0 if OK; >0 if KO
*/
function loadTemplate($templateid)
{
global $conf;
$error = 0;
$sql = 'SELECT template';
$sql.= ' FROM '.MAIN_DB_PREFIX.'printer_receipt_template';
$sql.= ' WHERE rowid='.$templateid;
$sql.= ' AND entity = '.$conf->entity;
$resql = $this->db->query($sql);
if ($resql) {
$obj = $this->db->fetch_array($resql);
} else {
$error++;
$this->errors[] = $this->db->lasterror;
}
if (empty($obj)) {
$error++;
$this->errors[] = 'TemplateDontExist';
} else {
$this->template = $obj['0'];
}
return $error;
}
/**
* Function Init Printer
*
* @param int $printerid Printer id
* @return int 0 if OK; >0 if KO
*/
function InitPrinter($printerid)
{
global $conf;
$error=0;
$sql = 'SELECT rowid, name, fk_type, fk_profile, parameter';
$sql.= ' FROM '.MAIN_DB_PREFIX.'printer_receipt';
$sql.= ' WHERE rowid = '.$printerid;
$sql.= ' AND entity = '.$conf->entity;
$resql = $this->db->query($sql);
if ($resql) {
$obj = $this->db->fetch_array($resql);
} else {
$error++;
$this->errors[] = $this->db->lasterror;
}
if (empty($obj)) {
$error++;
$this->errors[] = 'PrinterDontExist';
}
if (! $error) {
$parameter = $obj['parameter'];
try {
switch ($obj['fk_type']) {
case 1:
require_once DOL_DOCUMENT_ROOT .'/includes/mike42/escpos-php/src/DummyPrintConnector.php';
$this->connector = new DummyPrintConnector();
break;
case 2:
$this->connector = new FilePrintConnector($parameter);
break;
case 3:
$parameters = explode(':', $parameter);
$this->connector = new NetworkPrintConnector($parameters[0], $parameters[1]);
break;
case 4:
$this->connector = new WindowsPrintConnector($parameter);
break;
default:
$this->connector = 'CONNECTOR_UNKNOWN';
break;
}
$this->printer = new Escpos($this->connector);
} catch (Exception $e) {
$this->errors[] = $e->getMessage();
$error++;
}
}
return $error;
}
}