Skip to content
Snippets Groups Projects
Commit 936f65de authored by Laurent Destailleur's avatar Laurent Destailleur
Browse files

New: SMS sending now works with OVH

parent 7bd68a7b
No related branches found
No related tags found
No related merge requests found
......@@ -43,12 +43,14 @@ $substitutionarrayfortest=array(
'__FIRSTNAME__' => 'TESTFirstname'
);
$action=GETPOST('action');
/*
* Actions
*/
if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["cancel"]))
if ($action == 'update' && empty($_POST["cancel"]))
{
dolibarr_set_const($db, "MAIN_DISABLE_ALL_SMS", $_POST["MAIN_DISABLE_ALL_SMS"],'chaine',0,'',$conf->entity);
......@@ -65,61 +67,63 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
/*
* Send sms
*/
if ($_POST['action'] == 'send' && ! $_POST['cancel'])
if ($action == 'send' && ! $_POST['cancel'])
{
$error=0;
$email_from='';
if (! empty($_POST["fromname"])) $email_from=$_POST["fromname"].' ';
if (! empty($_POST["fromsms"])) $email_from.='<'.$_POST["fromsms"].'>';
$errors_to = $_POST["errorstosms"];
$sendto = $_POST["sendto"];
$body = $_POST['message'];
$deliveryreceipt= $_POST["deliveryreceipt"];
$smsfrom='';
if (! empty($_POST["fromsms"])) $smsfrom=GETPOST("fromsms");
if (empty($smsfrom)) $smsfrom=GETPOST("fromname");
$sendto = GETPOST("sendto");
$body = GETPOST('message');
$deliveryreceipt= GETPOST("deliveryreceipt");
$deferred = GETPOST('deferred');
$priority = GETPOST('priority');
$class = GETPOST('class');
$errors_to = GETPOST("errorstosms");
// Create form object
include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formsms.class.php');
$formsms = new FormSms($db);
if (empty($_POST["fromsms"]))
if (empty($body))
{
$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Message")).'</div>';
$action='test';
$error++;
}
if (empty($smsfrom) || ! str_replace('+','',$smsfrom))
{
$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("SmsFrom")).'</div>';
$_GET["action"]='test';
$action='test';
$error++;
}
if (empty($sendto))
if (empty($sendto) || ! str_replace('+','',$sendto))
{
$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("SmsTo")).'</div>';
$_GET["action"]='test';
$action='test';
$error++;
}
if (! $error)
{
// Le message est-il en html
$msgishtml=0; // Message is not HTML
// Pratique les substitutions sur le sujet et message
$subject=make_substitutions($subject,$substitutionarrayfortest,$langs);
// Make substitutions into message
$body=make_substitutions($body,$substitutionarrayfortest,$langs);
require_once(DOL_DOCUMENT_ROOT."/lib/CSMSFile.class.php");
$smsfile = new CSMSFile($subject,$sendto,$email_from,$body,
$filepath,$mimetype,$filename,
$sendtocc, $sendtoccc, $deliveryreceipt, $msgishtml,$errors_to);
$result=$smsfile->sendfile();
$smsfile = new CSMSFile($sendto, $smsfrom, $body, $deliveryreceipt, $deferred, $priority, $class); // This define OvhSms->login, pass, session and account
$result=$smsfile->sendfile(); // This send SMS
if ($result)
{
$message='<div class="ok">'.$langs->trans("SmsSuccessfulySent",$email_from,$sendto).'</div>';
$message='<div class="ok">'.$langs->trans("SmsSuccessfulySent",$smsfrom,$sendto).'</div>';
}
else
{
$message='<div class="error">'.$langs->trans("ResultKo").'<br>'.$smsfile->error.' '.$result.'</div>';
}
$_GET["action"]='';
$action='';
}
}
......@@ -151,9 +155,10 @@ if ($message) print $message.'<br>';
// List of sending methods
$listofmethods=$conf->sms_engine;
$listofmethods['']='';
asort($listofmethods);
if (isset($_GET["action"]) && $_GET["action"] == 'edit')
if ($action == 'edit')
{
$html=new Form($db);
......@@ -188,7 +193,7 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
// From
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",ini_get('sendmail_from')?ini_get('sendmail_from'):$langs->transnoentities("Undefined")).'</td>';
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",$langs->transnoentities("Undefined")).'</td>';
print '<td><input class="flat" name="MAIN_MAIL_SMS_FROM" size="32" value="' . $conf->global->MAIN_MAIL_SMS_FROM;
print '"></td></tr>';
......@@ -228,15 +233,15 @@ else
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_SMS_SENDMODE").'</td><td>';
$text=$listofmethods[$conf->global->MAIN_SMS_SENDMODE];
if (empty($text)) $text=$langs->trans("Undefined").img_warning();
if (empty($text)) $text=$langs->trans("Undefined").' '.img_warning();
print $text;
print '</td></tr>';
// From
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",ini_get('sendmail_from')?ini_get('sendmail_from'):$langs->transnoentities("Undefined")).'</td>';
print '<tr '.$bc[$var].'><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",$langs->transnoentities("Undefined")).'</td>';
print '<td>'.$conf->global->MAIN_MAIL_SMS_FROM;
if (!empty($conf->global->MAIN_MAIL_SMS_FROM) && ! isValidPhone($conf->global->MAIN_MAIL_SMS_FROM)) print img_warning($langs->trans("ErrorBadPhone"));
if (!empty($conf->global->MAIN_MAIL_SMS_FROM) && ! isValidPhone($conf->global->MAIN_MAIL_SMS_FROM)) print ' '.img_warning($langs->trans("ErrorBadPhone"));
print '</td></tr>';
// Autocopy to
......@@ -268,8 +273,14 @@ else
print '<a class="butActionRefused" href="#" title="'.$langs->trans("FeatureNotAvailableOnLinux").'">'.$langs->trans("DoTestServerAvailability").'</a>';
}*/
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&amp;mode=init">'.$langs->trans("DoTestSend").'</a>';
if (! empty($conf->global->MAIN_SMS_SENDMODE))
{
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&amp;mode=init">'.$langs->trans("DoTestSend").'</a>';
}
else
{
print '<a class="butActionRefused" href="#">'.$langs->trans("DoTestSend").'</a>';
}
print '</div>';
......@@ -297,7 +308,7 @@ else
}*/
// Affichage formulaire de TEST simple
if ($_GET["action"] == 'test')
if ($action == 'test')
{
print '<br>';
print_titre($langs->trans("DoTestSend"));
......@@ -313,10 +324,8 @@ else
$formsms->withfrom=1;
$formsms->witherrorsto=1;
$formsms->withto=(isset($_POST['sendto'])?$_POST['sendto']:$user->user_mobile?$user->user_mobile:1);
$formsms->withtopic=(isset($_POST['subject'])?$_POST['subject']:$langs->trans("Test"));
$formsms->withtopicreadonly=0;
$formsms->withfile=2;
$formsms->withbody=(isset($_POST['message'])?$_POST['message']:$langs->trans("ThisIsATestMessage"));
$formsms->withbody=(isset($_POST['message'])?(empty($_POST['message'])?1:$_POST['message']):$langs->trans("ThisIsATestMessage"));
$formsms->withbodyreadonly=0;
$formsms->withcancel=1;
$formsms->withfckeditor=0;
......
......@@ -62,8 +62,8 @@ class FormSms
/**
* \brief Constructeur
* \param DB handler d'acces base de donnee
* Constructor
* @param DB handler d'acces base de donnee
*/
function FormSms($DB)
{
......@@ -171,8 +171,7 @@ function limitChars(textarea, limit, infodiv)
{
print "<tr><td>".$langs->trans("SmsFrom")."</td><td>";
//print '<input type="text" name="fromname" size="30" value="'.$this->fromsms.'">';
print '<select name="fromsms" id="valid" class="flat">';
if ($conf->global->MAIN_SMS_SENDMODE == 'ovh')
if ($conf->global->MAIN_SMS_SENDMODE == 'ovh')
{
dol_include_once('/ovh/class/ovhsms.class.php');
$sms = new OvhSms($db);
......@@ -182,12 +181,18 @@ function limitChars(textarea, limit, infodiv)
{
$resultsender[0]->number=$this->fromsms;
}
$i=0;
while($resultsender[$i]){
print '<option value="'.$resultsender[$i]->number.'">'.$resultsender[$i]->number.'</option>';
$i++;
if (sizeof($resultsender) > 0)
{
print '<select name="fromsms" id="valid" class="flat">';
$i=0;
while($resultsender[$i])
{
print '<option value="'.$resultsender[$i]->number.'">'.$resultsender[$i]->number.'</option>';
$i++;
}
print '</select>';
}
print '</select>';
else print '<span class="error">'.$langs->trans("SmsNoPossibleRecipientFound").'</span>';
print '</td>';
print "</tr>\n";
}
......@@ -207,7 +212,7 @@ function limitChars(textarea, limit, infodiv)
}
else
{
print "<input size=\"16\" name=\"sendto\" value=\"".(! is_array($this->withto) && ! is_numeric($this->withto)? (isset($_REQUEST["sendto"])?$_REQUEST["sendto"]:$this->withto):"+")."\">";
print "<input size=\"16\" name=\"sendto\" value=\"".(! is_array($this->withto) && $this->withto != '1'? (isset($_REQUEST["sendto"])?$_REQUEST["sendto"]:$this->withto):"+")."\">";
if ($this->withtosocid > 0)
{
$liste=array();
......@@ -282,20 +287,20 @@ function limitChars(textarea, limit, infodiv)
<td>'.$langs->trans("DelayBeforeSending").':</td>
<td> <input name="deferred" id="deferred" size="4" value="0"></td></tr>
<tr><td>'.$langs->trans("Type").' :</td><td>
<select name="class" id="valid" class="flat">
<option value="0">Flash</option>
<option value="1" selected="selected">Standard</option>
<option value="2">SIM</option>
<option value="3">ToolKit</option>
</select></td></tr>
<tr><td>'.$langs->trans("Priority").' :</td><td>
<select name="class" id="valid" class="flat">
<select name="priority" id="valid" class="flat">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3" selected="selected">3</option>
</select></td></tr>
<tr><td>'.$langs->trans("Type").' :</td><td>
<select name="class" id="valid" class="flat">
<option value="0">Flash</option>
<option value="1" selected="selected">Standard</option>
<option value="2">SIM</option>
<option value="3">ToolKit</option>
</select></td></tr>';
print '<tr><td align="center" colspan="2"><center>';
......
......@@ -233,7 +233,7 @@ MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
MAIN_SMS_SENDMODE=Method to use to send SMS
MAIN_MAIL_SMS_FROM=Sender phone number for Sms sending
MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on www.dolibarr.org forum.
ModuleSetup=Module setup
......
......@@ -234,7 +234,7 @@ MAIN_MAIL_SMTPS_PW= SMTP Authentification Password si authentification SMTP requ
MAIN_MAIL_EMAIL_TLS= Utilisation du cryptage TLS (SSL)
MAIN_DISABLE_ALL_SMS=Désactiver globalement tout envoi de Sms (pour mode test ou démos)
MAIN_SMS_SENDMODE=Méthode d'envoi des SMS
MAIN_MAIL_SMS_FROM=Téléphone émetteur pour envoi Sms
MAIN_MAIL_SMS_FROM=Numéro de téléphone par défaut pour envoi Sms
FeatureNotAvailableOnLinux= Fonctionnalité non disponible sous systèmes Unix. Tester votre sendmail localement.
SubmitTranslation=Si la traduction pour cette langue est incomplète ou si vous trouvez des erreurs, vous pouvez les corriger en éditant les fichiers dans le répertoire <b>langs/%s</b> et soumettre les modifications sur le forum www.dolibarr.fr.
ModuleSetup= Configuration du module
......
......@@ -50,4 +50,5 @@ SendSms=Envoyer SMS
SmsInfoCharRemain=Nb de caractères restant
SmsInfoNumero= (format international ex : +33899701761)
DelayBeforeSending=Délai avant envoi (en minutes)
SmsNoPossibleRecipientFound=Aucun destinataire disponible. Vérifier la configuration de votre fournisseur de SMS.
<?php
/* Copyright (C) 2000-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* or see http://www.gnu.org/
*
* Lots of code inspired from Dan Potter's CSMSFile class
*/
/**
* \file htdocs/lib/CSMSFile.class.php
* \brief File of class to send sms
* \version $Id$
* \author Laurent Destailleur.
*/
/**
* \class CSMSFile
* \brief Class to send SMS
* \remarks Usage: $smsfile = new CSMSFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to);
* \remarks $smsfile->sendfile();
*/
class CSMSFile
{
var $error='';
var $message;
var $addr_from;
var $addr_to;
var $deliveryreceipt;
var $deferred;
var $priority;
var $class;
/**
* CSMSFile
* @param to Recipients SMS
* @param from Sender SMS
* @param msg Message
* @param deliveryreceipt Ask a delivery receipt
*/
function CSMSFile($to,$from,$msg,$deliveryreceipt=0,$deferred=0,$priority=3,$class=1)
{
global $conf;
// On definit fin de ligne
$this->eol="\n";
if (preg_match('/^win/i',PHP_OS)) $this->eol="\r\n";
if (preg_match('/^mac/i',PHP_OS)) $this->eol="\r";
// If ending method not defined
if (empty($conf->global->MAIN_SMS_SENDMODE))
{
$this->error='No SMS Engine defined';
return -1;
}
dol_syslog("CSMSFile::CSMSFile: MAIN_SMS_SENDMODE=".$conf->global->MAIN_SMS_SENDMODE." charset=".$conf->file->character_set_client." from=$from, to=$to, errors_to=$errors_to", LOG_DEBUG);
dol_syslog("CSMSFile::CSMSFile: deliveryreceipt=".$deliveryreceipt." deferred=".$deferred." priority=".$priority." class=".$class, LOG_DEBUG);
// Action according to choosed sending method
if ($conf->global->MAIN_SMS_SENDMODE == 'ovh')
{
$this->addr_from=$from;
$this->addr_to=$to;
$this->message=$msg;
$this->deliveryreceipt=$deliveryreceipt;
$this->deferred=$deferred;
$this->priority=$priority;
$this->class=$class;
}
else
{
// Send mail method not correctly defined
// --------------------------------------
return 'Bad value for MAIN_SMS_SENDMODE constant';
}
}
/**
* Send mail that was prepared by constructor
*
* @return boolean True if mail sent, false otherwise
*/
function sendfile()
{
global $conf;
$errorlevel=error_reporting();
error_reporting($errorlevel ^ E_WARNING); // Desactive warnings
$res=false;
dol_syslog("CSMSFile::sendfile addr_to=".$this->addr_to, LOG_DEBUG);
dol_syslog("CSMSFile::sendfile message=\n".$this->message);
$this->message=stripslashes($this->message);
if (! empty($conf->global->MAIN_SMS_DEBUG)) $this->dump_sms();
if (empty($conf->global->MAIN_DISABLE_ALL_SMS))
{
// Action according to choosed sending method
if ($conf->global->MAIN_SMS_SENDMODE == 'ovh')
{
dol_include_once('/ovh/class/ovhsms.class.php');
$ovhsms=new OvhSms($this->db);
//$ovhsms->session='';
//$ovhsms->account='';
$ovhsms->expe=$this->addr_from;
$ovhsms->dest=$this->addr_to;
$ovhsms->message=$this->message;
//$ovhsms->validity='';
$ovhsms->deferred=$this->deferred;
$ovhsms->priority=$this->priority;
$ovhsms->class=$this->class;
$res=$ovhsms->SmsSend();
if (! $res)
{
$this->error="Failed to send SMS<br>Check your server logs and your firewalls setup";
dol_syslog("CSMSFile::sendfile: mail end error=".$this->error, LOG_ERROR);
}
else
{
dol_syslog("CSMSFile::sendfile: mail end success", LOG_DEBUG);
}
}
else
{
// Send mail method not correctly defined
// --------------------------------------
return 'Bad value for MAIN_SMS_SENDMODE constant';
}
}
else
{
$this->error='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_SMS';
dol_syslog("CSMSFile::sendfile: ".$this->error, LOG_WARNING);
}
error_reporting($errorlevel); // Reactive niveau erreur origine
return $res;
}
/**
* Write content of a SMTP request into a dump file (mode = all)
* Used for debugging.
*/
function dump_sms()
{
global $conf,$dolibarr_main_data_root;
if (@is_writeable($dolibarr_main_data_root)) // Avoid fatal error on fopen with open_basedir
{
$fp = fopen($dolibarr_main_data_root."/dolibarr_sms.log","w");
fputs($fp, $this->message);
fclose($fp);
if (! empty($conf->global->MAIN_UMASK))
@chmod($outputfile, octdec($conf->global->MAIN_UMASK));
}
}
}
?>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment