forked from Wavyzz/dolibarr
New: SMS sending now works with OVH
This commit is contained in:
@@ -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("SmsFrom")).'</div>';
|
||||
$_GET["action"]='test';
|
||||
$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Message")).'</div>';
|
||||
$action='test';
|
||||
$error++;
|
||||
}
|
||||
if (empty($sendto))
|
||||
if (empty($smsfrom) || ! str_replace('+','',$smsfrom))
|
||||
{
|
||||
$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("SmsFrom")).'</div>';
|
||||
$action='test';
|
||||
$error++;
|
||||
}
|
||||
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>';
|
||||
}*/
|
||||
|
||||
if (! empty($conf->global->MAIN_SMS_SENDMODE))
|
||||
{
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&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,7 +171,6 @@ 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')
|
||||
{
|
||||
dol_include_once('/ovh/class/ovhsms.class.php');
|
||||
@@ -182,12 +181,18 @@ function limitChars(textarea, limit, infodiv)
|
||||
{
|
||||
$resultsender[0]->number=$this->fromsms;
|
||||
}
|
||||
if (sizeof($resultsender) > 0)
|
||||
{
|
||||
print '<select name="fromsms" id="valid" class="flat">';
|
||||
$i=0;
|
||||
while($resultsender[$i]){
|
||||
while($resultsender[$i])
|
||||
{
|
||||
print '<option value="'.$resultsender[$i]->number.'">'.$resultsender[$i]->number.'</option>';
|
||||
$i++;
|
||||
}
|
||||
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("Priority").' :</td><td>
|
||||
<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>
|
||||
|
||||
<tr><td>'.$langs->trans("Priority").' :</td><td>
|
||||
<select name="class" 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>';
|
||||
|
||||
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.
|
||||
|
||||
|
||||
190
htdocs/lib/CSMSFile.class.php
Executable file
190
htdocs/lib/CSMSFile.class.php
Executable file
@@ -0,0 +1,190 @@
|
||||
<?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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user