Changeset 70412 in spip-zone


Ignore:
Timestamp:
Mar 5, 2013, 10:59:00 AM (6 years ago)
Author:
cedric@…
Message:

Etre capable d'utiliser Mandrill même si cUrl pas dispo sur le serveur, ou si open_basedir/safe_mode actif (qui empechent FOLLOW_LOCATION de cUrl) en utilisant recuperer_page(). Si recuperer_page() echoue, on lance la methode native qui repose sur cUrl quand même (cas si openssl pas present sur le serveur)

Location:
_plugins_/mailshot/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailshot/trunk/bulkmailer/mandrill.php

    r68925 r70412  
    1111include_spip("classes/facteur");
    1212include_spip("lib/mandrill-api-php/src/Mandrill");
     13include_spip("inc/distant");
    1314
    1415/**
     
    9697function bulkmailer_mandrill_init_dist($id_mailshot=0){
    9798        $api_key = lire_config("mailshot/mandrill_api_key");
    98         $mandrill = new Mandrill($api_key);
     99        $mandrill = new SpipMandrill($api_key);
    99100
    100101        spip_log("bulkmailer_mandrill_init_dist $id_mailshot","mailshot");
    101 
    102         //WARNING: this would prevent curl from detecting a 'man in the middle' attack
    103         curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYHOST, 0);
    104         curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYPEER, 0);
    105102
    106103        // recuperer les webhooks existants
     
    163160}
    164161
     162/**
     163 * Prise en charge par recuperer_page quand curl pas dispo ou pas complet
     164 */
     165class SpipMandrill extends Mandrill {
     166        public function __construct($apikey=null) {
     167                parent::__construct($apikey);
     168                //WARNING: this would prevent curl from detecting a 'man in the middle' attack
     169                curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
     170                curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
     171 }
     172
     173        public function call($url, $params) {
     174                $params['key'] = $this->apikey;
     175                $paramsjson = json_encode($params);
     176                $response_body = "";
     177                if (!function_exists('curl_init')
     178                  OR @ini_get("safe_mode")=="On"
     179                  OR @ini_get("open_basedir")){
     180                        spip_log("Appel de Mandrill par recuperer_page","mailshot");
     181                        // essayer avec les fonctions natives de SPIP
     182                        // mais ne supportent pas forcement https si pas openssl
     183                        $response_body = recuperer_page($this->root . $url . '.json',false,false,null,$paramsjson);
     184                        if (!$response_body)
     185                                spip_log("Echec Appel de Mandrill par recuperer_page","mailshot"._LOG_ERREUR);
     186                }
     187
     188                if (!$response_body)
     189                        return parent::call($url, $params);
     190
     191                $result = json_decode($response_body, true);
     192                if($result === null) throw new Mandrill_Error('We were unable to decode the JSON response from the Mandrill API: ' . $response_body);
     193
     194                return $result;
     195        }
     196}
    165197
    166198class FacteurMandrill extends Facteur {
     
    317349                }
    318350
    319                 $mandrill = new Mandrill($api_key);
    320 
    321                 //WARNING: this would prevent curl from detecting a 'man in the middle' attack
    322                 curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYHOST, 0);
    323                 curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYPEER, 0);
     351                $mandrill = new SpipMandrill($api_key);
    324352
    325353                try {
  • _plugins_/mailshot/trunk/lib/mandrill-api-php/src/Mandrill.php

    r68510 r70412  
    4646        curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mandrill-PHP/1.0.11');
    4747        curl_setopt($this->ch, CURLOPT_POST, true);
    48         curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
     48              // avoid warning if safe_mode OR open_basedir
     49        @curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
    4950        curl_setopt($this->ch, CURLOPT_HEADER, false);
    5051        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
  • _plugins_/mailshot/trunk/paquet.xml

    r69694 r70412  
    22        prefix="mailshot"
    33        categorie="communication"
    4         version="1.3.4"
     4        version="1.3.5"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.