From a2b07a90b96633a4019933e8c12034d7cc9e9276 Mon Sep 17 00:00:00 2001 From: Lisa Marie Maginnis Date: Thu, 1 May 2014 17:04:18 -0400 Subject: [PATCH] Our changes --- CRM/ACL/BAO/Cache.php | 10 +++-- CRM/Contact/Task.php | 6 +++ CRM/Contribute/Task.php | 7 +++- CRM/Core/Resources.php | 6 ++- CRM/Import/Parser.php | 2 +- CRM/Utils/PDF/Utils.php | 88 +++++++++++++++++++++++++++++++++++++++++ CRM/Utils/Token.php | 4 +- api/v3/Contact.php | 9 +++++ api/v3/Contribution.php | 9 +++++ 9 files changed, 133 insertions(+), 8 deletions(-) diff --git a/CRM/ACL/BAO/Cache.php b/CRM/ACL/BAO/Cache.php index 392d15f48a..3d7c6d5c32 100644 --- a/CRM/ACL/BAO/Cache.php +++ b/CRM/ACL/BAO/Cache.php @@ -77,9 +77,13 @@ SELECT acl_id "; $params = array(1 => array($id, 'Integer')); - if ($id == 0) { - $query .= " OR contact_id IS NULL"; - } +## this is related to RT#765026 +# Something is occasionally inserting records in civicrm_acl_cache with id null. That causes i +# for our anonymous visitors who want to sign petitions. +# Removed. Ward, 2012-07-20 +# if ($id == 0) { +# $query .= " OR contact_id IS NULL"; +# } $dao = CRM_Core_DAO::executeQuery($query, $params); diff --git a/CRM/Contact/Task.php b/CRM/Contact/Task.php index 503c511e99..b3f1df7b37 100644 --- a/CRM/Contact/Task.php +++ b/CRM/Contact/Task.php @@ -62,6 +62,7 @@ class CRM_Contact_Task { DELETE_PERMANENTLY = 24, COMMUNICATION_PREFS = 25, INDIVIDUAL_CONTACTS = 26; + LATEX_LETTER = 26; /** * The task array @@ -170,6 +171,11 @@ class CRM_Contact_Task { 'class' => 'CRM_Contact_Form_Task_AlterPreferences', 'url' => 'civicrm/task/alter-contact-preference', ), + self::LATEX_LETTER => array( + 'title' => ts('Print Latex PDF Letter for Contacts'), + 'class' => 'CRM_Contact_Form_Task_LatexPDF', + 'result' => TRUE, + ), self::RESTORE => array( 'title' => ts('Restore contacts from trash'), 'class' => 'CRM_Contact_Form_Task_Delete', diff --git a/CRM/Contribute/Task.php b/CRM/Contribute/Task.php index 9c4f20c5ad..4de4161eec 100644 --- a/CRM/Contribute/Task.php +++ b/CRM/Contribute/Task.php @@ -37,7 +37,7 @@ * Used by the search forms. */ class CRM_Contribute_Task { - const DELETE_CONTRIBUTIONS = 1, PRINT_CONTRIBUTIONS = 2, EXPORT_CONTRIBUTIONS = 3, BATCH_CONTRIBUTIONS = 4, EMAIL_CONTACTS = 5, UPDATE_STATUS = 6, PDF_RECEIPT = 7; + CONST DELETE_CONTRIBUTIONS = 1, PRINT_CONTRIBUTIONS = 2, EXPORT_CONTRIBUTIONS = 3, BATCH_CONTRIBUTIONS = 4, EMAIL_CONTACTS = 5, UPDATE_STATUS = 6, PDF_RECEIPT = 7, LATEX_TEST = 10; /** * The task array @@ -114,6 +114,11 @@ class CRM_Contribute_Task { 'class' => 'CRM_Contribute_Form_Task_Invoice', 'result' => FALSE, ), + 10 => array( + 'title' => ts('Latex Letters for Contributions'), + 'class' => 'CRM_Contribute_Form_Task_PDFLatex', + 'result' => FALSE, + ), ); //CRM-4418, check for delete diff --git a/CRM/Core/Resources.php b/CRM/Core/Resources.php index 68a2a7fde7..a46ced18ad 100644 --- a/CRM/Core/Resources.php +++ b/CRM/Core/Resources.php @@ -338,7 +338,7 @@ class CRM_Core_Resources { * @return string */ public function renderSetting() { - // On a standard page request we construct the CRM object from scratch + /*// On a standard page request we construct the CRM object from scratch if (!self::isAjaxMode()) { $js = 'var CRM = ' . json_encode($this->getSettings()) . ';'; } @@ -347,6 +347,10 @@ class CRM_Core_Resources { $js = 'CRM.$.extend(true, CRM, ' . json_encode($this->getSettings()) . ');'; } return sprintf("\n", $js); + */ + $js = 'var CRM = ' . json_encode($this->getSettings()) . ';'; + //return sprintf("\n", $js); + return sprintf("\n", $js); } /** diff --git a/CRM/Import/Parser.php b/CRM/Import/Parser.php index 7791b129a9..9481bea864 100644 --- a/CRM/Import/Parser.php +++ b/CRM/Import/Parser.php @@ -34,7 +34,7 @@ abstract class CRM_Import_Parser { /** * Settings */ - const MAX_ERRORS = 250, MAX_WARNINGS = 25, DEFAULT_TIMEOUT = 30; + CONST MAX_ERRORS = 10000, MAX_WARNINGS = 25, DEFAULT_TIMEOUT = 30; /** * Return codes diff --git a/CRM/Utils/PDF/Utils.php b/CRM/Utils/PDF/Utils.php index 9b42f7fad8..e093d10012 100644 --- a/CRM/Utils/PDF/Utils.php +++ b/CRM/Utils/PDF/Utils.php @@ -33,8 +33,96 @@ use Dompdf\Options; * @package CRM * @copyright CiviCRM LLC (c) 2004-2017 */ + class CRM_Utils_PDF_Utils { + public static function latex2pdf(&$text, $fileName = 'civicrm.pdf', $output = FALSE, $pdfFormat = NULL) { + /* FIXME: get $paper_size, $orientation, $margins */ + + if (is_array($text)) { + $pages = &$text; + } + else { + $pages = array($text); + } + + + $head='\documentclass[11pt]{letter} +\usepackage{url} +\usepackage{ucs} +\usepackage{graphicx} +\usepackage[T1]{fontenc} +\usepackage{fullpage} + +\newcommand{\fsfclosing}[1]{\par\nobreak\vspace{\parskip} + \stopbreaks + \noindent + \ifx\@empty\fromaddress\else + \hspace*{\longindentation}\fi + \parbox{\indentedwidth}{\raggedright + \ignorespaces #1\\\\[1\medskipamount] + \hspace*{-0.25in}\includegraphics[scale=1.0]{sigjohns.pdf} + \\\\ + + \ifx\@empty\fromsig + \fromname + \else \fromsig \fi\strut} + \par} +\medskipamount=\parskip + +%% This line might be necessary, but it was not able to find utf8.def on my +%% machine. +\usepackage[utf8x]{inputenc} +\pagestyle{empty} +\tolerance=8000 +\address{\vspace{0.05in}} +\signature{John Sullivan \\\\ Executive Director} +\usepackage[ +top = 0.4in, +bottom = 0.9in, +left = 0.8in, +right = 0.8in]{geometry} +\begin{document} +'; + $footer=' +\end{document}'; + + $latex = $head; + foreach ($pages as $page) { + $latex.=$page; + } + $latex.=$footer; + + $descriptorspec = array( + 0 => array("pipe", "r"), + 1 => array("pipe", "w") + ); + + + + $process = proc_open("/usr/local/bin/pdflatex_wrapper.sh", $descriptorspec, $pipes); + + + if (is_resource($process)) { + fwrite($pipes[0], $latex); + fclose($pipes[0]); + + $pdf = stream_get_contents($pipes[1]); + fclose($pipes[1]); + } else { + CRM_Core_Error::debug_log_message("ERROR creating PDF. Check /tmp/pdflatex_*"); + } + + if ($output) { + return $pdf; + } + else { + header('Content-Type: application/pdf'); + header('Content-Disposition: attachment; filename="' . $fileName . '"'); + echo $pdf; + } + } + /** * @param array $text * List of HTML snippets. diff --git a/CRM/Utils/Token.php b/CRM/Utils/Token.php index 257a1b1893..9fe4cb8cb5 100644 --- a/CRM/Utils/Token.php +++ b/CRM/Utils/Token.php @@ -684,7 +684,7 @@ class CRM_Utils_Token { $str ); - $str = preg_replace('/\\\\|\{(\s*)?\}/', ' ', $str); + //$str = preg_replace('/\\\\|\{(\s*)?\}/', ' ', $str); //WHY you do this? return $str; } @@ -874,7 +874,7 @@ class CRM_Utils_Token { * @param $str ref to the string that will be scanned and modified */ public static function unescapeTokens(&$str) { - $str = preg_replace('/\\\\|\{(\{\w+\.\w+\})\}/', '\\1', $str); + //$str = preg_replace('/\\\\|\{(\{\w+\.\w+\})\}/', '\\1', $str); } /** diff --git a/api/v3/Contact.php b/api/v3/Contact.php index 2d1da21a38..09ba77e477 100644 --- a/api/v3/Contact.php +++ b/api/v3/Contact.php @@ -158,6 +158,15 @@ function _civicrm_api3_contact_create_spec(&$params) { $params['gender_id']['api.aliases'] = array('gender'); } +/** + * Added by Ward; basic filter-able contribution list + * use filter.receive_date_high etc + * 2013-07-02 + */ +function civicrm_api3_contact_list($params) { + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); +} + /** * Retrieve one or more contacts, given a set of search params. * diff --git a/api/v3/Contribution.php b/api/v3/Contribution.php index c3f683c827..8803dc83c4 100644 --- a/api/v3/Contribution.php +++ b/api/v3/Contribution.php @@ -236,6 +236,15 @@ function _civicrm_api3_contribution_delete_spec(&$params) { $params['id']['api.aliases'] = array('contribution_id'); } +/** + * Added by Ward; basic filter-able contribution list + * use filter.receive_date_high etc + * 2013-07-02 + */ +function civicrm_api3_contribution_list($params) { + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); +} + /** * Retrieve a set of contributions. * -- 2.25.1