* Copyright (C) 2010 Juanjo Menent * Copyright (C) 2018-2024 Frédéric France * * 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 htdocs/core/class/html.formsms.class.php * \ingroup core * \brief Fichier de la class permettant la generation du formulaire html d'envoi de mail unitaire */ require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; /** * Class permettant la generation du formulaire d'envoi de Sms * Usage: $formsms = new FormSms($db) * $formsms->proprietes=1 ou chaine ou tableau de valeurs * $formsms->show_form() affiche le formulaire */ class FormSms { /** * @var DoliDB Database handler. */ public $db; public $fromid; public $fromname; public $fromsms; /** * @var string */ public $fromtype; public $replytoname; public $replytomail; public $toname; public $tomail; public $withsubstit; // Show substitution array /** * @var int */ public $withfrom; /** * @var int */ public $withto; /** * @var int */ public $withtopic; /** * @var int */ public $withbody; /** * @var int Id of company */ public $withtosocid; public $withfromreadonly; public $withreplytoreadonly; public $withtoreadonly; public $withtopicreadonly; public $withbodyreadonly; public $withcancel; public $substit = array(); public $param = array(); /** * @var string Error code (or message) */ public $error = ''; /** * @var string[] Array of error strings */ public $errors = array(); /** * Constructor * * @param DoliDB $db Database handler */ public function __construct($db) { $this->db = $db; $this->withfrom = 1; $this->withto = 1; $this->withtopic = 1; $this->withbody = 1; $this->withfromreadonly = 1; $this->withreplytoreadonly = 1; $this->withtoreadonly = 0; $this->withtopicreadonly = 0; $this->withbodyreadonly = 0; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Show the form to input an sms. * * @param string $morecss Class on first column td * @param int $showform Show form tags and submit button (recommended is to use with value 0) * @return void */ public function show_form($morecss = 'titlefield', $showform = 1) { // phpcs:enable global $conf, $langs, $form; if (!is_object($form)) { $form = new Form($this->db); } // Load translation files required by the page $langs->loadLangs(array('other', 'mails', 'sms')); $soc = new Societe($this->db); if (!empty($this->withtosocid) && $this->withtosocid > 0) { $soc->fetch($this->withtosocid); } print "\n\n"; print ' '; if ($showform) { print "
param["returnurl"]."\">\n"; } print ''; foreach ($this->param as $key => $value) { print "\n"; } print "\n"; // Substitution array if (!empty($this->withsubstit)) { // Unset or set ->withsubstit=0 to disable this. print "\n"; } // From if ($this->withfrom) { if ($this->withfromreadonly) { print '\n"; print "\n"; } else { print ''; print "\n"; } } // To (target) if ($this->withto || is_array($this->withto)) { print '\n"; } // Message if ($this->withbody) { $defaultmessage = ''; if ($this->param["models"] == 'body') { $defaultmessage = $this->withbody; } $defaultmessage = make_substitutions($defaultmessage, $this->substit); if (GETPOSTISSET("message")) { $defaultmessage = GETPOST("message", 'restricthtml'); } $defaultmessage = str_replace('\n', "\n", $defaultmessage); print ""; print '"; print "'; } print "\n"; } print ' '; print "
"; $help = ""; foreach ($this->substit as $key => $val) { $help .= $key.' -> '.$langs->trans($val).'
'; } print $form->textwithpicto($langs->trans("SmsTestSubstitutionReplacedByGenericValues"), $help); print "
'.$langs->trans("SmsFrom"); print ''; print ""; if ($this->fromtype == 'user') { $langs->load("users"); $fuser = new User($this->db); $fuser->fetch($this->fromid); print $fuser->getNomUrl(1); print '   '; } if ($this->fromsms) { print $this->fromsms; } else { if ($this->fromtype) { $langs->load("errors"); print ' <'.$langs->trans("ErrorNoPhoneDefinedForThisUser").'> '; } } print "
'.$langs->trans("SmsFrom").""; if (getDolGlobalString('MAIN_SMS_SENDMODE')) { $sendmode = getDolGlobalString('MAIN_SMS_SENDMODE'); // $conf->global->MAIN_SMS_SENDMODE looks like a value 'module' $classmoduleofsender = getDolGlobalString('MAIN_MODULE_'.strtoupper($sendmode).'_SMS', $sendmode); // $conf->global->MAIN_MODULE_XXX_SMS looks like a value 'class@module' if ($classmoduleofsender == 'ovh') { $classmoduleofsender = 'ovhsms@ovh'; // For backward compatibility } $tmp = explode('@', $classmoduleofsender); $classfile = $tmp[0]; $module = (empty($tmp[1]) ? $tmp[0] : $tmp[1]); dol_include_once('/'.$module.'/class/'.$classfile.'.class.php'); try { $classname = ucfirst($classfile); if (class_exists($classname)) { $sms = new $classname($this->db); $resultsender = $sms->SmsSenderList(); } else { $sms = new stdClass(); $sms->error = 'The SMS manager "'.$classfile.'" defined into SMS setup MAIN_MODULE_'.strtoupper($sendmode).'_SMS is not found'; } } catch (Exception $e) { dol_print_error(null, 'Error to get list of senders: '.$e->getMessage()); exit; } } else { dol_syslog("Warning: The SMS sending method has not been defined into MAIN_SMS_SENDMODE", LOG_WARNING); $resultsender = array(); $resultsender[0]->number = $this->fromsms; } if (is_array($resultsender) && count($resultsender) > 0) { print ''; } else { print ''.$langs->trans("SmsNoPossibleSenderFound"); if (is_object($sms) && !empty($sms->error)) { print ' '.$sms->error; } print ''; } print '
'; //$moretext=$langs->trans("YouCanUseCommaSeparatorForSeveralRecipients"); $moretext = ''; print $form->textwithpicto($langs->trans("SmsTo"), $moretext); print ''; if ($this->withtoreadonly) { print (!is_array($this->withto) && !is_numeric($this->withto)) ? $this->withto : ""; } else { print 'withto) : "+").'">'; if (!empty($this->withtosocid) && $this->withtosocid > 0) { $liste = array(); foreach ($soc->thirdparty_and_contact_phone_array() as $key => $value) { $liste[$key] = $value; } print " ".$langs->trans("or")." "; //var_dump($_REQUEST);exit; print $form->selectarray("receiver", $liste, GETPOST("receiver"), 1); } print ' '.$langs->trans("SmsInfoNumero").''; } print "
'.$langs->trans("SmsText").""; if ($this->withbodyreadonly) { print nl2br($defaultmessage); print ''; } else { print ''; print '
'.$langs->trans("SmsInfoCharRemain").': '.(160 - dol_strlen($defaultmessage)).'
'.$langs->trans("DelayBeforeSending").':
'.$langs->trans("Priority").' :
'.$langs->trans("Type").' :
'.$langs->trans("DisableStopIfSupported").' :
\n"; if ($showform) { print '
'; print ''; if ($this->withcancel) { print '     '; print ''; } print '
'; print "
\n"; } print "\n"; } }