$this->setContactIDs();
$skipOnHold = $this->skipOnHold ?? FALSE;
$skipDeceased = $this->skipDeceased ?? TRUE;
- CRM_Member_Form_Task_PDFLetterCommon::postProcessMembers(
+ self::postProcessMembers(
$this, $this->_memberIds, $skipOnHold, $skipDeceased, $this->_contactIds
);
}
+ /**
+ * Process the form after the input has been submitted and validated.
+ * @todo this is horrible copy & paste code because there is so much risk of breakage
+ * in fixing the existing pdfLetter classes to be suitably generic
+ *
+ * @param CRM_Core_Form $form
+ * @param $membershipIDs
+ * @param $skipOnHold
+ * @param $skipDeceased
+ * @param $contactIDs
+ */
+ public static function postProcessMembers(&$form, $membershipIDs, $skipOnHold, $skipDeceased, $contactIDs) {
+ $formValues = $form->controller->exportValues($form->getName());
+ list($formValues, $categories, $html_message, $messageToken, $returnProperties) = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues);
+
+ $html
+ = self::generateHTML(
+ $membershipIDs,
+ $returnProperties,
+ $skipOnHold,
+ $skipDeceased,
+ $messageToken,
+ $html_message,
+ $categories
+ );
+ CRM_Contact_Form_Task_PDFLetterCommon::createActivities($form, $html_message, $contactIDs, $formValues['subject'], CRM_Utils_Array::value('campaign_id', $formValues));
+
+ // Set the filename for the PDF using the Activity Subject, if defined. Remove unwanted characters and limit the length to 200 characters.
+ if (!empty($form->getSubmittedValue('subject'))) {
+ $fileName = CRM_Utils_File::makeFilenameWithUnicode($form->getSubmittedValue('subject'), '_', 200) . '.pdf';
+ }
+ else {
+ $fileName = 'CiviLetter.pdf';
+ }
+
+ CRM_Utils_PDF_Utils::html2pdf($html, $fileName, FALSE, $formValues);
+
+ $form->postProcessHook();
+
+ CRM_Utils_System::civiExit();
+ }
+
+ /**
+ * Generate html for pdf letters.
+ *
+ * @param array $membershipIDs
+ * @param array $returnProperties
+ * @param bool $skipOnHold
+ * @param bool $skipDeceased
+ * @param array $messageToken
+ * @param $html_message
+ * @param $categories
+ *
+ * @return array
+ */
+ public static function generateHTML($membershipIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $html_message, $categories) {
+ $memberships = CRM_Utils_Token::getMembershipTokenDetails($membershipIDs);
+ $html = [];
+
+ foreach ($membershipIDs as $membershipID) {
+ $membership = $memberships[$membershipID];
+ // get contact information
+ $contactId = $membership['contact_id'];
+ $params = ['contact_id' => $contactId];
+ //getTokenDetails is much like calling the api contact.get function - but - with some minor
+ // special handlings. It precedes the existence of the api
+ list($contacts) = CRM_Utils_Token::getTokenDetails(
+ $params,
+ $returnProperties,
+ $skipOnHold,
+ $skipDeceased,
+ NULL,
+ $messageToken,
+ 'CRM_Contribution_Form_Task_PDFLetterCommon'
+ );
+
+ $tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contacts[$contactId], TRUE, $messageToken);
+ $tokenHtml = CRM_Utils_Token::replaceEntityTokens('membership', $membership, $tokenHtml, $messageToken);
+ $tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $contacts[$contactId], $categories, TRUE);
+ $tokenHtml = CRM_Utils_Token::parseThroughSmarty($tokenHtml, $contacts[$contactId]);
+
+ $html[] = $tokenHtml;
+
+ }
+ return $html;
+ }
+
/**
* List available tokens for this form.
*
/**
* This class provides the common functionality for creating PDF letter for
* members
+ *
+ * @deprecated
*/
class CRM_Member_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDFLetterCommon {
* @todo this is horrible copy & paste code because there is so much risk of breakage
* in fixing the existing pdfLetter classes to be suitably generic
*
+ * @deprecated
+ *
* @param CRM_Core_Form $form
* @param $membershipIDs
* @param $skipOnHold
* @param $contactIDs
*/
public static function postProcessMembers(&$form, $membershipIDs, $skipOnHold, $skipDeceased, $contactIDs) {
+ CRM_Core_Error::deprecatedFunctionWarning('no alternative');
$formValues = $form->controller->exportValues($form->getName());
- list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($formValues);
+ list($formValues, $categories, $html_message, $messageToken, $returnProperties) = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues);
$html
= self::generateHTML(
$html_message,
$categories
);
- self::createActivities($form, $html_message, $contactIDs, $formValues['subject'], CRM_Utils_Array::value('campaign_id', $formValues));
+ CRM_Contact_Form_Task_PDFLetterCommon::createActivities($form, $html_message, $contactIDs, $formValues['subject'], CRM_Utils_Array::value('campaign_id', $formValues));
// Set the filename for the PDF using the Activity Subject, if defined. Remove unwanted characters and limit the length to 200 characters.
if (!empty($form->getSubmittedValue('subject'))) {
* @param $html_message
* @param $categories
*
+ * @deprecated
+ *
* @return array
*/
public static function generateHTML($membershipIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $html_message, $categories) {
+ CRM_Core_Error::deprecatedFunctionWarning('no alternative');
$memberships = CRM_Utils_Token::getMembershipTokenDetails($membershipIDs);
$html = [];