Ejemplo n.º 1
0
 /**
  * Generate the contribution array from the form, we fill in the contact details and determine any aggregation
  * around contact_id of contribution_recur_id
  *
  * @param string $groupBy
  * @param CRM_Contribute_Form_Task $form
  * @param array $returnProperties
  * @param bool $skipOnHold
  * @param bool $skipDeceased
  * @param array $messageToken
  * @param string $task
  * @param string $separator
  *
  * @return array
  */
 public static function buildContributionArray($groupBy, $form, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator)
 {
     $contributions = $contacts = $notSent = array();
     $contributionIDs = $form->getVar('_contributionIds');
     if ($form->_includesSoftCredits) {
         //@todo - comment on what is stored there
         $contributionIDs = $form->getVar('_contributionContactIds');
     }
     foreach ($contributionIDs as $item => $contributionId) {
         // get contribution information
         $contribution = CRM_Utils_Token::getContributionTokenDetails(array('contribution_id' => $contributionId), $returnProperties, NULL, $messageToken, $task);
         $contribution = $contributions[$contributionId] = $contribution[$contributionId];
         if ($form->_includesSoftCredits) {
             //@todo find out why this happens & add comments
             list($contactID) = explode('-', $item);
             $contactID = (int) $contactID;
         } else {
             $contactID = $contribution['contact_id'];
         }
         if (!isset($contacts[$contactID])) {
             list($contact) = CRM_Utils_Token::getTokenDetails(array('contact_id' => $contactID), $returnProperties, $skipOnHold, $skipDeceased, NULL, $messageToken, $task);
             $contacts[$contactID] = $contact[$contactID];
             $contacts[$contactID]['contact_aggregate'] = 0;
             $contacts[$contactID]['combined'] = $contacts[$contactID]['contribution_ids'] = array();
         }
         $contacts[$contactID]['contact_aggregate'] += $contribution['total_amount'];
         $groupByID = empty($contribution[$groupBy]) ? 0 : $contribution[$groupBy];
         $contacts[$contactID]['contribution_ids'][$groupBy][$groupByID][$contributionId] = TRUE;
         if (!isset($contacts[$contactID]['combined'][$groupBy]) || !isset($contacts[$contactID]['combined'][$groupBy][$groupByID])) {
             $contacts[$contactID]['combined'][$groupBy][$groupByID] = $contribution;
             $contacts[$contactID]['aggregates'][$groupBy][$groupByID] = $contribution['total_amount'];
         } else {
             $contacts[$contactID]['combined'][$groupBy][$groupByID] = self::combineContributions($contacts[$contactID]['combined'][$groupBy][$groupByID], $contribution, $separator);
             $contacts[$contactID]['aggregates'][$groupBy][$groupByID] += $contribution['total_amount'];
         }
     }
     return array($contributions, $contacts);
 }
