* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file download.php * \ingroup exportzugferd * \brief Download ZUGFeRD XML file */ // Load Dolibarr environment $res = 0; if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; } $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; } if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; } if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; } if (!$res && file_exists("../main.inc.php")) { $res = @include "../main.inc.php"; } if (!$res && file_exists("../../main.inc.php")) { $res = @include "../../main.inc.php"; } if (!$res) { die("Include of main fails"); } require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once __DIR__ . '/class/zugferdgenerator.class.php'; // Security check $id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); if (!$user->hasRight('exportzugferd', 'export') && !$user->hasRight('facture', 'lire')) { accessforbidden(); } $langs->loadLangs(array('exportzugferd@exportzugferd', 'bills')); // Load invoice $invoice = new Facture($db); $result = $invoice->fetch($id); if ($result <= 0) { setEventMessages($langs->trans('ErrorRecordNotFound'), null, 'errors'); header('Location: ' . DOL_URL_ROOT . '/compta/facture/list.php'); exit; } // Security check on third party $socid = $invoice->socid; if ($user->socid > 0 && $socid != $user->socid) { accessforbidden(); } // Handle actions if ($action == 'download_xml') { $generator = new ZugferdGenerator($db); // Check if XML already exists $dir = $conf->facture->dir_output . '/' . dol_sanitizeFileName($invoice->ref); $zugferdFile = $dir . '/factur-x.xml'; $xrechnungFile = $dir . '/xrechnung-' . $invoice->ref . '.xml'; $xmlFile = null; if (file_exists($xrechnungFile)) { $xmlFile = $xrechnungFile; } elseif (file_exists($zugferdFile)) { $xmlFile = $zugferdFile; } // Generate if not exists if (!$xmlFile) { $xml = $generator->generateFromInvoice($invoice); if ($xml === false) { setEventMessages($generator->error, $generator->errors, 'errors'); header('Location: ' . DOL_URL_ROOT . '/compta/facture/card.php?id=' . $id); exit; } $xmlFile = $generator->saveXML($invoice, $xml); if ($xmlFile === false) { setEventMessages($generator->error, null, 'errors'); header('Location: ' . DOL_URL_ROOT . '/compta/facture/card.php?id=' . $id); exit; } } // Download file $filename = basename($xmlFile); header('Content-Type: application/xml'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Length: ' . filesize($xmlFile)); header('Cache-Control: private, max-age=0, must-revalidate'); header('Pragma: public'); readfile($xmlFile); exit; } if ($action == 'generate_xml') { $generator = new ZugferdGenerator($db); $xml = $generator->generateFromInvoice($invoice); if ($xml === false) { setEventMessages($generator->error, $generator->errors, 'errors'); } else { $xmlFile = $generator->saveXML($invoice, $xml); if ($xmlFile === false) { setEventMessages($generator->error, null, 'errors'); } else { setEventMessages($langs->trans('ZugferdXMLGenerated'), null, 'mesgs'); } } header('Location: ' . DOL_URL_ROOT . '/compta/facture/card.php?id=' . $id); exit; } // Default: redirect to invoice card header('Location: ' . DOL_URL_ROOT . '/compta/facture/card.php?id=' . $id); exit;