3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2014
36 * This class provides the functionality to email a group of
39 class CRM_Contribute_Form_Task_Invoice
extends CRM_Contribute_Form_Task
{
41 * Are we operating in "single mode", i.e. updating the task of only
42 * one specific contribution?
46 public $_single = FALSE;
49 * Gives all the statues for conribution
51 public $_contributionStatusId;
54 * Gives the HTML template of PDF Invoice
56 public $_messageInvoice;
59 * This variable is used to assign parameters for HTML template of PDF Invoice
61 public $_invoiceTemplate;
66 public $_selectedOutput;
69 * Build all the data structures needed to build the form
73 public function preProcess() {
74 $id = CRM_Utils_Request
::retrieve('id', 'Positive', $this, FALSE);
76 $this->_contributionIds
= array($id);
77 $this->_componentClause
= " civicrm_contribution.id IN ( $id ) ";
78 $this->_single
= TRUE;
79 $this->assign('totalSelectedContributions', 1);
81 // set the redirection after actions
82 $contactId = CRM_Utils_Request
::retrieve('cid', 'Positive', $this, FALSE);
83 $url = CRM_Utils_System
::url('civicrm/contact/view/contribution',
84 "action=view&reset=1&id={$id}&cid={$contactId}&context=contribution&selectedChild=contribute"
87 CRM_Core_Session
::singleton()->pushUserContext($url);
93 // check that all the contribution ids have status Completed, Pending, Refunded.
94 $this->_contributionStatusId
= CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
95 $status = array('Completed', 'Pending', 'Refunded');
97 foreach ($this->_contributionStatusId
as $key => $value) {
98 if (in_array($value, $status)) {
102 $Id = implode(",", $statusId);
103 $query = "SELECT count(*) FROM civicrm_contribution WHERE contribution_status_id NOT IN ($Id) AND {$this->_componentClause}";
104 $count = CRM_Core_DAO
::singleValueQuery($query);
106 CRM_Core_Error
::statusBounce(ts('Please select only contributions with Completed, Pending, Refunded status.'));
109 // we have all the contribution ids, so now we get the contact ids
110 parent
::setContactIDs();
111 $this->assign('single', $this->_single
);
113 $qfKey = CRM_Utils_Request
::retrieve('qfKey', 'String', $this);
114 $urlParams = 'force=1';
115 if (CRM_Utils_Rule
::qfKey($qfKey)) {
116 $urlParams .= "&qfKey=$qfKey";
119 $url = CRM_Utils_System
::url('civicrm/contribute/search', $urlParams);
123 'title' => ts('Search Results'),
127 CRM_Utils_System
::appendBreadCrumb($breadCrumb);
129 $this->_selectedOutput
= CRM_Utils_Request
::retrieve('select', 'String', $this);
130 $this->assign('selectedOutput', $this->_selectedOutput
);
132 if ($this->_selectedOutput
== 'email') {
133 CRM_Utils_System
::setTitle(ts('Email Invoice'));
136 CRM_Utils_System
::setTitle(ts('Print Contribution Invoice'));
141 * Build the form object
146 public function buildQuickForm() {
147 $session = CRM_Core_Session
::singleton();
148 if (CRM_Core_Permission
::check('administer CiviCRM')) {
149 $this->assign('isAdmin', 1);
151 $contactID = $session->get('userID');
152 $contactEmails = CRM_Core_BAO_Email
::allEmails($contactID);
154 $fromDisplayName = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact',
155 $contactID, 'display_name'
157 foreach ($contactEmails as $emailId => $item) {
158 $email = $item['email'];
160 $emails[$emailId] = '"' . $fromDisplayName . '" <' . $email . '> ';
162 if (isset($emails[$emailId])) {
163 $emails[$emailId] .= $item['locationType'];
164 if ($item['is_primary']) {
165 $emails[$emailId] .= ' ' . ts('(preferred)');
167 $emails[$emailId] = htmlspecialchars($emails[$emailId]);
170 $fromEmailAddress = CRM_Core_OptionGroup
::values('from_email_address');
171 foreach ($fromEmailAddress as $key => $email) {
172 $fromEmailAddress[$key] = htmlspecialchars($fromEmailAddress[$key]);
174 $fromEmail = CRM_Utils_Array
::crmArrayMerge($emails, $fromEmailAddress);
175 $this->add('select', 'from_email_address', ts('From Email Address'), array('' => '- select -') +
$fromEmail);
176 if ($this->_selectedOutput
!= 'email') {
177 $this->addElement('radio', 'output', NULL, ts('Email Invoice'), 'email_invoice');
178 $this->addElement('radio', 'output', NULL, ts('PDF Invoice'), 'pdf_invoice');
179 $this->addRule('output', ts('Selection required'), 'required');
180 $this->addFormRule(array('CRM_Contribute_Form_Task_Invoice', 'formRule'));
183 $this->addRule('from_email_address', ts('From Email Address is required'), 'required');
186 $this->addWysiwyg('email_comment', ts('If you would like to add personal message to email please add it here. (If sending to more then one receipient the same message will be sent to each contact.)'), array(
191 $this->addButtons(array(
194 'name' => $this->_selectedOutput
== 'email' ?
ts('Send Email') : ts('Process Invoice(s)'),
199 'name' => ts('Cancel'),
206 * Global validation rules for the form
208 * @param array $values
211 * list of errors to be posted back to the form
214 public static function formRule($values) {
217 if ($values['output'] == 'email_invoice' && empty($values['from_email_address'])) {
218 $errors['from_email_address'] = ts("From Email Address is required");
225 * Process the form after the input has been submitted and validated
230 public function postProcess() {
231 $params = $this->controller
->exportValues($this->_name
);
232 $this->printPDF($this->_contributionIds
, $params, $this->_contactIds
, $this);
237 * process the PDf and email with activity and attachment
238 * on click of Print Invoices
240 * @param array $contribIDs
242 * @param array $params
243 * Associated array of submitted values.
244 * @param array $contactIds
246 * @param CRM_Core_Form $form
250 public static function printPDF($contribIDs, &$params, $contactIds, &$form) {
251 // get all the details needed to generate a invoice
252 $messageInvoice = array();
253 $invoiceTemplate = CRM_Core_Smarty
::singleton();
254 $invoiceElements = CRM_Contribute_Form_Task_PDF
::getElements($contribIDs, $params, $contactIds);
256 // gives the status id when contribution status is 'Refunded'
257 $contributionStatusID = CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
258 $refundedStatusId = CRM_Utils_Array
::key('Refunded', $contributionStatusID);
260 // getting data from admin page
261 $prefixValue = CRM_Core_BAO_Setting
::getItem(CRM_Core_BAO_Setting
::CONTRIBUTE_PREFERENCES_NAME
, 'contribution_invoice_settings');
263 foreach ($invoiceElements['details'] as $contribID => $detail) {
264 $input = $ids = $objects = array();
265 if (in_array($detail['contact'], $invoiceElements['excludeContactIds'])) {
269 $input['component'] = $detail['component'];
271 $ids['contact'] = $detail['contact'];
272 $ids['contribution'] = $contribID;
273 $ids['contributionRecur'] = NULL;
274 $ids['contributionPage'] = NULL;
275 $ids['membership'] = CRM_Utils_Array
::value('membership', $detail);
276 $ids['participant'] = CRM_Utils_Array
::value('participant', $detail);
277 $ids['event'] = CRM_Utils_Array
::value('event', $detail);
279 if (!$invoiceElements['baseIPN']->validateData($input, $ids, $objects, FALSE)) {
280 CRM_Core_Error
::fatal();
283 $contribution = & $objects['contribution'];
285 $input['amount'] = $contribution->total_amount
;
286 $input['invoice_id'] = $contribution->invoice_id
;
287 $input['receive_date'] = $contribution->receive_date
;
288 $input['contribution_status_id'] = $contribution->contribution_status_id
;
289 $input['organization_name'] = $contribution->_relatedObjects
['contact']->organization_name
;
291 $objects['contribution']->receive_date
= CRM_Utils_Date
::isoToMysql($objects['contribution']->receive_date
);
293 $addressParams = array('contact_id' => $contribution->contact_id
);
294 $addressDetails = CRM_Core_BAO_Address
::getValues($addressParams);
296 // to get billing address if present
297 $billingAddress = array();
298 foreach ($addressDetails as $key => $address) {
299 if ((isset($address['is_billing']) && $address['is_billing'] == 1) && (isset($address['is_primary']) && $address['is_primary'] == 1) && $address['contact_id'] == $contribution->contact_id
) {
300 $billingAddress[$address['contact_id']] = $address;
303 elseif (($address['is_billing'] == 0 && $address['is_primary'] == 1) ||
(isset($address['is_billing']) && $address['is_billing'] == 1) && $address['contact_id'] == $contribution->contact_id
) {
304 $billingAddress[$address['contact_id']] = $address;
308 if (!empty($billingAddress[$contribution->contact_id
]['state_province_id'])) {
309 $stateProvinceAbbreviation = CRM_Core_PseudoConstant
::stateProvinceAbbreviation($billingAddress[$contribution->contact_id
]['state_province_id']);
312 $stateProvinceAbbreviation = '';
315 if ($contribution->contribution_status_id
== $refundedStatusId) {
316 $creditNoteId = CRM_Utils_Array
::value('credit_notes_prefix', $prefixValue) . "" . $contribution->id
;
318 $invoiceId = CRM_Utils_Array
::value('invoice_prefix', $prefixValue) . "" . $contribution->id
;
320 //to obtain due date for PDF invoice
321 $contributionReceiveDate = date('F j,Y', strtotime(date($input['receive_date'])));
322 $invoiceDate = date("F j, Y");
323 $dueDate = date('F j ,Y', strtotime($contributionReceiveDate . "+" . $prefixValue['due_date'] . "" . $prefixValue['due_date_period']));
325 if ($input['component'] == 'contribute') {
327 $etable = 'contribution';
328 $lineItem = CRM_Price_BAO_LineItem
::getLineItems($eid, $etable, NULL, TRUE, TRUE);
331 $eid = $contribution->_relatedObjects
['participant']->id
;
332 $etable = 'participant';
333 $lineItem = CRM_Price_BAO_LineItem
::getLineItems($eid, $etable);
336 //TO DO: Need to do changes for partially paid to display amount due on PDF invoice
337 $amountDue = ($input['amount'] - $input['amount']);
339 // retreiving the subtotal and sum of same tax_rate
340 $dataArray = array();
342 foreach ($lineItem as $entity_id => $taxRate) {
343 if (isset($dataArray[(string) $taxRate['tax_rate']])) {
344 $dataArray[(string) $taxRate['tax_rate']] = $dataArray[(string) $taxRate['tax_rate']] + CRM_Utils_Array
::value('tax_amount', $taxRate);
347 $dataArray[(string) $taxRate['tax_rate']] = CRM_Utils_Array
::value('tax_amount', $taxRate);
349 $subTotal +
= CRM_Utils_Array
::value('subTotal', $taxRate);
352 // to email the invoice
353 $mailDetails = array();
355 if ($contribution->_component
== 'event') {
356 $daoName = 'CRM_Event_DAO_Event';
357 $pageId = $contribution->_relatedObjects
['event']->id
;
358 $mailElements = array(
361 'confirm_from_email',
365 CRM_Core_DAO
::commonRetrieveAll($daoName, 'id', $pageId, $mailDetails, $mailElements);
366 $values['title'] = CRM_Utils_Array
::value('title', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
367 $values['confirm_from_name'] = CRM_Utils_Array
::value('confirm_from_name', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
368 $values['confirm_from_email'] = CRM_Utils_Array
::value('confirm_from_email', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
369 $values['cc_confirm'] = CRM_Utils_Array
::value('cc_confirm', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
370 $values['bcc_confirm'] = CRM_Utils_Array
::value('bcc_confirm', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
372 $title = CRM_Utils_Array
::value('title', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
374 elseif ($contribution->_component
== 'contribute') {
375 $daoName = 'CRM_Contribute_DAO_ContributionPage';
376 $pageId = $contribution->contribution_page_id
;
377 $mailElements = array(
380 'receipt_from_email',
384 CRM_Core_DAO
::commonRetrieveAll($daoName, 'id', $pageId, $mailDetails, $mailElements);
386 $values['title'] = CRM_Utils_Array
::value('title', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
387 $values['receipt_from_name'] = CRM_Utils_Array
::value('receipt_from_name', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
388 $values['receipt_from_email'] = CRM_Utils_Array
::value('receipt_from_email', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
389 $values['cc_receipt'] = CRM_Utils_Array
::value('cc_receipt', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
390 $values['bcc_receipt'] = CRM_Utils_Array
::value('bcc_receipt', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
392 $title = CRM_Utils_Array
::value('title', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
394 $source = $contribution->source
;
396 $config = CRM_Core_Config
::singleton();
397 if (!isset($params['forPage'])) {
398 $config->doNotAttachPDFReceipt
= 1;
401 // get organization address
402 $domain = CRM_Core_BAO_Domain
::getDomain();
403 $locParams = array('contact_id' => $domain->id
);
404 $locationDefaults = CRM_Core_BAO_Location
::getValues($locParams);
405 if (isset($locationDefaults['address'][1]['state_province_id'])) {
406 $stateProvinceAbbreviationDomain = CRM_Core_PseudoConstant
::stateProvinceAbbreviation($locationDefaults['address'][1]['state_province_id']);
409 $stateProvinceAbbreviationDomain = '';
411 if (isset($locationDefaults['address'][1]['country_id'])) {
412 $countryDomain = CRM_Core_PseudoConstant
::country($locationDefaults['address'][1]['country_id']);
418 // parameters to be assign for template
421 'component' => $input['component'],
422 'id' => $contribution->id
,
424 'invoice_id' => $invoiceId,
425 'resourceBase' => $config->userFrameworkResourceURL
,
426 'defaultCurrency' => $config->defaultCurrency
,
427 'amount' => $contribution->total_amount
,
428 'amountDue' => $amountDue,
429 'invoice_date' => $invoiceDate,
430 'dueDate' => $dueDate,
431 'notes' => CRM_Utils_Array
::value('notes', $prefixValue),
432 'display_name' => $contribution->_relatedObjects
['contact']->display_name
,
433 'lineItem' => $lineItem,
434 'dataArray' => $dataArray,
435 'refundedStatusId' => $refundedStatusId,
436 'contribution_status_id' => $contribution->contribution_status_id
,
437 'subTotal' => $subTotal,
438 'street_address' => CRM_Utils_Array
::value('street_address', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
439 'supplemental_address_1' => CRM_Utils_Array
::value('supplemental_address_1', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
440 'supplemental_address_2' => CRM_Utils_Array
::value('supplemental_address_2', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
441 'city' => CRM_Utils_Array
::value('city', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
442 'stateProvinceAbbreviation' => $stateProvinceAbbreviation,
443 'postal_code' => CRM_Utils_Array
::value('postal_code', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
444 'is_pay_later' => $contribution->is_pay_later
,
445 'organization_name' => $contribution->_relatedObjects
['contact']->organization_name
,
446 'domain_organization' => $domain->name
,
447 'domain_street_address' => CRM_Utils_Array
::value('street_address', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
448 'domain_supplemental_address_1' => CRM_Utils_Array
::value('supplemental_address_1', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
449 'domain_supplemental_address_2' => CRM_Utils_Array
::value('supplemental_address_2', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
450 'domain_city' => CRM_Utils_Array
::value('city', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
451 'domain_postal_code' => CRM_Utils_Array
::value('postal_code', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
452 'domain_state' => $stateProvinceAbbreviationDomain,
453 'domain_country' => $countryDomain,
454 'domain_email' => CRM_Utils_Array
::value('email', CRM_Utils_Array
::value('1', $locationDefaults['email'])),
455 'domain_phone' => CRM_Utils_Array
::value('phone', CRM_Utils_Array
::value('1', $locationDefaults['phone'])),
458 if (isset($creditNoteId)) {
459 $tplParams['creditnote_id'] = $creditNoteId;
462 $sendTemplateParams = array(
463 'groupName' => 'msg_tpl_workflow_contribution',
464 'valueName' => 'contribution_invoice_receipt',
465 'contactId' => $contribution->contact_id
,
466 'tplParams' => $tplParams,
467 'PDFFilename' => 'Invoice.pdf',
469 $session = CRM_Core_Session
::singleton();
470 $contactID = $session->get('userID');
471 $contactEmails = CRM_Core_BAO_Email
::allEmails($contactID);
473 $fromDisplayName = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact',
474 $contactID, 'display_name'
477 foreach ($contactEmails as $emailId => $item) {
478 $email = $item['email'];
480 $emails[$emailId] = '"' . $fromDisplayName . '" <' . $email . '> ';
483 $fromEmail = CRM_Utils_Array
::crmArrayMerge($emails, CRM_Core_OptionGroup
::values('from_email_address'));
485 // from email address
486 if (isset($params['from_email_address'])) {
487 $fromEmailAddress = CRM_Utils_Array
::value($params['from_email_address'], $fromEmail);
489 // condition to check for download PDF Invoice or email Invoice
490 if ($invoiceElements['createPdf']) {
491 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
492 if (isset($params['forPage'])) {
497 'subject' => $subject,
502 $messageInvoice[] = $mail['html'];
505 $messageInvoice[] = nl2br($mail['body']);
509 elseif ($contribution->_component
== 'contribute') {
510 $email = CRM_Contact_BAO_Contact
::getPrimaryEmail($contribution->contact_id
);
512 $sendTemplateParams['tplParams'] = array_merge($tplParams, array('email_comment' => $invoiceElements['params']['email_comment']));
513 $sendTemplateParams['from'] = $fromEmailAddress;
514 $sendTemplateParams['toEmail'] = $email;
515 $sendTemplateParams['cc'] = CRM_Utils_Array
::value('cc_receipt', $values);
516 $sendTemplateParams['bcc'] = CRM_Utils_Array
::value('bcc_receipt', $values);
518 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
519 // functions call for adding activity with attachment
520 $fileName = self
::putFile($html);
521 self
::addActivities($subject, $contribution->contact_id
, $fileName, $params);
523 elseif ($contribution->_component
== 'event') {
524 $email = CRM_Contact_BAO_Contact
::getPrimaryEmail($contribution->contact_id
);
526 $sendTemplateParams['tplParams'] = array_merge($tplParams, array('email_comment' => $invoiceElements['params']['email_comment']));
527 $sendTemplateParams['from'] = $fromEmailAddress;
528 $sendTemplateParams['toEmail'] = $email;
529 $sendTemplateParams['cc'] = CRM_Utils_Array
::value('cc_confirm', $values);
530 $sendTemplateParams['bcc'] = CRM_Utils_Array
::value('bcc_confirm', $values);
532 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
533 // functions call for adding activity with attachment
534 $fileName = self
::putFile($html);
535 self
::addActivities($subject, $contribution->contact_id
, $fileName, $params);
538 CRM_Core_DAO
::setFieldValue('CRM_Contribute_DAO_Contribution', $contribution->id
, 'invoice_id', $invoiceId);
539 if ($contribution->contribution_status_id
== $refundedStatusId) {
540 CRM_Core_DAO
::setFieldValue('CRM_Contribute_DAO_Contribution', $contribution->id
, 'creditnote_id', $creditNoteId);
542 $invoiceTemplate->clearTemplateVars();
545 if ($invoiceElements['createPdf']) {
546 if (isset($params['forPage'])) {
550 CRM_Utils_PDF_Utils
::html2pdf($messageInvoice, 'Invoice.pdf', FALSE, array(
555 // functions call for adding activity with attachment
556 $fileName = self
::putFile($html);
557 self
::addActivities($subject, $contactIds, $fileName, $params);
559 CRM_Utils_System
::civiExit();
563 if ($invoiceElements['suppressedEmails']) {
564 $status = ts('Email was NOT sent to %1 contacts (no email address on file, or communication preferences specify DO NOT EMAIL, or contact is deceased).', array(1 => $invoiceElements['suppressedEmails']));
565 $msgTitle = ts('Email Error');
569 $status = ts('Your mail has been sent.');
570 $msgTitle = ts('Sent');
571 $msgType = 'success';
573 CRM_Core_Session
::setStatus($status, $msgTitle, $msgType);
579 * This function is use for adding activity for
580 * Email Invoice and the PDF Invoice
582 * @param string $subject
584 * @param array $contactIds
586 * @param string $fileName
587 * Gives the location with name of the file.
588 * @param array $params
593 static public function addActivities($subject, $contactIds, $fileName, $params) {
594 $session = CRM_Core_Session
::singleton();
595 $userID = $session->get('userID');
596 $config = CRM_Core_Config
::singleton();
597 $config->doNotAttachPDFReceipt
= 1;
599 if (!empty($params['output']) && $params['output'] == 'pdf_invoice') {
600 $activityTypeID = CRM_Core_OptionGroup
::getValue('activity_type',
601 'Downloaded Invoice',
606 $activityTypeID = CRM_Core_OptionGroup
::getValue('activity_type',
612 $activityParams = array(
613 'subject' => $subject,
614 'source_contact_id' => $userID,
615 'target_contact_id' => $contactIds,
616 'activity_type_id' => $activityTypeID,
617 'activity_date_time' => date('YmdHis'),
618 'attachFile_1' => array(
620 'type' => 'application/pdf',
621 'location' => $fileName,
622 'upload_date' => date('YmdHis'),
625 CRM_Activity_BAO_Activity
::create($activityParams);
630 * This function is use for creating the Invoice file in upload folder
634 * Content for pdf in html format.
636 * return $fileName of file which is in pdf format
640 static public function putFile($html) {
641 require_once "packages/dompdf/dompdf_config.inc.php";
642 spl_autoload_register('DOMPDF_autoload');
644 $doc->load_html($html);
646 $html = $doc->output();
647 $config = CRM_Core_Config
::singleton();
648 $fileName = $config->uploadDir
. 'Invoice.pdf';
649 file_put_contents($fileName, $html);
654 * Callback to perform action on Print Invoice button.
656 public static function getPrintPDF() {
657 $contributionId = CRM_Utils_Request
::retrieve('id', 'Positive', CRM_Core_DAO
::$_nullObject, FALSE);
658 $contributionIDs = array($contributionId);
659 $contactId = CRM_Utils_Request
::retrieve('cid', 'Positive', CRM_Core_DAO
::$_nullObject, FALSE);
660 $params = array('output' => 'pdf_invoice');
661 CRM_Contribute_Form_Task_Invoice
::printPDF($contributionIDs, $params, $contactId, CRM_Core_DAO
::$_nullObject);