Merge pull request #4693 from jaapjansma/CRM-15702
[civicrm-core.git] / CRM / Mailing / BAO / MailingJob.php
index 216b6a1355aefe7fa66f5dcec9b5a8331457878c..0cc08404c3cc56389c0315a4de0a2ccf7c334c6c 100644 (file)
  */
 
 require_once 'Mail.php';
+
+/**
+ * Class CRM_Mailing_BAO_MailingJob
+ */
 class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
   CONST MAX_CONTACTS_TO_PROCESS = 1000;
 
   /**
-   * class constructor
+   * Class constructor
    */
   function __construct() {
     parent::__construct();
   }
 
   /**
-   * @param $params
+   * @param array $params
    *
    * @return CRM_Mailing_BAO_MailingJob
    */
@@ -64,7 +68,7 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
   /**
    * Initiate all pending/ready jobs
    *
-   * @param null $testParams
+   * @param array $testParams
    * @param null $mode
    *
    * @return void
@@ -212,6 +216,9 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
 
   // post process to determine if the parent job
   // as well as the mailing is complete after the run
+  /**
+   * @param null $mode
+   */
   public static function runJobs_post($mode = NULL) {
 
     $job = new CRM_Mailing_BAO_MailingJob();
@@ -280,10 +287,13 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
 
 
   // before we run jobs, we need to split the jobs
+  /**
+   * @param int $offset
+   * @param null $mode
+   */
   public static function runJobs_pre($offset = 200, $mode = NULL) {
     $job = new CRM_Mailing_BAO_MailingJob();
 
-    $config       = CRM_Core_Config::singleton();
     $jobTable     = CRM_Mailing_DAO_MailingJob::getTableName();
     $mailingTable = CRM_Mailing_DAO_Mailing::getTableName();
 
@@ -368,6 +378,9 @@ class CRM_Mailing_BAO_MailingJob extends CRM_Mailing_DAO_MailingJob {
 
   // Split the parent job into n number of child job based on an offset
   // If null or 0 , we create only one child job
+  /**
+   * @param int $offset
+   */
   public function split_job($offset = 200) {
     $recipient_count = CRM_Mailing_BAO_Recipients::mailingSize($this->mailing_id);
 
@@ -407,6 +420,9 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
     }
   }
 
+  /**
+   * @param array $testParams
+   */
   public function queue($testParams = NULL) {
     $mailing = new CRM_Mailing_BAO_Mailing();
     $mailing->id = $this->mailing_id;
@@ -455,7 +471,9 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
   /**
    * Send the mailing
    *
-   * @param object $mailer        A Mail object to send the messages
+   * @param object $mailer A Mail object to send the messages
+   *
+   * @param array $testParams
    *
    * @return void
    * @access public
@@ -587,6 +605,16 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
     return $isDelivered;
   }
 
+  /**
+   * @param $fields
+   * @param $mailing
+   * @param $mailer
+   * @param $job_date
+   * @param $attachments
+   *
+   * @return bool|null
+   * @throws Exception
+   */
   public function deliverGroup(&$fields, &$mailing, &$mailer, &$job_date, &$attachments) {
     static $smtpConnectionErrors = 0;
 
@@ -674,16 +702,16 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
         unset($errorScope);
       }
 
-      // FIXME: for now we skipping bounce handling for sms
       if (is_a($result, 'PEAR_Error') && !$mailing->sms_provider_id) {
         // CRM-9191
         $message = $result->getMessage();
-        if (strpos($message,
-            'Failed to write to socket'
-          ) !== FALSE) {
+        if (
+          strpos($message, 'Failed to write to socket') !== FALSE ||
+          strpos($message, 'Failed to set sender') !== FALSE
+        ) {
           // lets log this message and code
           $code = $result->getCode();
-          CRM_Core_Error::debug_log_message("SMTP Socket Error. Message: $message, Code: $code");
+          CRM_Core_Error::debug_log_message("SMTP Socket Error or failed to set sender error. Message: $message, Code: $code");
 
           // these are socket write errors which most likely means smtp connection errors
           // lets skip them
@@ -717,6 +745,13 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
         );
         CRM_Mailing_Event_BAO_Bounce::create($params);
       }
+      elseif (is_a($result, 'PEAR_Error') && $mailing->sms_provider_id) {
+        // Handle SMS errors: CRM-15426
+        $job_id = intval($this->id);
+        $mailing_id = intval($mailing->id);
+        CRM_Core_Error::debug_log_message("Failed to send SMS message. Vars: mailing_id: ${mailing_id}, job_id: ${job_id}. Error message follows.");
+        CRM_Core_Error::debug_log_message($result->getMessage());
+      }
       else {
         /* Register the delivery event */
         $deliveredParams[] = $field['id'];
@@ -774,7 +809,7 @@ VALUES (%1, %2, %3, %4, %5, %6, %7)
   }
 
   /**
-   * cancel a mailing
+   * Cancel a mailing
    *
    * @param int $mailingId  the id of the mailing to be canceled
    * @static
@@ -866,6 +901,16 @@ AND    status IN ( 'Scheduled', 'Running', 'Paused' )
     return '';
   }
 
+  /**
+   * @param array $deliveredParams
+   * @param array $targetParams
+   * @param $mailing
+   * @param $job_date
+   *
+   * @return bool
+   * @throws CRM_Core_Exception
+   * @throws Exception
+   */
   public function writeToDB(
     &$deliveredParams,
     &$targetParams,