Ejemplo n.º 2
0
 /**
  * Generate the contribution array from the form, we fill in the contact details and determine any aggregation
  * around contact_id of contribution_recur_id
  *
  * @param string $groupBy
  * @param array $contributionIDs
  * @param array $returnProperties
  * @param bool $skipOnHold
  * @param bool $skipDeceased
  * @param array $messageToken
  * @param string $task
  * @param string $separator
  * @param bool $isIncludeSoftCredits
  *
  * @return array
  */
 public static function buildContributionArray($groupBy, $contributionIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator, $isIncludeSoftCredits)
 {
     $contributions = $contacts = $notSent = array();
     foreach ($contributionIDs as $item => $contributionId) {
         // get contribution information
         $contribution = CRM_Utils_Token::getContributionTokenDetails(array('contribution_id' => $contributionId), $returnProperties, NULL, $messageToken, $task);
         $contribution = $contributions[$contributionId] = $contribution[$contributionId];
         if ($isIncludeSoftCredits) {
             //@todo find out why this happens & add comments
             list($contactID) = explode('-', $item);
             $contactID = (int) $contactID;
         } else {
             $contactID = $contribution['contact_id'];
         }
         if (!isset($contacts[$contactID])) {
             $contacts[$contactID] = array();
             $contacts[$contactID]['contact_aggregate'] = 0;
             $contacts[$contactID]['combined'] = $contacts[$contactID]['contribution_ids'] = array();
         }
         $contacts[$contactID]['contact_aggregate'] += $contribution['total_amount'];
         $groupByID = empty($contribution[$groupBy]) ? 0 : $contribution[$groupBy];
         $contacts[$contactID]['contribution_ids'][$groupBy][$groupByID][$contributionId] = TRUE;
         if (!isset($contacts[$contactID]['combined'][$groupBy]) || !isset($contacts[$contactID]['combined'][$groupBy][$groupByID])) {
             $contacts[$contactID]['combined'][$groupBy][$groupByID] = $contribution;
             $contacts[$contactID]['aggregates'][$groupBy][$groupByID] = $contribution['total_amount'];
         } else {
             $contacts[$contactID]['combined'][$groupBy][$groupByID] = self::combineContributions($contacts[$contactID]['combined'][$groupBy][$groupByID], $contribution, $separator);
             $contacts[$contactID]['aggregates'][$groupBy][$groupByID] += $contribution['total_amount'];
         }
     }
     // Assign the available contributions before calling tokens so hooks parsing smarty can access it.
     // Note that in core code you can only use smarty here if enable if for the whole site, incl
     // CiviMail, with a big performance impact.
     // Hooks allow more nuanced smarty usage here.
     CRM_Core_Smarty::singleton()->assign('contributions', $contributions);
     foreach ($contacts as $contactID => $contact) {
         $tokenResolvedContacts = CRM_Utils_Token::getTokenDetails(array('contact_id' => $contactID), $returnProperties, $skipOnHold, $skipDeceased, NULL, $messageToken, $task);
         $contacts[$contactID] = array_merge($tokenResolvedContacts[0][$contactID], $contact);
     }
     return array($contributions, $contacts);
 }
 /**
  * process the form after the input has been submitted and validated
  *
  * @access public
  *
  * @return void
  */
 static function postProcess(&$form)
 {
     list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($form);
     // update dates ?
     $receipt_update = isset($formValues['receipt_update']) ? $formValues['receipt_update'] : FALSE;
     $thankyou_update = isset($formValues['thankyou_update']) ? $formValues['thankyou_update'] : FALSE;
     $nowDate = date('YmdHis');
     $receipts = 0;
     $thanks = 0;
     $updateStatus = '';
     // skip some contacts ?
     $skipOnHold = isset($form->skipOnHold) ? $form->skipOnHold : FALSE;
     $skipDeceased = isset($form->skipDeceased) ? $form->skipDeceased : TRUE;
     foreach ($form->getVar('_contributionIds') as $item => $contributionId) {
         // get contact information
         $contactId = civicrm_api("Contribution", "getvalue", array('version' => '3', 'id' => $contributionId, 'return' => 'contact_id'));
         $params = array('contact_id' => $contactId);
         list($contact) = CRM_Utils_Token::getTokenDetails($params, $returnProperties, $skipOnHold, $skipDeceased, NULL, $messageToken, 'CRM_Contribution_Form_Task_PDFLetterCommon');
         if (civicrm_error($contact)) {
             $notSent[] = $contributionId;
             continue;
         }
         // get contribution information
         $params = array('contribution_id' => $contributionId);
         $contribution = CRM_Utils_Token::getContributionTokenDetails($params, $returnProperties, NULL, $messageToken, 'CRM_Contribution_Form_Task_PDFLetterCommon');
         if (civicrm_error($contribution)) {
             $notSent[] = $contributionId;
             continue;
         }
         $tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contact[$contactId], TRUE, $messageToken);
         $tokenHtml = CRM_Utils_Token::replaceContributionTokens($tokenHtml, $contribution[$contributionId], TRUE, $messageToken);
         $tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $contact[$contactId], $categories, TRUE);
         if (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY) {
             $smarty = CRM_Core_Smarty::singleton();
             // also add the tokens to the template
             $smarty->assign_by_ref('contact', $contact);
             $tokenHtml = $smarty->fetch("string:{$tokenHtml}");
         }
         $html[] = $tokenHtml;
         // update dates (do it for each contribution including grouped recurring contribution)
         if ($receipt_update) {
             $result = CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $contributionId, 'receipt_date', $nowDate);
             // We can't use CRM_Core_Error::fatal here because the api error elevates the exception level. FIXME. dgg
             if ($result) {
                 $receipts++;
             }
         }
         if ($thankyou_update) {
             $result = CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $contributionId, 'thankyou_date', $nowDate);
             // We can't use CRM_Core_Error::fatal here because the api error elevates the exception level. FIXME. dgg
             if ($result) {
                 $thanks++;
             }
         }
     }
     self::createActivities($form, $html_message, $form->_contactIds);
     CRM_Utils_PDF_Utils::html2pdf($html, "CiviLetter.pdf", FALSE, $formValues);
     $form->postProcessHook();
     if ($receipts) {
         $updateStatus = ts('Receipt date has been updated for %1 contributions.', array(1 => $receipts));
     }
     if ($thanks) {
         $updateStatus .= ' ' . ts('Thank-you date has been updated for %1 contributions.', array(1 => $thanks));
     }
     if ($updateStatus) {
         CRM_Core_Session::setStatus($updateStatus);
     }
     CRM_Utils_System::civiExit(1);
 }