forked from Wavyzz/dolibarr
Refactored Mailmanspip class
Removed duplicated code Added missing error tests and logs
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
|
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
|
||||||
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||||
* Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
|
* Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
|
||||||
|
* Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -50,6 +51,104 @@ class MailmanSpip
|
|||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function used to check if SPIP is enabled on the system
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function isSpipEnabled()
|
||||||
|
{
|
||||||
|
if (defined("ADHERENT_USE_SPIP") && (ADHERENT_USE_SPIP == 1))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function used to check if the SPIP config is correct
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function checkSpipConfig()
|
||||||
|
{
|
||||||
|
if (defined('ADHERENT_SPIP_SERVEUR') && defined('ADHERENT_SPIP_USER') && defined('ADHERENT_SPIP_PASS') && defined('ADHERENT_SPIP_DB'))
|
||||||
|
{
|
||||||
|
if (ADHERENT_SPIP_SERVEUR != '' && ADHERENT_SPIP_USER != '' && ADHERENT_SPIP_PASS != '' && ADHERENT_SPIP_DB != '')
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function used to connect to SPIP
|
||||||
|
* @return boolean|DoliDB
|
||||||
|
*/
|
||||||
|
function connectSpip()
|
||||||
|
{
|
||||||
|
$resource = getDoliDBInstance('mysql', ADHERENT_SPIP_SERVEUR, ADHERENT_SPIP_USER, ADHERENT_SPIP_PASS, ADHERENT_SPIP_DB, ADHERENT_SPIP_PORT);
|
||||||
|
|
||||||
|
if ($resource->ok)
|
||||||
|
{
|
||||||
|
return $resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
dol_syslog('Error when connecting to SPIP '.ADHERENT_SPIP_SERVEUR.' '.ADHERENT_SPIP_USER.' '.ADHERENT_SPIP_PASS.' '.ADHERENT_SPIP_DB, LOG_ERR);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function used to connect to Mailman
|
||||||
|
* @param object $object Object with the data
|
||||||
|
* @param string $url Mailman URL to be called with patterns
|
||||||
|
* @return boolean|string
|
||||||
|
*/
|
||||||
|
function callMailman($object, $url)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
//Patterns that are going to be replaced with their original value
|
||||||
|
$patterns = array(
|
||||||
|
'%LISTE%',
|
||||||
|
'%EMAIL%',
|
||||||
|
'%PASSWORD%',
|
||||||
|
'%MAILMAN_ADMINPW%'
|
||||||
|
);
|
||||||
|
$replace = array(
|
||||||
|
$list,
|
||||||
|
$object->email,
|
||||||
|
$object->pass,
|
||||||
|
$conf->global->ADHERENT_MAILMAN_ADMINPW
|
||||||
|
);
|
||||||
|
|
||||||
|
$curl_url = str_replace($patterns, $replace, $url);
|
||||||
|
dol_syslog('Calling Mailman: '.$curl_url);
|
||||||
|
|
||||||
|
$ch = curl_init($curl_url);
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
||||||
|
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
dol_syslog('result curl_exec='.$result);
|
||||||
|
|
||||||
|
//An error was found, we store it in $this->error for later
|
||||||
|
if ($result === false || curl_errno($ch) > 0)
|
||||||
|
{
|
||||||
|
$this->error = curl_errno($ch).' '.curl_error($ch);
|
||||||
|
dol_syslog('Error using curl '.$this->error, LOG_ERR);
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction qui donne les droits redacteurs dans spip
|
* Fonction qui donne les droits redacteurs dans spip
|
||||||
*
|
*
|
||||||
@@ -60,38 +159,36 @@ class MailmanSpip
|
|||||||
{
|
{
|
||||||
dol_syslog(get_class($this)."::add_to_spip");
|
dol_syslog(get_class($this)."::add_to_spip");
|
||||||
|
|
||||||
if (defined("ADHERENT_USE_SPIP") && ADHERENT_USE_SPIP ==1 &&
|
if ($this->isSpipEnabled())
|
||||||
defined('ADHERENT_SPIP_SERVEUR') && ADHERENT_SPIP_SERVEUR != '' &&
|
|
||||||
defined('ADHERENT_SPIP_USER') && ADHERENT_SPIP_USER != '' &&
|
|
||||||
defined('ADHERENT_SPIP_PASS') && ADHERENT_SPIP_PASS != '' &&
|
|
||||||
defined('ADHERENT_SPIP_DB') && ADHERENT_SPIP_DB != ''
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
if ($this->checkSpipConfig())
|
||||||
$mdpass=dol_hash($object->pass);
|
|
||||||
$htpass=crypt($object->pass,makesalt());
|
|
||||||
$query = "INSERT INTO spip_auteurs (nom, email, login, pass, htpass, alea_futur, statut) VALUES(\"".$object->firstname." ".$object->lastname."\",\"".$object->email."\",\"".$object->login."\",\"$mdpass\",\"$htpass\",FLOOR(32000*RAND()),\"1comite\")";
|
|
||||||
|
|
||||||
$mydb=getDoliDBInstance('mysql',ADHERENT_SPIP_SERVEUR,ADHERENT_SPIP_USER,ADHERENT_SPIP_PASS,ADHERENT_SPIP_DB,ADHERENT_SPIP_PORT);
|
|
||||||
|
|
||||||
if (! $mydb->ok)
|
|
||||||
{
|
{
|
||||||
$this->error=$mydb->lasterror();
|
$mydb = $this->connectSpip();
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $mydb->query($query);
|
if ($mydb)
|
||||||
if ($result)
|
{
|
||||||
{
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||||
$mydb->close();
|
$mdpass=dol_hash($object->pass);
|
||||||
return 1;
|
$htpass=crypt($object->pass,makesalt());
|
||||||
}
|
$query = "INSERT INTO spip_auteurs (nom, email, login, pass, htpass, alea_futur, statut) VALUES(\"".$object->firstname." ".$object->lastname."\",\"".$object->email."\",\"".$object->login."\",\"$mdpass\",\"$htpass\",FLOOR(32000*RAND()),\"1comite\")";
|
||||||
else
|
|
||||||
{
|
$result = $mydb->query($query);
|
||||||
$this->error=$mydb->lasterror();
|
|
||||||
return 0;
|
$mydb->close();
|
||||||
|
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else $this->error = $mydb->lasterror();
|
||||||
|
}
|
||||||
|
else $this->error = 'Failed to connect to SPIP';
|
||||||
}
|
}
|
||||||
|
else $this->error = 'BadSPIPConfiguration';
|
||||||
}
|
}
|
||||||
|
else $this->error = 'SPIPNotEnabled';
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,30 +199,35 @@ class MailmanSpip
|
|||||||
*/
|
*/
|
||||||
function del_to_spip($object)
|
function del_to_spip($object)
|
||||||
{
|
{
|
||||||
if (defined("ADHERENT_USE_SPIP") && ADHERENT_USE_SPIP ==1 &&
|
dol_syslog(get_class($this)."::del_to_spip");
|
||||||
defined('ADHERENT_SPIP_SERVEUR') && ADHERENT_SPIP_SERVEUR != '' &&
|
|
||||||
defined('ADHERENT_SPIP_USER') && ADHERENT_SPIP_USER != '' &&
|
if ($this->isSpipEnabled())
|
||||||
defined('ADHERENT_SPIP_PASS') && ADHERENT_SPIP_PASS != '' &&
|
|
||||||
defined('ADHERENT_SPIP_DB') && ADHERENT_SPIP_DB != ''
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$query = "DELETE FROM spip_auteurs WHERE login='".$object->login."'";
|
if ($this->checkSpipConfig())
|
||||||
|
|
||||||
$mydb=getDoliDBInstance('mysql',ADHERENT_SPIP_SERVEUR,ADHERENT_SPIP_USER,ADHERENT_SPIP_PASS,ADHERENT_SPIP_DB,ADHERENT_SPIP_PORT);
|
|
||||||
|
|
||||||
$result = $mydb->query($query);
|
|
||||||
if ($result)
|
|
||||||
{
|
{
|
||||||
$mydb->close();
|
$mydb = $this->connectSpip();
|
||||||
return 1;
|
|
||||||
}
|
if ($mydb)
|
||||||
else
|
{
|
||||||
{
|
$query = "DELETE FROM spip_auteurs WHERE login='".$object->login."'";
|
||||||
$this->error=$mydb->lasterror();
|
|
||||||
$mydb->close();
|
$result = $mydb->query($query);
|
||||||
return 0;
|
|
||||||
|
$mydb->close();
|
||||||
|
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else $this->error = $mydb->lasterror();
|
||||||
|
}
|
||||||
|
else $this->error = 'Failed to connect to SPIP';
|
||||||
}
|
}
|
||||||
|
else $this->error = 'BadSPIPConfiguration';
|
||||||
}
|
}
|
||||||
|
else $this->error = 'SPIPNotEnabled';
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -136,48 +238,46 @@ class MailmanSpip
|
|||||||
*/
|
*/
|
||||||
function is_in_spip($object)
|
function is_in_spip($object)
|
||||||
{
|
{
|
||||||
if (defined("ADHERENT_USE_SPIP") && ADHERENT_USE_SPIP ==1 &&
|
if ($this->isSpipEnabled())
|
||||||
defined('ADHERENT_SPIP_SERVEUR') && ADHERENT_SPIP_SERVEUR != '' &&
|
|
||||||
defined('ADHERENT_SPIP_USER') && ADHERENT_SPIP_USER != '' &&
|
|
||||||
defined('ADHERENT_SPIP_PASS') && ADHERENT_SPIP_PASS != '' &&
|
|
||||||
defined('ADHERENT_SPIP_DB') && ADHERENT_SPIP_DB != '')
|
|
||||||
{
|
{
|
||||||
$query = "SELECT login FROM spip_auteurs WHERE login='".$object->login."'";
|
if ($this->checkSpipConfig())
|
||||||
|
|
||||||
$mydb=getDoliDBInstance('mysql',ADHERENT_SPIP_SERVEUR,ADHERENT_SPIP_USER,ADHERENT_SPIP_PASS,ADHERENT_SPIP_DB,ADHERENT_SPIP_PORT);
|
|
||||||
|
|
||||||
if ($mydb->ok)
|
|
||||||
{
|
{
|
||||||
$result = $mydb->query($query);
|
$mydb = $this->connectSpip();
|
||||||
|
|
||||||
if ($result)
|
if ($mydb)
|
||||||
{
|
{
|
||||||
if ($mydb->num_rows($result))
|
$query = "SELECT login FROM spip_auteurs WHERE login='".$object->login."'";
|
||||||
|
|
||||||
|
$result = $mydb->query($query);
|
||||||
|
|
||||||
|
if ($result)
|
||||||
{
|
{
|
||||||
// nous avons au moins une reponse
|
if ($mydb->num_rows($result))
|
||||||
$mydb->close($result);
|
{
|
||||||
return 1;
|
// nous avons au moins une reponse
|
||||||
|
$mydb->close($result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// nous n'avons pas de reponse => n'existe pas
|
||||||
|
$mydb->close($result);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// nous n'avons pas de reponse => n'existe pas
|
$this->error = $mydb->lasterror();
|
||||||
$mydb->close($result);
|
$mydb->close();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else $this->error = 'Failed to connect to SPIP';
|
||||||
{
|
|
||||||
$this->error=$mydb->lasterror();
|
|
||||||
$mydb->close();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->error="Failed to connect ".ADHERENT_SPIP_SERVEUR." ".ADHERENT_SPIP_USER." ".ADHERENT_SPIP_PASS." ".ADHERENT_SPIP_DB;
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
else $this->error = 'BadSPIPConfiguration';
|
||||||
}
|
}
|
||||||
|
else $this->error = 'SPIPNotEnabled';
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -224,44 +324,13 @@ class MailmanSpip
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// on remplace dans l'url le nom de la liste ainsi
|
//We call Mailman to subscribe the user
|
||||||
// que l'email et le mot de passe
|
$result = $this->callMailman($object, $conf->global->ADHERENT_MAILMAN_URL);
|
||||||
$patterns = array (
|
|
||||||
'/%LISTE%/',
|
|
||||||
'/%EMAIL%/',
|
|
||||||
'/%PASSWORD%/',
|
|
||||||
'/%MAILMAN_ADMINPW%/'
|
|
||||||
);
|
|
||||||
$replace = array (
|
|
||||||
$list,
|
|
||||||
$object->email,
|
|
||||||
$object->pass,
|
|
||||||
$conf->global->ADHERENT_MAILMAN_ADMINPW
|
|
||||||
);
|
|
||||||
$curl_url = preg_replace($patterns, $replace, $conf->global->ADHERENT_MAILMAN_URL);
|
|
||||||
|
|
||||||
dol_syslog("Call URL to subscribe : ".$curl_url);
|
if ($result === false)
|
||||||
$ch = curl_init();
|
|
||||||
curl_setopt($ch, CURLOPT_URL,"$curl_url");
|
|
||||||
//curl_setopt($ch, CURLOPT_URL,"http://www.j1b.org/");
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
|
||||||
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
|
||||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
|
||||||
//curl_setopt($ch, CURLOPT_POST, 0);
|
|
||||||
//curl_setopt($ch, CURLOPT_POSTFIELDS, "a=3&b=5");
|
|
||||||
//--- Start buffering
|
|
||||||
$result=curl_exec($ch);
|
|
||||||
dol_syslog('result curl_exec='.$result);
|
|
||||||
//--- End buffering and clean output
|
|
||||||
if ($result === false || curl_errno($ch) > 0)
|
|
||||||
{
|
{
|
||||||
// error
|
|
||||||
$this->error=curl_errno($ch).' '.curl_error($ch);
|
|
||||||
dol_syslog('Error using curl '.$this->error, LOG_ERR);
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
curl_close($ch);
|
|
||||||
}
|
}
|
||||||
return count($lists);
|
return count($lists);
|
||||||
}
|
}
|
||||||
@@ -306,44 +375,13 @@ class MailmanSpip
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// on remplace dans l'url le nom de la liste ainsi
|
//We call Mailman to unsubscribe the user
|
||||||
// que l'email et le mot de passe
|
$result = $this->callMailman($object, $conf->global->ADHERENT_MAILMAN_UNSUB_URL);
|
||||||
$patterns = array (
|
|
||||||
'/%LISTE%/',
|
|
||||||
'/%EMAIL%/',
|
|
||||||
'/%PASSWORD%/',
|
|
||||||
'/%MAILMAN_ADMINPW%/'
|
|
||||||
);
|
|
||||||
$replace = array (
|
|
||||||
trim($list),
|
|
||||||
$object->email,
|
|
||||||
$object->pass,
|
|
||||||
$conf->global->ADHERENT_MAILMAN_ADMINPW
|
|
||||||
);
|
|
||||||
$curl_url = preg_replace($patterns, $replace, $conf->global->ADHERENT_MAILMAN_UNSUB_URL);
|
|
||||||
|
|
||||||
dol_syslog("Call URL to unsubscribe : ".$curl_url);
|
if ($result === false)
|
||||||
$ch = curl_init();
|
|
||||||
curl_setopt($ch, CURLOPT_URL,"$curl_url");
|
|
||||||
//curl_setopt($ch, CURLOPT_URL,"http://www.j1b.org/");
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
|
||||||
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
|
|
||||||
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
|
||||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
|
||||||
//curl_setopt($ch, CURLOPT_POST, 0);
|
|
||||||
//curl_setopt($ch, CURLOPT_POSTFIELDS, "a=3&b=5");
|
|
||||||
//--- Start buffering
|
|
||||||
$result=curl_exec($ch);
|
|
||||||
dol_syslog($result);
|
|
||||||
//--- End buffering and clean output
|
|
||||||
if ($result === false || curl_errno($ch) > 0)
|
|
||||||
{
|
{
|
||||||
$this->error=curl_errno($ch).' '.curl_error($ch);
|
|
||||||
dol_syslog('Error using curl '.$this->error, LOG_ERR);
|
|
||||||
// error
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
curl_close($ch);
|
|
||||||
}
|
}
|
||||||
return count($lists);
|
return count($lists);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user