<?php /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2005-2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com> * Copyright (C) 2012 Marcos GarcĂa <marcosgdf@gmail.com> * Copyright (C) 2014-2020 Alexandre Spangaro <aspangaro@open-dsi.fr> * Copyright (C) 2015 Benoit Bruchard <benoitb21@gmail.com> * Copyright (C) 2015 Benjamin Neumann <btdn@sigsoft.org> * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com> * * 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 <https://www.gnu.org/licenses/>. */ /** * \file htdocs/core/modules/dons/html_generic.modules.php * \ingroup don * \brief Form of donation */ require_once DOL_DOCUMENT_ROOT.'/core/modules/dons/modules_don.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; /** * Class to generate document for a generic donations receipt */ class html_generic extends ModeleDon { /** * Constructor * * @param DoliDB $db Database handler */ public function __construct($db) { global $conf, $langs; $this->db = $db; $this->name = "generic"; $this->description = $langs->trans('DonationsReceiptModel').''; $this->option_multilang = 1; $this->type = 'html'; } /** * Return if a module can be used or not * * @return boolean true if module can be used */ public function isEnabled() { return true; } /** * Load translation files * * @param Translate $outputlangs Lang object for output language * @return Translate $outputlangs Lang object for output language */ private function loadTranslationFiles($outputlangs) { if (!is_object($outputlangs)) { global $langs; $outputlangs = $langs; } $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "donations")); return $outputlangs; } /** * Write the object to document file to disk * * @param Don $don Donation object * @return string Label for payment type */ private function getDonationPaymentType($don) { $formclass = new Form($this->db); // This is not the proper way to do it but $formclass->form_modes_reglement // prints the translation instead of returning it $formclass->load_cache_types_paiements(); if ($don->mode_reglement_id) { $paymentmode = $formclass->cache_types_paiements[$don->mode_reglement_id]['label']; } else { $paymentmode = ''; } return $paymentmode; } /** * Get the contents of the file * * @param Don $don Donation object * @param Translate $outputlangs Lang object for output language * @param string $currency Currency code * @return string Contents of the file */ private function getContents($don, $outputlangs, $currency) { global $user, $conf, $langs, $mysoc; $now = dol_now(); $currency = !empty($currency) ? $currency : $conf->currency; $donmodel = DOL_DOCUMENT_ROOT."/core/modules/dons/html_generic.html"; $form = implode('', file($donmodel)); $form = str_replace('__NOW__', dol_print_date($now, 'day', false, $outputlangs), $form); $form = str_replace('__REF__', (string) $don->id, $form); $form = str_replace('__DATE__', dol_print_date($don->date, 'day', false, $outputlangs), $form); $form = str_replace('__BENEFICIARY_NAME__', $mysoc->name, $form); $form = str_replace('__BENEFICIARY_FULL_ADDRESS__', $mysoc->getFullAddress(1, "<br>", 1), $form); $form = str_replace('__PAYMENTMODE_LABEL__', $this->getDonationPaymentType($don), $form); $form = str_replace('__AMOUNT__', price($don->amount), $form); $form = str_replace('__CURRENCY_CODE__', $conf->currency, $form); if (isModEnabled("societe") && getDolGlobalString('DONATION_USE_THIRDPARTIES') && $don->socid > 0 && $don->thirdparty) { $form = str_replace('__DONOR_FULL_NAME__', $don->thirdparty->name, $form); $form = str_replace('__DONOR_FULL_ADDRESS__', $don->thirdparty->getFullAddress(1, ", ", 1), $form); } else { $form = str_replace('__DONOR_FULL_NAME__', $don->getFullName($langs), $form); $form = str_replace('__DONOR_FULL_ADDRESS__', $don->getFullAddress(1, " ", 1), $form); } $form = str_replace('__DonationTitle__', $outputlangs->trans("DonationTitle"), $form); $form = str_replace('__DonationRef__', $outputlangs->trans("DonationRef"), $form); $form = str_replace('__Date__', $outputlangs->trans("Date"), $form); $form = str_replace('__DonationDatePayment__', $outputlangs->trans("DonationDatePayment"), $form); $form = str_replace('__Donor__', $outputlangs->trans("Donor"), $form); $form = str_replace('__Amount__', $outputlangs->trans("Amount"), $form); $form = str_replace('__PaymentMode__', $outputlangs->trans("PaymentMode"), $form); $notePublic = ''; if (getDolGlobalInt('DONATION_NOTE_PUBLIC') >= 1 && !empty($don->note_public)) { $notePublic = '<div id="note-public"><p>'.$don->note_public.'</p></div>'; } $form = str_replace('__NOTE_PUBLIC__', $notePublic, $form); $donationMessage = ''; if (getDolGlobalString('DONATION_MESSAGE')) { $donationMessage = '<div id="donation-message"><p>' . getDolGlobalString('DONATION_MESSAGE').'</p></div>'; } $form = str_replace('__DONATION_MESAGE__', $donationMessage, $form); return $form; } /** * Write the object to document file to disk * * @param string $path Path for the file * @param string $contents Contents of the file * @return int Return code */ private function saveFile($path, $contents) { dol_syslog("html_generic::saveFile $path"); $handle = fopen($path, "w"); fwrite($handle, $contents); fclose($handle); dolChmod($path); return 1; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Write the object to document file to disk * * @param Don $don Donation object * @param Translate $outputlangs Lang object for output language * @param string $currency Currency code * @return int >0 if OK, <0 if KO */ public function write_file($don, $outputlangs, $currency = '') { // phpcs:enable global $user, $conf, $langs, $mysoc; $id = (!is_object($don) ? $don : ''); $outputlangs = $this->loadTranslationFiles($outputlangs); if (!empty($conf->don->dir_output)) { // Definition of the object don (for upward compatibility) if (!is_object($don)) { $don = new Don($this->db); $ret = $don->fetch($id); $id = $don->id; } // Definition of $dir and $file if (!empty($don->specimen)) { $dir = $conf->don->dir_output; $file = $dir."/SPECIMEN.html"; } else { $donref = dol_sanitizeFileName($don->ref); $dir = $conf->don->dir_output."/".$donref; $file = $dir."/".$donref.".html"; } if (!file_exists($dir)) { if (dol_mkdir($dir) < 0) { $this->error = $langs->trans("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { $this->saveFile($file, $this->getContents($don, $outputlangs, $currency)); $this->result = array('fullpath' => $file); return 1; } else { $this->error = $langs->trans("ErrorCanNotCreateDir", $dir); return 0; } } else { $this->error = $langs->trans("ErrorConstantNotDefined", "DON_OUTPUTDIR"); return 0; } } }