hasPermission("MACHINEMANAGER_VIEW")) { die("No permission."); } if (!empty($_GET["id"])) { $machineid = $_GET["id"]; } else if (!empty($_GET["arg"])) { $machineid = $_GET["arg"]; } if (!Machine::exists($machineid)) { exit("No such machine."); } $labeltype = array_keys($SETTINGS["labels"]["templates"])[0]; if (array_key_exists($VARS["labeltype"], $SETTINGS["labels"]["templates"])) { $labeltype = $VARS["labeltype"]; } $machine = new Machine($machineid); $mergedata = [ "id" => $machine->getID(), "price" => number_format($machine->getPrice(), 2), "devicetype" => $machine->getTypeLabel(), "devicetype_lowercase" => strtolower($machine->getTypeLabel()), "serial" => $machine->getSerial(), "model" => $machine->getModel(), "os" => $machine->getOS(), "manufacturer" => $machine->getManufacturer(), "publicnotes" => $machine->getPublicNotes(), "privatenotes" => $machine->getPrivateNotes(), "clientid" => "", "clientname" => "", "clientphone" => "", "clientphoneformatted" => "", "clientemail" => "", "clientbillingaddress" => "", "clientshippingaddress" => "", "clientpublicnotes" => "", "clientprivatenotes" => "" ]; foreach ($SETTINGS["labels"]["fields"] as $id => $val) { $mergedata[$id] = str_replace("{{id}}", $machine->getID(), $val); } /** * https://stackoverflow.com/a/14167216 */ function formatPhoneNumber($phoneNumber) { $phoneNumber = preg_replace('/[^0-9]/', '', $phoneNumber); if (strlen($phoneNumber) > 10) { $countryCode = substr($phoneNumber, 0, strlen($phoneNumber) - 10); $areaCode = substr($phoneNumber, -10, 3); $nextThree = substr($phoneNumber, -7, 3); $lastFour = substr($phoneNumber, -4, 4); $phoneNumber = '+' . $countryCode . ' (' . $areaCode . ') ' . $nextThree . '-' . $lastFour; } else if (strlen($phoneNumber) == 10) { $areaCode = substr($phoneNumber, 0, 3); $nextThree = substr($phoneNumber, 3, 3); $lastFour = substr($phoneNumber, 6, 4); $phoneNumber = '(' . $areaCode . ') ' . $nextThree . '-' . $lastFour; } else if (strlen($phoneNumber) == 7) { $nextThree = substr($phoneNumber, 0, 3); $lastFour = substr($phoneNumber, 3, 4); $phoneNumber = $nextThree . '-' . $lastFour; } return $phoneNumber; } if (!empty($machine->getClientID())) { $client = Clients::getClient($machine->getClientID()); $mergedata["clientid"] = $client->getID(); $mergedata["clientname"] = $client->getName(); $mergedata["clientphone"] = $client->getPhone(); $mergedata["clientphoneformatted"] = formatPhoneNumber($client->getPhone()); $mergedata["clientemail"] = $client->getEmail(); $mergedata["clientbillingaddress"] = $client->getBillingAddress(); $mergedata["clientshippingaddress"] = $client->getMailingAddress(); $mergedata["clientpublicnotes"] = $client->getPublicNotes(); $mergedata["clientprivatenotes"] = $client->getPrivateNotes(); } $csvfile = tempnam("/tmp", "MCHMGR_CSV"); $fp = fopen($csvfile, 'w'); fputcsv($fp, array_keys($mergedata)); fputcsv($fp, array_values($mergedata)); fclose($fp); $pdffile = tempnam("/tmp", "MCHMGR_PDF"); shell_exec("glabels-3-batch --input=$csvfile --output=$pdffile " . __DIR__ . "/templates/$labeltype.glabels"); header('Content-type: application/pdf'); header("Content-Disposition: inline; filename=\"$labeltype (ID $mergedata[id])\""); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); echo file_get_contents($pdffile); unlink($csvfile); unlink($pdffile);