From 96cd5a5c687dc4ee32fc8cdf87aeabc295b03a88 Mon Sep 17 00:00:00 2001 From: Ruben Rodriguez Date: Thu, 10 Sep 2015 18:24:23 -0400 Subject: [PATCH] Added the current uncommited changes to production code, and rebased to 4.6.8 --- CRM/Activity/BAO/Activity.php | 3 +- CRM/Contact/BAO/Contact.php | 4 +- CRM/Contact/BAO/Contact/Utils.php | 2 +- CRM/Contact/BAO/GroupContact.php | 6 ++- CRM/Contact/BAO/GroupContactCache.php | 25 +++++++---- CRM/Contact/Form/Task/PDFLatexCommon.php | 9 ++-- CRM/Contribute/BAO/Contribution.php | 4 +- CRM/Contribute/Form/ContributionBase.php | 2 + CRM/Event/BAO/Participant.php | 4 +- CRM/Member/BAO/Membership.php | 3 +- CRM/Member/Import/Form/DataSource.php | 19 +++++++++ CRM/Price/BAO/PriceSet.php | 15 ++++++- CRM/Utils/PDF/Utils.php | 41 +++++++++++++++---- .../Form/Contribution/PremiumBlock.tpl | 9 ++++ 14 files changed, 115 insertions(+), 31 deletions(-) diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 84a46cfef6..f9afc1d82f 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -583,7 +583,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } } - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // reset the group contact cache since smart groups might be affected due to this + // CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); if (!empty($params['id'])) { CRM_Utils_Hook::post('edit', 'Activity', $activity->id, $activity); diff --git a/CRM/Contact/BAO/Contact.php b/CRM/Contact/BAO/Contact.php index 3e95bcd97b..a90501235b 100644 --- a/CRM/Contact/BAO/Contact.php +++ b/CRM/Contact/BAO/Contact.php @@ -1933,7 +1933,9 @@ ORDER BY civicrm_email.is_primary DESC"; CRM_Contact_BAO_GroupContact::addContactsToGroup($contactIds, $addToGroupID); } - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // reset the group contact cache for this group + // HACK: Dave disabled this on 12/09/2014 due to a crazy amount of lock wait timeouts on cache tables, causing donations to fail. + //CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); if ($editHook) { CRM_Utils_Hook::post('edit', 'Profile', $contactID, $params); diff --git a/CRM/Contact/BAO/Contact/Utils.php b/CRM/Contact/BAO/Contact/Utils.php index 9cbb44d53b..c12f47baa9 100644 --- a/CRM/Contact/BAO/Contact/Utils.php +++ b/CRM/Contact/BAO/Contact/Utils.php @@ -979,7 +979,7 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i FROM civicrm_contact WHERE contact_type = %1 AND ({$idFldName} IS NULL - OR ( {$idFldName} IS NOT NULL AND ({$displayFldName} IS NULL OR {$displayFldName} = '')) )"; + OR ( {$idFldName} IS NOT NULL AND ({$displayFldName} IS NULL OR {$displayFldName} = '')) ) LIMIT 800"; } if ($limit) { diff --git a/CRM/Contact/BAO/GroupContact.php b/CRM/Contact/BAO/GroupContact.php index 8833d1958d..69b427f649 100644 --- a/CRM/Contact/BAO/GroupContact.php +++ b/CRM/Contact/BAO/GroupContact.php @@ -146,12 +146,14 @@ class CRM_Contact_BAO_GroupContact extends CRM_Contact_DAO_GroupContact { // also reset the acl cache $config = CRM_Core_Config::singleton(); if (!$config->doNotResetCache) { - CRM_ACL_BAO_Cache::resetCache(); + // HACK: Dave commented this out on 12/09/2014 due to lock wait timeouts on the acl cache that caused donations to fail. + //CRM_ACL_BAO_Cache::resetCache(); } // reset the group contact cache for all group(s) // if this group is being used as a smart group - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // HACK: Dave had to disable this, too! + //CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); CRM_Utils_Hook::post('create', 'GroupContact', $groupId, $contactIds); diff --git a/CRM/Contact/BAO/GroupContactCache.php b/CRM/Contact/BAO/GroupContactCache.php index e0d041aa27..d47e696149 100644 --- a/CRM/Contact/BAO/GroupContactCache.php +++ b/CRM/Contact/BAO/GroupContactCache.php @@ -340,10 +340,13 @@ WHERE id IN ( $groupIDs ) 2 => array(self::getRefreshDateTime(), 'String'), ); + // HACK: Hardcoded delete limit. + $deleteLimit = 1000; + if (!isset($groupID)) { if ($smartGroupCacheTimeout == 0) { $query = " -DELETE FROM civicrm_group_contact_cache +DELETE FROM civicrm_group_contact_cache LIMIT $deleteLimit "; $update = " UPDATE civicrm_group g @@ -358,6 +361,7 @@ DELETE gc FROM civicrm_group_contact_cache gc INNER JOIN civicrm_group g ON g.id = gc.group_id WHERE g.cache_date <= %1 +LIMIT $deleteLimit "; $update = " UPDATE civicrm_group g @@ -376,9 +380,10 @@ AND refresh_date IS NULL elseif (is_array($groupID)) { $groupIDs = implode(', ', $groupID); $query = " -DELETE g -FROM civicrm_group_contact_cache g -WHERE g.group_id IN ( $groupIDs ) +DELETE +FROM civicrm_group_contact_cache +WHERE group_id IN ( $groupIDs ) +LIMIT $deleteLimit "; $update = " UPDATE civicrm_group g @@ -389,9 +394,10 @@ WHERE id IN ( $groupIDs ) } else { $query = " -DELETE g -FROM civicrm_group_contact_cache g -WHERE g.group_id = %1 +DELETE +FROM civicrm_group_contact_cache +WHERE group_id = %1 +LIMIT $deleteLimit "; $update = " UPDATE civicrm_group g @@ -402,7 +408,10 @@ WHERE id = %1 $params = array(1 => array($groupID, 'Integer')); } - CRM_Core_DAO::executeQuery($query, $params); + // Nibble at the rows, don't try to delete everything at once! + do { + $dao = CRM_Core_DAO::executeQuery($query, $params); + } while($dao->affectedRows() != 0); if ($refresh) { CRM_Core_DAO::executeQuery($refresh, $params); diff --git a/CRM/Contact/Form/Task/PDFLatexCommon.php b/CRM/Contact/Form/Task/PDFLatexCommon.php index a0ca45339c..4dbdb1806b 100644 --- a/CRM/Contact/Form/Task/PDFLatexCommon.php +++ b/CRM/Contact/Form/Task/PDFLatexCommon.php @@ -48,7 +48,7 @@ class CRM_Contact_Form_Task_PDFLatexCommon { static function preProcess(&$form) { $messageText = array(); $messageSubject = array(); - $dao = new CRM_Core_BAO_MessageTemplates(); + $dao = new CRM_Core_BAO_MessageTemplate(); $dao->is_active = 1; $dao->find(); while ($dao->fetch()) { @@ -254,14 +254,14 @@ class CRM_Contact_Form_Task_PDFLatexCommon { } if (CRM_Utils_Array::value('saveTemplate', $formValues) && $formValues['saveTemplate']) { $messageTemplate['msg_title'] = $formValues['saveTemplateName']; - CRM_Core_BAO_MessageTemplates::add($messageTemplate); + CRM_Core_BAO_MessageTemplate::add($messageTemplate); } if (CRM_Utils_Array::value('updateTemplate', $formValues) && $formValues['template'] && $formValues['updateTemplate']) { $messageTemplate['id'] = $formValues['template']; unset($messageTemplate['msg_title']); - CRM_Core_BAO_MessageTemplates::add($messageTemplate); + CRM_Core_BAO_MessageTemplate::add($messageTemplate); } } elseif (CRM_Utils_Array::value('template', $formValues) > 0) { @@ -384,10 +384,11 @@ class CRM_Contact_Form_Task_PDFLatexCommon { foreach ($form->_contactIds as $contactId) { $activityTargetParams = array( + 'contact_id' => $contactId, 'activity_id' => empty($activity->id) ? $activityIds[$contactId] : $activity->id, 'target_contact_id' => $contactId, ); - CRM_Activity_BAO_Activity::createActivityTarget($activityTargetParams); + CRM_Activity_BAO_ActivityTarget::create($activityTargetParams); } } diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index d4d1eef84b..4d0f5b6b3b 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -241,7 +241,9 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { ); } - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // reset the group contact cache for this group + // HACK: dave hack - these caches are murder!!! + // CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); if ($contributionID) { CRM_Utils_Hook::post('edit', 'Contribution', $contribution->id, $contribution); diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index fe5b484c0d..b2e75a86a7 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -1257,6 +1257,8 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { } else { $this->addElement('checkbox', 'auto_renew', ts('Please renew my membership automatically.')); + $temphax =& $form->getElement('auto_renew'); + $temphax->setValue(1); } } diff --git a/CRM/Event/BAO/Participant.php b/CRM/Event/BAO/Participant.php index 492ece8ccb..8b0907f747 100644 --- a/CRM/Event/BAO/Participant.php +++ b/CRM/Event/BAO/Participant.php @@ -138,7 +138,9 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { $session = CRM_Core_Session::singleton(); - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // reset the group contact cache for this group + // HACK: by davet + // CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); if (!empty($params['id'])) { CRM_Utils_Hook::post('edit', 'Participant', $participantBAO->id, $participantBAO); diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 6d206aa137..83cbbe6821 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -137,7 +137,8 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { CRM_Member_BAO_MembershipLog::add($membershipLog, CRM_Core_DAO::$_nullArray); // reset the group contact cache since smart groups might be affected due to this - CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); + // HACK: a new fragrance by davet + // CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get'); $activityParams = array( diff --git a/CRM/Member/Import/Form/DataSource.php b/CRM/Member/Import/Form/DataSource.php index 11eb187608..055c671d91 100644 --- a/CRM/Member/Import/Form/DataSource.php +++ b/CRM/Member/Import/Form/DataSource.php @@ -50,6 +50,25 @@ class CRM_Member_Import_Form_DataSource extends CRM_Import_Form_DataSource { public function buildQuickForm() { parent::buildQuickForm(); + //Setting Upload File Size + $config = CRM_Core_Config::singleton(); + + $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); + $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); + + $this->assign('uploadSize', $uploadSize); + + $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); + $this->setMaxFileSize($uploadFileSize); + $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( + 1 => $uploadSize, + 2 => $uploadFileSize, + )), 'maxfilesize', $uploadFileSize); + $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); + $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); + + $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + $duplicateOptions = array(); $duplicateOptions[] = $this->createElement('radio', NULL, NULL, ts('Insert new Membership'), CRM_Import_Parser::DUPLICATE_SKIP diff --git a/CRM/Price/BAO/PriceSet.php b/CRM/Price/BAO/PriceSet.php index 3b1dfb35d8..49ef2e292b 100644 --- a/CRM/Price/BAO/PriceSet.php +++ b/CRM/Price/BAO/PriceSet.php @@ -1372,6 +1372,11 @@ GROUP BY mt.member_of_contact_id"; * $autoRenewOption ( 0:hide, 1:optional 2:required ) */ public static function checkAutoRenewForPriceSet($priceSetId) { + // auto-renew option should be visible if membership types associated with all the fields has + // been set for auto-renew option + // Auto renew checkbox should be frozen if for all the membership type auto renew is required + + // get the membership type auto renew option and check if required or optional $query = 'SELECT DISTINCT mt.auto_renew, mt.duration_interval, mt.duration_unit, pf.html_type, pf.id as price_field_id FROM civicrm_price_field_value pfv @@ -1429,12 +1434,18 @@ GROUP BY mt.member_of_contact_id"; * @return array * associate array of frequency interval and unit */ - public static function getRecurDetails($priceSetId) { + public static function getRecurDetails($priceSetId, $priceFieldValueIds) { + // Escape the array of ids. + foreach ($priceFieldValueIds as $index => $id) { + $priceFieldValueIds[$index] = CRM_Utils_Type::escape($id, 'Integer'); + } + $query = 'SELECT mt.duration_interval, mt.duration_unit FROM civicrm_price_field_value pfv INNER JOIN civicrm_membership_type mt ON pfv.membership_type_id = mt.id INNER JOIN civicrm_price_field pf ON pfv.price_field_id = pf.id - WHERE pf.price_set_id = %1 LIMIT 1'; + WHERE pf.price_set_id = %1 AND pfv.id IN (' + . implode(',', $priceFieldValueIds) . ') LIMIT 1'; $params = array(1 => array($priceSetId, 'Integer')); $dao = CRM_Core_DAO::executeQuery($query, $params); diff --git a/CRM/Utils/PDF/Utils.php b/CRM/Utils/PDF/Utils.php index e093d10012..11f11e4202 100644 --- a/CRM/Utils/PDF/Utils.php +++ b/CRM/Utils/PDF/Utils.php @@ -36,6 +36,15 @@ use Dompdf\Options; class CRM_Utils_PDF_Utils { + public static function enqueuePDF($pdf) { + + $fname = time().'_lp.pdf'; + file_put_contents('/tmp/'.$fname, $pdf); + header('Location: /civicrm/lp-setup?file='.$fname); + exit; + + } + public static function latex2pdf(&$text, $fileName = 'civicrm.pdf', $output = FALSE, $pdfFormat = NULL) { /* FIXME: get $paper_size, $orientation, $margins */ @@ -46,13 +55,22 @@ class CRM_Utils_PDF_Utils { $pages = array($text); } - - $head='\documentclass[11pt]{letter} + $head='\documentclass[12pt]{letter} \usepackage{url} \usepackage{ucs} \usepackage{graphicx} \usepackage[T1]{fontenc} \usepackage{fullpage} +\usepackage{fontspec,xunicode} +%% VERY IMPORTANT. Configures supported languages and fonts to use for each one. +\usepackage[Latin, Hebrew, Arabics, CJK, Diacritics]{ucharclasses} +\setDefaultTransitions{\fontspec{CMU Serif}}{} +\setTransitionsForLatin{\fontspec{CMU Serif}}{} +\setTransitionsForArabics{\fontspec{Droid Sans Arabic}}{} +\setTransitionsForCJK{\fontspec{WenQuanYi Zen Hei}}{} +\setTransitionsForDiacritics{\fontspec{Droid Sans Arabic}}{} +\setTransitionTo{Hebrew}{\fontspec{David CLM}} +\setmainfont{CMU Serif} \newcommand{\fsfclosing}[1]{\par\nobreak\vspace{\parskip} \stopbreaks @@ -61,7 +79,7 @@ class CRM_Utils_PDF_Utils { \hspace*{\longindentation}\fi \parbox{\indentedwidth}{\raggedright \ignorespaces #1\\\\[1\medskipamount] - \hspace*{-0.25in}\includegraphics[scale=1.0]{sigjohns.pdf} + \hspace*{-0.25in}\includegraphics[scale=1.0]{/var/www/drupal-7.27/sites/all/modules/civicrm/sigjohns.pdf} \\\\ \ifx\@empty\fromsig @@ -72,16 +90,16 @@ class CRM_Utils_PDF_Utils { %% This line might be necessary, but it was not able to find utf8.def on my %% machine. -\usepackage[utf8x]{inputenc} +%% \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} +top = 1.5in, +bottom = 1.25in, +left = 1.0in, +right = 1.0in]{geometry} \begin{document} '; $footer=' @@ -120,8 +138,10 @@ right = 0.8in]{geometry} header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="' . $fileName . '"'); echo $pdf; +// CRM_Utils_PDF_Utils::enqueuePDF($pdf); + } - } + } /** * @param array $text @@ -328,6 +348,7 @@ right = 0.8in]{geometry} $snappy->setOption("margin-right", $margins[2] . $margins[0]); $snappy->setOption("margin-bottom", $margins[3] . $margins[0]); $snappy->setOption("margin-left", $margins[4] . $margins[0]); + $html = preg_replace('/{ }/', ' ', $html); $pdf = $snappy->getOutputFromHtml($html); if ($output) { return $pdf; @@ -336,6 +357,8 @@ right = 0.8in]{geometry} CRM_Utils_System::setHttpHeader('Content-Type', 'application/pdf'); CRM_Utils_System::setHttpHeader('Content-Disposition', 'attachment; filename="' . $fileName . '"'); echo $pdf; + //CRM_Utils_PDF_Utils::enqueuePDF($pdf); + } } diff --git a/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl b/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl index 89982f7181..6ba59e9664 100644 --- a/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl +++ b/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl @@ -193,6 +193,14 @@ amount = 0; } + // next, check for contribution amount price sets + check_price_set('.contribution_amount-content input[type="radio"]'); + + // next, check for membership level price set + check_price_set('.membership_amount-content input[type="radio"]'); + + check_price_set(cj('.price-set-option-content input[type="radio"]')); + // make sure amount is a number at this point if(!amount) amount = 0; @@ -210,6 +218,7 @@ // update premiums function update_premiums() { var amount = get_amount(); + console.log('amount:', amount); $('.premium').each(function(){ var min_contribution = $(this).attr('min_contribution'); -- 2.25.1