diff --git a/civicrm.php b/civicrm.php index c127cb52cc2c41d79da5d5fb819890480c221125..1659c1191d69508f52d557b3ba74dd3081b14ceb 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.42.1 + * Version: 5.43.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -54,7 +54,7 @@ if (!defined('ABSPATH')) { } // Set version here: when it changes, will force Javascript & CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.42.1'); +define('CIVICRM_PLUGIN_VERSION', '5.43.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CONTRIBUTORS.txt b/civicrm/CONTRIBUTORS.txt index 9a29f4434f1a54c12b9b9c9ca8dbb61bed807475..c8445206eb42bc2bf5bc5159db65bdbb79f6bea7 100644 --- a/civicrm/CONTRIBUTORS.txt +++ b/civicrm/CONTRIBUTORS.txt @@ -101,7 +101,7 @@ Systopia - Björn Endres, Thomas Leichtfuss Tadpole Collective - Kevin Cristiano Tanya Bouman Team Expansion - Greg Harris -Third Sector Design - Michael McAndrew +Third Sector Design - Michael McAndrew, Kurund Jalmi, William Mortada Thomas Mannell Timbsoft Technologies - Tunbola Ogunwande Tiotsop Gerest diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index d60d201b0c12e1ed4ef07fde543a82cfb1eb8f4b..84188d943d7ad1d66f52f6e88413adc1811bf091 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -10,6 +10,7 @@ */ use Civi\Api4\ActivityContact; +use Civi\Api4\Contribution; /** * @@ -923,6 +924,10 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } /** + * DO NOT USE. + * + * Deprecated from core - will be removed. + * * @param int $sourceContactID * The contact ID of the email "from". * @param string $subject @@ -934,6 +939,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * @param array $attachments * @param int $caseID * + * @deprecated + * * @return int * The created activity ID * @throws \CRM_Core_Exception @@ -978,7 +985,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } /** - * Send the message to all the contacts. + * DO NOT USE THIS FUNCTION - DEPRECATED. * * Also insert a contact activity in each contacts record. * @@ -990,29 +997,31 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * @param $html * @param string $emailAddress * Use this 'to' email address instead of the default Primary address. - * @param int $userID + * @param int|null $userID * Use this userID if set. - * @param string $from - * @param array $attachments + * @param string|null $from + * @param array|null $attachments * The array of attachments if any. - * @param string $cc + * @param string|null $cc * Cc recipient. - * @param string $bcc + * @param string|null $bcc * Bcc recipient. - * @param array $contactIds - * Contact ids. - * @param string $additionalDetails + * @param array|null $contactIds + * unused. + * @param string|null $additionalDetails * The additional information of CC and BCC appended to the activity Details. - * @param array $contributionIds - * @param int $campaignId - * @param int $caseId + * @param array|null $contributionIds + * @param int|null $campaignId + * @param int|null $caseId * * @return array * bool $sent FIXME: this only indicates the status of the last email sent. * array $activityIds The activity ids created, one per "To" recipient. * + * @deprecated + * + * @throws \API_Exception * @throws \CRM_Core_Exception - * @throws \CiviCRM_API3_Exception */ public static function sendEmail( $contactDetails, @@ -1031,12 +1040,16 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $campaignId = NULL, $caseId = NULL ) { + // @todo add noisy deprecation. + // This function is no longer called from core. + // I just left off the noisy deprecation for now as there + // are already a lot of other noisy deprecation points in 5.43. // get the contact details of logged in contact, which we set as from email if ($userID == NULL) { $userID = CRM_Core_Session::getLoggedInContactID(); } - list($fromDisplayName, $fromEmail, $fromDoNotEmail) = CRM_Contact_BAO_Contact::getContactDetails($userID); + [$fromDisplayName, $fromEmail, $fromDoNotEmail] = CRM_Contact_BAO_Contact::getContactDetails($userID); if (!$fromEmail) { return [count($contactDetails), 0, count($contactDetails)]; } @@ -1044,67 +1057,21 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $fromDisplayName = $fromEmail; } - // CRM-4575 - // token replacement of addressee/email/postal greetings - // get the tokens added in subject and message - $subjectToken = CRM_Utils_Token::getTokens($subject); - $messageToken = CRM_Utils_Token::getTokens($text); - $messageToken = array_merge($messageToken, CRM_Utils_Token::getTokens($html)); - $allTokens = CRM_Utils_Array::crmArrayMerge($messageToken, $subjectToken); - if (!$from) { $from = "$fromDisplayName <$fromEmail>"; } - $returnProperties = []; - if (isset($messageToken['contact'])) { - foreach ($messageToken['contact'] as $key => $value) { - $returnProperties[$value] = 1; - } - } - - if (isset($subjectToken['contact'])) { - foreach ($subjectToken['contact'] as $key => $value) { - if (!isset($returnProperties[$value])) { - $returnProperties[$value] = 1; - } - } - } - - // get token details for contacts, call only if tokens are used - $details = []; - if (!empty($returnProperties) || !empty($tokens) || !empty($allTokens)) { - list($details) = CRM_Utils_Token::getTokenDetails( - $contactIds, - $returnProperties, - NULL, NULL, FALSE, - $allTokens, - 'CRM_Activity_BAO_Activity' - ); - } - - // call token hook - $tokens = []; - CRM_Utils_Hook::tokens($tokens); - $categories = array_keys($tokens); - - $escapeSmarty = FALSE; - if (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY) { - $smarty = CRM_Core_Smarty::singleton(); - $escapeSmarty = TRUE; - } - $contributionDetails = []; if (!empty($contributionIds)) { - $contributionDetails = CRM_Contribute_BAO_Contribution::replaceContributionTokens( - $contributionIds, - $subject, - $subjectToken, - $text, - $html, - $messageToken, - $escapeSmarty - ); + $contributionDetails = Contribution::get(FALSE) + ->setSelect(['contact_id']) + ->addWhere('id', 'IN', $contributionIds) + ->execute() + // Note that this indexing means that only the last + // contribution per contact is resolved to tokens. + // this is long-standing functionality, albeit possibly + // not thought through. + ->indexBy('contact_id'); } $sent = $notSent = []; @@ -1112,56 +1079,28 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $activityIds = []; $firstActivityCreated = FALSE; foreach ($contactDetails as $values) { + $tokenContext = $caseId ? ['caseId' => $caseId] : []; $contactId = $values['contact_id']; $emailAddress = $values['email']; if (!empty($contributionDetails)) { - $subject = $contributionDetails[$contactId]['subject']; - $text = $contributionDetails[$contactId]['text']; - $html = $contributionDetails[$contactId]['html']; + $tokenContext['contributionId'] = $contributionDetails[$contactId]['id']; } - if (!empty($details) && is_array($details["{$contactId}"])) { - // unset email from details since it always returns primary email address - unset($details["{$contactId}"]['email']); - unset($details["{$contactId}"]['email_id']); - $values = array_merge($values, $details["{$contactId}"]); - } - - $tokenSubject = CRM_Utils_Token::replaceContactTokens($subject, $values, FALSE, $subjectToken, FALSE, $escapeSmarty); - $tokenSubject = CRM_Utils_Token::replaceHookTokens($tokenSubject, $values, $categories, FALSE, $escapeSmarty); - - // CRM-4539 - if ($values['preferred_mail_format'] == 'Text' || $values['preferred_mail_format'] == 'Both') { - $tokenText = CRM_Utils_Token::replaceContactTokens($text, $values, FALSE, $messageToken, FALSE, $escapeSmarty); - $tokenText = CRM_Utils_Token::replaceHookTokens($tokenText, $values, $categories, FALSE, $escapeSmarty); - } - else { - $tokenText = NULL; - } - - if ($values['preferred_mail_format'] == 'HTML' || $values['preferred_mail_format'] == 'Both') { - $tokenHtml = CRM_Utils_Token::replaceContactTokens($html, $values, TRUE, $messageToken, FALSE, $escapeSmarty); - $tokenHtml = CRM_Utils_Token::replaceHookTokens($tokenHtml, $values, $categories, TRUE, $escapeSmarty); - } - else { - $tokenHtml = NULL; - } - - if ($caseId) { - $tokenSubject = CRM_Utils_Token::replaceCaseTokens($caseId, $tokenSubject, $subjectToken, $escapeSmarty); - $tokenText = CRM_Utils_Token::replaceCaseTokens($caseId, $tokenText, $messageToken, $escapeSmarty); - $tokenHtml = CRM_Utils_Token::replaceCaseTokens($caseId, $tokenHtml, $messageToken, $escapeSmarty); - } - - if (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY) { - // also add the contact tokens to the template - $smarty->assign_by_ref('contact', $values); + $tokenSubject = $subject; + $tokenText = in_array($values['preferred_mail_format'], ['Both', 'Text'], TRUE) ? $text : ''; + $tokenHtml = in_array($values['preferred_mail_format'], ['Both', 'HTML'], TRUE) ? $html : ''; - $tokenSubject = $smarty->fetch("string:$tokenSubject"); - $tokenText = $smarty->fetch("string:$tokenText"); - $tokenHtml = $smarty->fetch("string:$tokenHtml"); - } + $renderedTemplate = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'messageTemplate' => [ + 'msg_text' => $tokenText, + 'msg_html' => $tokenHtml, + 'msg_subject' => $tokenSubject, + ], + 'tokenContext' => $tokenContext, + 'contactId' => $contactId, + 'disableSmarty' => !CRM_Utils_Constant::value('CIVICRM_MAIL_SMARTY'), + ]); $sent = FALSE; // To minimize storage requirements, only one copy of any file attachments uploaded to CiviCRM is kept, @@ -1171,7 +1110,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } // Create email activity. - $activityID = self::createEmailActivity($userID, $tokenSubject, $tokenHtml, $tokenText, $additionalDetails, $campaignId, $attachments, $caseId); + $activityID = self::createEmailActivity($userID, $renderedTemplate['subject'], $renderedTemplate['html'], $renderedTemplate['text'], $additionalDetails, $campaignId, $attachments, $caseId); $activityIds[] = $activityID; if ($firstActivityCreated == FALSE && !empty($attachments)) { @@ -1183,9 +1122,9 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $from, $userID, $contactId, - $tokenSubject, - $tokenText, - $tokenHtml, + $renderedTemplate['subject'], + $renderedTemplate['text'], + $renderedTemplate['html'], $emailAddress, $activityID, // get the set of attachments from where they are stored @@ -1215,10 +1154,12 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * @param array $attachments * Attachments. * + * @internal + * * @return array * Array of attachment key versus file Id. */ - private static function getAttachmentFileIds($activityID, $attachments) { + public static function getAttachmentFileIds($activityID, $attachments) { $queryParams = [1 => [$activityID, 'Positive'], 2 => [CRM_Activity_DAO_Activity::getTableName(), 'String']]; $query = "SELECT file_id, uri FROM civicrm_entity_file INNER JOIN civicrm_file ON civicrm_entity_file.file_id = civicrm_file.id WHERE entity_id =%1 AND entity_table = %2"; @@ -1305,45 +1246,11 @@ WHERE entity_id =%1 AND entity_table = %2"; $activity = self::create($activityParams); $activityID = $activity->id; - // Process Tokens - // token replacement of addressee/email/postal greetings - // get the tokens added in subject and message - $messageToken = CRM_Utils_Token::getTokens($text); - $returnProperties = []; - if (isset($messageToken['contact'])) { - foreach ($messageToken['contact'] as $key => $value) { - $returnProperties[$value] = 1; - } - } - // Call tokens hook - $tokens = []; - CRM_Utils_Hook::tokens($tokens); - $categories = array_keys($tokens); - // get token details for contacts, call only if tokens are used - $tokenDetails = []; - if (!empty($returnProperties) || !empty($tokens)) { - list($tokenDetails) = CRM_Utils_Token::getTokenDetails($contactIds, - $returnProperties, - NULL, NULL, FALSE, - $messageToken, - 'CRM_Activity_BAO_Activity' - ); - } - $success = 0; $errMsgs = []; foreach ($contactDetails as $contact) { $contactId = $contact['contact_id']; - - // Replace tokens - if (!empty($tokenDetails) && is_array($tokenDetails["{$contactId}"])) { - // unset phone from details since it always returns primary number - unset($tokenDetails["{$contactId}"]['phone']); - unset($tokenDetails["{$contactId}"]['phone_type_id']); - $contact = array_merge($contact, $tokenDetails["{$contactId}"]); - } - $tokenText = CRM_Utils_Token::replaceContactTokens($text, $contact, FALSE, $messageToken, FALSE, FALSE); - $tokenText = CRM_Utils_Token::replaceHookTokens($tokenText, $contact, $categories, FALSE, FALSE); + $tokenText = CRM_Core_BAO_MessageTemplate::renderTemplate(['messageTemplate' => ['msg_text' => $text], 'contactId' => $contactId, 'disableSmarty' => TRUE])['text']; // Only send if the phone is of type mobile if ($contact['phone_type_id'] == CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Phone', 'phone_type_id', 'Mobile')) { @@ -1455,6 +1362,8 @@ WHERE entity_id =%1 AND entity_table = %2"; } /** + * DO Not use this function. Under deprecation, no active core use. + * * Send the message to a specific contact. * * @param string $from @@ -1476,6 +1385,8 @@ WHERE entity_id =%1 AND entity_table = %2"; * * @return bool * TRUE if successful else FALSE. + * + * @deprecated */ public static function sendMessage( $from, @@ -1490,7 +1401,7 @@ WHERE entity_id =%1 AND entity_table = %2"; $cc = NULL, $bcc = NULL ) { - list($toDisplayName, $toEmail, $toDoNotEmail) = CRM_Contact_BAO_Contact::getContactDetails($toID); + [$toDisplayName, $toEmail, $toDoNotEmail] = CRM_Contact_BAO_Contact::getContactDetails($toID); if ($emailAddress) { $toEmail = trim($emailAddress); } @@ -1771,7 +1682,7 @@ WHERE activity.id IN ($activityIds)"; } if ($entityObj->owner_membership_id) { - list($displayName) = CRM_Contact_BAO_Contact::getDisplayAndImage(CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $entityObj->owner_membership_id, 'contact_id')); + [$displayName] = CRM_Contact_BAO_Contact::getDisplayAndImage(CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $entityObj->owner_membership_id, 'contact_id')); $subject .= sprintf(' (by %s)', $displayName); } diff --git a/civicrm/CRM/Activity/BAO/Query.php b/civicrm/CRM/Activity/BAO/Query.php index 0aa2df666a3fcbbaa89ca9aba6a1e558d41f9734..b10ada06bb08fe56321f75cbceb93e11c33e720c 100644 --- a/civicrm/CRM/Activity/BAO/Query.php +++ b/civicrm/CRM/Activity/BAO/Query.php @@ -450,7 +450,7 @@ class CRM_Activity_BAO_Query { 1 => ts('Added by'), ]; $form->addRadio('activity_role', NULL, $activityRoles, ['allowClear' => TRUE]); - $form->setDefaults(['activity_role' => 3]); + $activityStatus = CRM_Core_PseudoConstant::get('CRM_Activity_DAO_Activity', 'status_id', [ 'flip' => 1, 'labelColumn' => 'name', @@ -466,7 +466,7 @@ class CRM_Activity_BAO_Query { $form->addElement('text', 'activity_text', ts('Activity Text'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); $form->addRadio('activity_option', '', CRM_Core_SelectValues::activityTextOptions()); - $form->setDefaults(['activity_option' => 'both']); + $form->setDefaults(['activity_option' => 6]); $form->addYesNo('activity_test', ts('Activity is a Test?')); $activity_tags = CRM_Core_BAO_Tag::getColorTags('civicrm_activity'); diff --git a/civicrm/CRM/Activity/Form/Task.php b/civicrm/CRM/Activity/Form/Task.php index 23afcfab94b21e92c7c77695444edbafe97ddf6f..ee6e1ebd2b8a496f048730598b2acb79e96508c3 100644 --- a/civicrm/CRM/Activity/Form/Task.php +++ b/civicrm/CRM/Activity/Form/Task.php @@ -127,4 +127,13 @@ WHERE activity_id IN ( $IDs ) AND ]); } + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + public function getTokenSchema(): array { + return ['activityId']; + } + } diff --git a/civicrm/CRM/Activity/Form/Task/PDF.php b/civicrm/CRM/Activity/Form/Task/PDF.php index 7744ae949c4d6d7c33103543bf752a6a51f9ec6b..8a7cd7abb0ddfe044fd086d9711284e0dc9d5591 100644 --- a/civicrm/CRM/Activity/Form/Task/PDF.php +++ b/civicrm/CRM/Activity/Form/Task/PDF.php @@ -46,23 +46,14 @@ class CRM_Activity_Form_Task_PDF extends CRM_Activity_Form_Task { $form = $this; $activityIds = $form->_activityHolderIds; $formValues = $form->controller->exportValues($form->getName()); - $html_message = CRM_Core_Form_Task_PDFLetterCommon::processTemplate($formValues); + $html_message = $this->processTemplate($formValues); // Do the rest in another function to make testing easier $form->createDocument($activityIds, $html_message, $formValues); $form->postProcessHook(); - CRM_Utils_System::civiExit(1); - } - - /** - * List available tokens for this form. - * - * @return array - */ - public function listTokens() { - return $this->createTokenProcessor()->listTokens(); + CRM_Utils_System::civiExit(0); } /** @@ -108,20 +99,12 @@ class CRM_Activity_Form_Task_PDF extends CRM_Activity_Form_Task { * The name registered with the TokenProcessor * @param array $formValues * The values submitted through the form - * - * @return string - * If formValues['is_unit_test'] is true, otherwise outputs document to browser */ - public function renderFromRows($rows, $msgPart, $formValues) { + public function renderFromRows($rows, $msgPart, $formValues): void { $html = []; foreach ($rows as $row) { $html[] = $row->render($msgPart); } - - if (!empty($formValues['is_unit_test'])) { - return $html; - } - if (!empty($html)) { $this->outputFromHtml($formValues, $html); } @@ -133,18 +116,13 @@ class CRM_Activity_Form_Task_PDF extends CRM_Activity_Form_Task { * @param array $formValues * @param array $html */ - protected function outputFromHtml($formValues, array $html) { - if (!empty($formValues['subject'])) { - $fileName = CRM_Utils_File::makeFilenameWithUnicode($formValues['subject'], '_', 200); - } - else { - $fileName = 'CiviLetter'; - } - if ($formValues['document_type'] === 'pdf') { + protected function outputFromHtml(array $formValues, array $html): void { + $fileName = $this->getFileName(); + if ($this->getSubmittedValue('document_type') === 'pdf') { CRM_Utils_PDF_Utils::html2pdf($html, $fileName . '.pdf', FALSE, $formValues); } else { - CRM_Utils_PDF_Document::html2doc($html, $fileName . '.' . $formValues['document_type'], $formValues); + CRM_Utils_PDF_Document::html2doc($html, $fileName . '.' . $this->getSubmittedValue('document_type'), $formValues); } } diff --git a/civicrm/CRM/Activity/Import/Controller.php b/civicrm/CRM/Activity/Import/Controller.php index 8370776ea6f494a13bfabcf1178b972b3dcb5276..772c146200526df30829ae1fa5d2444beb1ea833 100644 --- a/civicrm/CRM/Activity/Import/Controller.php +++ b/civicrm/CRM/Activity/Import/Controller.php @@ -26,10 +26,7 @@ class CRM_Activity_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Activity/Import/Parser/Activity.php b/civicrm/CRM/Activity/Import/Parser/Activity.php index 1004eb54b3c5f925b9ebb948ce47355c2fddbdc7..a1d3cdfa8bd4349b50ca3eaf8e662819322a7dd7 100644 --- a/civicrm/CRM/Activity/Import/Parser/Activity.php +++ b/civicrm/CRM/Activity/Import/Parser/Activity.php @@ -72,6 +72,9 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { $field['type'] = CRM_Utils_Array::value('type', $field, CRM_Utils_Type::T_INT); $field['dataPattern'] = CRM_Utils_Array::value('dataPattern', $field, '//'); $field['headerPattern'] = CRM_Utils_Array::value('headerPattern', $field, '//'); + if (!empty($field['custom_group_id'])) { + $field['title'] = $field["groupTitle"] . ' :: ' . $field["title"]; + } $this->addField($name, $field['title'], $field['type'], $field['headerPattern'], $field['dataPattern']); } diff --git a/civicrm/CRM/Activity/Page/AJAX.php b/civicrm/CRM/Activity/Page/AJAX.php index 7cf1613e2fa6cbf12b7113e06794b33cfad89659..4f85789576b532f7e7ead274e74aed88faaebe84 100644 --- a/civicrm/CRM/Activity/Page/AJAX.php +++ b/civicrm/CRM/Activity/Page/AJAX.php @@ -217,7 +217,7 @@ class CRM_Activity_Page_AJAX { } // email column links/icon if ($row['email']) { - $row['email'] = '<a class="crm-hover-button crm-popup" href="' . CRM_Utils_System::url('civicrm/activity/email/add', 'reset=1&action=add&atype=3&cid=' . $row['cid']) . '&caseid=' . $caseID . '" title="' . ts('Send an Email') . '"><i class="crm-i fa-envelope" aria-hidden="true"></i></a>'; + $row['email'] = '<a class="crm-hover-button crm-popup" href="' . CRM_Utils_System::url('civicrm/case/email/add', 'reset=1&action=add&atype=3&cid=' . $row['cid']) . '&caseid=' . $caseID . '" title="' . ts('Send an Email') . '"><i class="crm-i fa-envelope" aria-hidden="true"></i></a>'; } // view end date if set diff --git a/civicrm/CRM/Activity/Tokens.php b/civicrm/CRM/Activity/Tokens.php index bfcb4e76e5c03edf283fac22b71be66848517593..40b896e814070e4d7d04a0de875f69dedf54d2a2 100644 --- a/civicrm/CRM/Activity/Tokens.php +++ b/civicrm/CRM/Activity/Tokens.php @@ -15,7 +15,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ -use Civi\Token\AbstractTokenSubscriber; +use Civi\ActionSchedule\Event\MailingQueryEvent; use Civi\Token\Event\TokenValueEvent; use Civi\Token\TokenRow; @@ -33,50 +33,22 @@ use Civi\Token\TokenRow; * * This has been enhanced to work with PDF/letter merge */ -class CRM_Activity_Tokens extends AbstractTokenSubscriber { - - use CRM_Core_TokenTrait; - - /** - * @return string - */ - private function getEntityName(): string { - return 'activity'; - } - - /** - * @return string - */ - private function getEntityTableName(): string { - return 'civicrm_activity'; - } +class CRM_Activity_Tokens extends CRM_Core_EntityTokens { /** + * Get the entity name for api v4 calls. + * * @return string */ - private function getEntityContextSchema(): string { - return 'activityId'; + protected function getApiEntityName(): string { + return 'Activity'; } - /** - * Mapping from tokenName to api return field - * Using arrays allows more complex tokens to be handled that require more than one API field. - * For example, an address token might want ['street_address', 'city', 'postal_code'] - * - * @var array - */ - private static $fieldMapping = [ - 'activity_id' => ['id'], - 'activity_type' => ['activity_type_id'], - 'status' => ['status_id'], - 'campaign' => ['campaign_id'], - ]; - /** * @inheritDoc */ - public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e) { - if ($e->mapping->getEntity() !== $this->getEntityTableName()) { + public function alterActionScheduleQuery(MailingQueryEvent $e): void { + if ($e->mapping->getEntity() !== $this->getExtendableTableName()) { return; } @@ -84,43 +56,7 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber { // Multiple revisions of the activity. // Q: Could we simplify & move the extra AND clauses into `where(...)`? $e->query->param('casEntityJoinExpr', 'e.id = reminder.entity_id AND e.is_current_revision = 1 AND e.is_deleted = 0'); - $e->query->select('e.id AS tokenContext_' . $this->getEntityContextSchema()); - } - - /** - * @inheritDoc - */ - public function prefetch(TokenValueEvent $e) { - // Find all the entity IDs - $entityIds = $e->getTokenProcessor()->getContextValues($this->getEntityContextSchema()); - - if (!$entityIds) { - return NULL; - } - - // Get data on all activities for basic and customfield tokens - $prefetch['activity'] = civicrm_api3('Activity', 'get', [ - 'id' => ['IN' => $entityIds], - 'options' => ['limit' => 0], - 'return' => self::getReturnFields($this->activeTokens), - ])['values']; - - // Store the activity types if needed - if (in_array('activity_type', $this->activeTokens, TRUE)) { - $this->activityTypes = \CRM_Core_OptionGroup::values('activity_type'); - } - - // Store the activity statuses if needed - if (in_array('status', $this->activeTokens, TRUE)) { - $this->activityStatuses = \CRM_Core_OptionGroup::values('activity_status'); - } - - // Store the campaigns if needed - if (in_array('campaign', $this->activeTokens, TRUE)) { - $this->campaigns = \CRM_Campaign_BAO_Campaign::getCampaigns(); - } - - return $prefetch; + parent::alterActionScheduleQuery($e); } /** @@ -138,75 +74,125 @@ class CRM_Activity_Tokens extends AbstractTokenSubscriber { * @throws \CRM_Core_Exception */ public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) { - // maps token name to api field - $mapping = [ - 'activity_id' => 'id', - ]; - - $activityId = $row->context[$this->getEntityContextSchema()]; + $activityId = $this->getFieldValue($row, 'id'); - $activity = $prefetch['activity'][$activityId]; - - if (in_array($field, ['activity_date_time', 'created_date', 'modified_date'])) { - $row->tokens($entity, $field, \CRM_Utils_Date::customFormat($activity[$field])); - } - elseif (isset($mapping[$field]) and (isset($activity[$mapping[$field]]))) { - $row->tokens($entity, $field, $activity[$mapping[$field]]); - } - elseif (in_array($field, ['activity_type'])) { - $row->tokens($entity, $field, $this->activityTypes[$activity['activity_type_id']]); - } - elseif (in_array($field, ['status'])) { - $row->tokens($entity, $field, $this->activityStatuses[$activity['status_id']]); - } - elseif (in_array($field, ['campaign'])) { - $row->tokens($entity, $field, $this->campaigns[$activity['campaign_id']]); + if (!empty($this->getDeprecatedTokens()[$field])) { + $realField = $this->getDeprecatedTokens()[$field]; + parent::evaluateToken($row, $entity, $realField, $prefetch); + $row->format('text/plain')->tokens($entity, $field, $row->tokens['activity'][$realField]); } - elseif (in_array($field, ['case_id'])) { + elseif ($field === 'case_id') { // An activity can be linked to multiple cases so case_id is always an array. // We just return the first case ID for the token. - $row->tokens($entity, $field, is_array($activity['case_id']) ? reset($activity['case_id']) : $activity['case_id']); + // this weird hack might exist because apiv3 is weird & + $caseID = CRM_Core_DAO::singleValueQuery('SELECT case_id FROM civicrm_case_activity WHERE activity_id = %1 LIMIT 1', [1 => [$activityId, 'Integer']]); + $row->tokens($entity, $field, $caseID ?? ''); } - elseif (array_key_exists($field, $this->customFieldTokens)) { - $row->tokens($entity, $field, - isset($activity[$field]) - ? \CRM_Core_BAO_CustomField::displayValue($activity[$field], $field) - : '' - ); - } - elseif (isset($activity[$field])) { - $row->tokens($entity, $field, $activity[$field]); + else { + parent::evaluateToken($row, $entity, $field, $prefetch); } } /** - * Get the basic tokens provided. + * Get tokens that are special or calculated for this enitty. * - * @return array token name => token label + * @return array|array[] */ - protected function getBasicTokens(): array { - if (!isset($this->basicTokens)) { - $this->basicTokens = [ - 'activity_id' => ts('Activity ID'), - 'activity_type' => ts('Activity Type'), - 'subject' => ts('Activity Subject'), - 'details' => ts('Activity Details'), - 'activity_date_time' => ts('Activity Date-Time'), - 'created_date' => ts('Activity Created Date'), - 'modified_date' => ts('Activity Modified Date'), - 'activity_type_id' => ts('Activity Type ID'), - 'status' => ts('Activity Status'), - 'status_id' => ts('Activity Status ID'), - 'location' => ts('Activity Location'), - 'duration' => ts('Activity Duration'), - 'campaign' => ts('Activity Campaign'), - 'campaign_id' => ts('Activity Campaign ID'), + protected function getBespokeTokens(): array { + $tokens = []; + if (array_key_exists('CiviCase', CRM_Core_Component::getEnabledComponents())) { + $tokens['case_id'] = ts('Activity Case ID'); + return [ + 'case_id' => [ + 'title' => ts('Activity Case ID'), + 'name' => 'case_id', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'Integer', + 'audience' => 'user', + ], ]; - if (array_key_exists('CiviCase', CRM_Core_Component::getEnabledComponents())) { - $this->basicTokens['case_id'] = ts('Activity Case ID'); + } + return $tokens; + } + + /** + * Get fields Fieldshistorically not advertised for tokens. + * + * @return string[] + */ + protected function getSkippedFields(): array { + return array_merge(parent::getSkippedFields(), [ + 'source_record_id', + 'phone_id', + 'phone_number', + 'priority_id', + 'parent_id', + 'is_test', + 'medium_id', + 'is_auto', + 'relationship_id', + 'is_current_revision', + 'original_id', + 'result', + 'is_deleted', + 'engagement_level', + 'weight', + 'is_star', + ]); + } + + /** + * @inheritDoc + */ + public function getActiveTokens(TokenValueEvent $e) { + $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + if (!isset($messageTokens[$this->entity])) { + return NULL; + } + + $activeTokens = []; + foreach ($messageTokens[$this->entity] as $msgToken) { + if (array_key_exists($msgToken, $this->getTokenMetadata())) { + $activeTokens[] = $msgToken; + } + // case_id is probably set in metadata anyway. + elseif ($msgToken === 'case_id' || isset($this->getDeprecatedTokens()[$msgToken])) { + $activeTokens[] = $msgToken; } } - return $this->basicTokens; + return array_unique($activeTokens); + } + + public function getPrefetchFields(TokenValueEvent $e): array { + $tokens = parent::getPrefetchFields($e); + $active = $this->getActiveTokens($e); + foreach ($this->getDeprecatedTokens() as $old => $new) { + if (in_array($old, $active, TRUE) && !in_array($new, $active, TRUE)) { + $tokens[] = $new; + } + } + return $tokens; + } + + /** + * These tokens still work but we don't advertise them. + * + * We will actively remove from the following places + * - scheduled reminders + * - add to 'blocked' on pdf letter & email + * + * & then at some point start issuing warnings for them. + * + * @return string[] + */ + protected function getDeprecatedTokens(): array { + return [ + 'activity_id' => 'id', + 'activity_type' => 'activity_type_id:label', + 'status' => 'status_id:label', + 'campaign' => 'campaign_id:label', + ]; } } diff --git a/civicrm/CRM/Admin/Form/MessageTemplates.php b/civicrm/CRM/Admin/Form/MessageTemplates.php index 1c2fcd199bdf200d532094686ba950d5e6fa3906..076fcf3742ca96ed30a78a5f326fdd6434610509 100644 --- a/civicrm/CRM/Admin/Form/MessageTemplates.php +++ b/civicrm/CRM/Admin/Form/MessageTemplates.php @@ -10,6 +10,7 @@ */ use Civi\Api4\MessageTemplate; +use Civi\Token\TokenProcessor; /** * @@ -109,7 +110,7 @@ class CRM_Admin_Form_MessageTemplates extends CRM_Core_Form { else { $this->_workflow_id = $this->_values['workflow_id'] ?? NULL; $this->checkUserPermission($this->_workflow_id); - $this->assign('workflow_id', $this->_workflow_id); + $this->assign('isWorkflow', (bool) ($this->_values['workflow_id'] ?? NULL)); if ($this->_workflow_id) { $selectedChild = 'workflow'; @@ -170,9 +171,8 @@ class CRM_Admin_Form_MessageTemplates extends CRM_Core_Form { CRM_Core_DAO::getAttribute('CRM_Core_DAO_MessageTemplate', 'msg_subject') ); - //get the tokens. - $tokens = CRM_Core_SelectValues::contactTokens(); - $tokens = array_merge($tokens, CRM_Core_SelectValues::domainTokens()); + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => ['contactId']]); + $tokens = $tokenProcessor->listTokens(); $this->assign('tokens', CRM_Utils_Token::formatTokensForDisplay($tokens)); diff --git a/civicrm/CRM/Admin/Form/Preferences/Mailing.php b/civicrm/CRM/Admin/Form/Preferences/Mailing.php index b2f4a975dc32a8317860a6e3b5a519604e1d1870..726a31dd4e208c44ff6603e72e1fd65ee5e00400 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Mailing.php +++ b/civicrm/CRM/Admin/Form/Preferences/Mailing.php @@ -16,7 +16,7 @@ */ /** - * This class generates form components for the maling component preferences. + * This class generates form components for the mailing component preferences. */ class CRM_Admin_Form_Preferences_Mailing extends CRM_Admin_Form_Preferences { diff --git a/civicrm/CRM/Admin/Form/ScheduleReminders.php b/civicrm/CRM/Admin/Form/ScheduleReminders.php index 7218283ed351da581452da8244017eb937bdd00f..40ae4aa356483dc8a56dde39947a64e6e3e351e4 100644 --- a/civicrm/CRM/Admin/Form/ScheduleReminders.php +++ b/civicrm/CRM/Admin/Form/ScheduleReminders.php @@ -698,7 +698,7 @@ class CRM_Admin_Form_ScheduleReminders extends CRM_Admin_Form { $tokenProcessor = new \Civi\Token\TokenProcessor(\Civi::dispatcher(), [ 'controller' => get_class(), 'smarty' => FALSE, - 'schema' => ['activityId'], + 'schema' => ['activityId', 'participantId'], ]); $tokens = $tokenProcessor->listTokens(); diff --git a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php index 1540e6a52d3e7c736534908313b1a3795c0c0848..dfe75c761fa72366ddef5a849efbc43dce69fb40 100644 --- a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php +++ b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php @@ -31,6 +31,9 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { 'recordGeneratedLetters' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'secondDegRelPermissions' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'checksum_timeout' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'dompdf_font_dir' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'dompdf_chroot' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'dompdf_enable_remote' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'wkhtmltopdfPath' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsMaxCount' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsProviders' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, diff --git a/civicrm/CRM/Admin/Form/Setting/UF.php b/civicrm/CRM/Admin/Form/Setting/UF.php index 6ffda9f2298cdf37472b1a619414caeb0b08b462..16aedbc90f8ab1cf6772d06b44d5e6914b59b8fa 100644 --- a/civicrm/CRM/Admin/Form/Setting/UF.php +++ b/civicrm/CRM/Admin/Form/Setting/UF.php @@ -67,8 +67,8 @@ class CRM_Admin_Form_Setting_UF extends CRM_Admin_Form_Setting { $config->dsn != $config->userFrameworkDSN || !empty($drupal_prefix) ) ) { - $dsn = CRM_Utils_SQL::autoSwitchDSN($config->dsn); - $dsnArray = DB::parseDSN($dsn); + + $dsnArray = DB::parseDSN(CRM_Utils_SQL::autoSwitchDSN($config->dsn)); $tableNames = CRM_Core_DAO::getTableNames(); asort($tableNames); $tablePrefixes = '$databases[\'default\'][\'default\'][\'prefix\']= ['; @@ -77,13 +77,7 @@ class CRM_Admin_Form_Setting_UF extends CRM_Admin_Form_Setting { } // add default prefix: the drupal database prefix $tablePrefixes .= "\n 'default' => '$drupal_prefix',"; - $prefix = ""; - if ($config->dsn != $config->userFrameworkDSN) { - $prefix = "`{$dsnArray['database']}`."; - if ($config->userFramework === 'Backdrop') { - $prefix = "{$dsnArray['database']}."; - } - } + $prefix = $config->userSystem->getCRMDatabasePrefix(); foreach ($tableNames as $tableName) { $tablePrefixes .= "\n '" . str_pad($tableName . "'", 41) . " => '{$prefix}',"; } diff --git a/civicrm/CRM/Admin/Page/Extensions.php b/civicrm/CRM/Admin/Page/Extensions.php index 79b41002246f7b81b5a4a56ee41ab3f0cf934781..b8250a69a47d60d8fe182926773d1b29fb38b124 100644 --- a/civicrm/CRM/Admin/Page/Extensions.php +++ b/civicrm/CRM/Admin/Page/Extensions.php @@ -248,6 +248,7 @@ class CRM_Admin_Page_Extensions extends CRM_Core_Page_Basic { } $row = (array) $info; $row['id'] = $info->key; + $row['upgradelink'] = ''; $action = CRM_Core_Action::UPDATE; $row['action'] = CRM_Core_Action::formLink(self::links(), $action, diff --git a/civicrm/CRM/Admin/Page/MessageTemplates.php b/civicrm/CRM/Admin/Page/MessageTemplates.php index 325b06528d1fa9e182749c814bbc728caff33c91..544a39770ebea5a7ce5a6f3fbb6a474f7b8afa0b 100644 --- a/civicrm/CRM/Admin/Page/MessageTemplates.php +++ b/civicrm/CRM/Admin/Page/MessageTemplates.php @@ -51,7 +51,7 @@ class CRM_Admin_Page_MessageTemplates extends CRM_Core_Page_Basic { $sql = ' SELECT diverted.id, orig.id orig_id FROM civicrm_msg_template diverted JOIN civicrm_msg_template orig ON ( - diverted.workflow_id = orig.workflow_id AND + diverted.workflow_name = orig.workflow_name AND orig.is_reserved = 1 AND ( diverted.msg_subject != orig.msg_subject OR diverted.msg_text != orig.msg_text OR @@ -134,7 +134,7 @@ class CRM_Admin_Page_MessageTemplates extends CRM_Core_Page_Basic { * @param bool $forceAction */ public function action(&$object, $action, &$values, &$links, $permission, $forceAction = FALSE) { - if ($object->workflow_id) { + if ($object->workflow_name) { // do not expose action link for reverting to default if the template did not diverge or we just reverted it now if (!array_key_exists($object->id, $this->_revertible) or ($this->_action & CRM_Core_Action::REVERT and $object->id == $this->_revertedId) @@ -145,7 +145,7 @@ class CRM_Admin_Page_MessageTemplates extends CRM_Core_Page_Basic { // default workflow templates shouldn’t be deletable // workflow templates shouldn’t have disable/enable actions (at least for CiviCRM 3.1) - if ($object->workflow_id) { + if ($object->workflow_name) { $action &= ~CRM_Core_Action::DISABLE; $action &= ~CRM_Core_Action::DELETE; } diff --git a/civicrm/CRM/Api4/Page/Api4Explorer.php b/civicrm/CRM/Api4/Page/Api4Explorer.php index 9cd4508fc56b106dc2b956e5819749c2e8f67c0d..a31e5feb62ece31f756e617173ecdefa92b49a33 100644 --- a/civicrm/CRM/Api4/Page/Api4Explorer.php +++ b/civicrm/CRM/Api4/Page/Api4Explorer.php @@ -59,6 +59,7 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { $fns[] = [ 'name' => $className::getName(), 'title' => $className::getTitle(), + 'description' => $className::getDescription(), 'params' => $className::getParams(), 'category' => $className::getCategory(), 'dataType' => $className::getDataType(), diff --git a/civicrm/CRM/Badge/BAO/Badge.php b/civicrm/CRM/Badge/BAO/Badge.php index fc98961f7a57b213d0e76d9ab81633bb99618648..9d2c61339f85a62ea57aa15835a489bb40f85f26 100644 --- a/civicrm/CRM/Badge/BAO/Badge.php +++ b/civicrm/CRM/Badge/BAO/Badge.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Token\TokenProcessor; + /** * Class CRM_Badge_Format_Badge. * @@ -40,7 +42,7 @@ class CRM_Badge_BAO_Badge { * @param array $layoutInfo * Associated array which contains meta data about format/layout. */ - public function createLabels(&$participants, &$layoutInfo) { + public function createLabels($participants, &$layoutInfo) { $this->pdf = new CRM_Utils_PDF_Label($layoutInfo['format'], 'mm'); $this->pdf->Open(); $this->pdf->setPrintHeader(FALSE); @@ -58,6 +60,9 @@ class CRM_Badge_BAO_Badge { $this->pdf->AddPdfLabel($formattedRow); } + if (CIVICRM_UF === 'UnitTests') { + throw new CRM_Core_Exception_PrematureExitException('pdf output called', ['formattedRow' => $formattedRow]); + } $this->pdf->Output(CRM_Utils_String::munge($layoutInfo['title'], '_', 64) . '.pdf', 'D'); CRM_Utils_System::civiExit(); } @@ -83,10 +88,6 @@ class CRM_Badge_BAO_Badge { $value = ''; if ($element) { $value = $row[$element]; - // hack to fix date field display format - if (strpos($element, '_date')) { - $value = CRM_Utils_Date::customFormat($value, "%B %E%f"); - } } $formattedRow['token'][$key] = [ @@ -366,7 +367,7 @@ class CRM_Badge_BAO_Badge { $this->imgRes = 300; if ($img) { - list($w, $h) = self::getImageProperties($img, $this->imgRes, $w, $h); + [$w, $h] = self::getImageProperties($img, $this->imgRes, $w, $h); $this->pdf->Image($img, $x, $y, $w, $h, '', '', '', FALSE, 72, '', FALSE, FALSE, $this->debug, FALSE, FALSE, FALSE); } @@ -399,43 +400,33 @@ class CRM_Badge_BAO_Badge { public static function buildBadges(&$params, &$form) { // get name badge layout info $layoutInfo = CRM_Badge_BAO_Layout::buildLayout($params); - + $tokenProcessor = new TokenProcessor(\Civi::dispatcher(), ['schema' => ['participantId', 'eventId'], 'smarty' => FALSE]); // split/get actual field names from token and individual contact image URLs - $returnProperties = []; + $processorTokens = []; if (!empty($layoutInfo['data']['token'])) { foreach ($layoutInfo['data']['token'] as $index => $value) { - $element = ''; if ($value) { - $token = CRM_Utils_Token::getTokens($value); - if (key($token) == 'contact') { - $element = $token['contact'][0]; - } - elseif (key($token) == 'event') { - $element = $token['event'][0]; - //FIX ME - we need to standardize event token names - if (substr($element, 0, 6) != 'event_') { - $element = 'event_' . $element; - } - } - elseif (key($token) == 'participant') { - $element = $token['participant'][0]; - } - - // build returnproperties for query - $returnProperties[$element] = 1; + $tokenName = str_replace(['}', '{contact.', '{participant.', '{event.'], '', $value); + $tokenProcessor->addMessage($tokenName, $value, 'text/plain'); + $processorTokens[] = $tokenName; + $layoutInfo['data']['rowElements'][$index] = $tokenName; } - - // add actual field name to row element - $layoutInfo['data']['rowElements'][$index] = $element; } } - // add additional required fields for query execution - $additionalFields = ['participant_register_date', 'participant_id', 'event_id', 'contact_id', 'image_URL']; - foreach ($additionalFields as $field) { - $returnProperties[$field] = 1; - } + $returnProperties = [ + 'participant_id' => 1, + 'event_id' => 1, + 'contact_id' => 1, + ]; + $sortOrder = $form->get(CRM_Utils_Sort::SORT_ORDER); + if ($sortOrder) { + $sortField = explode(' ', $sortOrder)[0]; + // Add to select so aliaising is handled. + $returnProperties[trim(str_replace('`', ' ', $sortField))] = 1; + $sortOrder = " ORDER BY $sortOrder"; + } if ($form->_single) { $queryParams = NULL; } @@ -447,7 +438,7 @@ class CRM_Badge_BAO_Badge { CRM_Contact_BAO_Query::MODE_EVENT ); - list($select, $from, $where, $having) = $query->query(); + [$select, $from, $where, $having] = $query->query(); if (empty($where)) { $where = "WHERE {$form->_componentClause}"; } @@ -455,27 +446,18 @@ class CRM_Badge_BAO_Badge { $where .= " AND {$form->_componentClause}"; } - $sortOrder = NULL; - if ($form->get(CRM_Utils_Sort::SORT_ORDER)) { - $sortOrder = $form->get(CRM_Utils_Sort::SORT_ORDER); - if (!empty($sortOrder)) { - $sortOrder = " ORDER BY $sortOrder"; - } - } $queryString = "$select $from $where $having $sortOrder"; $dao = CRM_Core_DAO::executeQuery($queryString); $rows = []; + while ($dao->fetch()) { - $query->convertToPseudoNames($dao); - $rows[$dao->participant_id] = []; - foreach ($returnProperties as $key => $dontCare) { - $value = $dao->$key ?? NULL; - // Format custom fields - if (strstr($key, 'custom_') && isset($value)) { - $value = CRM_Core_BAO_CustomField::displayValue($value, substr($key, 7), $dao->contact_id); - } - $rows[$dao->participant_id][$key] = $value; + $tokenProcessor->addRow(['contactId' => $dao->contact_id, 'participantId' => $dao->participant_id, 'eventId' => $dao->event_id]); + } + $tokenProcessor->evaluate(); + foreach ($tokenProcessor->getRows() as $row) { + foreach ($processorTokens as $processorToken) { + $rows[$row->context['participantId']][$processorToken] = $row->render($processorToken); } } diff --git a/civicrm/CRM/Badge/Form/Layout.php b/civicrm/CRM/Badge/Form/Layout.php index 25834a190126b3ef3ead8ceb76060fc3decf4b99..4cde2b0bafa11a1c7ccdb78e90785752d3f4392c 100644 --- a/civicrm/CRM/Badge/Form/Layout.php +++ b/civicrm/CRM/Badge/Form/Layout.php @@ -49,13 +49,17 @@ class CRM_Badge_Form_Layout extends CRM_Admin_Form { $this->add('text', 'description', ts('Description'), CRM_Core_DAO::getAttribute('CRM_Core_DAO_PrintLabel', 'title')); - // get the tokens + // get the tokens - at the point of rendering the token processor is used so + // the only reason for this cut-down set of tokens is UI on this + // screen and / or historical. $contactTokens = CRM_Core_SelectValues::contactTokens(); $eventTokens = [ '{event.event_id}' => ts('Event ID'), '{event.title}' => ts('Event Title'), - '{event.start_date}' => ts('Event Start Date'), - '{event.end_date}' => ts('Event End Date'), + // This layout selection is day + month eg October 27th + // obviously someone felt year was not logical for dates. + '{event.start_date|crmDate:"%B %E%f"}' => ts('Event Start Date'), + '{event.end_date|crmDate:"%B %E%f"}' => ts('Event End Date'), ]; $participantTokens = CRM_Core_SelectValues::participantTokens(); diff --git a/civicrm/CRM/Batch/Form/Entry.php b/civicrm/CRM/Batch/Form/Entry.php index 77ffafc5219e1cb11b505d3e04f80574d07bab61..1e204d8293020b528f032578bd87f5200563b561 100644 --- a/civicrm/CRM/Batch/Form/Entry.php +++ b/civicrm/CRM/Batch/Form/Entry.php @@ -136,6 +136,13 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { return $this->currentRowMembershipID; } + /** + * Get the order (contribution) status for the current row. + */ + protected function getCurrentRowPaymentStatus() { + return CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $this->currentRow['contribution_status_id']); + } + /** * Get the contact ID for the current row. * @@ -781,7 +788,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $this->updateContactInfo($value); //check for custom data - $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key], + $value['custom'] = CRM_Core_BAO_CustomField::postProcess($this->currentRow, $key, 'Membership', $value['membership_type_id'] @@ -813,15 +820,13 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { 'membership_type_id' => $value['membership_type_id'], 'financial_type_id' => $value['financial_type_id'], ], $key); + $order->setEntityParameters($this->getCurrentRowMembershipParams(), $key); if (!empty($order->getLineItems())) { $value['lineItems'] = [$order->getPriceSetID() => $order->getPriceFieldIndexedLineItems()]; $value['processPriceSet'] = TRUE; } // end of contribution related section - - $membershipParams = $this->getCurrentRowMembershipParams(); - if ($this->currentRowIsRenew()) { // The following parameter setting may be obsolete. $this->_params = $params; @@ -844,11 +849,37 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $this->setCurrentRowMembershipID($membership->id); } else { - // @todo - specify the relevant fields - don't copy all over - $membershipParams = array_merge($value, $membershipParams); - $membership = CRM_Member_BAO_Membership::create($membershipParams); - } + $createdOrder = civicrm_api3('Order', 'create', [ + 'line_items' => $order->getLineItemForV3OrderApi(), + 'receive_date' => $this->currentRow['receive_date'], + 'check_number' => $this->currentRow['check_number'] ?? '', + 'contact_id' => $this->getCurrentRowContactID(), + 'batch_id' => $this->_batchId, + 'financial_type_id' => $this->currentRow['financial_type_id'], + 'payment_instrument_id' => $this->currentRow['payment_instrument_id'], + ]); + $this->currentRowContributionID = $createdOrder['id']; + + $this->setCurrentRowMembershipID($createdOrder['values'][$this->getCurrentRowContributionID()]['line_item'][0]['entity_id']); + if ($this->getCurrentRowPaymentStatus() === 'Completed') { + civicrm_api3('Payment', 'create', [ + 'total_amount' => $order->getTotalAmount() + $order->getTotalTaxAmount(), + 'check_number' => $this->currentRow['check_number'] ?? '', + 'trxn_date' => $this->currentRow['receive_date'], + 'trxn_id' => $this->currentRow['trxn_id'], + 'payment_instrument_id' => $this->currentRow['payment_instrument_id'], + 'contribution_id' => $this->getCurrentRowContributionID(), + 'is_send_contribution_notification' => FALSE, + ]); + } + if (in_array($this->getCurrentRowPaymentStatus(), ['Failed', 'Cancelled'])) { + Contribution::update() + ->addValue('contribution_status_id', $this->currentRow['contribution_status_id']) + ->addWhere('id', '=', $this->getCurrentRowContributionID()) + ->execute(); + } + } //process premiums if (!empty($value['product_name'])) { if ($value['product_name'][0] > 0) { @@ -872,9 +903,9 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { // end of premium //send receipt mail. - if ($membership->id && !empty($value['send_receipt'])) { - $value['membership_id'] = $membership->id; - $this->emailReceipt($this, $value, $membership); + if ($this->getCurrentRowMembershipID() && !empty($value['send_receipt'])) { + $value['membership_id'] = $this->getCurrentRowMembershipID(); + $this->emailReceipt($this, $value); } } } @@ -887,15 +918,16 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { * @param CRM_Core_Form $form * Form object. * @param array $formValues - * @param object $membership - * Object. * * @return bool * true if mail was sent successfully * @throws \CRM_Core_Exception|\API_Exception * */ - protected function emailReceipt($form, &$formValues, $membership): bool { + protected function emailReceipt($form, &$formValues): bool { + $membership = new CRM_Member_BAO_Membership(); + $membership->id = $this->getCurrentRowMembershipID(); + $membership->fetch(); // @todo figure out how much of the stuff below is genuinely shared with the batch form & a logical shared place. if (!empty($formValues['payment_instrument_id'])) { $paymentInstrument = CRM_Contribute_PseudoConstant::paymentInstrument(); @@ -1165,8 +1197,10 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $this->currentRowExistingMembership = CRM_Member_BAO_Membership::getContactMembership($this->getCurrentRowContactID(), $this->getCurrentRowMembershipTypeID(), FALSE, NULL, TRUE ); - // Check and fix the membership if it is STALE - CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($this->currentRowExistingMembership); + if ($this->currentRowExistingMembership) { + // Check and fix the membership if it is STALE + CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($this->currentRowExistingMembership); + } } return $this->currentRowExistingMembership; } @@ -1177,12 +1211,30 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { * @return array */ private function getCurrentRowMembershipParams(): array { - return [ + return array_merge($this->getCurrentRowCustomParams(), [ 'start_date' => $this->currentRow['membership_start_date'] ?? NULL, 'end_date' => $this->currentRow['membership_end_date'] ?? NULL, 'join_date' => $this->currentRow['membership_join_date'] ?? NULL, 'campaign_id' => $this->currentRow['member_campaign_id'] ?? NULL, - ]; + 'source' => $this->currentRow['source'] ?? (!$this->currentRowIsRenew() ? ts('Batch entry') : ''), + 'membership_type_id' => $this->currentRow['membership_type_id'], + 'contact_id' => $this->getCurrentRowContactID(), + ]); + } + + /** + * Get the custom value parameters from the current row. + * + * @return array + */ + private function getCurrentRowCustomParams(): array { + $return = []; + foreach ($this->currentRow as $field => $value) { + if (strpos($field, 'custom_') === 0) { + $return[$field] = $value; + } + } + return $return; } } diff --git a/civicrm/CRM/Campaign/BAO/Survey.php b/civicrm/CRM/Campaign/BAO/Survey.php index 93b487982be9d7366851a1cc25296566c28f7dbe..b37e6b9bce24775ffb43ab1b2d68f6045991d3c2 100644 --- a/civicrm/CRM/Campaign/BAO/Survey.php +++ b/civicrm/CRM/Campaign/BAO/Survey.php @@ -18,7 +18,7 @@ /** * Class CRM_Campaign_BAO_Survey. */ -class CRM_Campaign_BAO_Survey extends CRM_Campaign_DAO_Survey { +class CRM_Campaign_BAO_Survey extends CRM_Campaign_DAO_Survey implements Civi\Test\HookInterface { /** * Retrieve DB object based on input parameters. @@ -366,24 +366,31 @@ SELECT survey.id as id, } /** - * Delete the survey. + * Delete a survey. * * @param int $id - * Survey id. - * + * @deprecated * @return mixed|null */ public static function del($id) { if (!$id) { return NULL; } - $reportId = CRM_Campaign_BAO_Survey::getReportID($id); - if ($reportId) { - CRM_Report_BAO_ReportInstance::del($reportId); + self::deleteRecord(['id' => $id]); + return 1; + } + + /** + * Event fired prior to modifying a Survey. + * @param \Civi\Core\Event\PreEvent $event + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete' && $event->id) { + $reportId = self::getReportID($event->id); + if ($reportId) { + CRM_Report_BAO_ReportInstance::deleteRecord(['id' => $reportId]); + } } - $dao = new CRM_Campaign_DAO_Survey(); - $dao->id = $id; - return $dao->delete(); } /** diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php index b46e6235c0b676e44a78e005b91909faeba9b60e..bc051c862cde889ed1e68faf57ba3fb81964ea9e 100644 --- a/civicrm/CRM/Campaign/DAO/Survey.php +++ b/civicrm/CRM/Campaign/DAO/Survey.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Survey.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:45c10db72afe877c41ddb78b79153648) + * (GenCodeChecksum:8fec5a0ffb4667af4f00820de74aa577) */ /** @@ -474,6 +474,13 @@ class CRM_Campaign_DAO_Survey extends CRM_Core_DAO { 'entity' => 'Survey', 'bao' => 'CRM_Campaign_BAO_Survey', 'localizable' => 0, + 'pseudoconstant' => [ + 'table' => 'civicrm_option_group', + 'keyColumn' => 'id', + 'labelColumn' => 'title', + 'nameColumn' => 'name', + 'condition' => 'name LIKE "civicrm_survey_%"', + ], 'add' => '3.3', ], 'bypass_confirm' => [ diff --git a/civicrm/CRM/Case/Form/ActivityToCase.php b/civicrm/CRM/Case/Form/ActivityToCase.php index e591c8405afaa1643e9115c4d6e9120499013c79..95b2d6b7f77a0e389d51ccb4a0776a2803384d16 100644 --- a/civicrm/CRM/Case/Form/ActivityToCase.php +++ b/civicrm/CRM/Case/Form/ActivityToCase.php @@ -37,11 +37,11 @@ class CRM_Case_Form_ActivityToCase extends CRM_Core_Form { switch (CRM_Utils_Request::retrieve('fileOnCaseAction', 'String')) { case 'move': - CRM_Utils_System::setTitle(ts('Move to Case')); + $this->setTitle(ts('Move to Case')); break; case 'copy': - CRM_Utils_System::setTitle(ts('Copy to Case')); + $this->setTitle(ts('Copy to Case')); break; } diff --git a/civicrm/CRM/Case/Form/ActivityView.php b/civicrm/CRM/Case/Form/ActivityView.php index 6193357e089430f6b642415b72f7f8e01d836149..771d33d498bab4753d2f1e771d80908b69d48c59 100644 --- a/civicrm/CRM/Case/Form/ActivityView.php +++ b/civicrm/CRM/Case/Form/ActivityView.php @@ -83,7 +83,7 @@ class CRM_Case_Form_ActivityView extends CRM_Core_Form { } if ($revs) { - CRM_Utils_System::setTitle(ts('Activity Revision History')); + $this->setTitle(ts('Activity Revision History')); $this->assign('revs', $revs); $this->assign('result', $viewPriorActivities); $this->assign('subject', $activitySubject); diff --git a/civicrm/CRM/Case/Form/Case.php b/civicrm/CRM/Case/Form/Case.php index 5d83a0ab82de7e6215cfda35957ea67632428adb..b22d709192e2fdf46e8a0c72a7b8106207370e60 100644 --- a/civicrm/CRM/Case/Form/Case.php +++ b/civicrm/CRM/Case/Form/Case.php @@ -164,7 +164,7 @@ class CRM_Case_Form_Case extends CRM_Core_Form { $details = CRM_Case_PseudoConstant::caseActivityType(FALSE); - CRM_Utils_System::setTitle($details[$this->_activityTypeId]['label']); + $this->setTitle($details[$this->_activityTypeId]['label']); $this->assign('activityType', $details[$this->_activityTypeId]['label']); $this->assign('activityTypeDescription', $details[$this->_activityTypeId]['description']); diff --git a/civicrm/CRM/Case/Form/CaseView.php b/civicrm/CRM/Case/Form/CaseView.php index 910282887b1417ffc383c82e015589717766d6be..2123f2f7ee281deeb68865dc63dad436f005c6ef 100644 --- a/civicrm/CRM/Case/Form/CaseView.php +++ b/civicrm/CRM/Case/Form/CaseView.php @@ -46,7 +46,7 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { } $this->assign('relatedCases', $relatedCases); $this->assign('showRelatedCases', TRUE); - CRM_Utils_System::setTitle(ts('Related Cases')); + $this->setTitle(ts('Related Cases')); return; } @@ -103,7 +103,7 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { $displayName = CRM_Contact_BAO_Contact::displayName($this->_contactID); $this->assign('displayName', $displayName); - CRM_Utils_System::setTitle($displayName . ' - ' . $caseType); + $this->setTitle($displayName . ' - ' . $caseType); $recentOther = []; if (CRM_Core_Permission::checkActionPermission('CiviCase', CRM_Core_Action::DELETE)) { @@ -251,7 +251,7 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { $activityLinks = ['' => ts('Add Activity')]; foreach ($aTypes as $type => $label) { if ($type == $emailActivityType) { - $url = CRM_Utils_System::url('civicrm/activity/email/add', + $url = CRM_Utils_System::url('civicrm/case/email/add', "action=add&context=standalone&reset=1&caseid={$this->_caseID}&atype=$type", FALSE, NULL, FALSE ); diff --git a/civicrm/CRM/Case/Form/CustomData.php b/civicrm/CRM/Case/Form/CustomData.php index 76194afb051f10dd8312ec4ab79a0d208a45b9f1..95a339c2557f75c49c9463b4f6d081c443bb85ff 100644 --- a/civicrm/CRM/Case/Form/CustomData.php +++ b/civicrm/CRM/Case/Form/CustomData.php @@ -60,7 +60,7 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { // Array contains only one item foreach ($groupTree as $groupValues) { $this->_customTitle = $groupValues['title']; - CRM_Utils_System::setTitle(ts('Edit %1', [1 => $groupValues['title']])); + $this->setTitle(ts('Edit %1', [1 => $groupValues['title']])); } $this->_defaults = []; diff --git a/civicrm/CRM/Case/Form/Task.php b/civicrm/CRM/Case/Form/Task.php index d1f318ac432223aa0732d9cf324a60d5c06a6918..b52a37bdd0a24afd68187323cb4f7a25377beef9 100644 --- a/civicrm/CRM/Case/Form/Task.php +++ b/civicrm/CRM/Case/Form/Task.php @@ -34,11 +34,7 @@ class CRM_Case_Form_Task extends CRM_Core_Form_Task { * @inheritDoc */ public function setContactIDs() { - // @todo Parameters shouldn't be needed and should be class member - // variables instead, set appropriately by each subclass. - $this->_contactIds = $this->getContactIDsFromComponent($this->_entityIds, - 'civicrm_case_contact', 'case_id' - ); + $this->_contactIds = $this->getContactIDs(); } /** @@ -68,6 +64,23 @@ class CRM_Case_Form_Task extends CRM_Core_Form_Task { return 'ORDER BY ' . implode(',', $order_array); } + /** + * Get the rows from the results to be pdf-d. + * + * @return array + */ + protected function getRows(): array { + $rows = []; + foreach ($this->_contactIds as $index => $contactID) { + $caseID = $this->getVar('_caseId'); + if (empty($caseID) && !empty($this->_caseIds[$index])) { + $caseID = $this->_caseIds[$index]; + } + $rows[] = ['contact_id' => $contactID, 'schema' => ['caseId' => $caseID, 'contactId' => $contactID]]; + } + return $rows; + } + /** * Get the name of the table for the relevant entity. * @@ -86,4 +99,28 @@ class CRM_Case_Form_Task extends CRM_Core_Form_Task { return 'case_id'; } + protected function getContactIDs(): array { + if (isset($this->_contactIds)) { + return $this->_contactIds; + } + $contactIDSFromUrl = CRM_Utils_Request::retrieve('cid', 'CommaSeparatedIntegers', $this); + if (!empty($contactIDSFromUrl)) { + return explode(',', $contactIDSFromUrl); + } + // @todo Parameters shouldn't be needed and should be class member + // variables instead, set appropriately by each subclass. + return $this->getContactIDsFromComponent($this->_entityIds, + 'civicrm_case_contact', 'case_id' + ); + } + + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + protected function getTokenSchema(): array { + return ['contactId', 'caseId']; + } + } diff --git a/civicrm/CRM/Case/Form/Task/Email.php b/civicrm/CRM/Case/Form/Task/Email.php new file mode 100644 index 0000000000000000000000000000000000000000..06a77451c1cf510fe60efeb511a41ed4aa55c91e --- /dev/null +++ b/civicrm/CRM/Case/Form/Task/Email.php @@ -0,0 +1,92 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * This class provides the functionality to email a group of contacts. + */ +class CRM_Case_Form_Task_Email extends CRM_Case_Form_Task { + use CRM_Contact_Form_Task_EmailTrait; + + /** + * Getter for isSearchContext. + * + * @return bool + */ + public function isSearchContext(): bool { + return FALSE; + } + + /** + * List available tokens for this form. + * + * @todo - this is not standard behaviour. We should either stop filtering + * case tokens by type and just remove this function (which would allow + * domain tokens to show up too) or + * resolve https://lab.civicrm.org/dev/core/-/issues/2788 + * + * @return array + * @throws \CRM_Core_Exception + */ + public function listTokens() { + $tokens = CRM_Core_SelectValues::contactTokens(); + + if ($this->getCaseID()) { + // For a single case, list tokens relevant for only that case type + $caseTypeId = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $this->getCaseID(), 'case_type_id'); + $tokens += CRM_Core_SelectValues::caseTokens($caseTypeId); + } + + return $tokens; + } + + /** + * Get the subject for the message. + * + * The case handling should possibly be on the case form..... + * + * @return string + * @throws \CRM_Core_Exception + */ + protected function getSubject():string { + $subject = $this->getSubmittedValue('subject'); + // CRM-5916: prepend case id hash to CiviCase-originating emails’ subjects + if ($this->getCaseID()) { + $hash = substr(sha1(CIVICRM_SITE_KEY . $this->getCaseID()), 0, 7); + $subject = "[case #$hash] $subject"; + } + return $subject; + } + + /** + * Get the result rows to email. + * + * @return array + * + * @throws \CRM_Core_Exception + */ + protected function getRowsForEmails(): array { + $formattedContactDetails = []; + foreach ($this->getEmails() as $details) { + $contactID = $details['contact_id']; + $index = $contactID . '::' . $details['email']; + $formattedContactDetails[$index] = $details; + $formattedContactDetails[$index]['schema'] = ['contactId' => $contactID, 'caseId' => $this->getCaseID()]; + } + return $formattedContactDetails; + } + +} diff --git a/civicrm/CRM/Case/Form/Task/PDF.php b/civicrm/CRM/Case/Form/Task/PDF.php index 65954ea27294883634a9f7e584f0ebfa79ea212c..c8ad1631617798ef0f801bcd096e4997979b9584 100644 --- a/civicrm/CRM/Case/Form/Task/PDF.php +++ b/civicrm/CRM/Case/Form/Task/PDF.php @@ -43,13 +43,6 @@ class CRM_Case_Form_Task_PDF extends CRM_Case_Form_Task { $this->setContactIDs(); } - /** - * Process the form after the input has been submitted and validated. - */ - public function postProcess() { - CRM_Contact_Form_Task_PDFLetterCommon::postProcess($this); - } - /** * List available tokens for this form. * diff --git a/civicrm/CRM/Case/Tokens.php b/civicrm/CRM/Case/Tokens.php new file mode 100644 index 0000000000000000000000000000000000000000..490453c9d14d2fe66d923fd0ee525a934ec57e50 --- /dev/null +++ b/civicrm/CRM/Case/Tokens.php @@ -0,0 +1,29 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Class CRM_Case_Tokens + * + * Generate "case.*" tokens. + */ +class CRM_Case_Tokens extends CRM_Core_EntityTokens { + + /** + * Get the entity name for api v4 calls. + * + * @return string + */ + protected function getApiEntityName(): string { + return 'Case'; + } + +} diff --git a/civicrm/CRM/Case/xml/Menu/Case.xml b/civicrm/CRM/Case/xml/Menu/Case.xml index 0d77eb9f8e282739b9975f10a4fc9565a1c3110f..91348e1c9a3d7e27a2e7028d4f0d4e250a2c13b1 100644 --- a/civicrm/CRM/Case/xml/Menu/Case.xml +++ b/civicrm/CRM/Case/xml/Menu/Case.xml @@ -135,4 +135,10 @@ <path>civicrm/ajax/get-cases</path> <page_callback>CRM_Case_Page_AJAX::getCases</page_callback> </item> + <item> + <path>civicrm/case/email/add</path> + <path_arguments>action=add,task=email</path_arguments> + <title>Email</title> + <page_callback>CRM_Case_Form_Task_Email</page_callback> + </item> </menu> diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index cb855c0b46db49c3d32442f2ecc45e61d06f656b..ab2850c07b34a2545485538de71e6f19e79b0934 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { +class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact implements Civi\Test\HookInterface { /** * SQL function used to format the phone_numeric field via trigger. @@ -3511,53 +3511,31 @@ LEFT JOIN civicrm_address ON ( civicrm_address.contact_id = civicrm_contact.id ) } /** - * Delete a contact-related object that has an 'is_primary' field. - * - * Ensures that is_primary gets assigned to another object if available - * Also calls pre/post hooks - * - * @param string $type - * @param int $id - * - * @return bool + * Event fired after modifying any entity. + * @param \Civi\Core\Event\PostEvent $event */ - public static function deleteObjectWithPrimary($type, $id) { - if (!$id || !is_numeric($id)) { - return FALSE; - } - $daoName = "CRM_Core_DAO_$type"; - $obj = new $daoName(); - $obj->id = $id; - $obj->find(); - - if ($obj->fetch()) { - CRM_Utils_Hook::pre('delete', $type, $id); - $contactId = $obj->contact_id; - $obj->delete(); - } - else { - return FALSE; - } - // is_primary is only relavent if this field belongs to a contact - if ($contactId) { - $dao = new $daoName(); - $dao->contact_id = $contactId; + public static function on_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + // Handle deleting a related entity with is_primary + $hasPrimary = ['Address', 'Email', 'IM', 'OpenID', 'Phone']; + if ( + $event->action === 'delete' && $event->id && + in_array($event->entity, $hasPrimary) && + !empty($event->object->is_primary) && + !empty($event->object->contact_id) + ) { + $daoClass = CRM_Core_DAO_AllCoreTables::getFullName($event->entity); + $dao = new $daoClass(); + $dao->contact_id = $event->object->contact_id; $dao->is_primary = 1; // Pick another record to be primary (if one isn't already) if (!$dao->find(TRUE)) { $dao->is_primary = 0; - $dao->find(); - if ($dao->fetch()) { - $dao->is_primary = 1; - $dao->save(); - if ($type === 'Email') { - CRM_Core_BAO_UFMatch::updateUFName($dao->contact_id); - } + if ($dao->find(TRUE)) { + $baoClass = CRM_Core_DAO_AllCoreTables::getBAOClassName($daoClass); + $baoClass::writeRecord(['id' => $dao->id, 'is_primary' => 1]); } } } - CRM_Utils_Hook::post('delete', $type, $id, $obj); - return TRUE; } /** diff --git a/civicrm/CRM/Contact/BAO/ContactType.php b/civicrm/CRM/Contact/BAO/ContactType.php index 790fe70b6a229baa1c1c5a1c0a81278456cbfc87..3b7cc388701b96ca676eafe4a5930ffbdb657889 100644 --- a/civicrm/CRM/Contact/BAO/ContactType.php +++ b/civicrm/CRM/Contact/BAO/ContactType.php @@ -9,8 +9,6 @@ +--------------------------------------------------------------------+ */ -use Civi\Api4\ContactType; - /** * * @package CRM @@ -56,8 +54,6 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { /** * Retrieve basic contact type information. * - * @todo - call getAllContactTypes & return filtered results. - * * @param bool $includeInactive * * @return array @@ -67,15 +63,9 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { * @throws \Civi\API\Exception\UnauthorizedException */ public static function basicTypeInfo($includeInactive = FALSE) { - $cacheKey = 'CRM_CT_BTI_' . (int) $includeInactive; - if (!Civi::cache('contactTypes')->has($cacheKey)) { - $contactType = ContactType::get(FALSE)->setSelect(['*'])->addWhere('parent_id', 'IS NULL'); - if ($includeInactive === FALSE) { - $contactType->addWhere('is_active', '=', 1); - } - Civi::cache('contactTypes')->set($cacheKey, (array) $contactType->execute()->indexBy('name')); - } - return Civi::cache('contactTypes')->get($cacheKey); + return array_filter(self::getAllContactTypes(), function($type) use ($includeInactive) { + return empty($type['parent']) && ($includeInactive || $type['is_active']); + }); } /** @@ -183,8 +173,7 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { } /** - * - * retrieve list of all types i.e basic + subtypes. + * Retrieve list of all types i.e basic + subtypes. * * @param bool $all * @@ -206,7 +195,6 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { * * @return array * Array of basic types + all subtypes. - * @throws \API_Exception */ public static function contactTypeInfo($all = FALSE) { $contactTypes = self::getAllContactTypes(); @@ -227,7 +215,7 @@ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { * @param null $typeName * @param null $delimiter * - * @return array + * @return array|string * Array of basictypes with name as 'built-in name' and 'label' as value * @throws \API_Exception */ @@ -360,7 +348,6 @@ AND ( p.is_active = 1 OR p.id IS NULL ) * * @param array|string $subType contact subType. * @return array|string - * basicTypes. */ public static function getBasicType($subType) { // @todo - use Cache class - ie like Civi::cache('contactTypes') @@ -701,7 +688,6 @@ WHERE name = %1'; * @return bool */ public static function hasRelationships($contactId, $contactType) { - $subTypeClause = NULL; if (self::isaSubType($contactType)) { $subType = $contactType; $contactType = self::getBasicType($subType); @@ -858,8 +844,10 @@ WHERE ($subtypeClause)"; /** * Get all contact types, leveraging caching. * - * @return array + * Note, this function is used within APIv4 Entity.get, so must use a + * SQL query instead of calling APIv4 to avoid an infinite loop. * + * @return array * @throws \API_Exception */ protected static function getAllContactTypes() { @@ -867,14 +855,19 @@ WHERE ($subtypeClause)"; $cacheKey = 'all_' . $GLOBALS['tsLocale']; $contactTypes = $cache->get($cacheKey); if ($contactTypes === NULL) { - $contactTypes = (array) ContactType::get(FALSE) - ->setSelect(['id', 'name', 'label', 'description', 'is_active', 'is_reserved', 'image_URL', 'parent_id', 'parent_id:name', 'parent_id:label']) - ->execute()->indexBy('name'); - + $query = CRM_Utils_SQL_Select::from('civicrm_contact_type'); + $dao = CRM_Core_DAO::executeQuery($query->toSQL()); + $contactTypes = array_column($dao->fetchAll(), NULL, 'name'); + $name_options = self::buildOptions('parent_id', 'validate'); + $label_options = self::buildOptions('parent_id', 'get'); foreach ($contactTypes as $id => $contactType) { - $contactTypes[$id]['parent'] = $contactType['parent_id:name']; - $contactTypes[$id]['parent_label'] = $contactType['parent_id:label']; - unset($contactTypes[$id]['parent_id:name'], $contactTypes[$id]['parent_id:label']); + $contactTypes[$id]['parent'] = $contactType['parent_id'] ? $name_options[$contactType['parent_id']] : NULL; + $contactTypes[$id]['parent_label'] = $contactType['parent_id'] ? $label_options[$contactType['parent_id']] : NULL; + // Cast int/bool types. + $contactTypes[$id]['id'] = (int) $contactType['id']; + $contactTypes[$id]['parent_id'] = $contactType['parent_id'] ? (int) $contactType['parent_id'] : NULL; + $contactTypes[$id]['is_active'] = (bool) $contactType['is_active']; + $contactTypes[$id]['is_reserved'] = (bool) $contactType['is_reserved']; } $cache->set($cacheKey, $contactTypes); } diff --git a/civicrm/CRM/Contact/BAO/GroupContactCache.php b/civicrm/CRM/Contact/BAO/GroupContactCache.php index 6b44f38f5e45657c845a75ea2730a612263267f6..4f77fe27bc6a8f58ddaf1a7f67d4a6e86616a552 100644 --- a/civicrm/CRM/Contact/BAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/BAO/GroupContactCache.php @@ -210,33 +210,20 @@ WHERE id IN ( $groupIDs ) } /** - * Function to clear group contact cache and reset the corresponding - * group's cache and refresh date + * Function to clear group contact cache * - * @param int $groupID + * @param array $groupIDs * */ - protected static function clearGroupContactCache($groupID): void { - $transaction = new CRM_Core_Transaction(); - $query = " + protected static function clearGroupContactCache($groupIDs): void { + $clearCacheQuery = ' DELETE g FROM civicrm_group_contact_cache g - WHERE g.group_id = %1 "; - - $update = " - UPDATE civicrm_group g - SET cache_date = null - WHERE id = %1 "; - + WHERE g.group_id IN (%1) '; $params = [ - 1 => [$groupID, 'Integer'], + 1 => [implode(',', $groupIDs), 'CommaSeparatedIntegers'], ]; - - CRM_Core_DAO::executeQuery($query, $params); - // also update the cache_date for these groups - CRM_Core_DAO::executeQuery($update, $params); - - $transaction->commit(); + CRM_Core_DAO::executeQuery($clearCacheQuery, $params); } /** @@ -248,6 +235,10 @@ WHERE id IN ( $groupIDs ) * clear. */ protected static function flushCaches() { + if (!CRM_Core_Config::isPermitCacheFlushMode()) { + return; + } + try { $lock = self::getLockForRefresh(); } @@ -255,19 +246,32 @@ WHERE id IN ( $groupIDs ) // Someone else is kindly doing the refresh for us right now. return; } + + // Get the list of expired smart groups that may need flushing $params = [1 => [self::getCacheInvalidDateTime(), 'String']]; - $groupsDAO = CRM_Core_DAO::executeQuery("SELECT id FROM civicrm_group WHERE cache_date <= %1", $params); + $groupsThatMayNeedToBeFlushedSQL = "SELECT id FROM civicrm_group WHERE (saved_search_id IS NOT NULL OR children <> '') AND (cache_date <= %1 OR cache_date IS NULL)"; + $groupsDAO = CRM_Core_DAO::executeQuery($groupsThatMayNeedToBeFlushedSQL, $params); $expiredGroups = []; while ($groupsDAO->fetch()) { $expiredGroups[] = $groupsDAO->id; } - if (!empty($expiredGroups)) { - $expiredGroups = implode(',', $expiredGroups); - CRM_Core_DAO::executeQuery("DELETE FROM civicrm_group_contact_cache WHERE group_id IN ({$expiredGroups})"); + if (empty($expiredGroups)) { + // There are no expired smart groups to flush + return; + } + + $expiredGroupsCSV = implode(',', $expiredGroups); + $flushSQLParams = [1 => [$expiredGroupsCSV, 'CommaSeparatedIntegers']]; + // Now check if we actually have any entries in the smart groups to flush + $groupsHaveEntriesToFlushSQL = 'SELECT group_id FROM civicrm_group_contact_cache gc WHERE group_id IN (%1) LIMIT 1'; + $groupsHaveEntriesToFlush = (bool) CRM_Core_DAO::singleValueQuery($groupsHaveEntriesToFlushSQL, $flushSQLParams); + + if ($groupsHaveEntriesToFlush) { + CRM_Core_DAO::executeQuery("DELETE FROM civicrm_group_contact_cache WHERE group_id IN (%1)", [1 => [$expiredGroupsCSV, 'CommaSeparatedIntegers']]); // Clear these out without resetting them because we are not building caches here, only clearing them, // so the state is 'as if they had never been built'. - CRM_Core_DAO::executeQuery("UPDATE civicrm_group SET cache_date = NULL WHERE id IN ({$expiredGroups})"); + CRM_Core_DAO::executeQuery("UPDATE civicrm_group SET cache_date = NULL WHERE id IN (%1)", [1 => [$expiredGroupsCSV, 'CommaSeparatedIntegers']]); } $lock->release(); } @@ -381,6 +385,7 @@ WHERE id IN ( $groupIDs ) ->setCategory('gccache') ->setMemory(); self::buildGroupContactTempTable([$groupID], $groupContactsTempTable); + self::clearGroupContactCache([$groupID]); self::updateCacheFromTempTable($groupContactsTempTable, [$groupID]); self::releaseGroupLocks([$groupID]); } @@ -724,6 +729,7 @@ ORDER BY gc.contact_id, g.children // Also - if we switched to the 'triple union' approach described above // we could throw a try-catch around this line since best-effort would // be good enough & potentially improve user experience. + self::clearGroupContactCache($lockedGroups); self::updateCacheFromTempTable($groupContactsTempTable, $lockedGroups); self::releaseGroupLocks($lockedGroups); } @@ -786,18 +792,6 @@ ORDER BY gc.contact_id, g.children private static function updateCacheFromTempTable(CRM_Utils_SQL_TempTable $groupContactsTempTable, array $groupIDs): void { $tempTable = $groupContactsTempTable->getName(); - // Don't call clearGroupContactCache as we don't want to clear the cache dates - // The will get updated by updateCacheTime() below and not clearing the dates reduces - // the chance that loadAll() will try and rebuild at the same time. - $clearCacheQuery = ' - DELETE g - FROM civicrm_group_contact_cache g - WHERE g.group_id IN (%1) '; - $params = [ - 1 => [implode(',', $groupIDs), 'CommaSeparatedIntegers'], - ]; - CRM_Core_DAO::executeQuery($clearCacheQuery, $params); - CRM_Core_DAO::executeQuery( "INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id) SELECT DISTINCT contact_id, group_id FROM $tempTable @@ -853,8 +847,6 @@ ORDER BY gc.contact_id, g.children FROM civicrm_group_contact WHERE civicrm_group_contact.status = 'Added' AND civicrm_group_contact.group_id = $groupID "; - self::clearGroupContactCache($groupID); - foreach ($contactQueries as $contactQuery) { CRM_Core_DAO::executeQuery("INSERT IGNORE INTO $tempTableName (group_id, contact_id) {$contactQuery}"); } diff --git a/civicrm/CRM/Contact/Form/Contact.php b/civicrm/CRM/Contact/Form/Contact.php index ef35118d3f47559ae61d59ae4fe24b196e671059..2e6b51d888273b6a021231a0442212589a4076a6 100644 --- a/civicrm/CRM/Contact/Form/Contact.php +++ b/civicrm/CRM/Contact/Form/Contact.php @@ -180,7 +180,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { ); $typeLabel = implode(' / ', $typeLabel); - CRM_Utils_System::setTitle(ts('New %1', [1 => $typeLabel])); + $this->setTitle(ts('New %1', [1 => $typeLabel])); $session->pushUserContext(CRM_Utils_System::url('civicrm/dashboard', 'reset=1')); $this->_contactId = NULL; } @@ -221,7 +221,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { } // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container - CRM_Utils_System::setTitle($displayName); + $this->setTitle($displayName); $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this); $qfKey = CRM_Utils_Request::retrieve('key', 'String', $this); diff --git a/civicrm/CRM/Contact/Form/CustomData.php b/civicrm/CRM/Contact/Form/CustomData.php index 05e3bd1ff11526df244838877c8102477369c9ea..a54431bea5daeadfe76de3821a41e0826c811eaa 100644 --- a/civicrm/CRM/Contact/Form/CustomData.php +++ b/civicrm/CRM/Contact/Form/CustomData.php @@ -112,15 +112,15 @@ class CRM_Contact_Form_CustomData extends CRM_Core_Form { $groupTitle = CRM_Core_BAO_CustomGroup::getTitle($this->_groupID); switch ($mode) { case 'add': - CRM_Utils_System::setTitle(ts('Add %1', [1 => $groupTitle])); + $this->setTitle(ts('Add %1', [1 => $groupTitle])); break; case 'edit': - CRM_Utils_System::setTitle(ts('Edit %1', [1 => $groupTitle])); + $this->setTitle(ts('Edit %1', [1 => $groupTitle])); break; case 'copy': - CRM_Utils_System::setTitle(ts('Copy %1', [1 => $groupTitle])); + $this->setTitle(ts('Copy %1', [1 => $groupTitle])); break; } @@ -138,7 +138,7 @@ class CRM_Contact_Form_CustomData extends CRM_Core_Form { $this->assign('contact_type', $this->_contactType); $this->assign('contact_subtype', $this->_contactSubType); list($displayName, $contactImage) = CRM_Contact_BAO_Contact::getDisplayAndImage($this->_tableID); - CRM_Utils_System::setTitle($displayName, $contactImage . ' ' . $displayName); + $this->setTitle($displayName, $contactImage . ' ' . $displayName); // when custom data is included in this page if (!empty($_POST['hidden_custom'])) { diff --git a/civicrm/CRM/Contact/Form/DedupeRules.php b/civicrm/CRM/Contact/Form/DedupeRules.php index 3e8e1e70de01fc1d204c51401baafa46cbe94806..beef61afbf9c55884d89698e3c5259c416592afb 100644 --- a/civicrm/CRM/Contact/Form/DedupeRules.php +++ b/civicrm/CRM/Contact/Form/DedupeRules.php @@ -298,7 +298,7 @@ UPDATE civicrm_dedupe_rule_group //need to clear cache of deduped contacts //based on the previous rule - $cacheKey = "merge {$this->_contactType}_{$this->_rgid}_%"; + $cacheKey = "merge_{$this->_contactType}_{$this->_rgid}_%"; CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey); diff --git a/civicrm/CRM/Contact/Form/Domain.php b/civicrm/CRM/Contact/Form/Domain.php index 17b36a9229825292edeacd36b64c7b9cb3a91ad3..c9c31c51031a821092f07c4d1c90c0478a7843b7 100644 --- a/civicrm/CRM/Contact/Form/Domain.php +++ b/civicrm/CRM/Contact/Form/Domain.php @@ -71,7 +71,7 @@ class CRM_Contact_Form_Domain extends CRM_Core_Form { } public function preProcess() { - CRM_Utils_System::setTitle(ts('Organization Address and Contact Info')); + $this->setTitle(ts('Organization Address and Contact Info')); $breadCrumbPath = CRM_Utils_System::url('civicrm/admin', 'reset=1'); CRM_Utils_System::appendBreadCrumb(ts('Administer CiviCRM'), $breadCrumbPath); $session = CRM_Core_Session::singleton(); diff --git a/civicrm/CRM/Contact/Form/Merge.php b/civicrm/CRM/Contact/Form/Merge.php index f7854fb154f73e626f8703bd8c6d2f9bb4e8a67e..a7394d6fdff9b07439c06ab71f60b019848b3356 100644 --- a/civicrm/CRM/Contact/Form/Merge.php +++ b/civicrm/CRM/Contact/Form/Merge.php @@ -248,7 +248,7 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { public function buildQuickForm() { $this->unsavedChangesWarn = FALSE; - CRM_Utils_System::setTitle(ts('Merge %1 contacts', [1 => $this->_contactType])); + $this->setTitle(ts('Merge %1 contacts', [1 => $this->_contactType])); $buttons = []; $buttons[] = [ diff --git a/civicrm/CRM/Contact/Form/RelatedContact.php b/civicrm/CRM/Contact/Form/RelatedContact.php index 3305b20c045ca1263bdc48756d6c520cec5cd233..68f64b70864c38ac4a4eb2f93a64419cdc5afe87 100644 --- a/civicrm/CRM/Contact/Form/RelatedContact.php +++ b/civicrm/CRM/Contact/Form/RelatedContact.php @@ -74,7 +74,7 @@ class CRM_Contact_Form_RelatedContact extends CRM_Core_Form { } list($displayName, $contactImage) = CRM_Contact_BAO_Contact::getDisplayAndImage($this->_contactId); - CRM_Utils_System::setTitle($displayName, $contactImage . ' ' . $displayName); + $this->setTitle($displayName, $contactImage . ' ' . $displayName); } else { CRM_Core_Error::statusBounce(ts('Could not get a contact_id and/or contact_type')); diff --git a/civicrm/CRM/Contact/Form/Relationship.php b/civicrm/CRM/Contact/Form/Relationship.php index 2be985d27a538b81718e4d55b35d9e46f04d52ff..6bbbdf3a91c8580521f03ab87659ae87cef8fa48 100644 --- a/civicrm/CRM/Contact/Form/Relationship.php +++ b/civicrm/CRM/Contact/Form/Relationship.php @@ -139,19 +139,19 @@ class CRM_Contact_Form_Relationship extends CRM_Core_Form { // Set page title based on action switch ($this->_action) { case CRM_Core_Action::VIEW: - CRM_Utils_System::setTitle(ts('View Relationship for %1', [1 => $this->_display_name_a])); + $this->setTitle(ts('View Relationship for %1', [1 => $this->_display_name_a])); break; case CRM_Core_Action::ADD: - CRM_Utils_System::setTitle(ts('Add Relationship for %1', [1 => $this->_display_name_a])); + $this->setTitle(ts('Add Relationship for %1', [1 => $this->_display_name_a])); break; case CRM_Core_Action::UPDATE: - CRM_Utils_System::setTitle(ts('Edit Relationship for %1', [1 => $this->_display_name_a])); + $this->setTitle(ts('Edit Relationship for %1', [1 => $this->_display_name_a])); break; case CRM_Core_Action::DELETE: - CRM_Utils_System::setTitle(ts('Delete Relationship for %1', [1 => $this->_display_name_a])); + $this->setTitle(ts('Delete Relationship for %1', [1 => $this->_display_name_a])); break; } diff --git a/civicrm/CRM/Contact/Form/Search.php b/civicrm/CRM/Contact/Form/Search.php index d41d16bb6cd8d47357c7d7fd338dab96058b8b51..1345c233094d99becf1c01bd21f1d09aeeaa603b 100644 --- a/civicrm/CRM/Contact/Form/Search.php +++ b/civicrm/CRM/Contact/Form/Search.php @@ -436,7 +436,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { } // Set dynamic page title for 'Show Members of Group' - CRM_Utils_System::setTitle(ts('Contacts in Group: %1', [1 => $this->_group[$this->_groupID]])); + $this->setTitle(ts('Contacts in Group: %1', [1 => $this->_group[$this->_groupID]])); } $group_contact_status = []; @@ -464,7 +464,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { } // Set dynamic page title for 'Add Members Group' - CRM_Utils_System::setTitle(ts('Add to Group: %1', [1 => $this->_group[$this->_amtgID]])); + $this->setTitle(ts('Add to Group: %1', [1 => $this->_group[$this->_amtgID]])); // also set the group title and freeze the action task with Add Members to Group $groupValues = ['id' => $this->_amtgID, 'title' => $this->_group[$this->_amtgID]]; $this->assign_by_ref('group', $groupValues); diff --git a/civicrm/CRM/Contact/Form/Task.php b/civicrm/CRM/Contact/Form/Task.php index 67b7f2be125fd22f4d7af54e2dff2669f4164618..2a2ad62c635d19e02ec0cdd50ffba073ede21c01 100644 --- a/civicrm/CRM/Contact/Form/Task.php +++ b/civicrm/CRM/Contact/Form/Task.php @@ -137,7 +137,7 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { // since we don't store all contacts in prevnextcache, when user selects "all" use query to retrieve contacts // rather than prevnext cache table for most of the task actions except export where we rebuild query to fetch // final result set - $allCids[$cacheKey] = self::getContactIds($form); + $allCids[$cacheKey] = self::legacyGetContactIds($form); $form->_contactIds = []; if (empty($form->_contactIds)) { @@ -222,11 +222,16 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { * - custom search (FIXME: does this still apply to custom search?). * When we call this function we are not using the prev/next cache * + * We've started to try to move away from these functions + * being static. Probably we need to convert the export forms + * to use a trait based approach. For now this is renamed to + * permit the use of a non-static function with this name + * * @param $form CRM_Core_Form * * @return array $contactIds */ - public static function getContactIds($form) { + protected static function legacyGetContactIds($form) { // need to perform action on all contacts // fire the query again and get the contact id's + display name $sortID = NULL; diff --git a/civicrm/CRM/Contact/Form/Task/AddToGroup.php b/civicrm/CRM/Contact/Form/Task/AddToGroup.php index b1964c7362bff639006e0a4d631500ebc3cad8bc..633985629bd9bd3e020700c6109f7f39015c0a47 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToGroup.php +++ b/civicrm/CRM/Contact/Form/Task/AddToGroup.php @@ -53,6 +53,8 @@ class CRM_Contact_Form_Task_AddToGroup extends CRM_Contact_Form_Task { $this->_context = $this->get('context'); $this->_id = $this->get('amtgID'); + + CRM_Custom_Form_CustomData::preProcess($this, NULL, NULL, 1, 'Group', $this->_id); } /** @@ -115,10 +117,12 @@ class CRM_Contact_Form_Task_AddToGroup extends CRM_Contact_Form_Task { // Set dynamic page title for 'Add Members Group (confirm)' if ($this->_id) { - CRM_Utils_System::setTitle(ts('Add Contacts: %1', [1 => $this->_title])); + $this->setTitle(ts('Add Contacts: %1', [1 => $this->_title])); } else { - CRM_Utils_System::setTitle(ts('Add Contacts to A Group')); + $this->setTitle(ts('Add Contacts to A Group')); + //build custom data + CRM_Custom_Form_CustomData::buildQuickForm($this); } $this->addDefaultButtons(ts('Add to Group')); @@ -139,6 +143,7 @@ class CRM_Contact_Form_Task_AddToGroup extends CRM_Contact_Form_Task { } $defaults['group_option'] = 0; + $defaults += CRM_Custom_Form_CustomData::setDefaultValues($this); return $defaults; } @@ -183,6 +188,7 @@ class CRM_Contact_Form_Task_AddToGroup extends CRM_Contact_Form_Task { $groupParams['visibility'] = "User and User Admin Only"; $groupParams['group_type'] = array_keys($params['group_type'] ?? []); $groupParams['is_active'] = 1; + $groupParams['custom'] = CRM_Core_BAO_CustomField::postProcess($params, $this->_id, 'Group'); $createdGroup = CRM_Contact_BAO_Group::create($groupParams); $groupID = $createdGroup->id; diff --git a/civicrm/CRM/Contact/Form/Task/AddToParentClass.php b/civicrm/CRM/Contact/Form/Task/AddToParentClass.php index 42caaba86a218d888d0ff13c8d06ecf23a22be0c..194c22bd473b02a55bb44ca63a87d515cf4445d7 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToParentClass.php +++ b/civicrm/CRM/Contact/Form/Task/AddToParentClass.php @@ -30,7 +30,7 @@ class CRM_Contact_Form_Task_AddToParentClass extends CRM_Contact_Form_Task { public function buildQuickForm() { $contactType = $this->get('contactType'); - CRM_Utils_System::setTitle(ts('Add Contacts to %1', [1 => $contactType])); + $this->setTitle(ts('Add Contacts to %1', [1 => $contactType])); $this->addElement('text', 'name', ts('Find Target %1', [1 => $contactType])); $this->add('select', diff --git a/civicrm/CRM/Contact/Form/Task/Batch.php b/civicrm/CRM/Contact/Form/Task/Batch.php index c213001a72ee04b8e5b1762e0b708a19b022881a..f9effd484995524fba060aecede6925c87841617 100644 --- a/civicrm/CRM/Contact/Form/Task/Batch.php +++ b/civicrm/CRM/Contact/Form/Task/Batch.php @@ -69,7 +69,7 @@ class CRM_Contact_Form_Task_Batch extends CRM_Contact_Form_Task { CRM_Core_Error::statusBounce(ts('ufGroupId is missing')); } $this->_title = ts('Update multiple contacts') . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); - CRM_Utils_System::setTitle($this->_title); + $this->setTitle($this->_title); $this->addDefaultButtons(ts('Save')); $this->_fields = CRM_Core_BAO_UFGroup::getFields($ufGroupId, FALSE, CRM_Core_Action::VIEW); diff --git a/civicrm/CRM/Contact/Form/Task/Delete.php b/civicrm/CRM/Contact/Form/Task/Delete.php index 9fac47037a1875e4fc6130234d28a5c4f4324a12..3f12db81402d50529eb12496bdc7cd12c73bcc40 100644 --- a/civicrm/CRM/Contact/Form/Task/Delete.php +++ b/civicrm/CRM/Contact/Form/Task/Delete.php @@ -63,7 +63,7 @@ class CRM_Contact_Form_Task_Delete extends CRM_Contact_Form_Task { $this->assign('restore', $this->_restore); if ($this->_restore) { - CRM_Utils_System::setTitle(ts('Restore Contact')); + $this->setTitle(ts('Restore Contact')); } if ($cid) { diff --git a/civicrm/CRM/Contact/Form/Task/Email.php b/civicrm/CRM/Contact/Form/Task/Email.php index 911a060adb0d7655a80dd022bf56ec703384d927..072ff37d7895635253b22e321280d51586bc73a8 100644 --- a/civicrm/CRM/Contact/Form/Task/Email.php +++ b/civicrm/CRM/Contact/Form/Task/Email.php @@ -58,10 +58,10 @@ class CRM_Contact_Form_Task_Email extends CRM_Contact_Form_Task { $displayName[] = CRM_Contact_BAO_Contact::displayName($val); } - CRM_Utils_System::setTitle(implode(',', $displayName) . ' - ' . ts('Email')); + $this->setTitle(implode(',', $displayName) . ' - ' . ts('Email')); } else { - CRM_Utils_System::setTitle(ts('New Email')); + $this->setTitle(ts('New Email')); } if ($this->_context === 'search') { $this->_single = TRUE; @@ -82,22 +82,4 @@ class CRM_Contact_Form_Task_Email extends CRM_Contact_Form_Task { */ public function setContactIDs() {} - /** - * List available tokens for this form. - * - * @return array - * @throws \CRM_Core_Exception - */ - public function listTokens() { - $tokens = CRM_Core_SelectValues::contactTokens(); - - if (isset($this->_caseId) || isset($this->_caseIds)) { - // For a single case, list tokens relevant for only that case type - $caseTypeId = isset($this->_caseId) ? CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $this->_caseId, 'case_type_id') : NULL; - $tokens += CRM_Core_SelectValues::caseTokens($caseTypeId); - } - - return $tokens; - } - } diff --git a/civicrm/CRM/Contact/Form/Task/EmailTrait.php b/civicrm/CRM/Contact/Form/Task/EmailTrait.php index 2e78e168a420e3f15e2564d9ec803b99bcbb91d3..743edf6173ed7a9e083df740f9ea53ae5a35e18b 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailTrait.php +++ b/civicrm/CRM/Contact/Form/Task/EmailTrait.php @@ -37,6 +37,13 @@ trait CRM_Contact_Form_Task_EmailTrait { */ public $_templates; + /** + * Email addresses to send to. + * + * @var array + */ + protected $emails = []; + /** * Store "to" contact details. * @var array @@ -112,7 +119,6 @@ trait CRM_Contact_Form_Task_EmailTrait { * @throws \API_Exception */ protected function traitPreProcess() { - $this->preProcessFromAddress(); if ($this->isSearchContext()) { // Currently only the contact email form is callable outside search context. parent::preProcess(); @@ -124,40 +130,6 @@ trait CRM_Contact_Form_Task_EmailTrait { } } - /** - * Pre Process Form Addresses to be used in Quickform - * - * @throws \API_Exception - * @throws \CRM_Core_Exception - */ - protected function preProcessFromAddress(): void { - $form = $this; - $form->_emails = []; - - // @TODO remove these line and to it somewhere more appropriate. Currently some classes (e.g Case - // are having to re-write contactIds afterwards due to this inappropriate variable setting - // If we don't have any contact IDs, use the logged in contact ID - $form->_contactIds = $form->_contactIds ?: [CRM_Core_Session::getLoggedInContactID()]; - - $fromEmailValues = CRM_Core_BAO_Email::getFromEmail(); - - if (empty($fromEmailValues)) { - CRM_Core_Error::statusBounce(ts('Your user record does not have a valid email address and no from addresses have been configured.')); - } - - $form->_emails = $fromEmailValues; - $defaults = []; - $form->_fromEmails = $fromEmailValues; - if (is_numeric(key($form->_fromEmails))) { - $emailID = (int) key($form->_fromEmails); - $defaults = CRM_Core_BAO_Email::getEmailSignatureDefaults($emailID); - } - if (!Civi::settings()->get('allow_mail_from_logged_in_contact')) { - $defaults['from_email_address'] = current(CRM_Core_BAO_Domain::getNameAndEmail(FALSE, TRUE)); - } - $form->setDefaults($defaults); - } - /** * Build the form object. * @@ -175,6 +147,11 @@ trait CRM_Contact_Form_Task_EmailTrait { if ($cid) { $this->_contactIds = explode(',', $cid); } + // The default in CRM_Core_Form_Task is null, but changing it there gives + // errors later. + if (is_null($this->_contactIds)) { + $this->_contactIds = []; + } if (count($this->_contactIds) > 1) { $this->_single = FALSE; } @@ -183,7 +160,7 @@ trait CRM_Contact_Form_Task_EmailTrait { $emailAttributes = [ 'class' => 'huge', ]; - $to = $this->add('text', 'to', ts('To'), $emailAttributes, TRUE); + $this->add('text', 'to', ts('To'), $emailAttributes, TRUE); $this->addEntityRef('cc_id', ts('CC'), [ 'entity' => 'Email', @@ -195,9 +172,6 @@ trait CRM_Contact_Form_Task_EmailTrait { 'multiple' => TRUE, ]); - if ($to->getValue()) { - $this->_toContactIds = $this->_contactIds = []; - } $setDefaults = TRUE; if (property_exists($this, '_context') && $this->_context === 'standalone') { $setDefaults = FALSE; @@ -205,27 +179,14 @@ trait CRM_Contact_Form_Task_EmailTrait { $this->_allContactIds = $this->_toContactIds = $this->_contactIds; - if ($to->getValue()) { - foreach ($this->getEmails($to) as $value) { - $contactId = $value['contact_id']; - $email = $value['email']; - if ($contactId) { - $this->_contactIds[] = $this->_toContactIds[] = $contactId; - $this->_toContactEmails[] = $email; - $this->_allContactIds[] = $contactId; - } - } - $setDefaults = TRUE; - } - //get the group of contacts as per selected by user in case of Find Activities if (!empty($this->_activityHolderIds)) { $contact = $this->get('contacts'); - $this->_allContactIds = $this->_contactIds = $contact; + $this->_allContactIds = $this->_toContactIds = $this->_contactIds = $contact; } // check if we need to setdefaults and check for valid contact emails / communication preferences - if (is_array($this->_allContactIds) && $setDefaults) { + if (!empty($this->_allContactIds) && $setDefaults) { // get the details for all selected contacts ( to, cc and bcc contacts ) $allContactDetails = civicrm_api3('Contact', 'get', [ 'id' => ['IN' => $this->_allContactIds], @@ -269,7 +230,7 @@ trait CRM_Contact_Form_Task_EmailTrait { $this->add('text', 'subject', ts('Subject'), ['size' => 50, 'maxlength' => 254], TRUE); - $this->add('select', 'from_email_address', ts('From'), $this->_fromEmails, TRUE); + $this->add('select', 'from_email_address', ts('From'), $this->getFromEmails(), TRUE); CRM_Mailing_BAO_Mailing::commonCompose($this); @@ -277,31 +238,9 @@ trait CRM_Contact_Form_Task_EmailTrait { CRM_Core_BAO_File::buildAttachment($this, NULL); if ($this->_single) { - // also fix the user context stack - if ($this->getCaseID()) { - $ccid = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseContact', $this->_caseId, - 'contact_id', 'case_id' - ); - $url = CRM_Utils_System::url('civicrm/contact/view/case', - "&reset=1&action=view&cid={$ccid}&id=" . $this->getCaseID() - ); - } - elseif ($this->_context) { - $url = CRM_Utils_System::url('civicrm/dashboard', 'reset=1'); - } - else { - $url = CRM_Utils_System::url('civicrm/contact/view', - "&show=1&action=browse&cid={$this->_contactIds[0]}&selectedChild=activity" - ); - } - - $session = CRM_Core_Session::singleton(); - $session->replaceUserContext($url); - $this->addDefaultButtons(ts('Send Email'), 'upload', 'cancel'); - } - else { - $this->addDefaultButtons(ts('Send Email'), 'upload'); + CRM_Core_Session::singleton()->replaceUserContext($this->getRedirectUrl()); } + $this->addDefaultButtons(ts('Send Email'), 'upload', 'cancel'); $fields = [ 'followup_assignee_contact_id' => [ @@ -352,9 +291,31 @@ trait CRM_Contact_Form_Task_EmailTrait { CRM_Campaign_BAO_Campaign::addCampaign($this); $this->addFormRule([__CLASS__, 'saveTemplateFormRule'], $this); + $this->addFormRule([__CLASS__, 'deprecatedTokensFormRule'], $this); CRM_Core_Resources::singleton()->addScriptFile('civicrm', 'templates/CRM/Contact/Form/Task/EmailCommon.js', 0, 'html-header'); } + /** + * Set relevant default values. + * + * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public function setDefaultValues(): array { + $defaults = parent::setDefaultValues() ?: []; + $fromEmails = $this->getFromEmails(); + if (is_numeric(key($fromEmails))) { + $emailID = (int) key($fromEmails); + $defaults = CRM_Core_BAO_Email::getEmailSignatureDefaults($emailID); + } + if (!Civi::settings()->get('allow_mail_from_logged_in_contact')) { + $defaults['from_email_address'] = current(CRM_Core_BAO_Domain::getNameAndEmail(FALSE, TRUE)); + } + return $defaults; + } + /** * Process the form after the input has been submitted and validated. * @@ -365,8 +326,6 @@ trait CRM_Contact_Form_Task_EmailTrait { */ public function postProcess() { $this->bounceIfSimpleMailLimitExceeded(count($this->_contactIds)); - - // check and ensure that $formValues = $this->controller->exportValues($this->getName()); $this->submit($formValues); } @@ -377,7 +336,7 @@ trait CRM_Contact_Form_Task_EmailTrait { * @param int $count * The number of emails the user is attempting to send */ - protected function bounceIfSimpleMailLimitExceeded($count) { + protected function bounceIfSimpleMailLimitExceeded($count): void { $limit = Civi::settings()->get('simple_mail_limit'); if ($count > $limit) { CRM_Core_Error::statusBounce(ts('Please do not use this task to send a lot of emails (greater than %1). Many countries have legal requirements when sending bulk emails and the CiviMail framework has opt out functionality and domain tokens to help meet these.', @@ -398,55 +357,29 @@ trait CRM_Contact_Form_Task_EmailTrait { * @throws \Civi\API\Exception\UnauthorizedException * @throws \API_Exception */ - public function submit($formValues) { + public function submit($formValues): void { $this->saveMessageTemplate($formValues); - - $from = $formValues['from_email_address'] ?? NULL; + $from = $formValues['from_email_address']; // dev/core#357 User Emails are keyed by their id so that the Signature is able to be added // If we have had a contact email used here the value returned from the line above will be the // numerical key where as $from for use in the sendEmail in Activity needs to be of format of "To Name" <toemailaddress> $from = CRM_Utils_Mail::formatFromAddress($from); - $ccArray = $formValues['cc_id'] ? explode(',', $formValues['cc_id']) : []; - $cc = $this->getEmailString($ccArray); - $additionalDetails = empty($ccArray) ? '' : "\ncc : " . $this->getEmailUrlString($ccArray); + $cc = $this->getCc(); + $additionalDetails = empty($cc) ? '' : "\ncc : " . $this->getEmailUrlString($this->getCcArray()); - $bccArray = $formValues['bcc_id'] ? explode(',', $formValues['bcc_id']) : []; - $bcc = $this->getEmailString($bccArray); - $additionalDetails .= empty($bccArray) ? '' : "\nbcc : " . $this->getEmailUrlString($bccArray); - - // format contact details array to handle multiple emails from same contact - $formattedContactDetails = []; - foreach ($this->_contactIds as $key => $contactId) { - // if we dont have details on this contactID, we should ignore - // potentially this is due to the contact not wanting to receive email - if (!isset($this->_contactDetails[$contactId])) { - continue; - } - $email = $this->_toContactEmails[$key]; - // prevent duplicate emails if same email address is selected CRM-4067 - // we should allow same emails for different contacts - $details = $this->_contactDetails[$contactId]; - $details['email'] = $email; - unset($details['email_id']); - $formattedContactDetails["{$contactId}::{$email}"] = $details; - } + $bcc = $this->getBcc(); + $additionalDetails .= empty($bcc) ? '' : "\nbcc : " . $this->getEmailUrlString($this->getBccArray()); // send the mail - [$sent, $activityIds] = CRM_Activity_BAO_Activity::sendEmail( - $formattedContactDetails, - $this->getSubject($formValues['subject']), - $formValues['text_message'], - $formValues['html_message'], - NULL, - NULL, + [$sent, $activityIds] = $this->sendEmail( + $this->getSubmittedValue('text_message'), + $this->getSubmittedValue('html_message'), $from, $this->getAttachments($formValues), $cc, $bcc, - array_keys($this->_toContactDetails), $additionalDetails, - $this->getContributionIDs(), CRM_Utils_Array::value('campaign_id', $formValues), $this->getCaseID() ); @@ -458,11 +391,11 @@ trait CRM_Contact_Form_Task_EmailTrait { // has no meaning for followup activities, and this doesn't prevent // creating more manually if desired. $followupStatus = $this->createFollowUpActivities($formValues, $activityIds[0]); - $count_success = count($this->_toContactDetails); + CRM_Core_Session::setStatus(ts('One message was sent successfully. ', [ 'plural' => '%count messages were sent successfully. ', - 'count' => $count_success, - ]) . $followupStatus, ts('Message Sent', ['plural' => 'Messages Sent', 'count' => $count_success]), 'success'); + 'count' => $sent, + ]) . $followupStatus, ts('Message Sent', ['plural' => 'Messages Sent', 'count' => $sent]), 'success'); } if (!empty($this->suppressedEmails)) { @@ -504,28 +437,37 @@ trait CRM_Contact_Form_Task_EmailTrait { } } - /** - * List available tokens for this form. - * - * @return array - */ - public function listTokens() { - return CRM_Core_SelectValues::contactTokens(); - } - /** * Get the emails from the added element. * - * @param HTML_QuickForm_Element $element - * * @return array + * @throws \API_Exception */ - protected function getEmails($element): array { - $allEmails = explode(',', $element->getValue()); + protected function getEmails(): array { + $allEmails = explode(',', $this->getSubmittedValue('to')); $return = []; + $contactIDs = []; foreach ($allEmails as $value) { $values = explode('::', $value); - $return[] = ['contact_id' => $values[0], 'email' => $values[1]]; + $return[$values[0]] = ['contact_id' => $values[0], 'email' => $values[1]]; + $contactIDs[] = $values[0]; + } + $this->suppressedEmails = []; + $suppressionDetails = Email::get(FALSE) + ->addWhere('contact_id', 'IN', $contactIDs) + ->addWhere('is_primary', '=', TRUE) + ->addSelect('email', 'contact_id', 'contact_id.is_deceased', 'on_hold', 'contact_id.do_not_email', 'contact_id.display_name') + ->execute(); + foreach ($suppressionDetails as $details) { + if (empty($details['email']) || $details['contact_id.is_deceased'] || $details['contact_id.do_not_email'] || $details['on_hold']) { + $this->setSuppressedEmail($details['contact_id'], [ + 'on_hold' => $details['on_hold'], + 'is_deceased' => $details['contact_id.is_deceased'], + 'email' => $details['email'], + 'display_name' => $details['contact_id.display_name'], + ]); + unset($return[$details['contact_id']]); + } } return $return; } @@ -607,20 +549,10 @@ trait CRM_Contact_Form_Task_EmailTrait { /** * Get the subject for the message. * - * The case handling should possibly be on the case form..... - * - * @param string $subject - * * @return string - * @throws \CRM_Core_Exception */ - protected function getSubject(string $subject):string { - // CRM-5916: prepend case id hash to CiviCase-originating emails’ subjects - if ($this->getCaseID()) { - $hash = substr(sha1(CIVICRM_SITE_KEY . $this->getCaseID()), 0, 7); - $subject = "[case #$hash] $subject"; - } - return $subject; + protected function getSubject():string { + return (string) $this->getSubmittedValue('subject'); } /** @@ -683,6 +615,40 @@ trait CRM_Contact_Form_Task_EmailTrait { return empty($errors) ? TRUE : $errors; } + /** + * Prevent submission of deprecated tokens. + * + * Note this rule can be removed after a transition period. + * It's mostly to help to ensure users don't get missing tokens + * or unexpected output after the 5.43 upgrade until any + * old templates have aged out. + * + * @param array $fields + * + * @return bool|string[] + */ + public static function deprecatedTokensFormRule(array $fields) { + $deprecatedTokens = [ + '{case.status_id}' => '{case.status_id:label}', + '{case.case_type_id}' => '{case.case_type_id:label}', + '{contribution.campaign}' => '{contribution.campaign_id:label}', + '{contribution.payment_instrument}' => '{contribution.payment_instrument_id:label}', + '{contribution.contribution_id}' => '{contribution.id}', + '{contribution.contribution_source}' => '{contribution.source}', + '{contribution.contribution_status}' => '{contribution.contribution_status_id:label}', + '{contribution.contribution_cancel_date}' => '{contribution.cancel_date}', + '{contribution.type}' => '{contribution.financial_type_id:label}', + '{contribution.contribution_page_id}' => '{contribution.contribution_page_id:label}', + ]; + $tokenErrors = []; + foreach ($deprecatedTokens as $token => $replacement) { + if (strpos($fields['html_message'], $token) !== FALSE) { + $tokenErrors[] = ts('Token %1 is no longer supported - use %2 instead', [$token, $replacement]); + } + } + return empty($tokenErrors) ? TRUE : ['html_message' => implode('<br>', $tokenErrors)]; + } + /** * Get selected contribution IDs. * @@ -707,4 +673,400 @@ trait CRM_Contact_Form_Task_EmailTrait { return NULL; } + /** + * @return array + */ + protected function getFromEmails(): array { + $fromEmailValues = CRM_Core_BAO_Email::getFromEmail(); + + if (empty($fromEmailValues)) { + CRM_Core_Error::statusBounce(ts('Your user record does not have a valid email address and no from addresses have been configured.')); + } + return $fromEmailValues; + } + + /** + * Get the relevant emails. + * + * @param int $index + * + * @return string + */ + protected function getEmail(int $index): string { + if (empty($this->emails)) { + $toEmails = explode(',', $this->getSubmittedValue('to')); + foreach ($toEmails as $value) { + $parts = explode('::', $value); + $this->emails[] = $parts[1]; + } + } + return $this->emails[$index]; + } + + /** + * Send the message to all the contacts. + * + * Do not use this function outside of core tested code. It will change. + * + * It will also become protected once tests no longer call it. + * + * @internal + * + * Also insert a contact activity in each contacts record. + * + * @param $text + * @param $html + * @param string $from + * @param array|null $attachments + * The array of attachments if any. + * @param string|null $cc + * Cc recipient. + * @param string|null $bcc + * Bcc recipient. + * @param string|null $additionalDetails + * The additional information of CC and BCC appended to the activity Details. + * @param int|null $campaignId + * @param int|null $caseId + * + * @return array + * bool $sent FIXME: this only indicates the status of the last email sent. + * array $activityIds The activity ids created, one per "To" recipient. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \PEAR_Exception + * @internal + * + * Also insert a contact activity in each contacts record. + * + * @internal + * + * Also insert a contact activity in each contacts record. + */ + protected function sendEmail( + $text, + $html, + $from, + $attachments = NULL, + $cc = NULL, + $bcc = NULL, + $additionalDetails = NULL, + $campaignId = NULL, + $caseId = NULL + ) { + + $userID = CRM_Core_Session::getLoggedInContactID(); + + $sent = 0; + $attachmentFileIds = []; + $activityIds = []; + $firstActivityCreated = FALSE; + foreach ($this->getRowsForEmails() as $values) { + $contactId = $values['contact_id']; + $emailAddress = $values['email']; + $renderedTemplate = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'messageTemplate' => [ + 'msg_text' => $text, + 'msg_html' => $html, + 'msg_subject' => $this->getSubject(), + ], + 'tokenContext' => array_merge(['schema' => $this->getTokenSchema()], ($values['schema'] ?? [])), + 'contactId' => $contactId, + 'disableSmarty' => !CRM_Utils_Constant::value('CIVICRM_MAIL_SMARTY'), + ]); + + // To minimize storage requirements, only one copy of any file attachments uploaded to CiviCRM is kept, + // even when multiple contacts will receive separate emails from CiviCRM. + if (!empty($attachmentFileIds)) { + $attachments = array_replace_recursive($attachments, $attachmentFileIds); + } + + // Create email activity. + $activityID = $this->createEmailActivity($userID, $renderedTemplate['subject'], $renderedTemplate['html'], $renderedTemplate['text'], $additionalDetails, $campaignId, $attachments, $caseId); + $activityIds[] = $activityID; + + if ($firstActivityCreated == FALSE && !empty($attachments)) { + $attachmentFileIds = CRM_Activity_BAO_Activity::getAttachmentFileIds($activityID, $attachments); + $firstActivityCreated = TRUE; + } + + if ($this->sendMessage( + $from, + $contactId, + $renderedTemplate['subject'], + $renderedTemplate['text'], + $renderedTemplate['html'], + $emailAddress, + $activityID, + // get the set of attachments from where they are stored + CRM_Core_BAO_File::getEntityFile('civicrm_activity', $activityID), + $cc, + $bcc + ) + ) { + $sent++; + } + } + + return [$sent, $activityIds]; + } + + /** + * @param int $sourceContactID + * The contact ID of the email "from". + * @param string $subject + * @param string $html + * @param string $text + * @param string $additionalDetails + * The additional information of CC and BCC appended to the activity details. + * @param int $campaignID + * @param array $attachments + * @param int $caseID + * + * @return int + * The created activity ID + * @throws \CRM_Core_Exception + */ + protected function createEmailActivity($sourceContactID, $subject, $html, $text, $additionalDetails, $campaignID, $attachments, $caseID) { + $activityTypeID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Email'); + + // CRM-6265: save both text and HTML parts in details (if present) + if ($html and $text) { + $details = "-ALTERNATIVE ITEM 0-\n{$html}{$additionalDetails}\n-ALTERNATIVE ITEM 1-\n{$text}{$additionalDetails}\n-ALTERNATIVE END-\n"; + } + else { + $details = $html ? $html : $text; + $details .= $additionalDetails; + } + + $activityParams = [ + 'source_contact_id' => $sourceContactID, + 'activity_type_id' => $activityTypeID, + 'activity_date_time' => date('YmdHis'), + 'subject' => $subject, + 'details' => $details, + 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Completed'), + 'campaign_id' => $this->getSubmittedValue('campaign_id'), + ]; + if (!empty($caseID)) { + $activityParams['case_id'] = $caseID; + } + + // CRM-5916: strip [case #…] before saving the activity (if present in subject) + $activityParams['subject'] = preg_replace('/\[case #([0-9a-h]{7})\] /', '', $activityParams['subject']); + + // add the attachments to activity params here + if ($attachments) { + // first process them + $activityParams = array_merge($activityParams, $attachments); + } + + $activity = civicrm_api3('Activity', 'create', $activityParams); + + return $activity['id']; + } + + /** + * Send message - under refactor. + * + * @param $from + * @param $toID + * @param $subject + * @param $text_message + * @param $html_message + * @param $emailAddress + * @param $activityID + * @param null $attachments + * @param null $cc + * @param null $bcc + * + * @return bool + * @throws \CRM_Core_Exception + * @throws \PEAR_Exception + */ + protected function sendMessage( + $from, + $toID, + $subject, + $text_message, + $html_message, + $emailAddress, + $activityID, + $attachments = NULL, + $cc = NULL, + $bcc = NULL + ) { + [$toDisplayName, $toEmail, $toDoNotEmail] = CRM_Contact_BAO_Contact::getContactDetails($toID); + if ($emailAddress) { + $toEmail = trim($emailAddress); + } + + // make sure both email addresses are valid + // and that the recipient wants to receive email + if (empty($toEmail) or $toDoNotEmail) { + return FALSE; + } + if (!trim($toDisplayName)) { + $toDisplayName = $toEmail; + } + + $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); + $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); + + // create the params array + $mailParams = [ + 'groupName' => 'Activity Email Sender', + 'from' => $from, + 'toName' => $toDisplayName, + 'toEmail' => $toEmail, + 'subject' => $subject, + 'cc' => $cc, + 'bcc' => $bcc, + 'text' => $text_message, + 'html' => $html_message, + 'attachments' => $attachments, + ]; + + if (!CRM_Utils_Mail::send($mailParams)) { + return FALSE; + } + + // add activity target record for every mail that is send + $activityTargetParams = [ + 'activity_id' => $activityID, + 'contact_id' => $toID, + 'record_type_id' => $targetID, + ]; + CRM_Activity_BAO_ActivityContact::create($activityTargetParams); + return TRUE; + } + + /** + * Get the url to redirect the user's browser to. + * + * @return string + * @throws \CRM_Core_Exception + */ + protected function getRedirectUrl(): string { + // also fix the user context stack + if ($this->getCaseID()) { + $ccid = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseContact', $this->_caseId, + 'contact_id', 'case_id' + ); + $url = CRM_Utils_System::url('civicrm/contact/view/case', + "&reset=1&action=view&cid={$ccid}&id=" . $this->getCaseID() + ); + } + elseif ($this->_context) { + $url = CRM_Utils_System::url('civicrm/dashboard', 'reset=1'); + } + else { + $url = CRM_Utils_System::url('civicrm/contact/view', + "&show=1&action=browse&cid={$this->_contactIds[0]}&selectedChild=activity" + ); + } + return $url; + } + + /** + * Get the result rows to email. + * + * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function getRowsForEmails(): array { + $rows = []; + foreach ($this->getRows() as $row) { + $rows[$row['contact_id']][] = $row; + } + // format contact details array to handle multiple emails from same contact + $formattedContactDetails = []; + foreach ($this->getEmails() as $details) { + $contactID = $details['contact_id']; + $index = $contactID . '::' . $details['email']; + if (!isset($rows[$contactID])) { + $formattedContactDetails[$index] = $details; + continue; + } + if ($this->isGroupByContact()) { + foreach ($rows[$contactID] as $rowDetail) { + $details['schema'] = $rowDetail['schema'] ?? []; + } + $formattedContactDetails[$index] = $details; + } + else { + foreach ($rows[$contactID] as $key => $rowDetail) { + $index .= '_' . $key; + $formattedContactDetails[$index] = $details; + $formattedContactDetails[$index]['schema'] = $rowDetail['schema'] ?? []; + } + } + + } + return $formattedContactDetails; + } + + /** + * Only send one email per contact. + * + * This has historically been done for contributions & makes sense if + * no entity specific tokens are in use. + * + * @return bool + */ + protected function isGroupByContact(): bool { + return TRUE; + } + + /** + * Get the tokens in the submitted message. + * + * @return array + * @throws \CRM_Core_Exception + */ + protected function getMessageTokens(): array { + return CRM_Utils_Token::getTokens($this->getSubject() . $this->getSubmittedValue('html_message') . $this->getSubmittedValue('text_message')); + } + + /** + * @return string + * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + protected function getBcc(): string { + return $this->getEmailString($this->getBccArray()); + } + + /** + * @return string + * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + protected function getCc(): string { + return $this->getEmailString($this->getCcArray()); + } + + /** + * @return array + */ + protected function getCcArray() { + if ($this->getSubmittedValue('cc_id')) { + return explode(',', $this->getSubmittedValue('cc_id')); + } + return []; + } + + /** + * @return array + */ + protected function getBccArray() { + $bccArray = []; + if ($this->getSubmittedValue('bcc_id')) { + $bccArray = explode(',', $this->getSubmittedValue('bcc_id')); + } + return $bccArray; + } + } diff --git a/civicrm/CRM/Contact/Form/Task/Label.php b/civicrm/CRM/Contact/Form/Task/Label.php index 724b6ef786455a5962b1f77876effdb9e505e3ea..ac1effae177e360911fea0fc5ab9dc15fa21e3ac 100644 --- a/civicrm/CRM/Contact/Form/Task/Label.php +++ b/civicrm/CRM/Contact/Form/Task/Label.php @@ -41,7 +41,7 @@ class CRM_Contact_Form_Task_Label extends CRM_Contact_Form_Task { * @param CRM_Core_Form $form */ public static function buildLabelForm($form) { - CRM_Utils_System::setTitle(ts('Make Mailing Labels')); + $form->setTitle(ts('Make Mailing Labels')); //add select for label $label = CRM_Core_BAO_LabelFormat::getList(TRUE); diff --git a/civicrm/CRM/Contact/Form/Task/Map.php b/civicrm/CRM/Contact/Form/Task/Map.php index a6aaa273c9389f20ef565bdb201e289fb308e2a7..91991489e22bf0161b316990f7294acd1a182b62 100644 --- a/civicrm/CRM/Contact/Form/Task/Map.php +++ b/civicrm/CRM/Contact/Form/Task/Map.php @@ -125,7 +125,7 @@ class CRM_Contact_Form_Task_Map extends CRM_Contact_Form_Task { public static function createMapXML($ids, $locationId, &$page, $addBreadCrumb, $type = 'Contact') { $config = CRM_Core_Config::singleton(); - CRM_Utils_System::setTitle(ts('Map Location(s)')); + $this->setTitle(ts('Map Location(s)')); $page->assign('query', 'CiviCRM Search Query'); $page->assign('mapProvider', $config->mapProvider); $page->assign('mapKey', urlencode($config->mapAPIKey)); diff --git a/civicrm/CRM/Contact/Form/Task/PDF.php b/civicrm/CRM/Contact/Form/Task/PDF.php index 03f040bff213bbd1f3347c53b526e4cb1165f5af..8c916851135111d41662e9f683d4d09594d6bd4a 100644 --- a/civicrm/CRM/Contact/Form/Task/PDF.php +++ b/civicrm/CRM/Contact/Form/Task/PDF.php @@ -95,13 +95,6 @@ class CRM_Contact_Form_Task_PDF extends CRM_Contact_Form_Task { $this->addPDFElementsToForm(); } - /** - * Process the form after the input has been submitted and validated. - */ - public function postProcess() { - CRM_Contact_Form_Task_PDFLetterCommon::postProcess($this); - } - /** * List available tokens for this form. * @@ -117,4 +110,26 @@ class CRM_Contact_Form_Task_PDF extends CRM_Contact_Form_Task { return $tokens; } + /** + * Get the rows from the results to be pdf-d. + * + * @todo the case handling should be in the case pdf task. + * It needs fixing to support standalone & some url fixes + * + * similar to https://github.com/civicrm/civicrm-core/pull/21688 + * + * @return array + */ + protected function getRows(): array { + $rows = []; + foreach ($this->_contactIds as $index => $contactID) { + $caseID = $this->getVar('_caseId'); + if (empty($caseID) && !empty($this->_caseIds[$index])) { + $caseID = $this->_caseIds[$index]; + } + $rows[] = ['contact_id' => $contactID, 'schema' => ['caseId' => $caseID, 'contactId' => $contactID]]; + } + return $rows; + } + } diff --git a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php index ce093ac680163ee0c4d79baa6a294455af5aff4b..f49ab98d517ae75ffa8753b2790fae598cfedf4c 100644 --- a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php @@ -68,7 +68,10 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter $form->_contactIds = explode(',', $cid); // put contact display name in title for single contact mode if (count($form->_contactIds) === 1) { - CRM_Utils_System::setTitle(ts('Print/Merge Document for %1', [1 => CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name')])); + $form->setTitle( + ts('Print/Merge Document for %1', + [1 => CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name')]) + ); } } @@ -80,8 +83,12 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter * * @return array * [$categories, $html_message, $messageToken, $returnProperties] + * + * @deprecated */ public static function processMessageTemplate($formValues) { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); + $html_message = self::processTemplate($formValues); $categories = self::getTokenCategories(); @@ -106,14 +113,17 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter * Process the form after the input has been submitted and validated. * * @param CRM_Core_Form $form + * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception + * @throws \API_Exception + * + * @deprecated */ - public static function postProcess(&$form) { + public static function postProcess(&$form): void { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); $formValues = $form->controller->exportValues($form->getName()); - list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($formValues); - $skipOnHold = $form->skipOnHold ?? FALSE; - $skipDeceased = $form->skipDeceased ?? TRUE; + [$formValues, $categories, $html_message, $messageToken, $returnProperties] = self::processMessageTemplate($formValues); $html = $activityIds = []; // CRM-16725 Skip creation of activities if user is previewing their PDF letter(s) @@ -122,48 +132,21 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter } if (!empty($formValues['document_file_path'])) { - list($html_message, $zip) = CRM_Utils_PDF_Document::unzipDoc($formValues['document_file_path'], $formValues['document_type']); + [$html_message, $zip] = CRM_Utils_PDF_Document::unzipDoc($formValues['document_file_path'], $formValues['document_type']); } foreach ($form->_contactIds as $item => $contactId) { - $caseId = NULL; - $params = ['contact_id' => $contactId]; - $caseId = $form->getVar('_caseId'); if (empty($caseId) && !empty($form->_caseIds[$item])) { $caseId = $form->_caseIds[$item]; } - if ($caseId) { - $params['case_id'] = $caseId; - } - list($contact) = CRM_Utils_Token::getTokenDetails($params, - $returnProperties, - $skipOnHold, - $skipDeceased, - NULL, - $messageToken, - 'CRM_Contact_Form_Task_PDFLetterCommon' - ); - - if (civicrm_error($contact)) { - $notSent[] = $contactId; - continue; - } - - $tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contact[$contactId], TRUE, $messageToken); - - if ($caseId) { - $tokenHtml = CRM_Utils_Token::replaceCaseTokens($caseId, $tokenHtml, $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 contact tokens to the template - $smarty->assign_by_ref('contact', $contact); - $tokenHtml = $smarty->fetch("string:$tokenHtml"); - } + $tokenHtml = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'contactId' => $contactId, + 'messageTemplate' => ['msg_html' => $html_message], + 'tokenContext' => $caseId ? ['caseId' => $caseId] : [], + 'disableSmarty' => (!defined('CIVICRM_MAIL_SMARTY') || !CIVICRM_MAIL_SMARTY), + ])['html']; $html[] = $tokenHtml; } @@ -180,10 +163,9 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter $mimeType = self::getMimeType($type); // ^^ Useful side-effect: consistently throws error for unrecognized types. - $fileName = self::getFileName($form); - $fileName = "$fileName.$type"; + $fileName = method_exists($form, 'getFileName') ? ($form->getFileName() . '.' . $type) : 'CiviLetter.' . $type; - if ($type == 'pdf') { + if ($type === 'pdf') { CRM_Utils_PDF_Utils::html2pdf($html, $fileName, FALSE, $formValues); } elseif (!empty($formValues['document_file_path'])) { @@ -218,29 +200,6 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter CRM_Utils_System::civiExit(); } - /** - * Returns the filename for the pdf by striping off unwanted characters and limits the length to 200 characters. - * - * @param CRM_Core_Form $form - * - * @return string - * The name of the file. - */ - private static function getFileName(CRM_Core_Form $form) { - if (!empty($form->getSubmittedValue('pdf_file_name'))) { - $fileName = CRM_Utils_File::makeFilenameWithUnicode($form->getSubmittedValue('pdf_file_name'), '_', 200); - } - elseif (!empty($form->getSubmittedValue('subject'))) { - $fileName = CRM_Utils_File::makeFilenameWithUnicode($form->getSubmittedValue('subject'), '_', 200); - } - else { - $fileName = 'CiviLetter'; - } - $fileName = self::isLiveMode($form) ? $fileName : $fileName . '_preview'; - - return $fileName; - } - /** * @param CRM_Core_Form $form * @param string $html_message @@ -255,8 +214,11 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter * and use-case. * * @throws CRM_Core_Exception + * + * @deprecated */ public static function createActivities($form, $html_message, $contactIds, $subject, $campaign_id, $perContactHtml = []) { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); $activityParams = [ 'subject' => $subject, @@ -326,6 +288,8 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter * @param string $type * @return string * @throws \CRM_Core_Exception + * + * @deprecated */ private static function getMimeType($type) { $mimeTypes = [ @@ -345,6 +309,8 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter /** * Get the categories required for rendering tokens. * + * @deprecated + * * @return array */ protected static function getTokenCategories() { @@ -368,6 +334,8 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter * @return bool * TRUE if the Download Document button was clicked (also defaults to TRUE * if the form controller does not exist), else FALSE + * + * @deprecated */ protected static function isLiveMode($form) { // CRM-21255 - Hrm, CiviCase 4+5 seem to report buttons differently... diff --git a/civicrm/CRM/Contact/Form/Task/PDFTrait.php b/civicrm/CRM/Contact/Form/Task/PDFTrait.php index 9ac741c0a1b6000975117f75d5e589c22d0cbc38..1adcc4d64207a1f24a34b42a508d5f44e5aef969 100644 --- a/civicrm/CRM/Contact/Form/Task/PDFTrait.php +++ b/civicrm/CRM/Contact/Form/Task/PDFTrait.php @@ -84,7 +84,7 @@ trait CRM_Contact_Form_Task_PDFTrait { ts('Paper Size'), [0 => ts('- default -')] + CRM_Core_BAO_PaperSize::getList(TRUE), FALSE, - ['onChange' => "selectPaper( this.value ); showUpdateFormatChkBox();"] + ['onChange' => 'selectPaper( this.value ); showUpdateFormatChkBox();'] ); $form->add( 'select', @@ -92,7 +92,7 @@ trait CRM_Contact_Form_Task_PDFTrait { ts('Orientation'), CRM_Core_BAO_PdfFormat::getPageOrientations(), FALSE, - ['onChange' => "updatePaperDimensions(); showUpdateFormatChkBox();"] + ['onChange' => 'updatePaperDimensions(); showUpdateFormatChkBox();'] ); $form->add( 'select', @@ -158,26 +158,7 @@ trait CRM_Contact_Form_Task_PDFTrait { CRM_Mailing_BAO_Mailing::commonCompose($form); - $buttons = []; - if ($form->get('action') != CRM_Core_Action::VIEW) { - $buttons[] = [ - 'type' => 'upload', - 'name' => ts('Download Document'), - 'isDefault' => TRUE, - 'icon' => 'fa-download', - ]; - $buttons[] = [ - 'type' => 'submit', - 'name' => ts('Preview'), - 'subName' => 'preview', - 'icon' => 'fa-search', - 'isDefault' => FALSE, - ]; - } - $buttons[] = [ - 'type' => 'cancel', - 'name' => $form->get('action') == CRM_Core_Action::VIEW ? ts('Done') : ts('Cancel'), - ]; + $buttons = $this->getButtons($form); $form->addButtons($buttons); $form->addFormRule(['CRM_Core_Form_Task_PDFLetterCommon', 'formRule'], $form); @@ -201,4 +182,393 @@ trait CRM_Contact_Form_Task_PDFTrait { $form->setTitle('Print/Merge Document'); } + /** + * Returns the filename for the pdf by striping off unwanted characters and limits the length to 200 characters. + * + * @return string + * The name of the file. + */ + public function getFileName(): string { + if (!empty($this->getSubmittedValue('pdf_file_name'))) { + $fileName = CRM_Utils_File::makeFilenameWithUnicode($this->getSubmittedValue('pdf_file_name'), '_', 200); + } + elseif (!empty($this->getSubmittedValue('subject'))) { + $fileName = CRM_Utils_File::makeFilenameWithUnicode($this->getSubmittedValue('subject'), '_', 200); + } + else { + $fileName = 'CiviLetter'; + } + return $this->isLiveMode() ? $fileName : $fileName . '_preview'; + } + + /** + * Is the form in live mode (as opposed to being run as a preview). + * + * Returns true if the user has clicked the Download Document button on a + * Print/Merge Document (PDF Letter) search task form, or false if the Preview + * button was clicked. + * + * @return bool + * TRUE if the Download Document button was clicked (also defaults to TRUE + * if the form controller does not exist), else FALSE + */ + protected function isLiveMode(): bool { + return strpos($this->controller->getButtonName(), '_preview') === FALSE; + } + + /** + * Process the form after the input has been submitted and validated. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \API_Exception + */ + public function postProcess(): void { + $formValues = $this->controller->exportValues($this->getName()); + [$formValues, $html_message] = $this->processMessageTemplate($formValues); + $html = $activityIds = []; + + // CRM-16725 Skip creation of activities if user is previewing their PDF letter(s) + if ($this->isLiveMode()) { + $activityIds = $this->createActivities($html_message, $this->_contactIds, $formValues['subject'], CRM_Utils_Array::value('campaign_id', $formValues)); + } + + if (!empty($formValues['document_file_path'])) { + [$html_message, $zip] = CRM_Utils_PDF_Document::unzipDoc($formValues['document_file_path'], $formValues['document_type']); + } + + foreach ($this->getRows() as $row) { + $tokenHtml = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'contactId' => $row['contact_id'], + 'messageTemplate' => ['msg_html' => $html_message], + 'tokenContext' => array_merge(['schema' => $this->getTokenSchema()], ($row['schema'] ?? [])), + 'disableSmarty' => (!defined('CIVICRM_MAIL_SMARTY') || !CIVICRM_MAIL_SMARTY), + ])['html']; + + $html[] = $tokenHtml; + } + + $tee = NULL; + if ($this->isLiveMode() && Civi::settings()->get('recordGeneratedLetters') === 'combined-attached') { + if (count($activityIds) !== 1) { + throw new CRM_Core_Exception('When recordGeneratedLetters=combined-attached, there should only be one activity.'); + } + $tee = CRM_Utils_ConsoleTee::create()->start(); + } + + $type = $formValues['document_type']; + $mimeType = $this->getMimeType($type); + // ^^ Useful side-effect: consistently throws error for unrecognized types. + + $fileName = $this->getFileName(); + + if ($type === 'pdf') { + CRM_Utils_PDF_Utils::html2pdf($html, $fileName, FALSE, $formValues); + } + elseif (!empty($formValues['document_file_path'])) { + $fileName = pathinfo($formValues['document_file_path'], PATHINFO_FILENAME) . '.' . $type; + CRM_Utils_PDF_Document::printDocuments($html, $fileName, $type, $zip); + } + else { + CRM_Utils_PDF_Document::html2doc($html, $fileName . '.' . $this->getSubmittedValue('document_type'), $formValues); + } + + if ($tee) { + $tee->stop(); + $content = file_get_contents($tee->getFileName(), NULL, NULL, NULL, 5); + if (empty($content)) { + throw new \CRM_Core_Exception("Failed to capture document content (type=$type)!"); + } + foreach ($activityIds as $activityId) { + civicrm_api3('Attachment', 'create', [ + 'entity_table' => 'civicrm_activity', + 'entity_id' => $activityId, + 'name' => $fileName, + 'mime_type' => $mimeType, + 'options' => [ + 'move-file' => $tee->getFileName(), + ], + ]); + } + } + + $this->postProcessHook(); + + CRM_Utils_System::civiExit(); + } + + /** + * Convert from a vague-type/file-extension to mime-type. + * + * @param string $type + * @return string + * @throws \CRM_Core_Exception + */ + protected function getMimeType($type) { + $mimeTypes = [ + 'pdf' => 'application/pdf', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'html' => 'text/html', + ]; + if (isset($mimeTypes[$type])) { + return $mimeTypes[$type]; + } + else { + throw new \CRM_Core_Exception("Cannot determine mime type"); + } + } + + /** + * @param string $html_message + * @param array $contactIds + * @param string $subject + * @param int $campaign_id + * @param array $perContactHtml + * + * @return array + * List of activity IDs. + * There may be 1 or more, depending on the system-settings + * and use-case. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected function createActivities($html_message, $contactIds, $subject, $campaign_id, $perContactHtml = []): array { + $activityParams = [ + 'subject' => $subject, + 'campaign_id' => $campaign_id, + 'source_contact_id' => CRM_Core_Session::getLoggedInContactID(), + 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Print PDF Letter'), + 'activity_date_time' => date('YmdHis'), + 'details' => $html_message, + ]; + if (!empty($this->_activityId)) { + $activityParams += ['id' => $this->_activityId]; + } + + $activityIds = []; + switch (Civi::settings()->get('recordGeneratedLetters')) { + case 'none': + return []; + + case 'multiple': + // One activity per contact. + foreach ($contactIds as $i => $contactId) { + $fullParams = ['target_contact_id' => $contactId] + $activityParams; + if (!empty($this->_caseId)) { + $fullParams['case_id'] = $this->_caseId; + } + elseif (!empty($this->_caseIds[$i])) { + $fullParams['case_id'] = $this->_caseIds[$i]; + } + + if (isset($perContactHtml[$contactId])) { + $fullParams['details'] = implode('<hr>', $perContactHtml[$contactId]); + } + $activity = civicrm_api3('Activity', 'create', $fullParams); + $activityIds[$contactId] = $activity['id']; + } + + break; + + case 'combined': + case 'combined-attached': + // One activity with all contacts. + $fullParams = ['target_contact_id' => $contactIds] + $activityParams; + if (!empty($this->_caseId)) { + $fullParams['case_id'] = $this->_caseId; + } + elseif (!empty($this->_caseIds)) { + $fullParams['case_id'] = $this->_caseIds; + } + $activity = civicrm_api3('Activity', 'create', $fullParams); + $activityIds[] = $activity['id']; + break; + + default: + throw new CRM_Core_Exception('Unrecognized option in recordGeneratedLetters: ' . Civi::settings()->get('recordGeneratedLetters')); + } + + return $activityIds; + } + + /** + * Handle the template processing part of the form + * + * @param array $formValues + * + * @return string $html_message + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + public function processTemplate(&$formValues) { + $html_message = $formValues['html_message'] ?? NULL; + + // process message template + if (!empty($this->getSubmittedValue('saveTemplate')) || !empty($formValues['updateTemplate'])) { + $messageTemplate = [ + 'msg_text' => NULL, + 'msg_html' => $formValues['html_message'], + 'msg_subject' => NULL, + 'is_active' => TRUE, + ]; + + $messageTemplate['pdf_format_id'] = 'null'; + if (!empty($formValues['bind_format']) && $formValues['format_id']) { + $messageTemplate['pdf_format_id'] = $formValues['format_id']; + } + if ($this->getSubmittedValue('saveTemplate')) { + $messageTemplate['msg_title'] = $this->getSubmittedValue('saveTemplateName'); + CRM_Core_BAO_MessageTemplate::add($messageTemplate); + } + + if ($formValues['template'] && !empty($formValues['updateTemplate'])) { + $messageTemplate['id'] = $formValues['template']; + + unset($messageTemplate['msg_title']); + CRM_Core_BAO_MessageTemplate::add($messageTemplate); + } + } + elseif (CRM_Utils_Array::value('template', $formValues) > 0) { + if (!empty($formValues['bind_format']) && $formValues['format_id']) { + $query = "UPDATE civicrm_msg_template SET pdf_format_id = {$formValues['format_id']} WHERE id = {$formValues['template']}"; + } + else { + $query = "UPDATE civicrm_msg_template SET pdf_format_id = NULL WHERE id = {$formValues['template']}"; + } + CRM_Core_DAO::executeQuery($query); + + $documentInfo = CRM_Core_BAO_File::getEntityFile('civicrm_msg_template', $formValues['template']); + if ($documentInfo) { + $info = reset($documentInfo); + [$html_message, $formValues['document_type']] = CRM_Utils_PDF_Document::docReader($info['fullPath'], $info['mime_type']); + $formValues['document_file_path'] = $info['fullPath']; + } + } + // extract the content of uploaded document file + elseif (!empty($formValues['document_file'])) { + [$html_message, $formValues['document_type']] = CRM_Utils_PDF_Document::docReader($formValues['document_file']['name'], $formValues['document_file']['type']); + $formValues['document_file_path'] = $formValues['document_file']['name']; + } + + if (!empty($formValues['update_format'])) { + $bao = new CRM_Core_BAO_PdfFormat(); + $bao->savePdfFormat($formValues, $formValues['format_id']); + } + + return $html_message; + } + + /** + * Part of the post process which prepare and extract information from the template. + * + * + * @param array $formValues + * + * @return array + * [$categories, $html_message, $messageToken, $returnProperties] + */ + public function processMessageTemplate($formValues) { + $html_message = $this->processTemplate($formValues); + + //time being hack to strip ' ' + //from particular letter line, CRM-6798 + $this->formatMessage($html_message); + + $messageToken = CRM_Utils_Token::getTokens($html_message); + + $returnProperties = []; + if (isset($messageToken['contact'])) { + foreach ($messageToken['contact'] as $key => $value) { + $returnProperties[$value] = 1; + } + } + + return [$formValues, $html_message, $messageToken, $returnProperties]; + } + + /** + * @param $message + */ + public function formatMessage(&$message) { + $newLineOperators = [ + 'p' => [ + 'oper' => '<p>', + 'pattern' => '/<(\s+)?p(\s+)?>/m', + ], + 'br' => [ + 'oper' => '<br />', + 'pattern' => '/<(\s+)?br(\s+)?\/>/m', + ], + ]; + + $htmlMsg = preg_split($newLineOperators['p']['pattern'], $message); + foreach ($htmlMsg as $k => & $m) { + $messages = preg_split($newLineOperators['br']['pattern'], $m); + foreach ($messages as $key => & $msg) { + $msg = trim($msg); + $matches = []; + if (preg_match('/^( )+/', $msg, $matches)) { + $spaceLen = strlen($matches[0]) / 6; + $trimMsg = ltrim($msg, ' '); + $charLen = strlen($trimMsg); + $totalLen = $charLen + $spaceLen; + if ($totalLen > 100) { + $spacesCount = 10; + if ($spaceLen > 50) { + $spacesCount = 20; + } + if ($charLen > 100) { + $spacesCount = 1; + } + $msg = str_repeat(' ', $spacesCount) . $trimMsg; + } + } + } + $m = implode($newLineOperators['br']['oper'], $messages); + } + $message = implode($newLineOperators['p']['oper'], $htmlMsg); + } + + /** + * Get the buttons to display. + * + * @return array + */ + protected function getButtons(): array { + $buttons = []; + if (!$this->isFormInViewMode()) { + $buttons[] = [ + 'type' => 'upload', + 'name' => $this->getMainSubmitButtonName(), + 'isDefault' => TRUE, + 'icon' => 'fa-download', + ]; + $buttons[] = [ + 'type' => 'submit', + 'name' => ts('Preview'), + 'subName' => 'preview', + 'icon' => 'fa-search', + 'isDefault' => FALSE, + ]; + } + $buttons[] = [ + 'type' => 'cancel', + 'name' => $this->isFormInViewMode() ? ts('Done') : ts('Cancel'), + ]; + return $buttons; + } + + /** + * Get the name for the main submit button. + * + * @return string + */ + protected function getMainSubmitButtonName(): string { + return ts('Download Document'); + } + } diff --git a/civicrm/CRM/Contact/Form/Task/PickProfile.php b/civicrm/CRM/Contact/Form/Task/PickProfile.php index 826e8ac9ac6907dbb1e16802c54c803ca1b1eb7b..d3d2430be322105215a6bfde5d3bfa454032d396 100644 --- a/civicrm/CRM/Contact/Form/Task/PickProfile.php +++ b/civicrm/CRM/Contact/Form/Task/PickProfile.php @@ -80,7 +80,7 @@ class CRM_Contact_Form_Task_PickProfile extends CRM_Contact_Form_Task { * Build the form object. */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Update multiple contacts')); + $this->setTitle(ts('Update multiple contacts')); foreach ($this->_contactIds as $id) { $this->_contactTypes = CRM_Contact_BAO_Contact::getContactTypes($id); diff --git a/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php b/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php index a27a5441ea778f2b3c294b864ee0baf1bc05c70f..235f68f7a6a436235e13d4361e87e7d17080cbf2 100644 --- a/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php +++ b/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php @@ -30,7 +30,7 @@ class CRM_Contact_Form_Task_RemoveFromGroup extends CRM_Contact_Form_Task { $group = ['' => ts('- select group -')] + CRM_Core_PseudoConstant::nestedGroup(); $groupElement = $this->add('select', 'group_id', ts('Select Group'), $group, TRUE, ['class' => 'crm-select2 huge']); - CRM_Utils_System::setTitle(ts('Remove Contacts from Group')); + $this->setTitle(ts('Remove Contacts from Group')); $this->addDefaultButtons(ts('Remove from Group')); } diff --git a/civicrm/CRM/Contact/Form/Task/Useradd.php b/civicrm/CRM/Contact/Form/Task/Useradd.php index 27a4ff7dd4a7aa0d7badcaffb87e0ef1cac85891..1956cd62729132a372f7fd50d3c1b2cc17ee50d5 100644 --- a/civicrm/CRM/Contact/Form/Task/Useradd.php +++ b/civicrm/CRM/Contact/Form/Task/Useradd.php @@ -43,7 +43,7 @@ class CRM_Contact_Form_Task_Useradd extends CRM_Core_Form { $contact = CRM_Contact_BAO_Contact::retrieve($params, $defaults, $ids); $this->_displayName = $contact->display_name; $this->_email = $contact->email; - CRM_Utils_System::setTitle(ts('Create User Record for %1', [1 => $this->_displayName])); + $this->setTitle(ts('Create User Record for %1', [1 => $this->_displayName])); } /** diff --git a/civicrm/CRM/Contact/Import/Controller.php b/civicrm/CRM/Contact/Import/Controller.php index c965973ffe377bcc75121b6f5874db23beb8cb59..da72132b1ba44c3645c4cd963a5581b69bbf0cd9 100644 --- a/civicrm/CRM/Contact/Import/Controller.php +++ b/civicrm/CRM/Contact/Import/Controller.php @@ -26,10 +26,7 @@ class CRM_Contact_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Contact/Import/Form/MapField.php b/civicrm/CRM/Contact/Import/Form/MapField.php index ac0a0d65abd089d21e19b2c5dfbc37445009aa90..7e3ffd33fc8a1a3198a4221d76cbcb5f3a382c18 100644 --- a/civicrm/CRM/Contact/Import/Form/MapField.php +++ b/civicrm/CRM/Contact/Import/Form/MapField.php @@ -214,6 +214,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { foreach ($this->_location_types as $key => $value) { $sel3['phone'][$key] = &$phoneTypes; + $sel3['phone_ext'][$key] = &$phoneTypes; //build array for IM service provider type for contact $sel3['im'][$key] = &$imProviders; } @@ -322,6 +323,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { foreach ($this->_location_types as $k => $value) { $sel4[$key]['phone'][$k] = &$phoneTypes; + $sel4[$key]['phone_ext'][$k] = &$phoneTypes; //build array of IM service provider for related contact $sel4[$key]['im'][$k] = &$imProviders; } @@ -546,7 +548,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $locations[$i] = $locationTypes[$selOne]; $parserParameters['mapperLocType'][$i] = $selOne; if ($selTwo && is_numeric($selTwo)) { - if ($fldName === 'phone') { + if ($fldName === 'phone' || $fldName === 'phone_ext') { $parserParameters['mapperPhoneType'][$i] = $phoneTypes[$selTwo]; } elseif ($fldName === 'im') { @@ -569,7 +571,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { else { $parserParameters['relatedContactLocType'][$i] = $locationTypes[$selTwo] ?? NULL; if ($selThree) { - if ($selOne === 'phone') { + if ($selOne === 'phone' || $selOne === 'phone_ext') { $parserParameters['relatedContactPhoneType'][$i] = $phoneTypes[$selThree]; } elseif ($selOne === 'im') { @@ -658,7 +660,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $updateMappingFields->website_type_id = $mapperKeys[$i][1] ?? NULL; } else { - if (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'phone') { + if (($mapperKeys[$i][0] ?? NULL) === 'phone' || ($mapperKeys[$i][0] ?? NULL) === 'phone_ext') { $updateMappingFields->phone_type_id = $mapperKeys[$i][2] ?? NULL; } elseif (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'im') { @@ -776,7 +778,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $saveMappingFields->website_type_id = $mapperKeys[$i][1] ?? NULL; } else { - if (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'phone') { + if (($mapperKeys[$i][0] ?? NULL) === 'phone' || ($mapperKeys[$i][0] ?? NULL) === 'phone_ext') { $saveMappingFields->phone_type_id = $mapperKeys[$i][2] ?? NULL; } elseif (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'im') { diff --git a/civicrm/CRM/Contact/Import/ImportJob.php b/civicrm/CRM/Contact/Import/ImportJob.php index 75d570e637cef27d298e89e57818361576d37b82..249bedc76a6d4c49b8fe4dc44cbea2b42b11e1ee 100644 --- a/civicrm/CRM/Contact/Import/ImportJob.php +++ b/civicrm/CRM/Contact/Import/ImportJob.php @@ -149,7 +149,7 @@ class CRM_Contact_Import_ImportJob { $header[] = $locationTypes[$selOne]; $parserParameters['mapperLocType'][$key] = $selOne; if ($selTwo && is_numeric($selTwo)) { - if ($fldName === 'phone') { + if ($fldName === 'phone' || $fldName === 'phone_ext') { $header[] = $phoneTypes[$selTwo]; $parserParameters['mapperPhoneType'][$key] = $selTwo; } @@ -188,7 +188,7 @@ class CRM_Contact_Import_ImportJob { $header[] = $locationTypes[$selTwo]; $parserParameters['relatedContactLocType'][$key] = $selTwo; if ($selThree) { - if ($selOne == 'phone') { + if ($selOne == 'phone' || $selOne == 'phone_ext') { $header[] = $phoneTypes[$selThree]; $parserParameters['relatedContactPhoneType'][$key] = $selThree; } diff --git a/civicrm/CRM/Contact/Import/Parser/Contact.php b/civicrm/CRM/Contact/Import/Parser/Contact.php index bc5c30579728fbd7e01c41430fb7d213913679a7..59dafa45603802f3487f536cfe0ffb44a70f776d 100644 --- a/civicrm/CRM/Contact/Import/Parser/Contact.php +++ b/civicrm/CRM/Contact/Import/Parser/Contact.php @@ -621,6 +621,12 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { ->setLoadOptions(TRUE) ->execute()->indexBy('name'); foreach ($fields as $fieldName => $fieldSpec) { + if (isset($formatted[$fieldName]) && is_array($formatted[$fieldName])) { + // If we have an array at this stage, it's probably a multi-select + // field that has already been parsed properly into the value that + // should be inserted into the database. + continue; + } if (!empty($formatted[$fieldName]) && empty($fieldSpec['options'][$formatted[$fieldName]])) { $formatted[$fieldName] = array_search($formatted[$fieldName], $fieldSpec['options'], TRUE) ?? $formatted[$fieldName]; diff --git a/civicrm/CRM/Contact/Tokens.php b/civicrm/CRM/Contact/Tokens.php new file mode 100644 index 0000000000000000000000000000000000000000..03c4d37db1088a3eebecc7ceb13c43296ef57af9 --- /dev/null +++ b/civicrm/CRM/Contact/Tokens.php @@ -0,0 +1,710 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +use Civi\Api4\Contact; +use Civi\Token\Event\TokenRegisterEvent; +use Civi\Token\Event\TokenValueEvent; +use Civi\Token\TokenProcessor; +use Civi\Token\TokenRow; + +/** + * Class CRM_Contact_Tokens + * + * Generate "contact.*" tokens. + */ +class CRM_Contact_Tokens extends CRM_Core_EntityTokens { + + /** + * Get the entity name for api v4 calls. + * + * @return string + */ + protected function getApiEntityName(): string { + return 'Contact'; + } + + /** + * Tokens defined by the legacy hook. + * + * @var array + */ + protected $hookTokens; + + /** + * @inheritDoc + */ + public static function getSubscribedEvents(): array { + return [ + 'civi.token.eval' => [ + ['evaluateLegacyHookTokens', 500], + ['onEvaluate'], + ], + 'civi.token.list' => 'registerTokens', + ]; + } + + /** + * Register the declared tokens. + * + * @param \Civi\Token\Event\TokenRegisterEvent $e + * The registration event. Add new tokens using register(). + * + * @throws \CRM_Core_Exception + */ + public function registerTokens(TokenRegisterEvent $e): void { + if (!$this->checkActive($e->getTokenProcessor())) { + return; + } + $relatedTokens = array_flip($this->getTokenMappingsForRelatedEntities()); + foreach ($this->getTokenMetadata() as $tokenName => $field) { + if ($field['audience'] === 'user') { + $e->register([ + 'entity' => $this->entity, + // Preserve legacy token names. It generally feels like + // it would be good to switch to the more specific token names + // but other code paths are still in use which can't handle them. + 'field' => $relatedTokens[$tokenName] ?? $tokenName, + 'label' => $field['title'], + ]); + } + } + foreach ($this->getLegacyHookTokens() as $legacyHookToken) { + $e->register([ + 'entity' => $legacyHookToken['category'], + 'field' => $legacyHookToken['name'], + 'label' => $legacyHookToken['label'], + ]); + } + } + + /** + * Determine whether this token-handler should be used with + * the given processor. + * + * To short-circuit token-processing in irrelevant contexts, + * override this. + * + * @param \Civi\Token\TokenProcessor $processor + * @return bool + */ + public function checkActive(TokenProcessor $processor): bool { + return in_array($this->getEntityIDField(), $processor->context['schema'], TRUE); + } + + /** + * @return string + */ + protected function getEntityIDField(): string { + return 'contactId'; + } + + /** + * Get functions declared using the legacy hook. + * + * Note that these only extend the contact entity ( + * ie they are based on having a contact ID which they. + * may or may not use, but they don't have other + * entity IDs.) + * + * @return array + */ + protected function getLegacyHookTokens(): array { + $tokens = []; + + foreach ($this->getHookTokens() as $tokenValues) { + foreach ($tokenValues as $key => $value) { + if (is_numeric($key)) { + // This appears to be an attempt to compensate for + // inconsistencies described in https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_tokenValues/#example + // in effect there is a suggestion that + // Send an Email" and "CiviMail" send different parameters to the tokenValues hook + // As of now 'send an email' renders hooks through this class. + // CiviMail it depends on the use or otherwise of flexmailer. + $key = $value; + } + if (preg_match('/^\{([^\}]+)\}$/', $value, $matches)) { + $value = $matches[1]; + } + $keyParts = explode('.', $key); + $tokens[$key] = [ + 'category' => $keyParts[0], + 'name' => $keyParts[1], + 'label' => $value, + ]; + } + } + return $tokens; + } + + /** + * Get all tokens advertised as contact tokens. + * + * @return string[] + */ + protected function getExposedFields(): array { + return [ + 'contact_type', + 'do_not_email', + 'do_not_phone', + 'do_not_mail', + 'do_not_sms', + 'do_not_trade', + 'is_opt_out', + 'external_identifier', + 'sort_name', + 'display_name', + 'nick_name', + 'image_URL', + 'preferred_communication_method', + 'preferred_language', + 'preferred_mail_format', + 'hash', + 'source', + 'first_name', + 'middle_name', + 'last_name', + 'prefix_id', + 'suffix_id', + 'formal_title', + 'communication_style_id', + 'job_title', + 'gender_id', + 'birth_date', + 'employer_id', + 'is_deleted', + 'created_date', + 'modified_date', + 'addressee_display', + 'email_greeting_display', + 'postal_greeting_display', + 'id', + ]; + } + + /** + * Get the fields exposed from related entities. + * + * @return \string[][] + */ + protected function getRelatedEntityTokenMetadata(): array { + return [ + 'address' => [ + 'location_type_id', + 'id', + 'street_address', + 'street_number', + 'street_number_suffix', + 'street_name', + 'street_unit', + 'supplemental_address_1', + 'supplemental_address_2', + 'supplemental_address_3', + 'city', + 'postal_code_suffix', + 'postal_code', + 'manual_geo_code', + 'geo_code_1', + 'geo_code_2', + 'name', + 'master_id', + 'county_id', + 'state_province_id', + 'country_id', + ], + 'phone' => ['phone', 'phone_ext', 'phone_type_id'], + 'email' => ['email', 'signature_html', 'signature_text', 'on_hold'], + 'website' => ['url'], + 'openid' => ['openid'], + 'im' => ['name', 'provider_id'], + ]; + } + + /** + * Load token data from legacy hooks. + * + * While our goal is for people to move towards implementing + * toke processors the old-style hooks can extend contact + * token data. + * + * When that is happening we need to load the full contact record + * to send to the hooks (not great for performance but the + * fix is to move away from implementing legacy style hooks). + * + * Consistent with prior behaviour we only load the contact it it + * is already loaded. In that scenario we also load any extra fields + * that might be wanted for the contact tokens. + * + * @param \Civi\Token\Event\TokenValueEvent $e + * + * @throws \CRM_Core_Exception + */ + public function evaluateLegacyHookTokens(TokenValueEvent $e): void { + $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + if (!array_intersect(array_keys($this->getHookTokens()), array_keys($messageTokens))) { + return; + } + + foreach ($e->getRows() as $row) { + if (empty($row->context['contactId'])) { + continue; + } + unset($swapLocale); + $swapLocale = empty($row->context['locale']) ? NULL : \CRM_Utils_AutoClean::swapLocale($row->context['locale']); + if (empty($row->context['contact'])) { + // If we don't have the contact already load it now, getting full + // details for hooks and anything the contact token resolution might + // want later. + $row->context['contact'] = $this->getContact($row->context['contactId'], $messageTokens['contact'] ?? [], TRUE); + } + $contactArray = [$row->context['contactId'] => $row->context['contact']]; + \CRM_Utils_Hook::tokenValues($contactArray, + [$row->context['contactId']], + empty($row->context['mailingJobId']) ? NULL : $row->context['mailingJobId'], + $messageTokens, + $row->context['controller'] + ); + foreach ($this->getHookTokens() as $category => $hookToken) { + if (!empty($messageTokens[$category])) { + foreach (array_keys($hookToken) as $tokenName) { + $tokenPartOnly = str_replace($category . '.', '', $tokenName); + if (in_array($tokenPartOnly, $messageTokens[$category], TRUE)) { + $row->format('text/html') + ->tokens($category, str_replace($category . '.', '', $tokenName), $contactArray[$row->context['contactId']][$tokenName] ?? ($contactArray[$row->context['contactId']][$category . '.' . $tokenName] ?? '')); + } + } + } + } + } + } + + /** + * Load token data. + * + * @param \Civi\Token\Event\TokenValueEvent $e + * + * @throws TokenException + * @throws \CRM_Core_Exception + */ + public function onEvaluate(TokenValueEvent $e) { + $messageTokens = $e->getTokenProcessor()->getMessageTokens()['contact'] ?? []; + if (empty($messageTokens)) { + return; + } + + foreach ($e->getRows() as $row) { + if (empty($row->context['contactId']) && empty($row->context['contact'])) { + continue; + } + + unset($swapLocale); + $swapLocale = empty($row->context['locale']) ? NULL : \CRM_Utils_AutoClean::swapLocale($row->context['locale']); + + if (empty($row->context['contact'])) { + $row->context['contact'] = $this->getContact($row->context['contactId'], $messageTokens); + } + + foreach ($messageTokens as $token) { + if ($token === 'checksum') { + $cs = \CRM_Contact_BAO_Contact_Utils::generateChecksum($row->context['contactId'], + NULL, + NULL, + $row->context['hash'] ?? NULL + ); + $row->format('text/html') + ->tokens('contact', $token, "cs={$cs}"); + } + elseif ($token === 'signature_html') { + $row->format('text/html')->tokens('contact', $token, html_entity_decode($row->context['contact'][$token])); + } + else { + parent::evaluateToken($row, $this->entity, $token, $row->context['contact']); + } + } + } + } + + /** + * Get the field value. + * + * @param \Civi\Token\TokenRow $row + * @param string $field + * @return string|int + */ + protected function getFieldValue(TokenRow $row, string $field) { + $entityName = 'contact'; + if (isset($this->getDeprecatedTokens()[$field])) { + // Check the non-deprecated location first, fall back to deprecated + // this is important for the greetings because - they are weird in the query object. + $possibilities = [$this->getDeprecatedTokens()[$field], $field]; + } + else { + $possibilities = [$field]; + if (in_array($field, $this->getDeprecatedTokens(), TRUE)) { + $possibilities[] = array_search($field, $this->getDeprecatedTokens(), TRUE); + } + } + + foreach ($possibilities as $possibility) { + if (isset($row->context[$entityName][$possibility])) { + return $row->context[$entityName][$possibility]; + } + } + return ''; + } + + /** + * Get the metadata for the available fields. + * + * @return array + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + protected function getTokenMetadata(): array { + if ($this->tokensMetadata) { + return $this->tokensMetadata; + } + if (Civi::cache('metadata')->has($this->getCacheKey())) { + return Civi::cache('metadata')->get($this->getCacheKey()); + } + $this->fieldMetadata = (array) civicrm_api4('Contact', 'getfields', ['checkPermissions' => FALSE], 'name'); + $this->tokensMetadata = $this->getBespokeTokens(); + foreach ($this->fieldMetadata as $field) { + $this->addFieldToTokenMetadata($field, $this->getExposedFields()); + } + + foreach ($this->getRelatedEntityTokenMetadata() as $entity => $exposedFields) { + $apiEntity = ($entity === 'openid') ? 'OpenID' : ucfirst($entity); + $metadata = (array) civicrm_api4($apiEntity, 'getfields', ['checkPermissions' => FALSE], 'name'); + foreach ($metadata as $field) { + $this->addFieldToTokenMetadata($field, $exposedFields, 'primary_' . $entity); + } + } + // Manually add in the abbreviated state province as that maps to + // what has traditionally been delivered. + $this->tokensMetadata['primary_address.state_province_id:abbr'] = $this->tokensMetadata['primary_address.state_province_id:label']; + $this->tokensMetadata['primary_address.state_province_id:abbr']['name'] = 'state_province_id:abbr'; + $this->tokensMetadata['primary_address.state_province_id:abbr']['audience'] = 'user'; + // Hide the label for now because we are not sure if there are paths + // where legacy token resolution is in play where this could not be resolved. + $this->tokensMetadata['primary_address.state_province_id:label']['audience'] = 'sysadmin'; + // Hide this really obscure one. Just cos it annoys me. + $this->tokensMetadata['primary_address.manual_geo_code:label']['audience'] = 'sysadmin'; + Civi::cache('metadata')->set($this->getCacheKey(), $this->tokensMetadata); + return $this->tokensMetadata; + } + + /** + * Get the contact for the row. + * + * @param int $contactId + * @param array $requiredFields + * @param bool $getAll + * + * @return array + * @throws \CRM_Core_Exception + */ + protected function getContact(int $contactId, array $requiredFields, bool $getAll = FALSE): array { + $returnProperties = []; + if (in_array('checksum', $requiredFields, TRUE)) { + $returnProperties[] = 'hash'; + } + foreach ($this->getTokenMappingsForRelatedEntities() as $oldName => $newName) { + if (in_array($oldName, $requiredFields, TRUE)) { + $returnProperties[] = $newName; + } + } + $joins = []; + $customFields = []; + foreach ($requiredFields as $field) { + $fieldSpec = $this->getMetadataForField($field); + $prefix = ''; + if (isset($fieldSpec['table_name']) && $fieldSpec['table_name'] !== 'civicrm_contact') { + $tableAlias = str_replace('civicrm_', 'primary_', $fieldSpec['table_name']); + $joins[$tableAlias] = $fieldSpec['entity']; + + $prefix = $tableAlias . '.'; + } + if ($fieldSpec['type'] === 'Custom') { + $customFields['custom_' . $fieldSpec['custom_field_id']] = $fieldSpec['name']; + } + $returnProperties[] = $prefix . $this->getMetadataForField($field)['name']; + } + + if ($getAll) { + $returnProperties = array_merge(['*', 'custom.*'], $this->getDeprecatedTokens(), $this->getTokenMappingsForRelatedEntities()); + } + + $contactApi = Contact::get($this->checkPermissions) + ->setSelect($returnProperties)->addWhere('id', '=', $contactId); + foreach ($joins as $alias => $joinEntity) { + $contactApi->addJoin($joinEntity . ' AS ' . $alias, + 'LEFT', + ['id', '=', $alias . '.contact_id'], + // For website the fact we use 'first' is the deduplication. + ($joinEntity !== 'Website' ? [$alias . '.is_primary', '=', 1] : [])); + } + $contact = $contactApi->execute()->first(); + + foreach ($this->getDeprecatedTokens() as $apiv3Name => $fieldName) { + // it would be set already with the right value for a greeting token + // the query object returns the db value for email_greeting_display + // and a numeric value for email_greeting if you put email_greeting + // in the return properties. + if (!isset($contact[$apiv3Name]) && array_key_exists($fieldName, $contact)) { + $contact[$apiv3Name] = $contact[$fieldName]; + } + } + foreach ($this->getTokenMappingsForRelatedEntities() as $oldName => $newName) { + if (isset($contact[$newName])) { + $contact[$oldName] = $contact[$newName]; + } + } + + //update value of custom field token + foreach ($customFields as $apiv3Name => $fieldName) { + $value = $contact[$fieldName]; + if ($this->getMetadataForField($apiv3Name)['data_type'] === 'Boolean') { + $value = (int) $value; + } + $contact[$apiv3Name] = \CRM_Core_BAO_CustomField::displayValue($value, \CRM_Core_BAO_CustomField::getKeyID($apiv3Name)); + } + + return $contact; + } + + /** + * Get the array of the return fields from 'get all'. + * + * This is the list from the BAO_Query object but copied + * here to be 'frozen in time'. The goal is to map to apiv4 + * and stop using the legacy call to load the contact. + * + * @return array + */ + protected function getAllContactReturnFields(): array { + return [ + 'image_URL' => 1, + 'legal_identifier' => 1, + 'external_identifier' => 1, + 'contact_type' => 1, + 'contact_sub_type' => 1, + 'sort_name' => 1, + 'display_name' => 1, + 'preferred_mail_format' => 1, + 'nick_name' => 1, + 'first_name' => 1, + 'middle_name' => 1, + 'last_name' => 1, + 'prefix_id' => 1, + 'suffix_id' => 1, + 'formal_title' => 1, + 'communication_style_id' => 1, + 'birth_date' => 1, + 'gender_id' => 1, + 'street_address' => 1, + 'supplemental_address_1' => 1, + 'supplemental_address_2' => 1, + 'supplemental_address_3' => 1, + 'city' => 1, + 'postal_code' => 1, + 'postal_code_suffix' => 1, + 'state_province' => 1, + 'country' => 1, + 'world_region' => 1, + 'geo_code_1' => 1, + 'geo_code_2' => 1, + 'email' => 1, + 'on_hold' => 1, + 'phone' => 1, + 'im' => 1, + 'household_name' => 1, + 'organization_name' => 1, + 'deceased_date' => 1, + 'is_deceased' => 1, + 'job_title' => 1, + 'legal_name' => 1, + 'sic_code' => 1, + 'current_employer' => 1, + 'do_not_email' => 1, + 'do_not_mail' => 1, + 'do_not_sms' => 1, + 'do_not_phone' => 1, + 'do_not_trade' => 1, + 'is_opt_out' => 1, + 'contact_is_deleted' => 1, + 'preferred_communication_method' => 1, + 'preferred_language' => 1, + ]; + } + + /** + * These tokens still work but we don't advertise them. + * + * We can remove from the following places + * - scheduled reminders + * - add to 'blocked' on pdf letter & email + * + * & then at some point start issuing warnings for them + * but contact tokens are pretty central so it might be + * a bit drawn out. + * + * @return string[] + * Keys are deprecated tokens and values are their replacements. + */ + protected function getDeprecatedTokens(): array { + return [ + 'individual_prefix' => 'prefix_id:label', + 'individual_suffix' => 'suffix_id:label', + 'contact_type' => 'contact_type:label', + 'gender' => 'gender_id:label', + 'communication_style' => 'communication_style_id:label', + 'preferred_communication_method' => 'preferred_communication_method:label', + 'email_greeting' => 'email_greeting_display', + 'postal_greeting' => 'postal_greeting_display', + 'addressee' => 'addressee_display', + 'contact_id' => 'id', + 'contact_source' => 'source', + 'contact_is_deleted' => 'is_deleted', + 'current_employer_id' => 'employer_id', + ]; + } + + /** + * Get the tokens that are accessed by joining onto a related entity. + * + * Note the original thinking was to migrate to advertising the tokens + * that more accurately reflect the schema & also add support for e.g + * billing_address.street_address - which would be hugely useful for workflow + * message templates. + * + * However that feels like a bridge too far for this round + * since we haven't quite hit the goal of all token processing going through + * the token processor & we risk advertising tokens that don't work if we get + * ahead of that process. + * + * @return string[] + */ + protected function getTokenMappingsForRelatedEntities(): array { + return [ + 'on_hold' => 'primary_email.on_hold', + 'on_hold:label' => 'primary_email.on_hold:label', + 'phone_type_id' => 'primary_phone.phone_type_id', + 'phone_type_id:label' => 'primary_phone.phone_type_id:label', + 'current_employer' => 'employer_id.display_name', + 'location_type_id' => 'primary_address.location_type_id', + 'location_type' => 'primary_address.location_type_id:label', + 'location_type_id:label' => 'primary_address.location_type_id:label', + 'street_address' => 'primary_address.street_address', + 'address_id' => 'primary_address.id', + 'address_name' => 'primary_address.name', + 'street_number' => 'primary_address.street_number', + 'street_number_suffix' => 'primary_address.street_number_suffix', + 'street_name' => 'primary_address.street_name', + 'street_unit' => 'primary_address.street_unit', + 'supplemental_address_1' => 'primary_address.supplemental_address_1', + 'supplemental_address_2' => 'primary_address.supplemental_address_2', + 'supplemental_address_3' => 'primary_address.supplemental_address_3', + 'city' => 'primary_address.city', + 'postal_code' => 'primary_address.postal_code', + 'postal_code_suffix' => 'primary_address.postal_code_suffix', + 'geo_code_1' => 'primary_address.geo_code_1', + 'geo_code_2' => 'primary_address.geo_code_2', + 'manual_geo_code' => 'primary_address.manual_geo_code', + 'master_id' => 'primary_address.master_id', + 'county' => 'primary_address.county_id:label', + 'county_id' => 'primary_address.county_id', + 'state_province' => 'primary_address.state_province_id:abbr', + 'state_province_id' => 'primary_address.state_province_id', + 'country' => 'primary_address.country_id:label', + 'country_id' => 'primary_address.country_id', + 'world_region' => 'primary_address.country_id.region_id:name', + 'phone_type' => 'primary_phone.phone_type_id:label', + 'phone' => 'primary_phone.phone', + 'phone_ext' => 'primary_phone.phone_ext', + 'email' => 'primary_email.email', + 'signature_text' => 'primary_email.signature_text', + 'signature_html' => 'primary_email.signature_html', + 'im' => 'primary_im.name', + 'im_provider' => 'primary_im.provider_id', + 'provider_id:label' => 'primary_im.provider_id:label', + 'provider_id' => 'primary_im.provider_id', + 'openid' => 'primary_openid.openid', + 'url' => 'primary_website.url', + ]; + } + + /** + * Get calculated or otherwise 'special', tokens. + * + * @return array[] + */ + protected function getBespokeTokens(): array { + return [ + 'checksum' => [ + 'title' => ts('Checksum'), + 'name' => 'checksum', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', + ], + 'employer_id.display_name' => [ + 'title' => ts('Current Employer'), + 'name' => 'employer_id.display_name', + 'type' => 'mapped', + 'api_v3' => 'current_employer', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', + ], + 'primary_address.country_id.region_id:name' => [ + 'title' => ts('World Region'), + 'name' => 'country_id.region_id.name', + 'type' => 'mapped', + 'api_v3' => 'world_region', + 'options' => NULL, + 'data_type' => 'String', + 'advertised_name' => 'world_region', + 'audience' => 'user', + ], + // this gets forced out if we specify individual fields + 'organization_name' => [ + 'title' => ts('Organization name'), + 'name' => 'organization_name', + 'type' => 'Field', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'sysadmin', + ], + ]; + } + + /** + * Get the tokens defined by the legacy hook. + * + * @return array + */ + protected function getHookTokens(): array { + if ($this->hookTokens === NULL) { + if (isset(Civi::$statics[__CLASS__]['hook_tokens'])) { + $this->hookTokens = Civi::$statics[__CLASS__]['hook_tokens']; + } + else { + $this->hookTokens = []; + \CRM_Utils_Hook::tokens($this->hookTokens); + Civi::$statics[__CLASS__]['hook_tokens'] = $this->hookTokens; + } + } + return $this->hookTokens; + } + +} diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 6fdfb2e8b029a312e34e436943842cd7f9861fa7..0a9a285a387cd7d05c99386b2b17282a80042119 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -1012,7 +1012,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { return FALSE; } - if (self::isContributionUpdateARefund($params['prevContribution']->contribution_status_id, $params['contribution']->contribution_status_id)) { + if (CRM_Contribute_BAO_FinancialProcessor::isContributionUpdateARefund($params['prevContribution']->contribution_status_id, $params['contribution']->contribution_status_id)) { // @todo we should stop passing $params by reference - splitting this out would be a step towards that. $params['trxnParams']['total_amount'] = -$params['total_amount']; } @@ -1118,87 +1118,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { CRM_Core_DAO::executeQuery($query, $fparams); } - /** - * Create the financial items for the line. - * - * @param array $params - * @param string $context - * @param array $fields - * @param array $previousLineItems - * @param array $inputParams - * @param bool $isARefund - * @param array $trxnIds - * @param int $fieldId - * - * @return array - */ - private static function createFinancialItemsForLine($params, $context, $fields, array $previousLineItems, array $inputParams, bool $isARefund, $trxnIds, $fieldId): array { - foreach ($fields as $fieldValueId => $lineItemDetails) { - $prevFinancialItem = CRM_Financial_BAO_FinancialItem::getPreviousFinancialItem($lineItemDetails['id']); - $receiveDate = CRM_Utils_Date::isoToMysql($params['prevContribution']->receive_date); - if ($params['contribution']->receive_date) { - $receiveDate = CRM_Utils_Date::isoToMysql($params['contribution']->receive_date); - } - - $financialAccount = CRM_Contribute_BAO_FinancialProcessor::getFinancialAccountForStatusChangeTrxn($params, CRM_Utils_Array::value('financial_account_id', $prevFinancialItem)); - - $currency = $params['prevContribution']->currency; - if ($params['contribution']->currency) { - $currency = $params['contribution']->currency; - } - $previousLineItemTotal = CRM_Utils_Array::value('line_total', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); - $itemParams = [ - 'transaction_date' => $receiveDate, - 'contact_id' => $params['prevContribution']->contact_id, - 'currency' => $currency, - 'amount' => self::getFinancialItemAmountFromParams($inputParams, $context, $lineItemDetails, $isARefund, $previousLineItemTotal), - 'description' => $prevFinancialItem['description'] ?? NULL, - 'status_id' => $prevFinancialItem['status_id'], - 'financial_account_id' => $financialAccount, - 'entity_table' => 'civicrm_line_item', - 'entity_id' => $lineItemDetails['id'], - ]; - $financialItem = CRM_Financial_BAO_FinancialItem::create($itemParams, NULL, $trxnIds); - $params['line_item'][$fieldId][$fieldValueId]['deferred_line_total'] = $itemParams['amount']; - $params['line_item'][$fieldId][$fieldValueId]['financial_item_id'] = $financialItem->id; - - if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context === 'changeFinancialType')) { - $taxAmount = (float) $lineItemDetails['tax_amount']; - if ($context === 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') { - // reverse the Sale Tax amount if there is no tax rate associated with new Financial Type - $taxAmount = CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); - } - elseif ($previousLineItemTotal != $lineItemDetails['line_total']) { - $taxAmount -= CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); - } - if ($taxAmount != 0) { - $itemParams['amount'] = self::getMultiplier($params['contribution']->contribution_status_id, $context) * $taxAmount; - $itemParams['description'] = CRM_Invoicing_Utils::getTaxTerm(); - if ($lineItemDetails['financial_type_id']) { - $itemParams['financial_account_id'] = CRM_Financial_BAO_FinancialAccount::getSalesTaxFinancialAccount($lineItemDetails['financial_type_id']); - } - CRM_Financial_BAO_FinancialItem::create($itemParams, NULL, $trxnIds); - } - } - } - return $params; - } - - /** - * Does this contributtion status update represent a refund. - * - * @param int $previousContributionStatusID - * @param int $currentContributionStatusID - * - * @return bool - */ - private static function isContributionUpdateARefund($previousContributionStatusID, $currentContributionStatusID): bool { - if ('Completed' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $previousContributionStatusID)) { - return FALSE; - } - return self::isContributionStatusNegative($currentContributionStatusID); - } - /** * Get transaction information about the contribution. * @@ -2459,7 +2378,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ // array_filter with strlen filters out NULL, '' and FALSE but not 0. ], 'strlen') ); - $input['line_item'] = $contributionParams['line_item'] = $templateContribution['line_item']; + $contributionParams['line_item'] = $templateContribution['line_item']; $contributionParams['status_id'] = 'Pending'; foreach (['contact_id', 'campaign_id', 'financial_type_id', 'currency', 'source', 'amount_level', 'address_id', 'on_behalf', 'source_contact_id', 'tax_amount', 'contribution_page_id', 'total_amount'] as $fieldName) { @@ -2794,11 +2713,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $template->assign('cancelSubscriptionUrl', $paymentObject->subscriptionURL($entityID, $entity, 'cancel')); $template->assign('updateSubscriptionBillingUrl', $paymentObject->subscriptionURL($entityID, $entity, 'billing')); $template->assign('updateSubscriptionUrl', $paymentObject->subscriptionURL($entityID, $entity, 'update')); - - if ($this->_relatedObjects['paymentProcessor']['billing_mode'] & CRM_Core_Payment::BILLING_MODE_FORM) { - //direct mode showing billing block, so use directIPN for temporary - $template->assign('contributeMode', 'directIPN'); - } } // todo remove strtolower - check consistency if (strtolower($this->_component) === 'event') { @@ -3064,15 +2978,8 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac // and this function should assign them (assigning null if not set). // the way the pcpParams & honor Params section works is a baby-step towards this. $template = CRM_Core_Smarty::singleton(); - $template->assign('first_name', $this->_relatedObjects['contact']->first_name); - $template->assign('last_name', $this->_relatedObjects['contact']->last_name); - $template->assign('displayName', $this->_relatedObjects['contact']->display_name); $template->assign('billingName', $values['billingName']); - // For some unit tests contribution cannot contain paymentProcessor information - $billingMode = empty($this->_relatedObjects['paymentProcessor']) ? CRM_Core_Payment::BILLING_MODE_NOTIFY : $this->_relatedObjects['paymentProcessor']['billing_mode']; - $template->assign('contributeMode', CRM_Core_SelectValues::contributeMode()[$billingMode] ?? NULL); - //assign honor information to receipt message $softRecord = CRM_Contribute_BAO_ContributionSoft::getSoftContribution($this->id); @@ -3496,7 +3403,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $params['trxnParams']['to_financial_account_id'] = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialTrxn', $lastFinancialTrxnId['financialTrxnId'], 'to_financial_account_id'); } } - self::updateFinancialAccounts($params, 'changeFinancialType'); + CRM_Contribute_BAO_FinancialProcessor::updateFinancialAccounts($params, 'changeFinancialType'); $params['skipLineItem'] = FALSE; foreach ($params['line_item'] as &$lineItems) { foreach ($lineItems as &$line) { @@ -3511,7 +3418,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac if (isset($params['fee_amount'])) { $params['trxnParams']['fee_amount'] = $params['fee_amount']; } - self::updateFinancialAccounts($params); + CRM_Contribute_BAO_FinancialProcessor::updateFinancialAccounts($params); CRM_Core_BAO_FinancialTrxn::createDeferredTrxn(CRM_Utils_Array::value('line_item', $params), $params['contribution'], TRUE); $params['trxnParams']['to_financial_account_id'] = $trxnParams['to_financial_account_id']; $updated = TRUE; @@ -3533,7 +3440,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac //Update Financial Records $callUpdateFinancialAccounts = self::updateFinancialAccountsOnContributionStatusChange($params); if ($callUpdateFinancialAccounts) { - self::updateFinancialAccounts($params, 'changedStatus'); + CRM_Contribute_BAO_FinancialProcessor::updateFinancialAccounts($params, 'changedStatus'); CRM_Core_BAO_FinancialTrxn::createDeferredTrxn(CRM_Utils_Array::value('line_item', $params), $params['contribution'], TRUE, 'changedStatus'); } $updated = TRUE; @@ -3562,7 +3469,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac ) { //Update Financial Records $params['trxnParams']['from_financial_account_id'] = NULL; - self::updateFinancialAccounts($params, 'changedAmount'); + CRM_Contribute_BAO_FinancialProcessor::updateFinancialAccounts($params, 'changedAmount'); CRM_Core_BAO_FinancialTrxn::createDeferredTrxn(CRM_Utils_Array::value('line_item', $params), $params['contribution'], TRUE, 'changedAmount'); $updated = TRUE; } @@ -3633,41 +3540,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac return $return; } - /** - * Update all financial accounts entry. - * - * @param array $params - * Contribution object, line item array and params for trxn. - * - * @param string $context - * Update scenarios. - * - * @todo stop passing $params by reference. It is unclear the purpose of doing this & - * adds unpredictability. - * - */ - public static function updateFinancialAccounts(&$params, $context = NULL) { - $trxnID = NULL; - $inputParams = $params; - $isARefund = self::isContributionUpdateARefund($params['prevContribution']->contribution_status_id, $params['contribution']->contribution_status_id); - - if ($context == 'changedAmount' || $context == 'changeFinancialType') { - // @todo we should stop passing $params by reference - splitting this out would be a step towards that. - $params['trxnParams']['total_amount'] = $params['trxnParams']['net_amount'] = ($params['total_amount'] - $params['prevContribution']->total_amount); - } - - $trxn = CRM_Core_BAO_FinancialTrxn::create($params['trxnParams']); - // @todo we should stop passing $params by reference - splitting this out would be a step towards that. - $params['entity_id'] = $trxn->id; - - $itemParams['entity_table'] = 'civicrm_line_item'; - $trxnIds['id'] = $params['entity_id']; - $previousLineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution']->id); - foreach ($params['line_item'] as $fieldId => $fields) { - $params = self::createFinancialItemsForLine($params, $context, $fields, $previousLineItems, $inputParams, $isARefund, $trxnIds, $fieldId); - } - } - /** * Is this contribution status a reversal. * @@ -4449,80 +4321,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac return self::getValues(['id' => $contributionID]); } - /** - * Get the amount for the financial item row. - * - * Helper function to start to break down recordFinancialTransactions for readability. - * - * The logic is more historical than .. logical. Paths other than the deprecated one are tested. - * - * Codewise, several somewhat disimmilar things have been squished into recordFinancialAccounts - * for historical reasons. Going forwards we can hope to add tests & improve readibility - * of that function - * - * @param array $params - * Params as passed to contribution.create - * - * @param string $context - * changeFinancialType| changedAmount - * @param array $lineItemDetails - * Line items. - * @param bool $isARefund - * Is this a refund / negative transaction. - * @param int $previousLineItemTotal - * - * @return float - * @todo move recordFinancialAccounts & helper functions to their own class? - * - */ - protected static function getFinancialItemAmountFromParams($params, $context, $lineItemDetails, $isARefund, $previousLineItemTotal) { - if ($context == 'changedAmount') { - $lineTotal = $lineItemDetails['line_total']; - if ($lineTotal != $previousLineItemTotal) { - $lineTotal -= $previousLineItemTotal; - } - return $lineTotal; - } - elseif ($context == 'changeFinancialType') { - return -$lineItemDetails['line_total']; - } - elseif ($context == 'changedStatus') { - $cancelledTaxAmount = 0; - if ($isARefund) { - $cancelledTaxAmount = CRM_Utils_Array::value('tax_amount', $lineItemDetails, '0.00'); - } - return self::getMultiplier($params['contribution']->contribution_status_id, $context) * ((float) $lineItemDetails['line_total'] + (float) $cancelledTaxAmount); - } - elseif ($context === NULL) { - // erm, yes because? but, hey, it's tested. - return $lineItemDetails['line_total']; - } - else { - return self::getMultiplier($params['contribution']->contribution_status_id, $context) * ((float) $lineItemDetails['line_total']); - } - } - - /** - * Get the multiplier for adjusting rows. - * - * If we are dealing with a refund or cancellation then it will be a negative - * amount to reflect the negative transaction. - * - * If we are changing Financial Type it will be a negative amount to - * adjust down the old type. - * - * @param int $contribution_status_id - * @param string $context - * - * @return int - */ - protected static function getMultiplier($contribution_status_id, $context) { - if ($context == 'changeFinancialType' || self::isContributionStatusNegative($contribution_status_id)) { - return -1; - } - return 1; - } - /** * Does this transaction reflect a payment instrument change. * @@ -5060,6 +4858,8 @@ LIMIT 1;"; } /** + * Do not use - unused in core. + * * Function to replace contribution tokens. * * @param array $contributionIds @@ -5076,6 +4876,8 @@ LIMIT 1;"; * * @param bool $escapeSmarty * + * @deprecated + * * @return array * @throws \CiviCRM_API3_Exception */ @@ -5102,9 +4904,15 @@ LIMIT 1;"; } /** + * Do not use - still called from CRM_Contribute_Form_Task_PDFLetter + * + * This needs to be refactored out of use & deprecated out of existence. + * * Get the contribution fields for $id and display labels where * appropriate (if the token is present). * + * @deprecated + * * @param int $id * @param array $messageToken * @@ -5123,11 +4931,34 @@ LIMIT 1;"; $result['values'][$id][$fieldName] = CRM_Core_BAO_CustomField::displayValue($result['values'][$id][$fieldName], $fieldName); } } - $processor = new CRM_Contribute_Tokens(); - $pseudoFields = array_keys($processor->getPseudoTokens()); + + $pseudoFields = [ + 'financial_type_id:label', + 'financial_type_id:name', + 'contribution_page_id:label', + 'contribution_page_id:name', + 'payment_instrument_id:label', + 'payment_instrument_id:name', + 'is_test:label', + 'is_pay_later:label', + 'contribution_status_id:label', + 'contribution_status_id:name', + 'is_template:label', + 'campaign_id:label', + 'campaign_id:name', + ]; foreach ($pseudoFields as $pseudoField) { $split = explode(':', $pseudoField); - $result['values'][$id][$pseudoField] = $processor->getPseudoValue($split[0], $split[1], $result['values'][$id][$split[0]] ?? ''); + $pseudoKey = $split[1]; + $realField = $split[0]; + $fieldValue = $result['values'][$id][$realField] ?? ''; + if ($pseudoKey === 'name') { + $fieldValue = (string) CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', $realField, $fieldValue); + } + if ($pseudoKey === 'label') { + $fieldValue = (string) CRM_Core_PseudoConstant::getLabel('CRM_Contribute_BAO_Contribution', $realField, $fieldValue); + } + $result['values'][$id][$pseudoField] = $fieldValue; } } return $result; diff --git a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php index a444ad2a8d4696f25404840877fe8669e4d27f7a..a5161686af547232c51f70cb78c66eb7a5448cb3 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php +++ b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php @@ -208,13 +208,13 @@ LIMIT 1 * Get contribution statuses by entity e.g. contribution, membership or 'participant' * * @param string $usedFor - * @param int $id + * @param string $name * Contribution ID * * @return array * Array of contribution statuses in array('status id' => 'label') format */ - public static function getContributionStatuses($usedFor = 'contribution', $id = NULL) { + public static function getContributionStatuses($usedFor = 'contribution', $name = NULL) { if ($usedFor === 'pledge') { $statusNames = CRM_Pledge_BAO_Pledge::buildOptions('status_id', 'validate'); } @@ -232,7 +232,7 @@ LIMIT 1 'Template', ]; // on create fetch statuses on basis of component - if (!$id) { + if (!$name) { $statusNamesToUnset = array_merge($statusNamesToUnset, [ 'Refunded', 'Chargeback', @@ -266,8 +266,7 @@ LIMIT 1 } } else { - $contributionStatus = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $id, 'contribution_status_id'); - $name = $statusNames[$contributionStatus] ?? NULL; + switch ($name) { case 'Completed': // [CRM-17498] Removing unsupported status change options. diff --git a/civicrm/CRM/Contribute/BAO/ContributionRecur.php b/civicrm/CRM/Contribute/BAO/ContributionRecur.php index d7a67001f2cbb5198b30af668f4eb794e58d2ae6..980782b6a071266c7728148df335abb49858c3ce 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/BAO/ContributionRecur.php @@ -637,32 +637,6 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) } } - /** - * Send start or end notification for recurring payments. - * - * @param array $ids - * @param CRM_Contribute_BAO_ContributionRecur $recur - * @param bool $isFirstOrLastRecurringPayment - */ - public static function sendRecurringStartOrEndNotification($ids, $recur, $isFirstOrLastRecurringPayment) { - CRM_Core_Error::deprecatedFunctionWarning('use CRM_Contribute_BAO_ContributionPage::recurringNotify'); - if ($isFirstOrLastRecurringPayment) { - $autoRenewMembership = FALSE; - if ($recur->id && - isset($ids['membership']) && $ids['membership'] - ) { - $autoRenewMembership = TRUE; - } - - //send recurring Notification email for user - CRM_Contribute_BAO_ContributionPage::recurringNotify( - $ids['contribution'], - $isFirstOrLastRecurringPayment, - $recur - ); - } - } - /** * Copy custom data of the initial contribution into its recurring contributions. * @@ -1089,4 +1063,32 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) return CRM_Core_PseudoConstant::get(__CLASS__, $fieldName, $params, $context); } + /** + * Get the from address to use for the recurring contribution. + * + * This uses the contribution page id, if there is one, or the default domain one. + * + * @param int $id + * Recurring contribution ID. + * + * @internal + * + * @return string + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public static function getRecurFromAddress(int $id): string { + $details = Contribution::get(FALSE) + ->addWhere('contribution_recur_id', '=', $id) + ->addWhere('contribution_page_id', 'IS NOT NULL') + ->addSelect('contribution_page_id.receipt_from_name', 'contribution_page_id.receipt_from_email') + ->addOrderBy('receive_date', 'DESC') + ->execute()->first(); + if (empty($details['contribution_page_id.receipt_from_email'])) { + $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); + return "$domainValues[0] <$domainValues[1]>"; + } + return '"' . $details['contribution_page_id.receipt_from_name'] . '" <' . $details['contribution_page_id.receipt_from_email'] . '>'; + } + } diff --git a/civicrm/CRM/Contribute/BAO/FinancialProcessor.php b/civicrm/CRM/Contribute/BAO/FinancialProcessor.php index 06a9e824383ad80463eb0d7a0bd1c17b337f9579..e9c28ef83eba630f0c2054b4ad8aeea2617ef567 100644 --- a/civicrm/CRM/Contribute/BAO/FinancialProcessor.php +++ b/civicrm/CRM/Contribute/BAO/FinancialProcessor.php @@ -30,7 +30,7 @@ class CRM_Contribute_BAO_FinancialProcessor { * * @return int */ - public static function getFinancialAccountForStatusChangeTrxn($params, $default) { + private static function getFinancialAccountForStatusChangeTrxn($params, $default): int { if (!empty($params['financial_account_id'])) { return $params['financial_account_id']; } @@ -51,4 +51,194 @@ class CRM_Contribute_BAO_FinancialProcessor { return $default; } + /** + * Create the financial items for the line. + * + * @param array $params + * @param string $context + * @param array $fields + * @param array $previousLineItems + * @param array $inputParams + * @param bool $isARefund + * @param array $trxnIds + * @param int $fieldId + * + * @internal + * + * @return array + */ + public static function createFinancialItemsForLine($params, $context, $fields, array $previousLineItems, array $inputParams, bool $isARefund, $trxnIds, $fieldId): array { + foreach ($fields as $fieldValueId => $lineItemDetails) { + $prevFinancialItem = CRM_Financial_BAO_FinancialItem::getPreviousFinancialItem($lineItemDetails['id']); + $receiveDate = CRM_Utils_Date::isoToMysql($params['prevContribution']->receive_date); + if ($params['contribution']->receive_date) { + $receiveDate = CRM_Utils_Date::isoToMysql($params['contribution']->receive_date); + } + + $financialAccount = CRM_Contribute_BAO_FinancialProcessor::getFinancialAccountForStatusChangeTrxn($params, CRM_Utils_Array::value('financial_account_id', $prevFinancialItem)); + + $currency = $params['prevContribution']->currency; + if ($params['contribution']->currency) { + $currency = $params['contribution']->currency; + } + $previousLineItemTotal = CRM_Utils_Array::value('line_total', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); + $itemParams = [ + 'transaction_date' => $receiveDate, + 'contact_id' => $params['prevContribution']->contact_id, + 'currency' => $currency, + 'amount' => self::getFinancialItemAmountFromParams($inputParams, $context, $lineItemDetails, $isARefund, $previousLineItemTotal), + 'description' => $prevFinancialItem['description'] ?? NULL, + 'status_id' => $prevFinancialItem['status_id'], + 'financial_account_id' => $financialAccount, + 'entity_table' => 'civicrm_line_item', + 'entity_id' => $lineItemDetails['id'], + ]; + $financialItem = CRM_Financial_BAO_FinancialItem::create($itemParams, NULL, $trxnIds); + $params['line_item'][$fieldId][$fieldValueId]['deferred_line_total'] = $itemParams['amount']; + $params['line_item'][$fieldId][$fieldValueId]['financial_item_id'] = $financialItem->id; + + if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context === 'changeFinancialType')) { + $taxAmount = (float) $lineItemDetails['tax_amount']; + if ($context === 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') { + // reverse the Sale Tax amount if there is no tax rate associated with new Financial Type + $taxAmount = CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); + } + elseif ($previousLineItemTotal != $lineItemDetails['line_total']) { + $taxAmount -= CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0); + } + if ($taxAmount != 0) { + $itemParams['amount'] = CRM_Contribute_BAO_FinancialProcessor::getMultiplier($params['contribution']->contribution_status_id, $context) * $taxAmount; + $itemParams['description'] = CRM_Invoicing_Utils::getTaxTerm(); + if ($lineItemDetails['financial_type_id']) { + $itemParams['financial_account_id'] = CRM_Financial_BAO_FinancialAccount::getSalesTaxFinancialAccount($lineItemDetails['financial_type_id']); + } + CRM_Financial_BAO_FinancialItem::create($itemParams, NULL, $trxnIds); + } + } + } + return $params; + } + + /** + * Get the multiplier for adjusting rows. + * + * If we are dealing with a refund or cancellation then it will be a negative + * amount to reflect the negative transaction. + * + * If we are changing Financial Type it will be a negative amount to + * adjust down the old type. + * + * @param int $contribution_status_id + * @param string $context + * + * @return int + */ + public static function getMultiplier($contribution_status_id, $context) { + if ($context === 'changeFinancialType' || CRM_Contribute_BAO_Contribution::isContributionStatusNegative($contribution_status_id)) { + return -1; + } + return 1; + } + + /** + * Get the amount for the financial item row. + * + * Helper function to start to break down recordFinancialTransactions for readability. + * + * The logic is more historical than .. logical. Paths other than the deprecated one are tested. + * + * Codewise, several somewhat disimmilar things have been squished into recordFinancialAccounts + * for historical reasons. Going forwards we can hope to add tests & improve readibility + * of that function + * + * @param array $params + * Params as passed to contribution.create + * + * @param string $context + * changeFinancialType| changedAmount + * @param array $lineItemDetails + * Line items. + * @param bool $isARefund + * Is this a refund / negative transaction. + * @param int $previousLineItemTotal + * + * @return float + * @todo move recordFinancialAccounts & helper functions to their own class? + * + */ + protected static function getFinancialItemAmountFromParams($params, $context, $lineItemDetails, $isARefund, $previousLineItemTotal) { + if ($context == 'changedAmount') { + $lineTotal = $lineItemDetails['line_total']; + if ($lineTotal != $previousLineItemTotal) { + $lineTotal -= $previousLineItemTotal; + } + return $lineTotal; + } + elseif ($context == 'changeFinancialType') { + return -$lineItemDetails['line_total']; + } + elseif ($context == 'changedStatus') { + $cancelledTaxAmount = 0; + if ($isARefund) { + $cancelledTaxAmount = CRM_Utils_Array::value('tax_amount', $lineItemDetails, '0.00'); + } + return CRM_Contribute_BAO_FinancialProcessor::getMultiplier($params['contribution']->contribution_status_id, $context) * ((float) $lineItemDetails['line_total'] + (float) $cancelledTaxAmount); + } + elseif ($context === NULL) { + // erm, yes because? but, hey, it's tested. + return $lineItemDetails['line_total']; + } + else { + return CRM_Contribute_BAO_FinancialProcessor::getMultiplier($params['contribution']->contribution_status_id, $context) * ((float) $lineItemDetails['line_total']); + } + } + + /** + * Update all financial accounts entry. + * + * @param array $params + * Contribution object, line item array and params for trxn. + * + * @param string $context + * Update scenarios. + * + * @todo stop passing $params by reference. It is unclear the purpose of doing this & + * adds unpredictability. + * + */ + public static function updateFinancialAccounts(&$params, $context = NULL) { + $inputParams = $params; + $isARefund = self::isContributionUpdateARefund($params['prevContribution']->contribution_status_id, $params['contribution']->contribution_status_id); + + if ($context === 'changedAmount' || $context === 'changeFinancialType') { + // @todo we should stop passing $params by reference - splitting this out would be a step towards that. + $params['trxnParams']['total_amount'] = $params['trxnParams']['net_amount'] = ($params['total_amount'] - $params['prevContribution']->total_amount); + } + + $trxn = CRM_Core_BAO_FinancialTrxn::create($params['trxnParams']); + // @todo we should stop passing $params by reference - splitting this out would be a step towards that. + $params['entity_id'] = $trxn->id; + + $trxnIds['id'] = $params['entity_id']; + $previousLineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution']->id); + foreach ($params['line_item'] as $fieldId => $fields) { + $params = CRM_Contribute_BAO_FinancialProcessor::createFinancialItemsForLine($params, $context, $fields, $previousLineItems, $inputParams, $isARefund, $trxnIds, $fieldId); + } + } + + /** + * Does this contribution status update represent a refund. + * + * @param int $previousContributionStatusID + * @param int $currentContributionStatusID + * + * @return bool + */ + public static function isContributionUpdateARefund($previousContributionStatusID, $currentContributionStatusID): bool { + if ('Completed' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $previousContributionStatusID)) { + return FALSE; + } + return CRM_Contribute_BAO_Contribution::isContributionStatusNegative($currentContributionStatusID); + } + } diff --git a/civicrm/CRM/Contribute/BAO/Product.php b/civicrm/CRM/Contribute/BAO/Product.php index eb79c86d7b103188ca05821f50fb84c3f8ff69d9..f39e4e124fcbbce7d343cc44509594771e9de7e2 100644 --- a/civicrm/CRM/Contribute/BAO/Product.php +++ b/civicrm/CRM/Contribute/BAO/Product.php @@ -79,6 +79,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product { */ public static function create($params) { $id = $params['id'] ?? NULL; + $op = !empty($id) ? 'edit' : 'create'; if (empty($id)) { $defaultParams = [ 'id' => $id, @@ -90,7 +91,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product { ]; $params = array_merge($defaultParams, $params); } - + CRM_Utils_Hook::pre($op, 'Product', $id, $params); // Modify the submitted values for 'image' and 'thumbnail' so that we use // local URLs for these images when possible. if (isset($params['image'])) { @@ -104,6 +105,7 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product { $premium = new CRM_Contribute_DAO_Product(); $premium->copyValues($params); $premium->save(); + CRM_Utils_Hook::post($op, 'Product', $id, $premium); return $premium; } @@ -111,20 +113,11 @@ class CRM_Contribute_BAO_Product extends CRM_Contribute_DAO_Product { * Delete premium Types. * * @param int $productID - * + * @deprecated * @throws \CRM_Core_Exception */ public static function del($productID) { - //check dependencies - $premiumsProduct = new CRM_Contribute_DAO_PremiumsProduct(); - $premiumsProduct->product_id = $productID; - if ($premiumsProduct->find(TRUE)) { - throw new CRM_Core_Exception('Cannot delete a Premium that is linked to a Contribution page'); - } - // delete product - $premium = new CRM_Contribute_DAO_Product(); - $premium->id = $productID; - $premium->delete(); + static::deleteRecord(['id' => $productID]); } } diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php index 4913ac61c71793ef766945114b55bb9baa0a34c9..a1ebe04336bef2bc18c89a359379ec9f2d6d900f 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:6c94785d608dc72c00b663ee8ad4e180) + * (GenCodeChecksum:5f08744178821ce074d21fe4cdddbdaa) */ /** @@ -97,7 +97,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { /** * Last updated date for this record. mostly the last time a payment was received * - * @var datetime + * @var timestamp */ public $modified_date; @@ -450,11 +450,11 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { ], 'contribution_recur_modified_date' => [ 'name' => 'modified_date', - 'type' => CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME, + 'type' => CRM_Utils_Type::T_TIMESTAMP, 'title' => ts('Modified Date'), 'description' => ts('Last updated date for this record. mostly the last time a payment was received'), 'where' => 'civicrm_contribution_recur.modified_date', - 'default' => 'CURRENT_TIMESTAMP', + 'default' => 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', diff --git a/civicrm/CRM/Contribute/Form/AdditionalPayment.php b/civicrm/CRM/Contribute/Form/AdditionalPayment.php index 52bd3afaf8d0a769bd7414f811ad85c22e4f519a..eed602b3827f15c0996baaa46ab3d3770d19fdfd 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalPayment.php +++ b/civicrm/CRM/Contribute/Form/AdditionalPayment.php @@ -76,7 +76,7 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract if ($this->_view == 'transaction' && ($this->_action & CRM_Core_Action::BROWSE)) { $title = $this->assignPaymentInfoBlock(); - CRM_Utils_System::setTitle($title); + $this->setTitle($title); return; } if ($this->_component == 'event') { diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php index 22137d5d7934ee5dd44208411b8c799e246c0197..1504cb2db3a3e2f0bdf767c6c3e3bb365bf21706 100644 --- a/civicrm/CRM/Contribute/Form/CancelSubscription.php +++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php @@ -97,7 +97,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib // handle context redirection CRM_Contribute_BAO_ContributionRecur::setSubscriptionContext(); - CRM_Utils_System::setTitle($this->_mid ? ts('Cancel Auto-renewal') : ts('Cancel Recurring Contribution')); + $this->setTitle($this->_mid ? ts('Cancel Auto-renewal') : ts('Cancel Recurring Contribution')); $this->assign('mode', $this->_mode); if ($this->isSelfService()) { @@ -222,7 +222,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib 'id' => $this->getSubscriptionDetails()->recur_id, 'membership_id' => $this->_mid, 'processor_message' => $message, - 'cancel_reason' => $params['cancel_reason'], + 'cancel_reason' => $this->getSubmittedValue('cancel_reason'), ]); $tplParams = []; @@ -255,25 +255,6 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib } if (CRM_Utils_Array::value('is_notify', $params) == 1) { - if ($this->getSubscriptionDetails()->contribution_page_id) { - CRM_Core_DAO::commonRetrieveAll( - 'CRM_Contribute_DAO_ContributionPage', - 'id', - $this->getSubscriptionDetails()->contribution_page_id, - $value, - ['title', 'receipt_from_name', 'receipt_from_email'] - ); - $receiptFrom - = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$this->getSubscriptionDetails()->contribution_page_id]) . - '" <' . - $value[$this->getSubscriptionDetails()->contribution_page_id]['receipt_from_email'] . - '>'; - } - else { - $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); - $receiptFrom = "$domainValues[0] <$domainValues[1]>"; - } - // send notification $sendTemplateParams = [ @@ -283,7 +264,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib 'tplParams' => $tplParams, //'isTest' => $isTest, set this from _objects 'PDFFilename' => 'receipt.pdf', - 'from' => $receiptFrom, + 'from' => CRM_Contribute_BAO_ContributionRecur::getRecurFromAddress($this->getContributionRecurID()), 'toName' => $this->_donorDisplayName, 'toEmail' => $this->_donorEmail, ]; diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php index 644f35a9b6ba142581344c08ff7d788c1c3fb65f..581251f49acdcb169b7ec745921560c5222be896 100644 --- a/civicrm/CRM/Contribute/Form/Contribution.php +++ b/civicrm/CRM/Contribute/Form/Contribution.php @@ -9,6 +9,7 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Contribution; use Civi\Payment\Exception\PaymentProcessorException; /** @@ -200,6 +201,13 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP */ public $submitOnce = TRUE; + /** + * Status of contribution prior to edit. + * + * @var string + */ + protected $previousContributionStatus; + /** * Explicitly declare the form context. */ @@ -235,10 +243,10 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // Get the contribution id if update $this->_id = CRM_Utils_Request::retrieve('id', 'Positive'); + $this->assign('isUsePaymentBlock', !empty($this->_id)); if (!empty($this->_id)) { $this->assignPaymentInfoBlock(); $this->assign('contribID', $this->_id); - $this->assign('isUsePaymentBlock', TRUE); } $this->_context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this); @@ -301,7 +309,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if ($this->_mode && $this->_id) { $this->_payNow = TRUE; $this->assign('payNow', $this->_payNow); - CRM_Utils_System::setTitle(ts('Pay with Credit Card')); + $this->setTitle(ts('Pay with Credit Card')); } elseif (!empty($this->_values['is_template'])) { $this->setPageTitle(ts('Template Contribution')); @@ -459,6 +467,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP * * @throws \CiviCRM_API3_Exception * @throws \CRM_Core_Exception + * @throws \API_Exception */ public function buildQuickForm() { if ($this->_id) { @@ -501,8 +510,10 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // build price set form. $buildPriceSet = FALSE; $invoicing = CRM_Invoicing_Utils::isInvoicingEnabled(); - $this->assign('invoicing', $invoicing); - + $this->assign('invoicing', CRM_Invoicing_Utils::isInvoicingEnabled()); + // This is a probably-deprecated approach to partial payments - assign here + // & if true it will be overwritten. + $this->assign('payNow', FALSE); $buildRecurBlock = FALSE; // display tax amount on edit contribution page @@ -572,24 +583,23 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } $this->payment_instrument_id = CRM_Utils_Array::value('payment_instrument_id', $defaults, $this->getDefaultPaymentInstrumentId()); - if (CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->payment_instrument_id) == TRUE) { - if (!empty($this->_recurPaymentProcessors)) { - $buildRecurBlock = TRUE; - if ($this->_ppID) { - // ppID denotes a pledge payment. - foreach ($this->_paymentProcessors as $processor) { - if (!empty($processor['is_recur']) && !empty($processor['object']) && $processor['object']->supports('recurContributionsForPledges')) { - $buildRecurBlock = TRUE; - break; - } - $buildRecurBlock = FALSE; + CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->payment_instrument_id); + if (!empty($this->_recurPaymentProcessors)) { + $buildRecurBlock = TRUE; + if ($this->_ppID) { + // ppID denotes a pledge payment. + foreach ($this->_paymentProcessors as $processor) { + if (!empty($processor['is_recur']) && !empty($processor['object']) && $processor['object']->supports('recurContributionsForPledges')) { + $buildRecurBlock = TRUE; + break; } + $buildRecurBlock = FALSE; } - if ($buildRecurBlock) { - CRM_Contribute_Form_Contribution_Main::buildRecur($this); - $this->setDefaults(['is_recur' => 0]); - $this->assign('buildRecurBlock', TRUE); - } + } + if ($buildRecurBlock) { + CRM_Contribute_Form_Contribution_Main::buildRecur($this); + $this->setDefaults(['is_recur' => 0]); + $this->assign('buildRecurBlock', TRUE); } } $this->addPaymentProcessorSelect(FALSE, $buildRecurBlock); @@ -654,21 +664,11 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->add('select', 'from_email_address', ts('Receipt From'), $this->_fromEmails); - $component = 'contribution'; $componentDetails = []; if ($this->_id) { $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); - if (!empty($componentDetails['membership'])) { - $component = 'membership'; - } - elseif (!empty($componentDetails['participant'])) { - $component = 'participant'; - } - } - if ($this->_ppID) { - $component = 'pledge'; } - $status = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses($component, $this->_id); + $status = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses('contribution', $this->getPreviousContributionStatus()); // define the status IDs that show the cancellation info, see CRM-17589 $cancelInfo_show_ids = []; @@ -1095,8 +1095,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } $this->set('params', $this->_params); - - $this->assign('receive_date', $this->_params['receive_date']); + // It actually makes no sense that we would set receive_date in params + // for credit card payments.... + $this->assign('receive_date', $this->_params['receive_date'] ?? date('Y-m-d H:i:s')); // Result has all the stuff we need // lets archive it to a financial transaction @@ -1494,7 +1495,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } $this->assign('lineItem', !empty($lineItem) && !$isQuickConfig ? $lineItem : FALSE); - $isEmpty = array_keys(array_flip($submittedValues['soft_credit_contact_id'])); + $isEmpty = array_keys(array_flip($submittedValues['soft_credit_contact_id'] ?? [])); if ($this->_id && count($isEmpty) == 1 && key($isEmpty) == NULL) { civicrm_api3('ContributionSoft', 'get', ['contribution_id' => $this->_id, 'pcp_id' => ['IS NULL' => 1], 'api.ContributionSoft.delete' => 1]); } @@ -1829,4 +1830,34 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } } + /** + * Get the contribution ID. + * + * @return int|null + */ + protected function getContributionID(): ?int { + return $this->_id; + } + + /** + * Get the selected contribution status. + * + * @return string|null + * + * @throws \API_Exception + */ + protected function getPreviousContributionStatus(): ?string { + if (!$this->getContributionID()) { + return NULL; + } + if (!$this->previousContributionStatus) { + $this->previousContributionStatus = Contribution::get(FALSE) + ->addWhere('id', '=', $this->getContributionID()) + ->addSelect('contribution_status_id:name') + ->execute() + ->first()['contribution_status_id:name']; + } + return $this->previousContributionStatus; + } + } diff --git a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php index 46e4ff43d8b1541686d8b0fbfda84edfa4b30d6e..623c9dd26eed4f32e27b0d2f1d7d4d0fdaf9a641 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php +++ b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php @@ -48,7 +48,7 @@ class CRM_Contribute_Form_Contribution_ThankYou extends CRM_Contribute_Form_Cont $this->assign('thankyou_footer', CRM_Utils_Array::value('thankyou_footer', $this->_values)); $this->assign('max_reminders', CRM_Utils_Array::value('max_reminders', $this->_values)); $this->assign('initial_reminder_day', CRM_Utils_Array::value('initial_reminder_day', $this->_values)); - CRM_Utils_System::setTitle(CRM_Utils_Array::value('thankyou_title', $this->_values)); + $this->setTitle(CRM_Utils_Array::value('thankyou_title', $this->_values)); // Make the contributionPageID available to the template $this->assign('contributionPageID', $this->_id); $this->assign('isShare', $this->_values['is_share']); diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php index aa03ed46eb2fc1704f0199bda604d18d2bfabbd0..f9adcb47c9bea3541cc7af6ccfad050d02d97e89 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php @@ -41,7 +41,7 @@ class CRM_Contribute_Form_ContributionPage_Settings extends CRM_Contribute_Form_ $this->_id, 'title' ); - CRM_Utils_System::setTitle(ts('Title and Settings') . " ($title)"); + $this->setTitle(ts('Title and Settings') . " ($title)"); foreach (['on_behalf', 'soft_credit'] as $module) { $ufJoinDAO = new CRM_Core_DAO_UFJoin(); diff --git a/civicrm/CRM/Contribute/Form/ContributionRecur.php b/civicrm/CRM/Contribute/Form/ContributionRecur.php index ef6a633f45e6393c1c465255a02245eacb91699b..ccf86182b1953dadbd83ecbb68d0397ccc605e76 100644 --- a/civicrm/CRM/Contribute/Form/ContributionRecur.php +++ b/civicrm/CRM/Contribute/Form/ContributionRecur.php @@ -195,6 +195,15 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form { return $sub->contact_id ? (int) $sub->contact_id : FALSE; } + /** + * Get the recurring contribution ID. + * + * @return int + */ + protected function getContributionRecurID(): int { + return $this->getSubscriptionDetails()->recur_id; + } + /** * Is this being used by a front end user to update their own recurring. * diff --git a/civicrm/CRM/Contribute/Form/ContributionView.php b/civicrm/CRM/Contribute/Form/ContributionView.php index 02b3ce815faab9df87b90de5c7f5042889b6e91f..64f4c1473c856bbf15cfd6a444880aa60c43ebab 100644 --- a/civicrm/CRM/Contribute/Form/ContributionView.php +++ b/civicrm/CRM/Contribute/Form/ContributionView.php @@ -172,10 +172,10 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form { } if (empty($values['is_template'])) { - CRM_Utils_System::setTitle(ts('View Contribution from') . ' ' . $displayName); + $this->setTitle(ts('View Contribution from') . ' ' . $displayName); } else { - CRM_Utils_System::setTitle(ts('View Template Contribution from') . ' ' . $displayName); + $this->setTitle(ts('View Template Contribution from') . ' ' . $displayName); } // add viewed contribution to recent items list diff --git a/civicrm/CRM/Contribute/Form/ManagePremiums.php b/civicrm/CRM/Contribute/Form/ManagePremiums.php index 45904ea49f2d114aa79026729bac73fb019aa9d8..9939eddc4dda01d7ef9d80b9c512603c2ecef644 100644 --- a/civicrm/CRM/Contribute/Form/ManagePremiums.php +++ b/civicrm/CRM/Contribute/Form/ManagePremiums.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Product; + /** * This class generates form components for Premiums. */ @@ -35,8 +37,7 @@ class CRM_Contribute_Form_ManagePremiums extends CRM_Contribute_Form { public function setDefaultValues() { $defaults = parent::setDefaultValues(); if ($this->_id) { - $params = ['id' => $this->_id]; - CRM_Contribute_BAO_Product::retrieve($params, $tempDefaults); + $tempDefaults = Product::get()->addWhere('id', '=', $this->_id)->execute()->first(); if (isset($tempDefaults['image']) && isset($tempDefaults['thumbnail'])) { $defaults['imageUrl'] = $tempDefaults['image']; $defaults['thumbnailUrl'] = $tempDefaults['thumbnail']; @@ -291,10 +292,10 @@ class CRM_Contribute_Form_ManagePremiums extends CRM_Contribute_Form { $this->_processImages($params); // Save the premium product to database - $premium = CRM_Contribute_BAO_Product::create($params); + $premium = Product::save()->addRecord($params)->execute()->first(); CRM_Core_Session::setStatus( - ts("The Premium '%1' has been saved.", [1 => $premium->name]), + ts("The Premium '%1' has been saved.", [1 => $premium['name']]), ts('Saved'), 'success'); } diff --git a/civicrm/CRM/Contribute/Form/Task.php b/civicrm/CRM/Contribute/Form/Task.php index b15aa0e23894ccbd2fe93806d95fb1deae5f5cd9..9a3b30871fe3cd08c59f11d419bbbb0e7e310e85 100644 --- a/civicrm/CRM/Contribute/Form/Task.php +++ b/civicrm/CRM/Contribute/Form/Task.php @@ -104,4 +104,13 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form_Task { ]); } + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + public function getTokenSchema(): array { + return ['contributionId', 'contactId']; + } + } diff --git a/civicrm/CRM/Contribute/Form/Task/Batch.php b/civicrm/CRM/Contribute/Form/Task/Batch.php index 5cf089e51a51bf89efa9f90cc98d89ea39789732..5381f47c91242ca3903b163aa971d065d381965a 100644 --- a/civicrm/CRM/Contribute/Form/Task/Batch.php +++ b/civicrm/CRM/Contribute/Form/Task/Batch.php @@ -72,7 +72,7 @@ class CRM_Contribute_Form_Task_Batch extends CRM_Contribute_Form_Task { throw new CRM_Core_Exception('ufGroupId is missing'); } $this->_title = ts('Update multiple contributions') . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); - CRM_Utils_System::setTitle($this->_title); + $this->setTitle($this->_title); $this->addDefaultButtons(ts('Save')); $this->_fields = []; diff --git a/civicrm/CRM/Contribute/Form/Task/Email.php b/civicrm/CRM/Contribute/Form/Task/Email.php index db83653ea539ae59a7434ed8ad75b5f65fe69582..da4b638b3620fdd5b3ab39f2cd3792618351abad 100644 --- a/civicrm/CRM/Contribute/Form/Task/Email.php +++ b/civicrm/CRM/Contribute/Form/Task/Email.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Contribution; + /** * This class provides the functionality to email a group of contacts. */ @@ -33,14 +35,34 @@ class CRM_Contribute_Form_Task_Email extends CRM_Contribute_Form_Task { } /** - * List available tokens for this form. + * Get the result rows to email. * * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception */ - public function listTokens() { - $tokens = CRM_Core_SelectValues::contactTokens(); - $tokens = array_merge(CRM_Core_SelectValues::contributionTokens(), $tokens); - return $tokens; + protected function getRows(): array { + $contributionDetails = Contribution::get(FALSE) + ->setSelect(['contact_id', 'id']) + ->addWhere('id', 'IN', $this->getContributionIDs()) + ->execute() + // Note that this indexing means that only the last + // contribution per contact is resolved to tokens. + // this is long-standing functionality, albeit possibly + // not thought through. + ->indexBy('contact_id'); + + // format contact details array to handle multiple emails from same contact + $formattedContactDetails = []; + foreach ($this->getEmails() as $details) { + $formattedContactDetails[$details['contact_id'] . '::' . $details['email']] = $details; + if (!empty($contributionDetails[$details['contact_id']])) { + $formattedContactDetails[$details['contact_id'] . '::' . $details['email']]['schema'] = ['contributionId' => $contributionDetails[$details['contact_id']]['id']]; + } + + } + return $formattedContactDetails; } } diff --git a/civicrm/CRM/Contribute/Form/Task/Invoice.php b/civicrm/CRM/Contribute/Form/Task/Invoice.php index 8d3b16769e465a0e6a4504edc071766e16199ab7..a3d5adab715bcdedd31924fc982f496e8f35e449 100644 --- a/civicrm/CRM/Contribute/Form/Task/Invoice.php +++ b/civicrm/CRM/Contribute/Form/Task/Invoice.php @@ -123,10 +123,10 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { CRM_Contact_Form_Task_EmailCommon::preProcessFromAddress($this); if ($this->_selectedOutput == 'email') { - CRM_Utils_System::setTitle(ts('Email Invoice')); + $this->setTitle(ts('Email Invoice')); } else { - CRM_Utils_System::setTitle(ts('Print Contribution Invoice')); + $this->setTitle(ts('Print Contribution Invoice')); } } diff --git a/civicrm/CRM/Contribute/Form/Task/PDF.php b/civicrm/CRM/Contribute/Form/Task/PDF.php index a34d5ded188a518276a7059cd49faf9e00209d76..2a9ea95e4525936fe6a2275e28bfff33c34c0a7a 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDF.php +++ b/civicrm/CRM/Contribute/Form/Task/PDF.php @@ -65,7 +65,7 @@ AND {$this->_componentClause}"; // we have all the contribution ids, so now we get the contact ids parent::setContactIDs(); CRM_Utils_System::appendBreadCrumb($breadCrumb); - CRM_Utils_System::setTitle(ts('Print Contribution Receipts')); + $this->setTitle(ts('Print Contribution Receipts')); // Ajax submit would interfere with pdf file download $this->preventAjaxSubmit(); } @@ -180,10 +180,10 @@ AND {$this->_componentClause}"; $mail = CRM_Contribute_BAO_Contribution::sendMail($input, $ids, $contribID, $elements['createPdf']); - if ($mail['html']) { + if (!empty($mail['html'])) { $message[] = $mail['html']; } - else { + elseif (!empty($mail['body'])) { $message[] = nl2br($mail['body']); } @@ -228,6 +228,7 @@ AND {$this->_componentClause}"; * @return array * array of common elements * + * @throws \CiviCRM_API3_Exception */ public static function getElements($contribIds, $params, $contactIds) { $pdfElements = []; @@ -242,21 +243,17 @@ AND {$this->_componentClause}"; $pdfElements['createPdf'] = FALSE; if (!empty($pdfElements['params']['output']) && - ($pdfElements['params']['output'] == "pdf_invoice" || $pdfElements['params']['output'] == "pdf_receipt") + ($pdfElements['params']['output'] === 'pdf_invoice' || $pdfElements['params']['output'] === 'pdf_receipt') ) { $pdfElements['createPdf'] = TRUE; } $excludeContactIds = []; if (!$pdfElements['createPdf']) { - $returnProperties = [ - 'email' => 1, - 'do_not_email' => 1, - 'is_deceased' => 1, - 'on_hold' => 1, - ]; - - list($contactDetails) = CRM_Utils_Token::getTokenDetails($contactIds, $returnProperties, FALSE, FALSE); + $contactDetails = civicrm_api3('Contact', 'get', [ + 'return' => ['email', 'do_not_email', 'is_deceased', 'on_hold'], + 'id' => ['IN' => $contactIds], + ])['values']; $pdfElements['suppressedEmails'] = 0; $suppressedEmails = 0; foreach ($contactDetails as $id => $values) { diff --git a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php index 330e1e2d59ea533faceea9804c423d47419bd8f7..23df8d1a916041bcae669750b18629cf6f4d9f09 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php +++ b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Token\TokenProcessor; + /** * * @package CRM @@ -112,28 +114,38 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { } $this->addElement('select', 'email_options', ts('Print and email options'), $emailOptions, [], "<br/>", FALSE); - $this->addButtons([ - [ - 'type' => 'upload', - 'name' => ts('Make Thank-you Letters'), - 'isDefault' => TRUE, - ], - [ - 'type' => 'cancel', - 'name' => ts('Done'), - ], - ]); + $this->addButtons($this->getButtons()); } + /** + * Get the name for the main submit button. + * + * @return string + */ + protected function getMainSubmitButtonName(): string { + return ts('Make Thank-you Letters'); + } + /** * Process the form after the input has been submitted and validated. * * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function postProcess() { $formValues = $this->controller->exportValues($this->getName()); - [$formValues, $categories, $html_message, $messageToken, $returnProperties] = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues); + [$formValues, $html_message] = $this->processMessageTemplate($formValues); + + $messageToken = CRM_Utils_Token::getTokens($html_message); + + $returnProperties = []; + if (isset($messageToken['contact'])) { + foreach ($messageToken['contact'] as $key => $value) { + $returnProperties[$value] = 1; + } + } + $isPDF = FALSE; $emailParams = []; if (!empty($formValues['email_options'])) { @@ -205,7 +217,7 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { if (empty($groupBy) || empty($contact['is_sent'][$groupBy][$groupByID])) { $html[$contributionId] = $this->generateHtml($contact, $contribution, $groupBy, $contributions, $realSeparator, $tableSeparators, $messageToken, $html_message, $separator, $grouped, $groupByID); $contactHtml[$contact['contact_id']][] = $html[$contributionId]; - if (!empty($formValues['email_options'])) { + if ($this->isSendEmails()) { if ($this->emailLetter($contact, $html[$contributionId], $isPDF, $formValues, $emailParams)) { $emailed++; if (!stristr($formValues['email_options'], 'both')) { @@ -215,39 +227,33 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { } $contact['is_sent'][$groupBy][$groupByID] = TRUE; } - // Update receipt/thankyou dates - $contributionParams = ['id' => $contributionId]; - if ($receipt_update) { - $contributionParams['receipt_date'] = $nowDate; - } - if ($thankyou_update) { - $contributionParams['thankyou_date'] = $nowDate; - } - if ($receipt_update || $thankyou_update) { - civicrm_api3('Contribution', 'create', $contributionParams); - $receipts = ($receipt_update ? $receipts + 1 : $receipts); - $thanks = ($thankyou_update ? $thanks + 1 : $thanks); + if ($this->isLiveMode()) { + // Update receipt/thankyou dates + $contributionParams = ['id' => $contributionId]; + if ($receipt_update) { + $contributionParams['receipt_date'] = $nowDate; + } + if ($thankyou_update) { + $contributionParams['thankyou_date'] = $nowDate; + } + if ($receipt_update || $thankyou_update) { + civicrm_api3('Contribution', 'create', $contributionParams); + $receipts = ($receipt_update ? $receipts + 1 : $receipts); + $thanks = ($thankyou_update ? $thanks + 1 : $thanks); + } } } $contactIds = array_keys($contacts); - CRM_Contact_Form_Task_PDFLetterCommon::createActivities($this, $html_message, $contactIds, CRM_Utils_Array::value('subject', $formValues, ts('Thank you letter')), CRM_Utils_Array::value('campaign_id', $formValues), $contactHtml); - $html = array_diff_key($html, $emailedHtml); - - if (!empty($formValues['is_unit_test'])) { - return $html; + // CRM-16725 Skip creation of activities if user is previewing their PDF letter(s) + if ($this->isLiveMode()) { + $this->createActivities($html_message, $contactIds, CRM_Utils_Array::value('subject', $formValues, ts('Thank you letter')), CRM_Utils_Array::value('campaign_id', $formValues), $contactHtml); } + $html = array_diff_key($html, $emailedHtml); //CRM-19761 if (!empty($html)) { - // Set the filename for the PDF using the Activity Subject, if defined. Remove unwanted characters and limit the length to 200 characters. - if (!empty($formValues['subject'])) { - $fileName = CRM_Utils_File::makeFilenameWithUnicode($formValues['subject'], '_', 200); - } - else { - $fileName = 'CiviLetter'; - } - + $fileName = $this->getFileName(); if ($this->getSubmittedValue('document_type') === 'pdf') { CRM_Utils_PDF_Utils::html2pdf($html, $fileName . '.pdf', FALSE, $formValues); } @@ -278,15 +284,21 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { } /** - * List available tokens for this form. + * Are emails to be sent out? + * + * @return bool + */ + protected function isSendEmails(): bool { + return $this->isLiveMode() && $this->getSubmittedValue('email_options'); + } + + /** + * Get the token processor schema required to list any tokens for this task. * * @return array */ - public function listTokens() { - $tokens = CRM_Core_SelectValues::contactTokens(); - $tokens = array_merge(CRM_Core_SelectValues::contributionTokens(), $tokens); - $tokens = array_merge(CRM_Core_SelectValues::domainTokens(), $tokens); - return $tokens; + public function getTokenSchema(): array { + return ['contributionId', 'contactId']; } /** @@ -424,7 +436,7 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { CRM_Core_Session::setStatus(ts('You have selected the table cell separator, but one or more token fields are not placed inside a table cell. This would result in invalid HTML, so comma separators have been used instead.')); } $validated = TRUE; - $html = str_replace($separator, $realSeparator, $this->resolveTokens($html_message, $contact, $contribution, $messageToken, $grouped, $separator, $groupedContributions)); + $html = str_replace($separator, $realSeparator, $this->resolveTokens($html_message, $contact, $contribution['id'], $grouped, $separator, $groupedContributions)); } return $html; @@ -532,8 +544,7 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { * * @param string $html_message * @param array $contact - * @param array $contribution - * @param array $messageToken + * @param int $contributionID * @param bool $grouped * Does this letter represent more than one contribution. * @param string $separator @@ -542,20 +553,42 @@ class CRM_Contribute_Form_Task_PDFLetter extends CRM_Contribute_Form_Task { * * @return string */ - protected function resolveTokens(string $html_message, $contact, $contribution, $messageToken, $grouped, $separator, $contributions): string { - if ($grouped) { - $tokenHtml = CRM_Utils_Token::replaceMultipleContributionTokens($separator, $html_message, $contributions, $messageToken); - } - else { - // no change to normal behaviour to avoid risk of breakage - $tokenHtml = CRM_Utils_Token::replaceContributionTokens($html_message, $contribution, TRUE, $messageToken); - } + protected function resolveTokens(string $html_message, $contact, $contributionID, $grouped, $separator, $contributions): string { $tokenContext = [ 'smarty' => (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY), 'contactId' => $contact['contact_id'], + 'schema' => ['contributionId'], ]; - $smarty = ['contact' => $contact]; - return CRM_Core_TokenSmarty::render(['html' => $tokenHtml], $tokenContext, $smarty)['html']; + if ($grouped) { + // First replace the contribution tokens. These are pretty ... special. + // if the text looks like `<td>{contribution.currency} {contribution.total_amount}</td>' + // and there are 2 rows with a currency separator of + // you wind up with a string like + // '<td>USD</td><td>USD></td> <td>$50</td><td>$89</td> + // see https://docs.civicrm.org/user/en/latest/contributions/manual-receipts-and-thank-yous/#grouped-contribution-thank-you-letters + $tokenProcessor = new TokenProcessor(\Civi::dispatcher(), $tokenContext); + $contributionTokens = CRM_Utils_Token::getTokens($html_message)['contribution'] ?? []; + foreach ($contributionTokens as $token) { + $tokenProcessor->addMessage($token, '{contribution.' . $token . '}', 'text/html'); + } + + foreach ($contributions as $contribution) { + $tokenProcessor->addRow([ + 'contributionId' => $contribution['id'], + 'contribution' => $contribution, + ]); + } + $tokenProcessor->evaluate(); + $resolvedTokens = []; + foreach ($contributionTokens as $token) { + foreach ($tokenProcessor->getRows() as $row) { + $resolvedTokens[$token][$row->context['contributionId']] = $row->render($token); + } + $html_message = str_replace('{contribution.' . $token . '}', implode($separator, $resolvedTokens[$token]), $html_message); + } + } + $tokenContext['contributionId'] = $contributionID; + return CRM_Core_TokenSmarty::render(['html' => $html_message], $tokenContext)['html']; } } diff --git a/civicrm/CRM/Contribute/Form/Task/PickProfile.php b/civicrm/CRM/Contribute/Form/Task/PickProfile.php index ea952ba5f591896579b1ecaec21bd3300b9626ef..ca4f3d8a8f5ba3565239f6c8099b6693b191bd5d 100644 --- a/civicrm/CRM/Contribute/Form/Task/PickProfile.php +++ b/civicrm/CRM/Contribute/Form/Task/PickProfile.php @@ -48,7 +48,7 @@ class CRM_Contribute_Form_Task_PickProfile extends CRM_Contribute_Form_Task { $session = CRM_Core_Session::singleton(); $this->_userContext = $session->readUserContext(); - CRM_Utils_System::setTitle(ts('Update multiple contributions')); + $this->setTitle(ts('Update multiple contributions')); $validate = FALSE; //validations diff --git a/civicrm/CRM/Contribute/Form/UpdateBilling.php b/civicrm/CRM/Contribute/Form/UpdateBilling.php index 9a1b1a939464cb7748b178ece0161b8acfa56836..6df7ba092af13bab47520712872b5bcbd5e72bce 100644 --- a/civicrm/CRM/Contribute/Form/UpdateBilling.php +++ b/civicrm/CRM/Contribute/Form/UpdateBilling.php @@ -34,8 +34,8 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution parent::preProcess(); if ($this->_crid) { // Are we cancelling a recurring contribution that is linked to an auto-renew membership? - if ($this->_subscriptionDetails->membership_id) { - $this->_mid = $this->_subscriptionDetails->membership_id; + if ($this->getSubscriptionDetails()->membership_id) { + $this->_mid = $this->getSubscriptionDetails()->membership_id; } } @@ -47,14 +47,13 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution if ($this->_mid) { $this->_paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_mid, 'membership', 'info'); $this->_paymentProcessor['object'] = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_mid, 'membership', 'obj'); - $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_mid, 'membership'); $membershipTypes = CRM_Member_PseudoConstant::membershipType(); $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $this->_mid, 'membership_type_id'); $this->assign('membershipType', CRM_Utils_Array::value($membershipTypeId, $membershipTypes)); $this->_mode = 'auto_renew'; } - if ((!$this->_crid && !$this->_coid && !$this->_mid) || (!$this->_subscriptionDetails)) { + if ((!$this->_crid && !$this->_coid && !$this->_mid) || (!$this->getSubscriptionDetails())) { throw new CRM_Core_Exception('Required information missing.'); } @@ -67,10 +66,10 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution $this->assignBillingType(); - $this->assign('frequency_unit', $this->_subscriptionDetails->frequency_unit); - $this->assign('frequency_interval', $this->_subscriptionDetails->frequency_interval); - $this->assign('amount', $this->_subscriptionDetails->amount); - $this->assign('installments', $this->_subscriptionDetails->installments); + $this->assign('recur_frequency_unit', $this->getSubscriptionDetails()->frequency_unit); + $this->assign('recur_frequency_interval', $this->getSubscriptionDetails()->frequency_interval); + $this->assign('amount', $this->getSubscriptionDetails()->amount); + $this->assign('installments', $this->getSubscriptionDetails()->installments); $this->assign('mode', $this->_mode); // handle context redirection @@ -86,7 +85,7 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution public function setDefaultValues() { $this->_defaults = []; - if ($this->_subscriptionDetails->contact_id) { + if ($this->getSubscriptionDetails()->contact_id) { $fields = []; $names = array( 'first_name', @@ -106,7 +105,7 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution $fields["email-{$this->_bltID}"] = 1; $fields['email-Primary'] = 1; - CRM_Core_BAO_UFGroup::setProfileDefaults($this->_subscriptionDetails->contact_id, $fields, $this->_defaults); + CRM_Core_BAO_UFGroup::setProfileDefaults($this->getSubscriptionDetails()->contact_id, $fields, $this->_defaults); // use primary email address if billing email address is empty if (empty($this->_defaults["email-{$this->_bltID}"]) && @@ -198,36 +197,37 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution list($key) = explode('-', $key); $processorParams[$key] = $val; } - $processorParams['state_province'] = CRM_Core_PseudoConstant::stateProvince($params["billing_state_province_id-{$this->_bltID}"], FALSE); - $processorParams['country'] = CRM_Core_PseudoConstant::country($params["billing_country_id-{$this->_bltID}"], FALSE); + $processorParams['billingStateProvince'] = $processorParams['state_province'] = CRM_Core_PseudoConstant::stateProvince($params["billing_state_province_id-{$this->_bltID}"], FALSE); + $processorParams['billingCountry'] = $processorParams['country'] = CRM_Core_PseudoConstant::country($params["billing_country_id-{$this->_bltID}"], FALSE); $processorParams['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($processorParams); $processorParams['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($processorParams); - $processorParams['subscriptionId'] = $this->getSubscriptionDetails()->processor_id; - $processorParams['amount'] = $this->_subscriptionDetails->amount; + $processorParams['recurProcessorID'] = $processorParams['subscriptionId'] = $this->getSubscriptionDetails()->processor_id; + $processorParams['amount'] = $this->getSubscriptionDetails()->amount; + $processorParams['contributionRecurID'] = $this->getContributionRecurID(); $message = ''; $updateSubscription = $this->_paymentProcessor['object']->updateSubscriptionBillingInfo($message, $processorParams); if (is_a($updateSubscription, 'CRM_Core_Error')) { CRM_Core_Error::displaySessionError($updateSubscription); } elseif ($updateSubscription) { - $ctype = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->_subscriptionDetails->contact_id, 'contact_type'); - $contact = &CRM_Contact_BAO_Contact::createProfileContact($params, + $ctype = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->getSubscriptionDetails()->contact_id, 'contact_type'); + CRM_Contact_BAO_Contact::createProfileContact($params, $fields, - $this->_subscriptionDetails->contact_id, + $this->getSubscriptionDetails()->contact_id, NULL, NULL, $ctype ); // build tpl params - if ($this->_subscriptionDetails->membership_id) { - $inputParams = array('id' => $this->_subscriptionDetails->membership_id); + if ($this->getSubscriptionDetails()->membership_id) { + $inputParams = array('id' => $this->getSubscriptionDetails()->membership_id); CRM_Member_BAO_Membership::getValues($inputParams, $tplParams); - $tplParams = $tplParams[$this->_subscriptionDetails->membership_id]; + $tplParams = $tplParams[$this->getSubscriptionDetails()->membership_id]; $tplParams['membership_status'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus', $tplParams['status_id']); $tplParams['membershipType'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $tplParams['membership_type_id']); $status = ts('Billing details for your automatically renewed %1 membership have been updated.', - array(1 => $tplParams['membershipType']) + [1 => $tplParams['membershipType']] ); $msgTitle = ts('Details Updated'); $msgType = 'success'; @@ -235,18 +235,18 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution else { $status = ts('Billing details for the recurring contribution of %1, every %2 %3 have been updated.', array( - 1 => $this->_subscriptionDetails->amount, - 2 => $this->_subscriptionDetails->frequency_interval, - 3 => $this->_subscriptionDetails->frequency_unit, + 1 => $this->getSubscriptionDetails()->amount, + 2 => $this->getSubscriptionDetails()->frequency_interval, + 3 => $this->getSubscriptionDetails()->frequency_unit, ) ); $msgTitle = ts('Details Updated'); $msgType = 'success'; $tplParams = array( - 'recur_frequency_interval' => $this->_subscriptionDetails->frequency_interval, - 'recur_frequency_unit' => $this->_subscriptionDetails->frequency_unit, - 'amount' => $this->_subscriptionDetails->amount, + 'recur_frequency_interval' => $this->getSubscriptionDetails()->frequency_interval, + 'recur_frequency_unit' => $this->getSubscriptionDetails()->frequency_unit, + 'amount' => $this->getSubscriptionDetails()->amount, ); } @@ -297,7 +297,7 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution <br/>{$this->_defaults['address']}"; $activityParams = array( - 'source_contact_id' => $this->_subscriptionDetails->contact_id, + 'source_contact_id' => $this->getSubscriptionDetails()->contact_id, 'activity_type_id' => CRM_Core_PseudoConstant::getKey( 'CRM_Activity_BAO_Activity', 'activity_type_id', @@ -316,34 +316,19 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Contribute_Form_Contribution } CRM_Activity_BAO_Activity::create($activityParams); - // send notification - if ($this->_subscriptionDetails->contribution_page_id) { - CRM_Core_DAO::commonRetrieveAll('CRM_Contribute_DAO_ContributionPage', 'id', - $this->_subscriptionDetails->contribution_page_id, $value, array( - 'title', - 'receipt_from_name', - 'receipt_from_email', - ) - ); - $receiptFrom = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$this->_subscriptionDetails->contribution_page_id]) . '" <' . $value[$this->_subscriptionDetails->contribution_page_id]['receipt_from_email'] . '>'; - } - else { - $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); - $receiptFrom = "$domainValues[0] <$domainValues[1]>"; - } - list($donorDisplayName, $donorEmail) = CRM_Contact_BAO_Contact::getContactDetails($this->_subscriptionDetails->contact_id); + list($donorDisplayName, $donorEmail) = CRM_Contact_BAO_Contact::getContactDetails($this->getSubscriptionDetails()->contact_id); $tplParams['contact'] = array('display_name' => $donorDisplayName); $tplParams = array_merge($tplParams, CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($processorParams)); $sendTemplateParams = array( - 'groupName' => $this->_subscriptionDetails->membership_id ? 'msg_tpl_workflow_membership' : 'msg_tpl_workflow_contribution', - 'valueName' => $this->_subscriptionDetails->membership_id ? 'membership_autorenew_billing' : 'contribution_recurring_billing', - 'contactId' => $this->_subscriptionDetails->contact_id, + 'groupName' => $this->getSubscriptionDetails()->membership_id ? 'msg_tpl_workflow_membership' : 'msg_tpl_workflow_contribution', + 'valueName' => $this->getSubscriptionDetails()->membership_id ? 'membership_autorenew_billing' : 'contribution_recurring_billing', + 'contactId' => $this->getSubscriptionDetails()->contact_id, 'tplParams' => $tplParams, - 'isTest' => $this->_subscriptionDetails->is_test, + 'isTest' => $this->getSubscriptionDetails()->is_test, 'PDFFilename' => 'receipt.pdf', - 'from' => $receiptFrom, + 'from' => CRM_Contribute_BAO_ContributionRecur::getRecurFromAddress($this->getContributionRecurID()), 'toName' => $donorDisplayName, 'toEmail' => $donorEmail, ); diff --git a/civicrm/CRM/Contribute/Form/UpdateSubscription.php b/civicrm/CRM/Contribute/Form/UpdateSubscription.php index 0fa06399001613f4de5064049338f03778230144..e38baacc44e5543bc04f2e20cc02c8c2b248dfe2 100644 --- a/civicrm/CRM/Contribute/Form/UpdateSubscription.php +++ b/civicrm/CRM/Contribute/Form/UpdateSubscription.php @@ -84,6 +84,8 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib } $this->assign('self_service', $this->isSelfService()); + $this->assign('recur_frequency_interval', $this->_subscriptionDetails->frequency_interval); + $this->assign('recur_frequency_unit', $this->_subscriptionDetails->frequency_unit); $this->editableScheduleFields = $this->_paymentProcessorObj->getEditableRecurringScheduleFields(); @@ -115,7 +117,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib [$this->_donorDisplayName, $this->_donorEmail] = CRM_Contact_BAO_Contact::getContactDetails($this->_subscriptionDetails->contact_id); } - CRM_Utils_System::setTitle(ts('Update Recurring Contribution')); + $this->setTitle(ts('Update Recurring Contribution')); // Handle context redirection. CRM_Contribute_BAO_ContributionRecur::setSubscriptionContext(); @@ -192,6 +194,9 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib /** * Called after the user submits the form. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception */ public function postProcess() { // store the submitted values in an array @@ -203,10 +208,11 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib } // if this is an update of an existing recurring contribution, pass the ID - $params['id'] = $this->_subscriptionDetails->recur_id; + $params['contributionRecurID'] = $params['id'] = $this->getContributionRecurID(); $message = ''; - $params['subscriptionId'] = $this->getSubscriptionDetails()->processor_id; + $params['recurProcessorID'] = $params['subscriptionId'] = $this->getSubscriptionDetails()->processor_id; + $updateSubscription = TRUE; if ($this->_paymentProcessorObj->supports('changeSubscriptionAmount')) { try { @@ -279,46 +285,23 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib CRM_Activity_BAO_Activity::create($activityParams); if (!empty($params['is_notify'])) { - // send notification - if ($this->_subscriptionDetails->contribution_page_id) { - CRM_Core_DAO::commonRetrieveAll('CRM_Contribute_DAO_ContributionPage', 'id', - $this->_subscriptionDetails->contribution_page_id, $value, [ - 'title', - 'receipt_from_name', - 'receipt_from_email', - ] - ); - $receiptFrom = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$this->_subscriptionDetails->contribution_page_id]) . '" <' . $value[$this->_subscriptionDetails->contribution_page_id]['receipt_from_email'] . '>'; - } - else { - $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); - $receiptFrom = "$domainValues[0] <$domainValues[1]>"; - } + $receiptFrom = CRM_Contribute_BAO_ContributionRecur::getRecurFromAddress($this->getContributionRecurID()); [$donorDisplayName, $donorEmail] = CRM_Contact_BAO_Contact::getContactDetails($contactID); - $tplParams = [ - 'recur_frequency_interval' => $this->_subscriptionDetails->frequency_interval, - 'recur_frequency_unit' => $this->_subscriptionDetails->frequency_unit, - 'amount' => CRM_Utils_Money::format($params['amount']), - 'installments' => $params['installments'], - ]; - - $tplParams['contact'] = ['display_name' => $donorDisplayName]; - $tplParams['receipt_from_email'] = $receiptFrom; - $sendTemplateParams = [ 'groupName' => 'msg_tpl_workflow_contribution', 'valueName' => 'contribution_recurring_edit', 'contactId' => $contactID, - 'tplParams' => $tplParams, + 'tplParams' => ['receipt_from_email' => $receiptFrom], 'isTest' => $this->_subscriptionDetails->is_test, 'PDFFilename' => 'receipt.pdf', 'from' => $receiptFrom, 'toName' => $donorDisplayName, 'toEmail' => $donorEmail, + 'tokenContext' => ['contribution_recurId' => $this->getContributionRecurID()], ]; - [$sent] = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); + CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); } } diff --git a/civicrm/CRM/Contribute/Import/Controller.php b/civicrm/CRM/Contribute/Import/Controller.php index b1582781f8f83332e1814cbb934174a20c6b687b..8ec9f32d1f8366df4c8ffb7cc4f11e0112ba5210 100644 --- a/civicrm/CRM/Contribute/Import/Controller.php +++ b/civicrm/CRM/Contribute/Import/Controller.php @@ -26,10 +26,7 @@ class CRM_Contribute_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Contribute/RecurTokens.php b/civicrm/CRM/Contribute/RecurTokens.php new file mode 100644 index 0000000000000000000000000000000000000000..3001eeb8b008de3a19a59964859155b8233c1dd5 --- /dev/null +++ b/civicrm/CRM/Contribute/RecurTokens.php @@ -0,0 +1,36 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Class CRM_Contribute_RecurTokens + * + * Generate "contribution_recur.*" tokens. + */ +class CRM_Contribute_RecurTokens extends CRM_Core_EntityTokens { + + /** + * Get the entity name for api v4 calls. + * + * @return string + */ + protected function getApiEntityName(): string { + return 'ContributionRecur'; + } + + /** + * @return array + */ + public function getCurrencyFieldName(): array { + return ['currency']; + } + +} diff --git a/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit.php b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit.php new file mode 100644 index 0000000000000000000000000000000000000000..f66a613f5de4296bf7486c5491c63adc1cd9f7e5 --- /dev/null +++ b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit.php @@ -0,0 +1,73 @@ +<?php + +/** + * @support template-only + * @method array getContact() + * @method $this setContact(array $contact) + * @method array getContributionRecur() + */ +class CRM_Contribute_WorkflowMessage_RecurringEdit extends Civi\WorkflowMessage\GenericWorkflowMessage { + const WORKFLOW = 'contribution_recurring_edit'; + + /** + * The recurring contribution contact. + * + * @var array|null + * + * @scope tokenContext + * + * @required + */ + public $contact; + + /** + * The recurring contribution. + * + * @var array|null + * + * @scope tokenContext as contribution_recur + * + * @required + */ + public $contributionRecur; + + /** + * @var int + * @scope tokenContext as contribution_recurId + */ + public $contributionRecurId; + + /** + * Smarty template historically defined a property 'receipt_from_email'. + * (Note the asymmetric lack of 'receipt_from_name'.) + * + * TODO: This should probably be deprecated/converted/reconciled with `$this->from` in the basic AddressingTrait. + * + * @var string|null + * @scope tplParams as receipt_from_email + */ + public $receiptFromEmail; + + public function setContributionRecur(array $contributionRecur) { + $this->contributionRecur = $contributionRecur; + if (!empty($contributionRecur['id'])) { + $this->contributionRecurId = $contributionRecur['id']; + } + return $this; + } + + protected function exportExtraTokenContext(array &$export): void { + $export['smartyTokenAlias']['installments'] = 'contribution_recur.installments'; + $export['smartyTokenAlias']['amount'] = 'contribution_recur.amount'; + $export['smartyTokenAlias']['recur_frequency_unit'] = 'contribution_recur.frequency_unit:label'; + $export['smartyTokenAlias']['recur_frequency_interval'] = 'contribution_recur.frequency_interval'; + } + + protected function exportExtraTplParams(array &$export): void { + if (empty($export['receipt_from_email']) && !empty($this->from)) { + // At a minimum, we can at least autofill 'receipt_from_email' in the case where it's missing. + $export['receipt_from_email'] = $this->getFrom('record')['email']; + } + } + +} diff --git a/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/AlexCancelled.ex.php b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/AlexCancelled.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..846f99b1b0d6c31370c64fec26895b297e570caf --- /dev/null +++ b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/AlexCancelled.ex.php @@ -0,0 +1,28 @@ +<?php + +class CRM_Contribute_WorkflowMessage_RecurringEdit_AlexCancelled extends \Civi\WorkflowMessage\WorkflowMessageExample { + + public function getExamples(): iterable { + yield [ + 'name' => "workflow/{$this->wfName}/{$this->exName}", + // This title is not very clear. When we have some more examples to compare against, feel free to change/clarify. + 'title' => ts('Recurring Edit: Alex, Cancelled'), + 'tags' => ['preview', 'phpunit'], + ]; + } + + public function build(array &$example): void { + $msg = (new CRM_Contribute_WorkflowMessage_RecurringEdit()) + ->setContact(\Civi\Test::example('entity/Contact/Alex')) + ->setContributionRecur(\Civi\Test::example('entity/ContributionRecur/Euro5990/cancelled')); + $example['data'] = $this->toArray($msg); + + $example['asserts'] = [ + 'default' => [ + ['for' => 'subject', 'regex' => '/Recurring Contribution Update.*Alex/'], + ['for' => 'text', 'regex' => '/Recurring contribution is for €5,990.99, every 2 year.s. for 24 installments/'], + ], + ]; + } + +} diff --git a/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/BarbPending.ex.php b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/BarbPending.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..6c19f770acadf44c1686600a837c160c7e8e3981 --- /dev/null +++ b/civicrm/CRM/Contribute/WorkflowMessage/RecurringEdit/BarbPending.ex.php @@ -0,0 +1,29 @@ +<?php + +class CRM_Contribute_WorkflowMessage_RecurringEdit_BarbPending extends \Civi\WorkflowMessage\WorkflowMessageExample { + + public function getExamples(): iterable { + yield [ + 'name' => "workflow/{$this->wfName}/{$this->exName}", + // This title is not very clear. When we have some more examples to compare against, feel free to change/clarify. + 'title' => ts('Recurring Edit: Barbara, Pending'), + 'tags' => ['preview'], + ]; + } + + public function build(array &$example): void { + $msg = (new CRM_Contribute_WorkflowMessage_RecurringEdit()) + ->setReceiptFromEmail('info@example.com') + ->setContact(\Civi\Test::example('entity/Contact/Barb')) + ->setContributionRecur(\Civi\Test::example('entity/ContributionRecur/Euro5990/pending')); + $example['data'] = $this->toArray($msg); + + $example['asserts'] = [ + 'default' => [ + ['for' => 'subject', 'regex' => '/Recurring Contribution Update.*Barb/'], + ['for' => 'text', 'regex' => '/Recurring contribution is for €5,990.99, every 2 year.s. for 24 installments/'], + ], + ]; + } + +} diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index 209097cb6b097943604e56ed4ba3c20d9c590896..2520e5652ea27a3c944ba9b179b8ef8cda13d122 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -615,15 +615,15 @@ FROM civicrm_action_schedule cas $mailParams = [ 'groupName' => 'Scheduled Reminder Sender', 'from' => self::pickFromEmail($schedule), - 'toName' => $tokenRow->context['contact']['display_name'], + 'toName' => $tokenRow->render('toName'), 'toEmail' => $toEmail, 'subject' => $tokenRow->render('subject'), 'entity' => 'action_schedule', 'entity_id' => $schedule->id, ]; - if (!$body_html || $tokenRow->context['contact']['preferred_mail_format'] === 'Text' || - $tokenRow->context['contact']['preferred_mail_format'] === 'Both' + $preferredMailFormat = $tokenRow->render('preferred_mail_format'); + if (!$body_html || $preferredMailFormat === 'Text' || $preferredMailFormat === 'Both' ) { // render the & entities in text mode, so that the links work $mailParams['text'] = str_replace('&', '&', $body_text); @@ -658,6 +658,10 @@ FROM civicrm_action_schedule cas $tp->addMessage('body_html', $schedule->body_html, 'text/html'); $tp->addMessage('sms_body_text', $schedule->sms_body_text, 'text/plain'); $tp->addMessage('subject', $schedule->subject, 'text/plain'); + // These 2 are not 'real' tokens - but it tells the processor to load them. + $tp->addMessage('toName', '{contact.display_name}', 'text/plain'); + $tp->addMessage('preferred_mail_format', '{contact.preferred_mail_format}', 'text/plain'); + return $tp; } diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php index 480501d81589ad5e147aabd1714f0d25863d6d6f..f7c8ca8ecc3ca461c11eae347b489dbfafb50f95 100644 --- a/civicrm/CRM/Core/BAO/Address.php +++ b/civicrm/CRM/Core/BAO/Address.php @@ -1210,12 +1210,14 @@ SELECT is_primary, /** * Call common delete function. * - * @param int $id + * @see \CRM_Contact_BAO_Contact::on_hook_civicrm_post * + * @param int $id + * @deprecated * @return bool */ public static function del($id) { - return CRM_Contact_BAO_Contact::deleteObjectWithPrimary('Address', $id); + return (bool) self::deleteRecord(['id' => $id]); } /** diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index d79cf9747edce89cd895f292059d296fa95d5d61..c5421a604ba5cd70ddb33b36d5c2a1662d76b920 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -134,9 +134,8 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { * @param array $records * @return CRM_Core_DAO_CustomField[] * @throws CRM_Core_Exception - * @throws CiviCRM_API3_Exception */ - public static function writeRecords(array $records) { + public static function writeRecords(array $records): array { $addedColumns = $sql = $customFields = $pre = $post = []; foreach ($records as $index => $params) { CRM_Utils_Hook::pre(empty($params['id']) ? 'create' : 'edit', 'CustomField', $params['id'] ?? NULL, $params); @@ -1653,7 +1652,9 @@ SELECT $columnName 'table_name' => $tableName, 'column_name' => $columnName, 'file_id' => $fileID, + // is_multiple refers to the custom group, serialize refers to the field. 'is_multiple' => $customFields[$customFieldId]['is_multiple'], + 'serialize' => $customFields[$customFieldId]['serialize'], ]; //we need to sort so that custom fields are created in the order of entry diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index fa5373b087765ae03dab245508a8bcf3165b5aed..8556c4ec217b11812661f23ce4725864a2da51f2 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -229,7 +229,7 @@ class CRM_Core_BAO_CustomValueTable { // would be 'String' for a concatenated set of integers. // However, the god-forsaken timestamp hack also needs to be kept // if value is NULL. - $params[$count] = [$value, ($value && $field['is_multiple']) ? 'String' : $type]; + $params[$count] = [$value, ($value && $field['serialize']) ? 'String' : $type]; $count++; } @@ -361,7 +361,10 @@ class CRM_Core_BAO_CustomValueTable { 'custom_group_id' => $customValue['custom_group_id'], 'table_name' => $customValue['table_name'], 'column_name' => $customValue['column_name'], - 'is_multiple' => $customValue['is_multiple'] ?? NULL, + // is_multiple refers to the custom group, serialize refers to the field. + // @todo is_multiple can be null - does that mean anything different from 0? + 'is_multiple' => $customValue['is_multiple'] ?? CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customValue['custom_group_id'], 'is_multiple'), + 'serialize' => $customValue['serialize'] ?? (int) CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField', $customValue['custom_field_id'], 'serialize'), 'file_id' => $customValue['file_id'], ]; @@ -592,7 +595,8 @@ SELECT cg.table_name as table_name , cf.column_name as column_name, cf.id as cf_id , cf.html_type as html_type , - cf.data_type as data_type + cf.data_type as data_type , + cf.serialize as serialize FROM civicrm_custom_group cg, civicrm_custom_field cf WHERE cf.custom_group_id = cg.id @@ -650,6 +654,7 @@ AND cf.id IN ( $fieldIDList ) 'table_name' => $dao->table_name, 'column_name' => $dao->column_name, 'is_multiple' => $dao->is_multiple, + 'serialize' => $dao->serialize, 'extends' => $dao->extends, ]; diff --git a/civicrm/CRM/Core/BAO/Email.php b/civicrm/CRM/Core/BAO/Email.php index 5341997ecb8d50fe7d37d80e30090029e0540adc..1261608d23648bac0f20945ab9d06ad56a8206d6 100644 --- a/civicrm/CRM/Core/BAO/Email.php +++ b/civicrm/CRM/Core/BAO/Email.php @@ -20,7 +20,7 @@ use Civi\Api4\Email; /** * This class contains functions for email handling. */ -class CRM_Core_BAO_Email extends CRM_Core_DAO_Email { +class CRM_Core_BAO_Email extends CRM_Core_DAO_Email implements Civi\Test\HookInterface { use CRM_Contact_AccessTrait; /** @@ -80,15 +80,21 @@ WHERE contact_id = {$params['contact_id']} self::updateContactName($contactId, $address); } - if ($email->is_primary) { - // update the UF user email if that has changed - CRM_Core_BAO_UFMatch::updateUFName($email->contact_id); - } - CRM_Utils_Hook::post($hook, 'Email', $email->id, $email); return $email; } + /** + * Event fired after modifying an Email. + * @param \Civi\Core\Event\PostEvent $event + */ + public static function self_hook_civicrm_post(\Civi\Core\Event\PostEvent $event) { + if ($event->action !== 'delete' && !empty($event->object->is_primary) && !empty($event->object->contact_id)) { + // update the UF user email if that has changed + CRM_Core_BAO_UFMatch::updateUFName($event->object->contact_id); + } + } + /** * Takes an associative array and adds email. * @@ -342,12 +348,14 @@ AND reset_date IS NULL /** * Call common delete function. * - * @param int $id + * @see \CRM_Contact_BAO_Contact::on_hook_civicrm_post * + * @param int $id + * @deprecated * @return bool */ public static function del($id) { - return CRM_Contact_BAO_Contact::deleteObjectWithPrimary('Email', $id); + return (bool) self::deleteRecord(['id' => $id]); } /** diff --git a/civicrm/CRM/Core/BAO/File.php b/civicrm/CRM/Core/BAO/File.php index c2de58619779db2462ef5b876a99e32327a24c20..a420f7ac2bd9f70138eebe0b539b5b66d3b2bda2 100644 --- a/civicrm/CRM/Core/BAO/File.php +++ b/civicrm/CRM/Core/BAO/File.php @@ -570,8 +570,8 @@ AND CEF.entity_id = %2"; CRM_Utils_File::formatFile($formValues, $attachName, $extraParams); - // set the formatted attachment attributes to $params, later used by - // CRM_Activity_BAO_Activity::sendEmail(...) to send mail with desired attachments + // set the formatted attachment attributes to $params, later used + // to send mail with desired attachments if (!empty($formValues[$attachName])) { $params[$attachName] = $formValues[$attachName]; } diff --git a/civicrm/CRM/Core/BAO/IM.php b/civicrm/CRM/Core/BAO/IM.php index 12fc6238d433536474772b52ab9d575842136431..a26e6c4ea34e5fd0e454d6f552662ef5e2fdbc63 100644 --- a/civicrm/CRM/Core/BAO/IM.php +++ b/civicrm/CRM/Core/BAO/IM.php @@ -158,12 +158,14 @@ ORDER BY cim.is_primary DESC, im_id ASC "; /** * Call common delete function. * - * @param int $id + * @see \CRM_Contact_BAO_Contact::on_hook_civicrm_post * + * @param int $id + * @deprecated * @return bool */ public static function del($id) { - return CRM_Contact_BAO_Contact::deleteObjectWithPrimary('IM', $id); + return (bool) self::deleteRecord(['id' => $id]); } } diff --git a/civicrm/CRM/Core/BAO/Mapping.php b/civicrm/CRM/Core/BAO/Mapping.php index d026cf8df7bc25dff5e02918aaa0d7aec32a74bf..d8358649bbe08c24838c2da2ab89e4c73356aef9 100644 --- a/civicrm/CRM/Core/BAO/Mapping.php +++ b/civicrm/CRM/Core/BAO/Mapping.php @@ -48,24 +48,12 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { * Delete the mapping. * * @param int $id - * Mapping id. * + * @deprecated * @return bool */ public static function del($id) { - // delete from mapping_field table - $mappingField = new CRM_Core_DAO_MappingField(); - $mappingField->mapping_id = $id; - $mappingField->delete(); - - // delete from mapping table - $mapping = new CRM_Core_DAO_Mapping(); - $mapping->id = $id; - if ($mapping->find(TRUE)) { - $result = $mapping->delete(); - return $result; - } - return FALSE; + return (bool) static::deleteRecord(['id' => $id]); } /** @@ -1063,7 +1051,7 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { // CRM-19081 Fix legacy StateProvince Field Values. // These derive from smart groups created using search builder under older // CiviCRM versions. - if (!is_numeric($value) && $fldName == 'state_province') { + if ($fldName == 'state_province' && !is_numeric($value) && !is_array($value)) { $value = CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Address', 'state_province_id', $value); } diff --git a/civicrm/CRM/Core/BAO/MessageTemplate.php b/civicrm/CRM/Core/BAO/MessageTemplate.php index 6d9aced734d0a9b5a128dbe71fae18fc2ce73676..7d7d239f131a1815de2cc27771c03f141ea02bce 100644 --- a/civicrm/CRM/Core/BAO/MessageTemplate.php +++ b/civicrm/CRM/Core/BAO/MessageTemplate.php @@ -15,6 +15,7 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Email; use Civi\Api4\MessageTemplate; use Civi\WorkflowMessage\WorkflowMessage; @@ -110,7 +111,10 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { } // The workflow_id and workflow_name should be sync'd. But what mix of inputs do we have to work with? - switch ((empty($params['workflow_id']) ? '' : 'id') . (empty($params['workflow_name']) ? '' : 'name')) { + $empty = function ($key) use (&$params) { + return empty($params[$key]) || $params[$key] === 'null'; + }; + switch (($empty('workflow_id') ? '' : 'id') . ($empty('workflow_name') ? '' : 'name')) { case 'id': $params['workflow_name'] = array_search($params['workflow_id'], self::getWorkflowNameIdMap()); break; @@ -212,127 +216,6 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { return $msgTpls; } - /** - * @param int $contactId - * @param $email - * @param int $messageTemplateID - * @param $from - * - * @return bool|NULL - * @throws \CRM_Core_Exception - */ - public static function sendReminder($contactId, $email, $messageTemplateID, $from) { - CRM_Core_Error::deprecatedWarning('CRM_Core_BAO_MessageTemplate::sendReminder is deprecated and will be removed in a future version of CiviCRM'); - - $messageTemplates = new CRM_Core_DAO_MessageTemplate(); - $messageTemplates->id = $messageTemplateID; - - $domain = CRM_Core_BAO_Domain::getDomain(); - $result = NULL; - $hookTokens = []; - - if ($messageTemplates->find(TRUE)) { - $body_text = $messageTemplates->msg_text; - $body_html = $messageTemplates->msg_html; - $body_subject = $messageTemplates->msg_subject; - if (!$body_text) { - $body_text = CRM_Utils_String::htmlToText($body_html); - } - - $params = [['contact_id', '=', $contactId, 0, 0]]; - [$contact] = CRM_Contact_BAO_Query::apiQuery($params); - - //CRM-4524 - $contact = reset($contact); - - if (!$contact || is_a($contact, 'CRM_Core_Error')) { - return NULL; - } - - //CRM-5734 - - // get tokens to be replaced - $tokens = array_merge(CRM_Utils_Token::getTokens($body_text), - CRM_Utils_Token::getTokens($body_html), - CRM_Utils_Token::getTokens($body_subject)); - - // get replacement text for these tokens - $returnProperties = ["preferred_mail_format" => 1]; - if (isset($tokens['contact'])) { - foreach ($tokens['contact'] as $key => $value) { - $returnProperties[$value] = 1; - } - } - [$details] = CRM_Utils_Token::getTokenDetails([$contactId], - $returnProperties, - NULL, NULL, FALSE, - $tokens, - 'CRM_Core_BAO_MessageTemplate'); - $contact = reset($details); - - // call token hook - $hookTokens = []; - CRM_Utils_Hook::tokens($hookTokens); - $categories = array_keys($hookTokens); - - // do replacements in text and html body - $type = ['html', 'text']; - foreach ($type as $key => $value) { - $bodyType = "body_{$value}"; - if ($$bodyType) { - CRM_Utils_Token::replaceGreetingTokens($$bodyType, NULL, $contact['contact_id']); - $$bodyType = CRM_Utils_Token::replaceDomainTokens($$bodyType, $domain, TRUE, $tokens, TRUE); - $$bodyType = CRM_Utils_Token::replaceContactTokens($$bodyType, $contact, FALSE, $tokens, FALSE, TRUE); - $$bodyType = CRM_Utils_Token::replaceComponentTokens($$bodyType, $contact, $tokens, TRUE); - $$bodyType = CRM_Utils_Token::replaceHookTokens($$bodyType, $contact, $categories, TRUE); - } - } - $html = $body_html; - $text = $body_text; - - $smarty = CRM_Core_Smarty::singleton(); - foreach ([ - 'text', - 'html', - ] as $elem) { - $$elem = $smarty->fetch("string:{$$elem}"); - } - - // do replacements in message subject - $messageSubject = CRM_Utils_Token::replaceContactTokens($body_subject, $contact, FALSE, $tokens); - $messageSubject = CRM_Utils_Token::replaceDomainTokens($messageSubject, $domain, TRUE, $tokens); - $messageSubject = CRM_Utils_Token::replaceComponentTokens($messageSubject, $contact, $tokens, TRUE); - $messageSubject = CRM_Utils_Token::replaceHookTokens($messageSubject, $contact, $categories, TRUE); - - $messageSubject = $smarty->fetch("string:{$messageSubject}"); - - // set up the parameters for CRM_Utils_Mail::send - $mailParams = [ - 'groupName' => 'Scheduled Reminder Sender', - 'from' => $from, - 'toName' => $contact['display_name'], - 'toEmail' => $email, - 'subject' => $messageSubject, - ]; - if (!$html || $contact['preferred_mail_format'] == 'Text' || - $contact['preferred_mail_format'] == 'Both' - ) { - // render the & entities in text mode, so that the links work - $mailParams['text'] = str_replace('&', '&', $text); - } - if ($html && ($contact['preferred_mail_format'] == 'HTML' || - $contact['preferred_mail_format'] == 'Both' - ) - ) { - $mailParams['html'] = $html; - } - - $result = CRM_Utils_Mail::send($mailParams); - } - - return $result; - } - /** * Revert a message template to its default subject+text+HTML state. * @@ -350,7 +233,7 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { } $orig = new CRM_Core_BAO_MessageTemplate(); - $orig->workflow_id = $diverted->workflow_id; + $orig->workflow_name = $diverted->workflow_name; $orig->is_reserved = 1; $orig->find(1); @@ -382,32 +265,22 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { * @see sendTemplate() */ public static function renderTemplate($params) { - $forbidden = ['from', 'toName', 'toEmail', 'cc', 'bcc', 'replyTo']; - $intersect = array_intersect($forbidden, array_keys($params)); - if (!empty($intersect)) { - throw new \CRM_Core_Exception(sprintf("renderTemplate() received forbidden fields (%s)", - implode(',', $intersect))); - } - - $mailContent = []; - // sendTemplate has had an obscure feature - if you omit `toEmail`, then it merely renders. - // At some point, we may want to invert the relation between renderTemplate/sendTemplate, but for now this is a smaller patch. - [$sent, $mailContent['subject'], $mailContent['text'], $mailContent['html']] = static::sendTemplate($params); - return $mailContent; + [$mailContent, $params] = self::renderTemplateRaw($params); + return CRM_Utils_Array::subset($mailContent, ['subject', 'text', 'html']); } /** - * Send an email from the specified template based on an array of params. + * Render a message template. * * @param array $params - * A string-keyed array of function params, see function body for details. - * + * Mixed render parameters. See sendTemplate() for more details. * @return array - * Array of four parameters: a boolean whether the email was sent, and the subject, text and HTML templates - * @throws \CRM_Core_Exception + * Tuple of [$mailContent, $updatedParams]. * @throws \API_Exception + * @throws \CRM_Core_Exception + * @see sendTemplate() */ - public static function sendTemplate($params) { + protected static function renderTemplateRaw($params) { $modelDefaults = [ // instance of WorkflowMessageInterface, containing a list of data to provide to the message-template 'model' => NULL, @@ -454,52 +327,78 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { 'PDFFilename' => NULL, ]; + // Some params have been deprecated/renamed. Synchronize old<=>new params. We periodically resync after exchanging data with other parties. + $sync = function () use (&$params, $modelDefaults, $viewDefaults) { + CRM_Utils_Array::pathSync($params, ['workflow'], ['valueName']); + CRM_Utils_Array::pathSync($params, ['tokenContext', 'contactId'], ['contactId']); + CRM_Utils_Array::pathSync($params, ['tokenContext', 'smarty'], ['disableSmarty'], function ($v, bool $isCanon) { + return !$v; + }); + + // Core#644 - handle Email ID passed as "From". + if (isset($params['from'])) { + $params['from'] = \CRM_Utils_Mail::formatFromAddress($params['from']); + } + }; + $sync(); + // Allow WorkflowMessage to run any filters/mappings/cleanups. - $model = $params['model'] ?? WorkflowMessage::create($params['valueName'] ?? 'UNKNOWN'); + $model = $params['model'] ?? WorkflowMessage::create($params['workflow'] ?? 'UNKNOWN'); $params = WorkflowMessage::exportAll(WorkflowMessage::importAll($model, $params)); unset($params['model']); // Subsequent hooks use $params. Retaining the $params['model'] might be nice - but don't do it unless you figure out how to ensure data-consistency (eg $params['tplParams'] <=> $params['model']). // If you want to expose the model via hook, consider interjecting a new Hook::alterWorkflowMessage($model) between `importAll()` and `exportAll()`. + $sync(); $params = array_merge($modelDefaults, $viewDefaults, $envelopeDefaults, $params); CRM_Utils_Hook::alterMailParams($params, 'messageTemplate'); - if (!is_int($params['messageTemplateID']) && !is_null($params['messageTemplateID'])) { - CRM_Core_Error::deprecatedWarning('message template id should be an integer'); - $params['messageTemplateID'] = (int) $params['messageTemplateID']; - } $mailContent = self::loadTemplate((string) $params['valueName'], $params['isTest'], $params['messageTemplateID'] ?? NULL, $params['groupName'] ?? '', $params['messageTemplate'], $params['subject'] ?? NULL); - $params['tokenContext'] = array_merge([ - 'smarty' => (bool) !$params['disableSmarty'], - 'contactId' => $params['contactId'], - ], $params['tokenContext']); + $sync(); $rendered = CRM_Core_TokenSmarty::render(CRM_Utils_Array::subset($mailContent, ['text', 'html', 'subject']), $params['tokenContext'], $params['tplParams']); if (isset($rendered['subject'])) { $rendered['subject'] = trim(preg_replace('/[\r\n]+/', ' ', $rendered['subject'])); } $nullSet = ['subject' => NULL, 'text' => NULL, 'html' => NULL]; $mailContent = array_merge($nullSet, $mailContent, $rendered); + return [$mailContent, $params]; + } - // send the template, honouring the target user’s preferences (if any) - $sent = FALSE; + /** + * Send an email from the specified template based on an array of params. + * + * @param array $params + * A string-keyed array of function params, see function body for details. + * + * @return array + * Array of four parameters: a boolean whether the email was sent, and the subject, text and HTML templates + * @throws \CRM_Core_Exception + * @throws \API_Exception + */ + public static function sendTemplate($params) { + [$mailContent, $params] = self::renderTemplateRaw($params); // create the params array $params['subject'] = $mailContent['subject']; $params['text'] = $mailContent['text']; $params['html'] = $mailContent['html']; - if ($params['toEmail']) { - $contactParams = [['email', 'LIKE', $params['toEmail'], 0, 1]]; - [$contact] = CRM_Contact_BAO_Query::apiQuery($contactParams); - - $prefs = array_pop($contact); - - if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] === 'HTML') { + // send the template, honouring the target user’s preferences (if any) + $sent = FALSE; + if (!empty($params['toEmail'])) { + // @todo - consider whether we really should be loading + // this based on 'the first email in the db that matches'. + // when we likely have the contact id. OTOH people probably barely + // use preferredMailFormat these days - the good fight against html + // emails was lost a decade ago... + $preferredMailFormatArray = Email::get(FALSE)->addWhere('email', '=', $params['toEmail'])->addSelect('contact_id.preferred_mail_format')->execute()->first(); + $preferredMailFormat = $preferredMailFormatArray['contact_id.preferred_mail_format'] ?? 'Both'; + + if ($preferredMailFormat === 'HTML') { $params['text'] = NULL; } - - if (isset($prefs['preferred_mail_format']) and $prefs['preferred_mail_format'] === 'Text') { + if ($preferredMailFormat === 'Text') { $params['html'] = NULL; } diff --git a/civicrm/CRM/Core/BAO/OpenID.php b/civicrm/CRM/Core/BAO/OpenID.php index 33a7c269fc3c4292a2a426fd9413b7cb28e48bf7..2b16d2c702f68013df3c767e767177441fc37f14 100644 --- a/civicrm/CRM/Core/BAO/OpenID.php +++ b/civicrm/CRM/Core/BAO/OpenID.php @@ -121,12 +121,14 @@ ORDER BY /** * Call common delete function. * - * @param int $id + * @see \CRM_Contact_BAO_Contact::on_hook_civicrm_post * + * @param int $id + * @deprecated * @return bool */ public static function del($id) { - return CRM_Contact_BAO_Contact::deleteObjectWithPrimary('OpenID', $id); + return (bool) self::deleteRecord(['id' => $id]); } } diff --git a/civicrm/CRM/Core/BAO/PdfFormat.php b/civicrm/CRM/Core/BAO/PdfFormat.php index 33783d7306c4a87a091f3e4bf5e8e229278d18ab..a082ace7afe12a9547b18291373154070c1bf1f2 100644 --- a/civicrm/CRM/Core/BAO/PdfFormat.php +++ b/civicrm/CRM/Core/BAO/PdfFormat.php @@ -263,7 +263,7 @@ class CRM_Core_BAO_PdfFormat extends CRM_Core_DAO_OptionValue { * * @return value */ - public static function getValue($field, &$values, $default = NULL) { + public static function getValue($field, $values, $default = NULL) { if (array_key_exists($field, self::$optionValueFields)) { switch (self::$optionValueFields[$field]['type']) { case CRM_Utils_Type::T_INT: @@ -328,7 +328,7 @@ class CRM_Core_BAO_PdfFormat extends CRM_Core_DAO_OptionValue { * Id of the database record (null = new record). * @throws CRM_Core_Exception */ - public function savePdfFormat(&$values, $id = NULL) { + public function savePdfFormat($values, $id = NULL) { // get the Option Group ID for PDF Page Formats (create one if it doesn't exist) $group_id = self::_getGid(); diff --git a/civicrm/CRM/Core/BAO/Phone.php b/civicrm/CRM/Core/BAO/Phone.php index 260b2e69736ab34e2cd7d7ad88621c17f09efb51..6f9da9eccb516a131fee3082cd770c5d820bd44b 100644 --- a/civicrm/CRM/Core/BAO/Phone.php +++ b/civicrm/CRM/Core/BAO/Phone.php @@ -234,12 +234,14 @@ ORDER BY ph.is_primary DESC, phone_id ASC "; /** * Call common delete function. * - * @param int $id + * @see \CRM_Contact_BAO_Contact::on_hook_civicrm_post * + * @param int $id + * @deprecated * @return bool */ public static function del($id) { - return CRM_Contact_BAO_Contact::deleteObjectWithPrimary('Phone', $id); + return (bool) self::deleteRecord(['id' => $id]); } } diff --git a/civicrm/CRM/Core/BAO/SchemaHandler.php b/civicrm/CRM/Core/BAO/SchemaHandler.php index 2f41ae364c4c50b7511f4d0221b2100e627f5af6..1686e798898fcc8796dc415e1f6bb68dd62f7dcc 100644 --- a/civicrm/CRM/Core/BAO/SchemaHandler.php +++ b/civicrm/CRM/Core/BAO/SchemaHandler.php @@ -552,9 +552,7 @@ MODIFY {$columnName} varchar( $length ) * @return bool TRUE if FK is found */ public static function checkFKExists($table_name, $constraint_name) { - $config = CRM_Core_Config::singleton(); - $dsn = CRM_Utils_SQL::autoSwitchDSN($config->dsn); - $dbUf = DB::parseDSN($dsn); + $dao = new CRM_Core_DAO(); $query = " SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = %1 @@ -563,7 +561,7 @@ MODIFY {$columnName} varchar( $length ) AND CONSTRAINT_TYPE = 'FOREIGN KEY' "; $params = [ - 1 => [$dbUf['database'], 'String'], + 1 => [$dao->_database, 'String'], 2 => [$table_name, 'String'], 3 => [$constraint_name, 'String'], ]; diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php index 2329a21acbcaae73697b007c7d3bc17144190703..e4c14859e066ce4339bac61208becf1098fb94e2 100644 --- a/civicrm/CRM/Core/BAO/Setting.php +++ b/civicrm/CRM/Core/BAO/Setting.php @@ -75,13 +75,13 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { $manager = \Civi::service('settings_manager'); $settings = ($contactID === NULL) ? $manager->getBagByDomain($domainID) : $manager->getBagByContact($domainID, $contactID); if ($name === NULL) { - CRM_Core_Error::debug_log_message("Deprecated: Group='$group'. Name should be provided.\n"); + CRM_Core_Error::deprecatedWarning("Deprecated: Group='$group'. Name should be provided.\n"); } if ($componentID !== NULL) { - CRM_Core_Error::debug_log_message("Deprecated: Group='$group'. Name='$name'. Component should be omitted\n"); + CRM_Core_Error::deprecatedWarning("Deprecated: Group='$group'. Name='$name'. Component should be omitted\n"); } if ($defaultValue !== NULL) { - CRM_Core_Error::debug_log_message("Deprecated: Group='$group'. Name='$name'. Defaults should come from metadata\n"); + CRM_Core_Error::deprecatedWarning("Deprecated: Group='$group'. Name='$name'. Defaults should come from metadata\n"); } return $name ? $settings->get($name) : $settings->all(); } diff --git a/civicrm/CRM/Core/BAO/Tag.php b/civicrm/CRM/Core/BAO/Tag.php index 17c0bc47cceb05d1f8161a967cfa66c2ea293cff..8a75503da1e1f5405fd7d17697092a1b94db1cfe 100644 --- a/civicrm/CRM/Core/BAO/Tag.php +++ b/civicrm/CRM/Core/BAO/Tag.php @@ -349,31 +349,11 @@ class CRM_Core_BAO_Tag extends CRM_Core_DAO_Tag { * Delete the tag. * * @param int $id - * Tag id. - * + * @deprecated * @return bool */ public static function del($id) { - // since this is a destructive operation, lets make sure - // id is a positive number - CRM_Utils_Type::validate($id, 'Positive'); - - // delete all crm_entity_tag records with the selected tag id - $entityTag = new CRM_Core_DAO_EntityTag(); - $entityTag->tag_id = $id; - $entityTag->delete(); - - // delete from tag table - $tag = new CRM_Core_DAO_Tag(); - $tag->id = $id; - - CRM_Utils_Hook::pre('delete', 'Tag', $id, $tag); - - if ($tag->delete()) { - CRM_Utils_Hook::post('delete', 'Tag', $id, $tag); - return TRUE; - } - return FALSE; + return (bool) static::deleteRecord(['id' => $id]); } /** diff --git a/civicrm/CRM/Core/BAO/UFMatch.php b/civicrm/CRM/Core/BAO/UFMatch.php index 9d0a58bbac35ac79ab05c4c95ee07f6a5bf721de..cc007958a1997564d0f6b534589e2f60a520113b 100644 --- a/civicrm/CRM/Core/BAO/UFMatch.php +++ b/civicrm/CRM/Core/BAO/UFMatch.php @@ -624,13 +624,12 @@ AND domain_id = %4 return []; } - static $ufValues; - if ($ufID && !isset($ufValues[$ufID])) { + if (!isset(Civi::$statics[__CLASS__][__FUNCTION__][$ufID])) { $ufmatch = new CRM_Core_DAO_UFMatch(); $ufmatch->uf_id = $ufID; $ufmatch->domain_id = CRM_Core_Config::domainID(); if ($ufmatch->find(TRUE)) { - $ufValues[$ufID] = [ + Civi::$statics[__CLASS__][__FUNCTION__][$ufID] = [ 'uf_id' => $ufmatch->uf_id, 'uf_name' => $ufmatch->uf_name, 'contact_id' => $ufmatch->contact_id, @@ -638,7 +637,7 @@ AND domain_id = %4 ]; } } - return $ufValues[$ufID]; + return Civi::$statics[__CLASS__][__FUNCTION__][$ufID] ?? NULL; } /** diff --git a/civicrm/CRM/Core/ClassLoader.php b/civicrm/CRM/Core/ClassLoader.php index a8479481d48649dc4d8a9b651e498a3bdd78bd09..688470b9d9b70a2f2758acf75f6691b93aa5354e 100644 --- a/civicrm/CRM/Core/ClassLoader.php +++ b/civicrm/CRM/Core/ClassLoader.php @@ -133,8 +133,6 @@ class CRM_Core_ClassLoader { '.', $civicrm_base_path, $packages_path, - // dev/core#2812 Ensure that the database upgrade script can run if dataprocessor extension is enabled. It relies on the legacy custom searches which have been moved into this extension - implode(DIRECTORY_SEPARATOR, [$civicrm_base_path, 'ext', 'legacycustomsearches']), ]; $include_paths = implode(PATH_SEPARATOR, $include_paths); set_include_path($include_paths . PATH_SEPARATOR . get_include_path()); diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index 8b903ec24462d59280df859aef933440c1377d0f..2a375fbca14d621081e35ac2f5f895258d39d1c7 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -932,7 +932,7 @@ class CRM_Core_DAO extends DB_DataObject { * @return static[] * @throws CRM_Core_Exception */ - public static function writeRecords(array $records) { + public static function writeRecords(array $records): array { $results = []; foreach ($records as $record) { $results[] = static::writeRecord($record); @@ -957,13 +957,19 @@ class CRM_Core_DAO extends DB_DataObject { if (empty($record['id'])) { throw new CRM_Core_Exception("Cannot delete {$entityName} with no id."); } + CRM_Utils_Type::validate($record['id'], 'Positive'); CRM_Utils_Hook::pre('delete', $entityName, $record['id'], $record); $instance = new $className(); $instance->id = $record['id']; - if (!$instance->delete()) { + // Load complete object for the sake of hook_civicrm_post, below + $instance->find(TRUE); + if (!$instance || !$instance->delete()) { throw new CRM_Core_Exception("Could not delete {$entityName} id {$record['id']}"); } + // For other operations this hook is passed an incomplete object and hook listeners can load if needed. + // But that's not possible with delete because it's gone from the database by the time this hook is called. + // So in this case the object has been pre-loaded so hook listeners have access to the complete record. CRM_Utils_Hook::post('delete', $entityName, $record['id'], $instance); return $instance; diff --git a/civicrm/CRM/Core/DAO/MappingField.php b/civicrm/CRM/Core/DAO/MappingField.php index 9c976231026f80f663620d16270064899a2b2f97..833fdff45f2dc4a443252d82fa86cbec28c010ed 100644 --- a/civicrm/CRM/Core/DAO/MappingField.php +++ b/civicrm/CRM/Core/DAO/MappingField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MappingField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d2ce640ccb1f30190097cced450038e0) + * (GenCodeChecksum:4333a20d925fb437b4764219e31ee017) */ /** diff --git a/civicrm/CRM/Core/DAO/MessageTemplate.php b/civicrm/CRM/Core/DAO/MessageTemplate.php index a84d7eed54e6f89f7b9e92d40bae57a2c6cd06d2..e44de41b2f54d9f4f7b31b137c29c0f42f6bbb1f 100644 --- a/civicrm/CRM/Core/DAO/MessageTemplate.php +++ b/civicrm/CRM/Core/DAO/MessageTemplate.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/MessageTemplate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:10bf11ca59e77fe7be9dfd775e5d5cd0) + * (GenCodeChecksum:8e8480f41073e41a72f3d600e5776d0d) */ /** @@ -265,6 +265,7 @@ class CRM_Core_DAO_MessageTemplate extends CRM_Core_DAO { 'title' => ts('Message Template Is Reserved?'), 'description' => ts('is this the reserved message template which we ship for the workflow referenced by workflow_id?'), 'where' => 'civicrm_msg_template.is_reserved', + 'default' => '0', 'table_name' => 'civicrm_msg_template', 'entity' => 'MessageTemplate', 'bao' => 'CRM_Core_BAO_MessageTemplate', diff --git a/civicrm/CRM/Core/DomainTokens.php b/civicrm/CRM/Core/DomainTokens.php new file mode 100644 index 0000000000000000000000000000000000000000..fe7384270bef950898ba84e09d58867a5b837cc9 --- /dev/null +++ b/civicrm/CRM/Core/DomainTokens.php @@ -0,0 +1,115 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +use Civi\Token\AbstractTokenSubscriber; +use Civi\Token\TokenRow; + +/** + * Class CRM_Case_Tokens + * + * Generate "case.*" tokens. + */ +class CRM_Core_DomainTokens extends AbstractTokenSubscriber { + /** + * @var string + * Token prefix + */ + public $entity = 'domain'; + + /** + * @var array + * List of tokens provided by this class + * Array(string $fieldName => string $label). + */ + public $tokenNames; + + /** + * Class constructor. + */ + public function __construct() { + parent::__construct($this->entity, $this->getDomainTokens()); + } + + public function getDomainTokens(): array { + return [ + 'name' => ts('Domain name'), + 'address' => ts('Domain (organization) address'), + 'phone' => ts('Domain (organization) phone'), + 'email' => ts('Domain (organization) email'), + 'id' => ts('Domain ID'), + 'description' => ts('Domain Description'), + 'now' => ts('Current time/date'), + ]; + } + + /** + * @inheritDoc + * @throws \CRM_Core_Exception + */ + public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL): void { + if ($field === 'now') { + $nowObj = (new \DateTime())->setTimestamp(\CRM_Utils_Time::time()); + $row->format('text/html')->tokens($entity, $field, $nowObj); + return; + } + $row->format('text/html')->tokens($entity, $field, self::getDomainTokenValues()[$field]); + $row->format('text/plain')->tokens($entity, $field, self::getDomainTokenValues(NULL, FALSE)[$field]); + } + + /** + * Get the tokens available for the domain. + * + * This function will be made protected soon... + * + * @param int|null $domainID + * @param bool $html + * + * @return array + * @throws \CRM_Core_Exception + * @internal + * + */ + public static function getDomainTokenValues(?int $domainID = NULL, bool $html = TRUE): array { + if (!$domainID) { + $domainID = CRM_Core_Config::domainID(); + } + $cacheKey = __CLASS__ . 'domain_tokens' . $html . '_' . $domainID . '_' . CRM_Core_I18n::getLocale(); + if (!Civi::cache('metadata')->has($cacheKey)) { + if (CRM_Core_Config::domainID() === $domainID) { + $domain = CRM_Core_BAO_Domain::getDomain(); + } + else { + $domain = new CRM_Core_BAO_Domain(); + $domain->find(TRUE); + } + $tokens = [ + 'name' => $domain->name, + 'id' => $domain->id, + 'description' => $domain->description, + ]; + $loc = $domain->getLocationValues(); + if ($html) { + $tokens['address'] = str_replace("\n", '<br />', ($loc['address'][1]['display'] ?? '')); + } + else { + $tokens['address'] = $loc['address'][1]['display_text'] ?? ''; + } + $phone = reset($loc['phone']); + $email = reset($loc['email']); + $tokens['phone'] = $phone['phone'] ?? ''; + $tokens['email'] = $email['email'] ?? ''; + Civi::cache('metadata')->set($cacheKey, $tokens); + } + return Civi::cache('metadata')->get($cacheKey); + } + +} diff --git a/civicrm/CRM/Core/EntityReference.php b/civicrm/CRM/Core/EntityReference.php deleted file mode 100644 index 0d3a48ed6be5c824d944e05559de68a7440df9a2..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Core/EntityReference.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php - -/** - * This is included for backward compatibility with DAO's generated before 4.5. - * - * @deprecated - */ -class CRM_Core_EntityReference extends CRM_Core_Reference_Basic { -} diff --git a/civicrm/CRM/Core/EntityTokens.php b/civicrm/CRM/Core/EntityTokens.php index 9a9497ebfaa83d339c62bc1f3d2a7b5b9007830b..7f7b669959e161ca7e14f372fb9ec93e09d9306d 100644 --- a/civicrm/CRM/Core/EntityTokens.php +++ b/civicrm/CRM/Core/EntityTokens.php @@ -11,9 +11,12 @@ */ use Civi\Token\AbstractTokenSubscriber; +use Civi\Token\Event\TokenRegisterEvent; +use Civi\Token\Event\TokenValueEvent; use Civi\Token\TokenRow; use Civi\ActionSchedule\Event\MailingQueryEvent; use Civi\Token\TokenProcessor; +use Brick\Money\Money; /** * Class CRM_Core_EntityTokens @@ -27,11 +30,70 @@ use Civi\Token\TokenProcessor; */ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { + /** + * Metadata about all tokens. + * + * @var array + */ + protected $tokensMetadata = []; /** * @var array */ protected $prefetch = []; + /** + * Should permissions be checked when loading tokens. + * + * @var bool + */ + protected $checkPermissions = FALSE; + + /** + * Register the declared tokens. + * + * @param \Civi\Token\Event\TokenRegisterEvent $e + * The registration event. Add new tokens using register(). + */ + public function registerTokens(TokenRegisterEvent $e) { + if (!$this->checkActive($e->getTokenProcessor())) { + return; + } + foreach ($this->getTokenMetadata() as $tokenName => $field) { + if ($field['audience'] === 'user') { + $e->register([ + 'entity' => $this->entity, + 'field' => $tokenName, + 'label' => $field['title'], + ]); + } + } + } + + /** + * Get the metadata about the available tokens + * + * @return array + */ + protected function getTokenMetadata(): array { + if (empty($this->tokensMetadata)) { + $cacheKey = $this->getCacheKey(); + if (Civi::cache('metadata')->has($cacheKey)) { + $this->tokensMetadata = Civi::cache('metadata')->get($cacheKey); + } + else { + $this->tokensMetadata = $this->getBespokeTokens(); + foreach ($this->getFieldMetadata() as $field) { + $this->addFieldToTokenMetadata($field, $this->getExposedFields()); + } + foreach ($this->getHiddenTokens() as $name) { + $this->tokensMetadata[$name]['audience'] = 'hidden'; + } + Civi::cache('metadata')->set($cacheKey, $this->tokensMetadata); + } + } + return $this->tokensMetadata; + } + /** * @inheritDoc * @throws \CRM_Core_Exception @@ -39,24 +101,49 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) { $this->prefetch = (array) $prefetch; $fieldValue = $this->getFieldValue($row, $field); + if (is_array($fieldValue)) { + // eg. role_id for participant would be an array here. + $fieldValue = implode(',', $fieldValue); + } if ($this->isPseudoField($field)) { + if (!empty($fieldValue)) { + // If it's set here it has already been loaded in pre-fetch. + return $row->format('text/plain')->tokens($entity, $field, (string) $fieldValue); + } + // Once prefetch is fully standardised we can remove this - as long + // as tests pass we should be fine as tests cover this. $split = explode(':', $field); return $row->tokens($entity, $field, $this->getPseudoValue($split[0], $split[1], $this->getFieldValue($row, $split[0]))); } + if ($this->isCustomField($field)) { + $prefetchedValue = $this->getCustomFieldValue($this->getFieldValue($row, 'id'), $field); + if ($prefetchedValue) { + return $row->format('text/html')->tokens($entity, $field, $prefetchedValue); + } + return $row->customToken($entity, \CRM_Core_BAO_CustomField::getKeyID($field), $this->getFieldValue($row, 'id')); + } if ($this->isMoneyField($field)) { + $currency = $this->getCurrency($row); + if (!$currency) { + // too hard basket for now - just do what we always did. + return $row->format('text/plain')->tokens($entity, $field, + \CRM_Utils_Money::format($fieldValue, $currency)); + } return $row->format('text/plain')->tokens($entity, $field, - \CRM_Utils_Money::format($fieldValue, $this->getCurrency($row))); + Money::of($fieldValue, $currency)); + } if ($this->isDateField($field)) { - return $row->format('text/plain')->tokens($entity, $field, \CRM_Utils_Date::customFormat($fieldValue)); - } - if ($this->isCustomField($field)) { - $row->customToken($entity, \CRM_Core_BAO_CustomField::getKeyID($field), $this->getFieldValue($row, 'id')); - } - else { - $row->format('text/plain')->tokens($entity, $field, (string) $fieldValue); + try { + return $row->format('text/plain') + ->tokens($entity, $field, ($fieldValue ? new DateTime($fieldValue) : $fieldValue)); + } + catch (Exception $e) { + Civi::log()->info('invalid date token'); + } } + $row->format('text/plain')->tokens($entity, $field, (string) $fieldValue); } /** @@ -98,29 +185,27 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { return CRM_Core_DAO_AllCoreTables::getTableForEntityName($this->getApiEntityName()); } - /** - * Get the relevant bao name. - */ - public function getBAOName(): string { - return CRM_Core_DAO_AllCoreTables::getFullName($this->getApiEntityName()); - } - /** * Get an array of fields to be requested. * + * @todo this function should look up tokenMetadata that + * is already loaded. + * * @return string[] */ - public function getReturnFields(): array { + protected function getReturnFields(): array { return array_keys($this->getBasicTokens()); } /** - * Get all the tokens supported by this processor. + * Is the given field a boolean field. * - * @return array|string[] + * @param string $fieldName + * + * @return bool */ - public function getAllTokens(): array { - return array_merge($this->getBasicTokens(), $this->getPseudoTokens(), CRM_Utils_Token::getCustomFieldTokens('Contribution')); + protected function isBooleanField(string $fieldName): bool { + return $this->getMetadataForField($fieldName)['data_type'] === 'Boolean'; } /** @@ -130,8 +215,8 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return bool */ - public function isDateField(string $fieldName): bool { - return $this->getFieldMetadata()[$fieldName]['data_type'] === 'Timestamp'; + protected function isDateField(string $fieldName): bool { + return in_array($this->getMetadataForField($fieldName)['data_type'], ['Timestamp', 'Date'], TRUE); } /** @@ -141,7 +226,7 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return bool */ - public function isPseudoField(string $fieldName): bool { + protected function isPseudoField(string $fieldName): bool { return strpos($fieldName, ':') !== FALSE; } @@ -152,7 +237,7 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return bool */ - public function isCustomField(string $fieldName) : bool { + protected function isCustomField(string $fieldName) : bool { return (bool) \CRM_Core_BAO_CustomField::getKeyID($fieldName); } @@ -163,8 +248,8 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return bool */ - public function isMoneyField(string $fieldName): bool { - return $this->getFieldMetadata()[$fieldName]['data_type'] === 'Money'; + protected function isMoneyField(string $fieldName): bool { + return $this->getMetadataForField($fieldName)['data_type'] === 'Money'; } /** @@ -186,51 +271,10 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { } /** - * Get pseudoTokens - it tokens that reflect the name or label of a pseudoconstant. - * - * @internal - this function will likely be made protected soon. - * - * @return array - */ - public function getPseudoTokens(): array { - $return = []; - foreach (array_keys($this->getBasicTokens()) as $fieldName) { - if ($this->isAddPseudoTokens($fieldName)) { - $fieldLabel = $this->fieldMetadata[$fieldName]['input_attrs']['label'] ?? $this->fieldMetadata[$fieldName]['label']; - $return[$fieldName . ':label'] = $fieldLabel; - $return[$fieldName . ':name'] = ts('Machine name') . ': ' . $fieldLabel; - } - } - return $return; - } - - /** - * Is this a field we should add pseudo-tokens to? - * - * Pseudo-tokens allow access to name and label fields - e.g - * - * {contribution.contribution_status_id:name} might resolve to 'Completed' - * - * @param string $fieldName + * Get any tokens with custom calculation. */ - public function isAddPseudoTokens($fieldName): bool { - if ($fieldName === 'currency') { - // 'currency' is manually added to the skip list as an anomaly. - // name & label aren't that suitable for 'currency' (symbol, which - // possibly maps to 'abbr' would be) and we can't gather that - // from the metadata as yet. - return FALSE; - } - if ($this->getFieldMetadata()[$fieldName]['type'] === 'Custom') { - // If we remove this early return then we get that extra nuanced goodness - // and support for the more portable v4 style field names - // on custom fields - where labels or names can be returned. - // At present the gap is that the metadata for the label is not accessed - // and tests failed on the enotice and we don't have a clear plan about - // v4 style custom tokens - but medium term this IF will probably go. - return FALSE; - } - return (bool) ($this->getFieldMetadata()[$fieldName]['options'] || !empty($this->getFieldMetadata()[$fieldName]['suffixes'])); + protected function getBespokeTokens(): array { + return []; } /** @@ -245,12 +289,17 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @internal function will likely be protected soon. */ - public function getPseudoValue(string $realField, string $pseudoKey, $fieldValue): string { + protected function getPseudoValue(string $realField, string $pseudoKey, $fieldValue): string { + $bao = CRM_Core_DAO_AllCoreTables::getFullName($this->getMetadataForField($realField)['entity']); if ($pseudoKey === 'name') { - $fieldValue = (string) CRM_Core_PseudoConstant::getName($this->getBAOName(), $realField, $fieldValue); + $fieldValue = (string) CRM_Core_PseudoConstant::getName($bao, $realField, $fieldValue); } if ($pseudoKey === 'label') { - $fieldValue = (string) CRM_Core_PseudoConstant::getLabel($this->getBAOName(), $realField, $fieldValue); + $fieldValue = (string) CRM_Core_PseudoConstant::getLabel($bao, $realField, $fieldValue); + } + if ($pseudoKey === 'abbr' && $realField === 'state_province_id') { + // hack alert - currently only supported for state. + $fieldValue = (string) CRM_Core_PseudoConstant::stateProvinceAbbreviation($fieldValue); } return (string) $fieldValue; } @@ -261,12 +310,15 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * @return string|int */ protected function getFieldValue(TokenRow $row, string $field) { - $actionSearchResult = $row->context['actionSearchResult']; - $aliasedField = $this->getEntityAlias() . $field; - if (isset($actionSearchResult->{$aliasedField})) { - return $actionSearchResult->{$aliasedField}; + $entityName = $this->getEntityName(); + if (isset($row->context[$entityName][$field])) { + return $row->context[$entityName][$field]; } + $entityID = $row->context[$this->getEntityIDField()]; + if ($field === 'id') { + return $entityID; + } return $this->prefetch[$entityID][$field] ?? ''; } @@ -274,8 +326,7 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * Class constructor. */ public function __construct() { - $tokens = $this->getAllTokens(); - parent::__construct($this->getEntityName(), $tokens); + parent::__construct($this->getEntityName(), []); } /** @@ -301,24 +352,27 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { if ($e->mapping->getEntity() !== $this->getExtendableTableName()) { return; } - foreach ($this->getReturnFields() as $token) { - $e->query->select('e.' . $token . ' AS ' . $this->getEntityAlias() . $token); - } + $e->query->select('e.id AS tokenContext_' . $this->getEntityIDField()); } /** - * Get tokens supporting the syntax we are migrating to. - * - * In general these are tokens that were not previously supported - * so we can add them in the preferred way or that we have - * undertaken some, as yet to be written, db update. + * Get tokens to be suppressed from the widget. * - * See https://lab.civicrm.org/dev/core/-/issues/2650 + * Note this is expected to be an interim function. Now we are no + * longer working around the parent function we can just define them once... + * with metadata, in a future refactor. + */ + protected function getHiddenTokens(): array { + return []; + } + + /** + * @todo remove this function & use the metadata that is loaded. * * @return string[] * @throws \API_Exception */ - public function getBasicTokens(): array { + protected function getBasicTokens(): array { $return = []; foreach ($this->getExposedFields() as $fieldName) { // Custom fields are still added v3 style - we want to keep v4 naming 'unpoluted' @@ -337,7 +391,7 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * @return string[] * */ - public function getExposedFields(): array { + protected function getExposedFields(): array { $return = []; foreach ($this->getFieldMetadata() as $field) { if (!in_array($field['name'], $this->getSkippedFields(), TRUE)) { @@ -352,8 +406,11 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return string[] */ - public function getSkippedFields(): array { - $fields = ['contact_id']; + protected function getSkippedFields(): array { + // tags is offered in 'case' & is one of the only fields that is + // 'not a real field' offered up by case - seems like an oddity + // we should skip at the top level for now. + $fields = ['tags']; if (!CRM_Campaign_BAO_Campaign::isCampaignEnable()) { $fields[] = 'campaign_id'; } @@ -367,11 +424,11 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { return CRM_Core_DAO_AllCoreTables::convertEntityNameToLower($this->getApiEntityName()); } - public function getEntityIDField() { + protected function getEntityIDField(): string { return $this->getEntityName() . 'Id'; } - public function prefetch(\Civi\Token\Event\TokenValueEvent $e): ?array { + public function prefetch(TokenValueEvent $e): ?array { $entityIDs = $e->getTokenProcessor()->getContextValues($this->getEntityIDField()); if (empty($entityIDs)) { return []; @@ -387,7 +444,7 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { return $result; } - public function getCurrencyFieldName() { + protected function getCurrencyFieldName() { return []; } @@ -397,15 +454,214 @@ class CRM_Core_EntityTokens extends AbstractTokenSubscriber { * * @return string */ - public function getCurrency($row): string { + protected function getCurrency($row): string { if (!empty($this->getCurrencyFieldName())) { return $this->getFieldValue($row, $this->getCurrencyFieldName()[0]); } return CRM_Core_Config::singleton()->defaultCurrency; } - public function getPrefetchFields(\Civi\Token\Event\TokenValueEvent $e): array { - return array_intersect($this->getActiveTokens($e), $this->getCurrencyFieldName(), array_keys($this->getAllTokens())); + /** + * Get the fields required to prefetch the entity. + * + * @param \Civi\Token\Event\TokenValueEvent $e + * + * @return array + * @throws \API_Exception + */ + public function getPrefetchFields(TokenValueEvent $e): array { + $allTokens = array_keys($this->getTokenMetadata()); + $requiredFields = array_intersect($this->getActiveTokens($e), $allTokens); + if (empty($requiredFields)) { + return []; + } + $requiredFields = array_merge($requiredFields, array_intersect($allTokens, array_merge(['id'], $this->getCurrencyFieldName()))); + foreach ($this->getDependencies() as $field => $required) { + if (in_array($field, $this->getActiveTokens($e), TRUE)) { + foreach ((array) $required as $key) { + $requiredFields[] = $key; + } + } + } + return $requiredFields; + } + + /** + * Get fields which need to be returned to render another token. + * + * @return array + */ + protected function getDependencies(): array { + return []; + } + + /** + * Get the apiv4 style custom field name. + * + * @param int $id + * + * @return string + */ + protected function getCustomFieldName(int $id): string { + foreach ($this->getTokenMetadata() as $key => $field) { + if (($field['custom_field_id'] ?? NULL) === $id) { + return $key; + } + } + } + + /** + * @param $entityID + * @param string $field eg. 'custom_1' + * + * @return array|string|void|null $mixed + * + * @throws \CRM_Core_Exception + */ + protected function getCustomFieldValue($entityID, string $field) { + $id = str_replace('custom_', '', $field); + $value = $this->prefetch[$entityID][$this->getCustomFieldName($id)] ?? ''; + if ($value !== NULL) { + return CRM_Core_BAO_CustomField::displayValue($value, $id); + } + } + + /** + * Get the metadata for the field. + * + * @param string $fieldName + * + * @return array + */ + protected function getMetadataForField($fieldName): array { + if (isset($this->getTokenMetadata()[$fieldName])) { + return $this->getTokenMetadata()[$fieldName]; + } + if (isset($this->getTokenMappingsForRelatedEntities()[$fieldName])) { + return $this->getTokenMetadata()[$this->getTokenMappingsForRelatedEntities()[$fieldName]]; + } + return $this->getTokenMetadata()[$this->getDeprecatedTokens()[$fieldName]] ?? []; + } + + /** + * Get token mappings for related entities - specifically the contact entity. + * + * This function exists to help manage the way contact tokens is structured + * of an query-object style result set that needs to be mapped to apiv4. + * + * The end goal is likely to be to advertised tokens that better map to api + * v4 and deprecate the existing ones but that is a long-term migration. + * + * @return array + */ + protected function getTokenMappingsForRelatedEntities(): array { + return []; + } + + /** + * Get array of deprecated tokens and the new token they map to. + * + * @return array + */ + protected function getDeprecatedTokens(): array { + return []; + } + + /** + * Get any overrides for token metadata. + * + * This is most obviously used for setting the audience, which + * will affect widget-presence. + * + * @return \string[][] + */ + protected function getTokenMetadataOverrides(): array { + return []; + } + + /** + * To handle variable tokens, override this function and return the active tokens. + * + * @param \Civi\Token\Event\TokenValueEvent $e + * + * @return mixed + */ + public function getActiveTokens(TokenValueEvent $e) { + $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + if (!isset($messageTokens[$this->entity])) { + return FALSE; + } + return array_intersect($messageTokens[$this->entity], array_keys($this->getTokenMetadata())); + } + + /** + * Add the token to the metadata based on the field spec. + * + * @param array $field + * @param array $exposedFields + * @param string $prefix + */ + protected function addFieldToTokenMetadata(array $field, array $exposedFields, string $prefix = ''): void { + if ($field['type'] !== 'Custom' && !in_array($field['name'], $exposedFields, TRUE)) { + return; + } + $field['audience'] = 'user'; + if ($field['name'] === 'contact_id') { + // Since {contact.id} is almost always present don't confuse users + // by also adding (e.g {participant.contact_id) + $field['audience'] = 'sysadmin'; + } + if (!empty($this->getTokenMetadataOverrides()[$field['name']])) { + $field = array_merge($field, $this->getTokenMetadataOverrides()[$field['name']]); + } + if ($field['type'] === 'Custom') { + // Convert to apiv3 style for now. Later we can add v4 with + // portable naming & support for labels/ dates etc so let's leave + // the space open for that. + // Not the existing quickform widget has handling for the custom field + // format based on the title using this syntax. + $parts = explode(': ', $field['label']); + $field['title'] = "{$parts[1]} :: {$parts[0]}"; + $tokenName = 'custom_' . $field['custom_field_id']; + $this->tokensMetadata[$tokenName] = $field; + return; + } + $tokenName = $prefix ? ($prefix . '.' . $field['name']) : $field['name']; + if (in_array($field['name'], $exposedFields, TRUE)) { + if ( + ($field['options'] || !empty($field['suffixes'])) + // At the time of writing currency didn't have a label option - this may have changed. + && !in_array($field['name'], $this->getCurrencyFieldName(), TRUE) + ) { + $this->tokensMetadata[$tokenName . ':label'] = $this->tokensMetadata[$tokenName . ':name'] = $field; + $fieldLabel = $field['input_attrs']['label'] ?? $field['label']; + $this->tokensMetadata[$tokenName . ':label']['name'] = $field['name'] . ':label'; + $this->tokensMetadata[$tokenName . ':name']['name'] = $field['name'] . ':name'; + $this->tokensMetadata[$tokenName . ':name']['audience'] = 'sysadmin'; + $this->tokensMetadata[$tokenName . ':label']['title'] = $fieldLabel; + $this->tokensMetadata[$tokenName . ':name']['title'] = ts('Machine name') . ': ' . $fieldLabel; + $field['audience'] = 'sysadmin'; + } + if ($field['data_type'] === 'Boolean') { + $this->tokensMetadata[$tokenName . ':label'] = $field; + $this->tokensMetadata[$tokenName . ':label']['name'] = $field['name'] . ':label'; + $field['audience'] = 'sysadmin'; + } + $this->tokensMetadata[$tokenName] = $field; + } + } + + /** + * Get a cache key appropriate to the current usage. + * + * @return string + */ + protected function getCacheKey(): string { + $cacheKey = __CLASS__ . 'token_metadata' . $this->getApiEntityName() . CRM_Core_Config::domainID() . '_' . CRM_Core_I18n::getLocale(); + if ($this->checkPermissions) { + $cacheKey .= '__' . CRM_Core_Session::getLoggedInContactID(); + } + return $cacheKey; } } diff --git a/civicrm/CRM/Core/Form.php b/civicrm/CRM/Core/Form.php index 62372af16aa9c4db4f32fec343ceace9e11bfcd0..b04744fded63b367afb7cb121e1e235ce89c5d08 100644 --- a/civicrm/CRM/Core/Form.php +++ b/civicrm/CRM/Core/Form.php @@ -70,6 +70,16 @@ class CRM_Core_Form extends HTML_QuickForm_Page { */ public $_action; + /** + * Monetary fields that may be submitted. + * + * Any fields in this list will be converted to non-localised format + * if retrieved by `getSubmittedValue` + * + * @var array + */ + protected $submittableMoneyFields = []; + /** * Available payment processors. * @@ -131,9 +141,6 @@ class CRM_Core_Form extends HTML_QuickForm_Page { * e.g on a form declare $_dateFields = array( * 'receive_date' => array('default' => 'now'), * ); - * then in postProcess call $this->convertDateFieldsToMySQL($formValues) - * to have the time field re-incorporated into the field & 'now' set if - * no value has been passed in */ protected $_dateFields = []; @@ -2139,35 +2146,6 @@ class CRM_Core_Form extends HTML_QuickForm_Page { CRM_Utils_Array::remove($props, 'multiple', 'select', 'api', 'entity', 'create'); } - /** - * Convert all date fields within the params to mysql date ready for the - * BAO layer. In this case fields are checked against the $_datefields defined for the form - * and if time is defined it is incorporated - * - * @param array $params - * Input params from the form. - * - * @todo it would probably be better to work on $this->_params than a passed array - * @todo standardise the format which dates are passed to the BAO layer in & remove date - * handling from BAO - */ - public function convertDateFieldsToMySQL(&$params) { - foreach ($this->_dateFields as $fieldName => $specs) { - if (!empty($params[$fieldName])) { - $params[$fieldName] = CRM_Utils_Date::isoToMysql( - CRM_Utils_Date::processDate( - $params[$fieldName], - CRM_Utils_Array::value("{$fieldName}_time", $params), TRUE) - ); - } - else { - if (isset($specs['default'])) { - $params[$fieldName] = date('YmdHis', strtotime($specs['default'])); - } - } - } - } - /** * @param $elementName */ @@ -2419,20 +2397,20 @@ class CRM_Core_Form extends HTML_QuickForm_Page { public function setPageTitle($entityLabel) { switch ($this->_action) { case CRM_Core_Action::ADD: - CRM_Utils_System::setTitle(ts('New %1', [1 => $entityLabel])); + $this->setTitle(ts('New %1', [1 => $entityLabel])); break; case CRM_Core_Action::UPDATE: - CRM_Utils_System::setTitle(ts('Edit %1', [1 => $entityLabel])); + $this->setTitle(ts('Edit %1', [1 => $entityLabel])); break; case CRM_Core_Action::VIEW: case CRM_Core_Action::PREVIEW: - CRM_Utils_System::setTitle(ts('View %1', [1 => $entityLabel])); + $this->setTitle(ts('View %1', [1 => $entityLabel])); break; case CRM_Core_Action::DELETE: - CRM_Utils_System::setTitle(ts('Delete %1', [1 => $entityLabel])); + $this->setTitle(ts('Delete %1', [1 => $entityLabel])); break; } } @@ -2746,7 +2724,11 @@ class CRM_Core_Form extends HTML_QuickForm_Page { if (empty($this->exportedValues)) { $this->exportedValues = $this->controller->exportValues($this->_name); } - return $this->exportedValues[$fieldName] ?? NULL; + $value = $this->exportedValues[$fieldName] ?? NULL; + if (in_array($fieldName, $this->submittableMoneyFields, TRUE)) { + return CRM_Utils_Rule::cleanMoney($value); + } + return $value; } /** diff --git a/civicrm/CRM/Core/Form/Task.php b/civicrm/CRM/Core/Form/Task.php index cb4c7349c9daadd6ce80fdec26b19845cc0b63d1..3c134e608cc1fc27eb1c3b59870dca686c1abe9f 100644 --- a/civicrm/CRM/Core/Form/Task.php +++ b/civicrm/CRM/Core/Form/Task.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Token\TokenProcessor; + /** * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing @@ -73,6 +75,18 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form { */ public static $entityShortname = NULL; + + /** + * Rows to act on. + * + * e.g + * [ + * ['contact_id' => 4, 'participant_id' => 6, 'schema' => ['contactId' => 5, 'participantId' => 6], + * ] + * @var array + */ + protected $rows = []; + /** * Set where the browser should be directed to next. * @@ -338,4 +352,45 @@ SELECT contact_id return $this::$entityShortname . '_id'; } + /** + * List available tokens for this form. + * + * @return array + */ + public function listTokens() { + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => $this->getTokenSchema()]); + return $tokenProcessor->listTokens(); + } + + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + protected function getTokenSchema(): array { + return ['contactId']; + } + + /** + * Get the rows from the results. + * + * @return array + */ + protected function getRows(): array { + $rows = []; + foreach ($this->getContactIDs() as $contactID) { + $rows[] = ['contact_id' => $contactID, 'schema' => ['contactId' => $contactID]]; + } + return $rows; + } + + /** + * Get the relevant contact IDs. + * + * @return array + */ + protected function getContactIDs(): array { + return $this->_contactIds ?? []; + } + } diff --git a/civicrm/CRM/Core/Form/Task/Batch.php b/civicrm/CRM/Core/Form/Task/Batch.php index 9e65231ceb811364d712ffa964fc9eea85020fe1..f5a0cb5d677f36789bde5222dd8a0e2aadb1925e 100644 --- a/civicrm/CRM/Core/Form/Task/Batch.php +++ b/civicrm/CRM/Core/Form/Task/Batch.php @@ -89,7 +89,7 @@ class CRM_Core_Form_Task_Batch extends CRM_Core_Form_Task { throw new InvalidArgumentException('ufGroupId is missing'); } $this->_title = ts("Update multiple %1s", [1 => $this::$entityShortname]) . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); - CRM_Utils_System::setTitle($this->_title); + $this->setTitle($this->_title); $this->addDefaultButtons(ts('Save')); $this->_fields = CRM_Core_BAO_UFGroup::getFields($ufGroupId, FALSE, CRM_Core_Action::VIEW); diff --git a/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php index 836f0001ffda8c62b680729a0c814fcf6e39318f..f3774ce75ba4ebda48cc6e87f2be1514f4dc98c1 100644 --- a/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php @@ -23,14 +23,20 @@ * The intention is that common functionality can be moved here and the other * classes cleaned up. * Keep old-style token handling out of this class. + * + * @deprecated */ class CRM_Core_Form_Task_PDFLetterCommon { /** * @var CRM_Core_Form $form + * + * @deprecated */ public static function preProcess(&$form) { - CRM_Utils_System::setTitle('Print/Merge Document'); + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); + + $form->setTitle('Print/Merge Document'); } /** @@ -198,7 +204,25 @@ class CRM_Core_Form_Task_PDFLetterCommon { */ public static function formRule($fields, $files, $self) { $errors = []; - $template = CRM_Core_Smarty::singleton(); + $deprecatedTokens = [ + '{case.status_id}' => '{case.status_id:label}', + '{case.case_type_id}' => '{case.case_type_id:label}', + '{membership.status}' => '{membership.status_id:label}', + '{membership.type}' => '{membership.membership_type_id:label}', + '{contribution.campaign}' => '{contribution.campaign_id:label}', + '{contribution.payment_instrument}' => '{contribution.payment_instrument_id:label}', + '{contribution.contribution_id}' => '{contribution.id}', + '{contribution.contribution_source}' => '{contribution.source}', + ]; + $tokenErrors = []; + foreach ($deprecatedTokens as $token => $replacement) { + if (strpos($fields['html_message'], $token) !== FALSE) { + $tokenErrors[] = ts('Token %1 is no longer supported - use %2 instead', [$token, $replacement]); + } + } + if (!empty($tokenErrors)) { + $errors['html_message'] = implode('<br>', $tokenErrors); + } // If user uploads non-document file other than odt/docx if (empty($fields['template']) && @@ -233,11 +257,15 @@ class CRM_Core_Form_Task_PDFLetterCommon { * * @return string $html_message * + * @deprecated + * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception * @throws \Civi\API\Exception\UnauthorizedException */ public static function processTemplate(&$formValues) { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); + $html_message = $formValues['html_message'] ?? NULL; // process message template @@ -295,6 +323,8 @@ class CRM_Core_Form_Task_PDFLetterCommon { } /** + * @deprecated + * * @param $message */ public static function formatMessage(&$message) { @@ -347,21 +377,14 @@ class CRM_Core_Form_Task_PDFLetterCommon { * The values submitted through the form * * @deprecated - * - * @return array - * If formValues['is_unit_test'] is true, otherwise outputs document to browser */ - public static function renderFromRows($rows, $msgPart, $formValues) { + public static function renderFromRows($rows, $msgPart, $formValues): void { CRM_Core_Error::deprecatedFunctionWarning('no alternative'); $html = []; foreach ($rows as $row) { $html[] = $row->render($msgPart); } - if (!empty($formValues['is_unit_test'])) { - return $html; - } - if (!empty($html)) { self::outputFromHtml($formValues, $html); } diff --git a/civicrm/CRM/Core/Form/Task/PickProfile.php b/civicrm/CRM/Core/Form/Task/PickProfile.php index 8a64e30535ab46405f7fbd8328036d8d328ea616..968e9d50e919a605eb0c156540337aed5f94c8aa 100644 --- a/civicrm/CRM/Core/Form/Task/PickProfile.php +++ b/civicrm/CRM/Core/Form/Task/PickProfile.php @@ -65,7 +65,7 @@ abstract class CRM_Core_Form_Task_PickProfile extends CRM_Core_Form_Task { $session = CRM_Core_Session::singleton(); $this->_userContext = $session->readUserContext(); - CRM_Utils_System::setTitle(ts('Update multiple ' . $this::$entityShortname . 's')); + $this->setTitle(ts('Update multiple ' . $this::$entityShortname . 's')); // validations if (count($this->_entityIds) > $this->_maxEntities) { diff --git a/civicrm/CRM/Core/I18n/Form.php b/civicrm/CRM/Core/I18n/Form.php index 6beb1d669dafc6cf9c783d1e31944a3558206060..f17c019e06538ae436c0e0d37b5f51da266ea47e 100644 --- a/civicrm/CRM/Core/I18n/Form.php +++ b/civicrm/CRM/Core/I18n/Form.php @@ -80,7 +80,7 @@ class CRM_Core_I18n_Form extends CRM_Core_Form { $this->addDefaultButtons(ts('Save'), 'next', NULL); - CRM_Utils_System::setTitle(ts('Languages')); + $this->setTitle(ts('Languages')); $this->assign('locales', $this->_locales); $this->assign('field', $field); diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php index ca558b13af9e9c819cd9d6111c90cd29a3a0d98b..c99f450b796c94b6f1b1f9ee346868587d8d317f 100644 --- a/civicrm/CRM/Core/ManagedEntities.php +++ b/civicrm/CRM/Core/ManagedEntities.php @@ -1,5 +1,7 @@ <?php +use Civi\Api4\Managed; + /** * The ManagedEntities system allows modules to add records to the database * declaratively. Those records will be automatically inserted, updated, @@ -26,6 +28,13 @@ class CRM_Core_ManagedEntities { */ protected $moduleIndex; + /** + * Actions arising from the managed entities. + * + * @var array + */ + protected $managedActions = []; + /** * @var array * List of all entity declarations. @@ -41,7 +50,7 @@ class CRM_Core_ManagedEntities { public static function singleton($fresh = FALSE) { static $singleton; if ($fresh || !$singleton) { - $singleton = new CRM_Core_ManagedEntities(CRM_Core_Module::getAll(), NULL); + $singleton = new CRM_Core_ManagedEntities(CRM_Core_Module::getAll()); } return $singleton; } @@ -63,23 +72,16 @@ class CRM_Core_ManagedEntities { /** * @param array $modules * CRM_Core_Module. - * @param array $declarations - * Per hook_civicrm_managed. */ - public function __construct($modules, $declarations) { - $this->moduleIndex = self::createModuleIndex($modules); - - if ($declarations !== NULL) { - $this->declarations = self::cleanDeclarations($declarations); - } - else { - $this->declarations = NULL; - } + public function __construct(array $modules) { + $this->moduleIndex = $this->createModuleIndex($modules); } /** * Read a managed entity using APIv3. * + * @deprecated + * * @param string $moduleName * The name of the module which declared entity. * @param string $name @@ -112,18 +114,21 @@ class CRM_Core_ManagedEntities { /** * Identify any enabled/disabled modules. Add new entities, update * existing entities, and remove orphaned (stale) entities. + * * @param bool $ignoreUpgradeMode * - * @throws Exception + * @throws \CRM_Core_Exception */ public function reconcile($ignoreUpgradeMode = FALSE) { // Do not reconcile whilst we are in upgrade mode if (CRM_Core_Config::singleton()->isUpgradeMode() && !$ignoreUpgradeMode) { return; } + $this->loadDeclarations(); if ($error = $this->validate($this->getDeclarations())) { - throw new Exception($error); + throw new CRM_Core_Exception($error); } + $this->loadManagedEntityActions(); $this->reconcileEnabledModules(); $this->reconcileDisabledModules(); $this->reconcileUnknownModules(); @@ -132,24 +137,16 @@ class CRM_Core_ManagedEntities { /** * For all enabled modules, add new entities, update * existing entities, and remove orphaned (stale) entities. - * - * @throws Exception */ - public function reconcileEnabledModules() { + protected function reconcileEnabledModules(): void { // Note: any thing currently declared is necessarily from // an active module -- because we got it from a hook! // index by moduleName,name - $decls = self::createDeclarationIndex($this->moduleIndex, $this->getDeclarations()); + $decls = $this->createDeclarationIndex($this->moduleIndex, $this->getDeclarations()); foreach ($decls as $moduleName => $todos) { - if (isset($this->moduleIndex[TRUE][$moduleName])) { - $this->reconcileEnabledModule($this->moduleIndex[TRUE][$moduleName], $todos); - } - elseif (isset($this->moduleIndex[FALSE][$moduleName])) { - // do nothing -- module should get swept up later - } - else { - throw new Exception("Entity declaration references invalid or inactive module name [$moduleName]"); + if ($this->isModuleEnabled($moduleName)) { + $this->reconcileEnabledModule($moduleName); } } } @@ -158,37 +155,91 @@ class CRM_Core_ManagedEntities { * For one enabled module, add new entities, update existing entities, * and remove orphaned (stale) entities. * - * @param \CRM_Core_Module $module - * @param array $todos - * List of entities currently declared by this module. - * array(string $name => array $entityDef). + * @param string $module */ - public function reconcileEnabledModule(CRM_Core_Module $module, $todos) { - $dao = new CRM_Core_DAO_Managed(); - $dao->module = $module->name; - $dao->find(); - while ($dao->fetch()) { - if (isset($todos[$dao->name]) && $todos[$dao->name]) { - // update existing entity; remove from $todos - $this->updateExistingEntity($dao, $todos[$dao->name]); - unset($todos[$dao->name]); - } - else { - // remove stale entity; not in $todos - $this->removeStaleEntity($dao); - } + protected function reconcileEnabledModule(string $module): void { + foreach ($this->getManagedEntitiesToUpdate(['module' => $module]) as $todo) { + $dao = new CRM_Core_DAO_Managed(); + $dao->module = $todo['module']; + $dao->name = $todo['name']; + $dao->entity_type = $todo['entity_type']; + $dao->entity_id = $todo['entity_id']; + $dao->id = $todo['id']; + $this->updateExistingEntity($dao, $todo); } - // create new entities from leftover $todos - foreach ($todos as $name => $todo) { + foreach ($this->getManagedEntitiesToDelete(['module' => $module]) as $todo) { + $dao = new CRM_Core_DAO_Managed(); + $dao->module = $todo['module']; + $dao->name = $todo['name']; + $dao->entity_type = $todo['entity_type']; + $dao->id = $todo['id']; + $dao->cleanup = $todo['cleanup']; + $dao->entity_id = $todo['entity_id']; + $this->removeStaleEntity($dao); + } + foreach ($this->getManagedEntitiesToCreate(['module' => $module]) as $todo) { $this->insertNewEntity($todo); } } + /** + * Get the managed entities to be created. + * + * @param array $filters + * + * @return array + */ + protected function getManagedEntitiesToCreate(array $filters = []): array { + return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'create'])); + } + + /** + * Get the managed entities to be created. + * + * @param array $filters + * + * @return array + */ + protected function getManagedEntitiesToUpdate(array $filters = []): array { + return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'update'])); + } + + /** + * Get the managed entities to be deleted. + * + * @param array $filters + * + * @return array + */ + protected function getManagedEntitiesToDelete(array $filters = []): array { + return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'delete'])); + } + + /** + * Get the managed entities that fit the criteria. + * + * @param array $filters + * + * @return array + */ + protected function getManagedEntities(array $filters = []): array { + $return = []; + foreach ($this->managedActions as $actionKey => $action) { + foreach ($filters as $filterKey => $filterValue) { + if ($action[$filterKey] !== $filterValue) { + continue 2; + } + } + $return[$actionKey] = $action; + } + return $return; + } + /** * For all disabled modules, disable any managed entities. */ - public function reconcileDisabledModules() { + protected function reconcileDisabledModules() { if (empty($this->moduleIndex[FALSE])) { return; } @@ -208,7 +259,7 @@ class CRM_Core_ManagedEntities { * Remove any orphaned (stale) entities that are linked to * unknown modules. */ - public function reconcileUnknownModules() { + protected function reconcileUnknownModules() { $knownModules = []; if (array_key_exists(0, $this->moduleIndex) && is_array($this->moduleIndex[0])) { $knownModules = array_merge($knownModules, array_keys($this->moduleIndex[0])); @@ -235,16 +286,16 @@ class CRM_Core_ManagedEntities { * @param array $todo * Entity specification (per hook_civicrm_managedEntities). */ - public function insertNewEntity($todo) { - $result = civicrm_api($todo['entity'], 'create', $todo['params']); + protected function insertNewEntity($todo) { + $result = civicrm_api($todo['entity_type'], 'create', $todo['params']); if (!empty($result['is_error'])) { - $this->onApiError($todo['entity'], 'create', $todo['params'], $result); + $this->onApiError($todo['entity_type'], 'create', $todo['params'], $result); } $dao = new CRM_Core_DAO_Managed(); $dao->module = $todo['module']; $dao->name = $todo['name']; - $dao->entity_type = $todo['entity']; + $dao->entity_type = $todo['entity_type']; // A fatal error will result if there is no valid id but if // this is v4 api we might need to access it via ->first(). $dao->entity_id = $result['id'] ?? $result->first()['id']; @@ -259,7 +310,7 @@ class CRM_Core_ManagedEntities { * @param array $todo * Entity specification (per hook_civicrm_managedEntities). */ - public function updateExistingEntity($dao, $todo) { + protected function updateExistingEntity($dao, $todo) { $policy = CRM_Utils_Array::value('update', $todo, 'always'); $doUpdate = ($policy === 'always'); @@ -307,7 +358,7 @@ class CRM_Core_ManagedEntities { * * @throws \CiviCRM_API3_Exception */ - public function disableEntity($dao): void { + protected function disableEntity($dao): void { $entity_type = $dao->entity_type; if ($this->isActivationSupported($entity_type)) { // FIXME cascading for payproc types? @@ -327,9 +378,9 @@ class CRM_Core_ManagedEntities { * Remove a stale entity (if policy allows). * * @param CRM_Core_DAO_Managed $dao - * @throws Exception + * @throws CRM_Core_Exception */ - public function removeStaleEntity($dao) { + protected function removeStaleEntity($dao) { $policy = empty($dao->cleanup) ? 'always' : $dao->cleanup; switch ($policy) { case 'always': @@ -355,7 +406,7 @@ class CRM_Core_ManagedEntities { break; default: - throw new \Exception('Unrecognized cleanup policy: ' . $policy); + throw new CRM_Core_Exception('Unrecognized cleanup policy: ' . $policy); } if ($doDelete) { @@ -384,16 +435,7 @@ class CRM_Core_ManagedEntities { * * @return array|null */ - public function getDeclarations() { - if ($this->declarations === NULL) { - $this->declarations = []; - foreach (CRM_Core_Component::getEnabledComponents() as $component) { - /** @var CRM_Core_Component_Info $component */ - $this->declarations = array_merge($this->declarations, $component->getManagedEntities()); - } - CRM_Utils_Hook::managed($this->declarations); - $this->declarations = self::cleanDeclarations($this->declarations); - } + protected function getDeclarations() { return $this->declarations; } @@ -404,7 +446,7 @@ class CRM_Core_ManagedEntities { * @return array * indexed by is_active,name */ - protected static function createModuleIndex($modules) { + protected function createModuleIndex($modules) { $result = []; foreach ($modules as $module) { $result[$module->is_active][$module->name] = $module; @@ -419,7 +461,7 @@ class CRM_Core_ManagedEntities { * @return array * indexed by module,name */ - protected static function createDeclarationIndex($moduleIndex, $declarations) { + protected function createDeclarationIndex($moduleIndex, $declarations) { $result = []; if (!isset($moduleIndex[TRUE])) { return $result; @@ -442,25 +484,60 @@ class CRM_Core_ManagedEntities { * @return string|bool * string on error, or FALSE */ - protected static function validate($declarations) { - foreach ($declarations as $declare) { + protected function validate($declarations) { + foreach ($declarations as $module => $declare) { foreach (['name', 'module', 'entity', 'params'] as $key) { if (empty($declare[$key])) { $str = print_r($declare, TRUE); - return ("Managed Entity is missing field \"$key\": $str"); + return ts('Managed Entity (%1) is missing field "%2": %3', [$module, $key, $str]); } } - // FIXME: validate that each 'module' is known + if (!$this->isModuleRecognised($declare['module'])) { + return ts('Entity declaration references invalid or inactive module name [%1]', [$declare['module']]); + } } return FALSE; } + /** + * Is the module recognised (as an enabled or disabled extension in the system). + * + * @param string $module + * + * @return bool + */ + protected function isModuleRecognised(string $module): bool { + return $this->isModuleDisabled($module) || $this->isModuleEnabled($module); + } + + /** + * Is the module enabled. + * + * @param string $module + * + * @return bool + */ + protected function isModuleEnabled(string $module): bool { + return isset($this->moduleIndex[TRUE][$module]); + } + + /** + * Is the module disabled. + * + * @param string $module + * + * @return bool + */ + protected function isModuleDisabled(string $module): bool { + return isset($this->moduleIndex[FALSE][$module]); + } + /** * @param array $declarations * * @return array */ - protected static function cleanDeclarations($declarations) { + protected function cleanDeclarations(array $declarations): array { foreach ($declarations as $name => &$declare) { if (!array_key_exists('name', $declare)) { $declare['name'] = $name; @@ -508,4 +585,48 @@ class CRM_Core_ManagedEntities { return Civi::$statics[__CLASS__][__FUNCTION__][$entity_type]; } + /** + * Load declarations into the class property. + * + * This picks it up from hooks and enabled components. + */ + protected function loadDeclarations(): void { + $this->declarations = []; + foreach (CRM_Core_Component::getEnabledComponents() as $component) { + $this->declarations = array_merge($this->declarations, $component->getManagedEntities()); + } + CRM_Utils_Hook::managed($this->declarations); + $this->declarations = $this->cleanDeclarations($this->declarations); + } + + protected function loadManagedEntityActions(): void { + $managedEntities = Managed::get(FALSE)->addSelect('*')->execute(); + foreach ($managedEntities as $managedEntity) { + $key = "{$managedEntity['module']}_{$managedEntity['name']}_{$managedEntity['entity_type']}"; + // Set to 'delete' - it will be overwritten below if it is to be updated. + $action = 'delete'; + $this->managedActions[$key] = array_merge($managedEntity, ['managed_action' => $action]); + } + foreach ($this->declarations as $declaration) { + $key = "{$declaration['module']}_{$declaration['name']}_{$declaration['entity']}"; + if (isset($this->managedActions[$key])) { + $this->managedActions[$key]['params'] = $declaration['params']; + $this->managedActions[$key]['managed_action'] = 'update'; + $this->managedActions[$key]['cleanup'] = $declaration['cleanup'] ?? NULL; + $this->managedActions[$key]['update'] = $declaration['update'] ?? 'always'; + } + else { + $this->managedActions[$key] = [ + 'module' => $declaration['module'], + 'name' => $declaration['name'], + 'entity_type' => $declaration['entity'], + 'managed_action' => 'create', + 'params' => $declaration['params'], + 'cleanup' => $declaration['cleanup'] ?? NULL, + 'update' => $declaration['update'] ?? 'always', + ]; + } + } + } + } diff --git a/civicrm/CRM/Core/Payment/Elavon.php b/civicrm/CRM/Core/Payment/Elavon.php index 596d8898cad5ea1f8f979270de4252f9adc6adce..75e2a37d215c946e75de1dd52489d81ce0713c2e 100644 --- a/civicrm/CRM/Core/Payment/Elavon.php +++ b/civicrm/CRM/Core/Payment/Elavon.php @@ -157,7 +157,7 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // set this for debugging -look for output in apache error log //curl_setopt ($ch,CURLOPT_VERBOSE,1 ); // ensures any Location headers are followed - if (ini_get('open_basedir') == '' && ini_get('safe_mode') == 'Off') { + if (ini_get('open_basedir') == '') { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); } diff --git a/civicrm/CRM/Core/Payment/FirstData.php b/civicrm/CRM/Core/Payment/FirstData.php index 5b5d6b1802e39debcff7aa182463511db735a51b..f6968c7e71fc45a14beef86c214b4c2491a024bd 100644 --- a/civicrm/CRM/Core/Payment/FirstData.php +++ b/civicrm/CRM/Core/Payment/FirstData.php @@ -222,7 +222,7 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 36000); // ensures any Location headers are followed - if (ini_get('open_basedir') == '' && ini_get('safe_mode') == 'Off') { + if (ini_get('open_basedir') == '') { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); } diff --git a/civicrm/CRM/Core/Payment/Form.php b/civicrm/CRM/Core/Payment/Form.php index 1c7263812c522bae496812da1b71964e17012560..2c30dec08df5f6ecae86b82c1853c109cfcfae01 100644 --- a/civicrm/CRM/Core/Payment/Form.php +++ b/civicrm/CRM/Core/Payment/Form.php @@ -211,8 +211,6 @@ class CRM_Core_Payment_Form { * entering details but once again the issue is not back office but 'another user'. * @param int $paymentInstrumentID * Payment instrument ID. - * - * @return bool */ public static function buildPaymentForm(&$form, $processor, $billing_profile_id, $isBackOffice, $paymentInstrumentID = NULL) { //if the form has address fields assign to the template so the js can decide what billing fields to show @@ -222,13 +220,12 @@ class CRM_Core_Payment_Form { } if (!empty($processor['object']) && $processor['object']->buildForm($form)) { - return NULL; + return; } self::setPaymentFieldsByProcessor($form, $processor, $billing_profile_id, $isBackOffice, $paymentInstrumentID); self::addCommonFields($form, $form->_paymentFields); self::addRules($form, $form->_paymentFields); - return (!empty($form->_paymentFields)); } /** diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index a345d0c3c7bcbb5ab284698893dadd34b68dc080..a626afd0ea4a04b1fdcc34ed59a83251620c0ae5 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -70,13 +70,6 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { * @throws \CiviCRM_API3_Exception */ public function recur($input, $recur, $contribution, $first) { - if ($this->getTrxnType() === 'subscr_payment' && - $input['paymentStatus'] !== 'Completed' - ) { - Civi::log()->debug('PayPalIPN: Ignore all IPN payments that are not completed'); - echo 'Failure: Invalid parameters<p>'; - return; - } // make sure the invoice ids match // make sure the invoice is valid and matches what we have in the contribution record @@ -102,23 +95,27 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { } $recur->processor_id = $this->retrieve('subscr_id', 'String'); $recur->trxn_id = $recur->processor_id; - break; + $recur->save(); + return; case 'subscr_eot': if ($recur->contribution_status_id != $contributionStatuses['Cancelled']) { $recur->contribution_status_id = $contributionStatuses['Completed']; } $recur->end_date = $now; - break; + $recur->save(); + return; case 'subscr_cancel': $recur->contribution_status_id = $contributionStatuses['Cancelled']; $recur->cancel_date = $now; - break; + $recur->save(); + return; case 'subscr_failed': $recur->contribution_status_id = $contributionStatuses['Failed']; $recur->modified_date = $now; + $recur->save(); break; case 'subscr_modify': @@ -126,27 +123,29 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { echo "Failure: We do not handle modifications to subscriptions right now<p>"; return; - case 'subscr_payment': - if ($first) { - $recur->start_date = $now; - } - else { - $recur->modified_date = $now; - } - - // make sure the contribution status is not done - // since order of ipn's is unknown - if ($recur->contribution_status_id != $contributionStatuses['Completed']) { - $recur->contribution_status_id = $contributionStatuses['In Progress']; - } - break; } - $recur->save(); - if ($this->getTrxnType() !== 'subscr_payment') { return; } + if ($input['paymentStatus'] !== 'Completed') { + Civi::log()->debug('PayPalIPN: Ignore all IPN payments that are not completed'); + echo 'Failure: Invalid parameters<p>'; + return; + } + if ($first) { + $recur->start_date = $now; + } + else { + $recur->modified_date = $now; + } + + // make sure the contribution status is not done + // since order of ipn's is unknown + if ($recur->contribution_status_id != $contributionStatuses['Completed']) { + $recur->contribution_status_id = $contributionStatuses['In Progress']; + } + $recur->save(); if (!$first) { // check if this contribution transaction is already processed @@ -155,7 +154,7 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { $contribution->trxn_id = $input['trxn_id']; if ($contribution->trxn_id && $contribution->find()) { Civi::log()->debug('PayPalIPN: Returning since contribution has already been handled (trxn_id: ' . $contribution->trxn_id . ')'); - echo "Success: Contribution has already been handled<p>"; + echo 'Success: Contribution has already been handled<p>'; return; } diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index 6e167ea48aea38c91d31e196ce79a3076b1dea03..2ad9e9977e069320e0af3379745bff9463071c78 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -841,6 +841,10 @@ class CRM_Core_Permission { $prefix . ts('administer payment processors'), ts('Add, Update, or Disable Payment Processors'), ], + 'render templates' => [ + $prefix . ts('render templates'), + ts('Render open-ended template content. (Additional constraints may apply to autoloaded records and specific notations.)'), + ], 'edit message templates' => [ $prefix . ts('edit message templates'), ], @@ -1135,6 +1139,7 @@ class CRM_Core_Permission { ], ]; $permissions['line_item'] = $permissions['contribution']; + $permissions['product'] = $permissions['contribution']; $permissions['financial_item'] = $permissions['contribution']; diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index ca20c9d27189d6c2319bc680ed31fb9f7c985d2f..2830c67782be2e23f4c27cf813afd08fe9b5bff5 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Token\TokenProcessor; + /** * One place to store frequently used values in Select Elements. Note that * some of the below elements will be dynamic, so we'll probably have a @@ -492,14 +494,12 @@ class CRM_Core_SelectValues { * Domain tokens * * @return array + * + * @deprecated */ public static function domainTokens() { - return [ - '{domain.name}' => ts('Domain name'), - '{domain.address}' => ts('Domain (organization) address'), - '{domain.phone}' => ts('Domain (organization) phone'), - '{domain.email}' => ts('Domain (organization) email'), - ]; + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), []); + return $tokenProcessor->listTokens(); } /** @@ -521,14 +521,14 @@ class CRM_Core_SelectValues { * * @return array */ - public static function membershipTokens() { + public static function membershipTokens(): array { return [ '{membership.id}' => ts('Membership ID'), - '{membership.status}' => ts('Membership Status'), - '{membership.type}' => ts('Membership Type'), + '{membership.status_id:label}' => ts('Status'), + '{membership.membership_type_id:label}' => ts('Membership Type'), '{membership.start_date}' => ts('Membership Start Date'), - '{membership.join_date}' => ts('Membership Join Date'), - '{membership.end_date}' => ts('Membership End Date'), + '{membership.join_date}' => ts('Member Since'), + '{membership.end_date}' => ts('Membership Expiration Date'), '{membership.fee}' => ts('Membership Fee'), ]; } @@ -536,160 +536,73 @@ class CRM_Core_SelectValues { /** * Different type of Event Tokens. * + * @deprecated + * * @return array */ - public static function eventTokens() { - return [ - '{event.event_id}' => ts('Event ID'), - '{event.title}' => ts('Event Title'), - '{event.start_date}' => ts('Event Start Date'), - '{event.end_date}' => ts('Event End Date'), - '{event.event_type}' => ts('Event Type'), - '{event.summary}' => ts('Event Summary'), - '{event.contact_email}' => ts('Event Contact Email'), - '{event.contact_phone}' => ts('Event Contact Phone'), - '{event.description}' => ts('Event Description'), - '{event.location}' => ts('Event Location'), - '{event.fee_amount}' => ts('Event Fees'), - '{event.info_url}' => ts('Event Info URL'), - '{event.registration_url}' => ts('Event Registration URL'), - '{event.balance}' => ts('Event Balance'), - ]; + public static function eventTokens(): array { + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => ['eventId']]); + $allTokens = $tokenProcessor->listTokens(); + foreach (array_keys($allTokens) as $token) { + if (strpos($token, '{domain.') === 0) { + unset($allTokens[$token]); + } + } + return $allTokens; } /** - * Different type of Event Tokens. + * Different type of Contribution Tokens. + * + * @deprecated * * @return array */ public static function contributionTokens(): array { - $tokens = []; - $processor = new CRM_Contribute_Tokens(); - foreach ($processor->getAllTokens() as $token => $title) { - $tokens['{contribution.' . $token . '}'] = $title; + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => ['contributionId']]); + $allTokens = $tokenProcessor->listTokens(); + foreach (array_keys($allTokens) as $token) { + if (strpos($token, '{domain.') === 0) { + unset($allTokens[$token]); + } } - return $tokens; + return $allTokens; } /** * Different type of Contact Tokens. * + * @deprecated + * * @return array */ - public static function contactTokens() { - static $tokens = NULL; - if (!$tokens) { - $additionalFields = [ - 'checksum' => ['title' => ts('Checksum')], - 'contact_id' => ['title' => ts('Internal Contact ID')], - ]; - $exportFields = array_merge(CRM_Contact_BAO_Contact::exportableFields(), $additionalFields); - - $values = array_merge(array_keys($exportFields)); - unset($values[0]); - - //FIXME:skipping some tokens for time being. - $skipTokens = [ - 'is_bulkmail', - 'group', - 'tag', - 'contact_sub_type', - 'note', - 'is_deceased', - 'deceased_date', - 'legal_identifier', - 'contact_sub_type', - 'user_unique_id', - 'addressee_id', - 'email_greeting_id', - 'postal_greeting_id', - ]; - - $customFields = CRM_Core_BAO_CustomField::getFields(['Individual', 'Address']); - $legacyTokenNames = array_flip(CRM_Utils_Token::legacyContactTokens()); - - foreach ($values as $val) { - if (in_array($val, $skipTokens)) { - continue; - } - //keys for $tokens should be constant. $token Values are changed for Custom Fields. CRM-3734 - $customFieldId = CRM_Core_BAO_CustomField::getKeyID($val); - if ($customFieldId) { - // CRM-15191 - if key is not in $customFields then the field is disabled and should be ignored - if (!empty($customFields[$customFieldId])) { - $tokens["{contact.$val}"] = $customFields[$customFieldId]['label'] . " :: " . $customFields[$customFieldId]['groupTitle']; - } - } - else { - // Support legacy token names - $tokenName = CRM_Utils_Array::value($val, $legacyTokenNames, $val); - $tokens["{contact.$tokenName}"] = $exportFields[$val]['title']; - } - } - - // Get all the hook tokens too - $hookTokens = []; - CRM_Utils_Hook::tokens($hookTokens); - foreach ($hookTokens as $tokenValues) { - foreach ($tokenValues as $key => $value) { - if (is_numeric($key)) { - $key = $value; - } - if (!preg_match('/^\{[^\}]+\}$/', $key)) { - $key = '{' . $key . '}'; - } - if (preg_match('/^\{([^\}]+)\}$/', $value, $matches)) { - $value = $matches[1]; - } - $tokens[$key] = $value; - } + public static function contactTokens(): array { + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => ['contactId']]); + $allTokens = $tokenProcessor->listTokens(); + foreach (array_keys($allTokens) as $token) { + if (strpos($token, '{domain.') === 0) { + unset($allTokens[$token]); } } - - return $tokens; + return $allTokens; } /** * Different type of Participant Tokens. * + * @deprecated + * * @return array */ - public static function participantTokens() { - static $tokens = NULL; - if (!$tokens) { - $exportFields = CRM_Event_BAO_Participant::exportableFields(); - - $values = array_merge(array_keys($exportFields)); - unset($values[0]); - - // skipping some tokens for time being. - $skipTokens = [ - 'event_id', - 'participant_is_pay_later', - 'participant_is_test', - 'participant_contact_id', - 'participant_fee_currency', - 'participant_campaign_id', - 'participant_status', - 'participant_discount_name', - ]; - - $customFields = CRM_Core_BAO_CustomField::getFields('Participant'); - - foreach ($values as $key => $val) { - if (in_array($val, $skipTokens)) { - continue; - } - //keys for $tokens should be constant. $token Values are changed for Custom Fields. CRM-3734 - if ($customFieldId = CRM_Core_BAO_CustomField::getKeyID($val)) { - $tokens["{participant.$val}"] = !empty($customFields[$customFieldId]) ? $customFields[$customFieldId]['label'] . " :: " . $customFields[$customFieldId]['groupTitle'] : ''; - } - else { - $tokens["{participant.$val}"] = $exportFields[$val]['title']; - } + public static function participantTokens(): array { + $tokenProcessor = new TokenProcessor(Civi::dispatcher(), ['schema' => ['participantId']]); + $allTokens = $tokenProcessor->listTokens(); + foreach (array_keys($allTokens) as $token) { + if (strpos($token, '{domain.') === 0) { + unset($allTokens[$token]); } } - return $tokens; + return $allTokens; } /** @@ -697,16 +610,22 @@ class CRM_Core_SelectValues { * @return array */ public static function caseTokens($caseTypeId = NULL) { - static $tokens = NULL; - if (!$tokens) { - foreach (CRM_Case_BAO_Case::fields() as $field) { - $tokens["{case.{$field['name']}}"] = $field['title']; - } + $tokens = [ + '{case.id}' => ts('Case ID'), + '{case.case_type_id:label}' => ts('Case Type'), + '{case.subject}' => ts('Case Subject'), + '{case.start_date}' => ts('Case Start Date'), + '{case.end_date}' => ts('Case End Date'), + '{case.details}' => ts('Details'), + '{case.status_id:label}' => ts('Case Status'), + '{case.is_deleted:label}' => ts('Case is in the Trash'), + '{case.created_date}' => ts('Created Date'), + '{case.modified_date}' => ts('Modified Date'), + ]; - $customFields = CRM_Core_BAO_CustomField::getFields('Case', FALSE, FALSE, $caseTypeId); - foreach ($customFields as $id => $field) { - $tokens["{case.custom_$id}"] = "{$field['label']} :: {$field['groupTitle']}"; - } + $customFields = CRM_Core_BAO_CustomField::getFields('Case', FALSE, FALSE, $caseTypeId); + foreach ($customFields as $id => $field) { + $tokens["{case.custom_$id}"] = "{$field['label']} :: {$field['groupTitle']}"; } return $tokens; } diff --git a/civicrm/CRM/Core/Selector/Controller.php b/civicrm/CRM/Core/Selector/Controller.php index 533d4042a2287b6b23deabe0c35662a4cf8c68f3..66dd528f0bb9cd76784f544fe32c78b048170b99 100644 --- a/civicrm/CRM/Core/Selector/Controller.php +++ b/civicrm/CRM/Core/Selector/Controller.php @@ -461,7 +461,17 @@ class CRM_Core_Selector_Controller { } self::$_template->assign_by_ref("{$this->_prefix}sort", $this->_sort); - self::$_template->assign("{$this->_prefix}columnHeaders", $this->_store->get("{$this->_prefix}columnHeaders")); + $columnHeaders = (array) $this->_store->get("{$this->_prefix}columnHeaders"); + foreach ($columnHeaders as $index => $columnHeader) { + // Fill out the keys to avoid e-notices. + if (!isset($columnHeader['sort'])) { + $columnHeaders[$index]['sort'] = NULL; + } + if (!isset($columnHeader['name'])) { + $columnHeaders[$index]['name'] = NULL; + } + } + self::$_template->assign("{$this->_prefix}columnHeaders", $columnHeaders); self::$_template->assign("{$this->_prefix}rows", $rows); self::$_template->assign("{$this->_prefix}rowsEmpty", $this->_store->get("{$this->_prefix}rowsEmpty")); self::$_template->assign("{$this->_prefix}qill", $this->_store->get("{$this->_prefix}qill")); diff --git a/civicrm/CRM/Core/Session.php b/civicrm/CRM/Core/Session.php index dcbe3a7823c04a015877b385711a11156126ef1e..57939665f424113bdca304c9484f20885b2c403b 100644 --- a/civicrm/CRM/Core/Session.php +++ b/civicrm/CRM/Core/Session.php @@ -41,13 +41,6 @@ class CRM_Core_Session { */ protected $_session = NULL; - /** - * Current php Session ID : needed to detect if the session is changed - * - * @var string - */ - protected $sessionID; - /** * We only need one instance of this object. So we use the singleton * pattern and cache the instance in this variable @@ -128,10 +121,9 @@ class CRM_Core_Session { * Is this a read operation, in this case, the session will not be touched. */ public function initialize($isRead = FALSE) { - // remove $_SESSION reference if session is changed - if (($sid = session_id()) !== $this->sessionID) { - $this->_session = NULL; - $this->sessionID = $sid; + // reset $this->_session in case if it is no longer a reference to $_SESSION; + if (isset($_SESSION) && isset($this->_session) && $_SESSION !== $this->_session) { + unset($this->_session); } // lets initialize the _session variable just before we need it // hopefully any bootstrapping code will actually load the session from the CMS @@ -171,9 +163,9 @@ class CRM_Core_Session { unset($this->_session[$this->_key]); } else { - $this->_session = []; + $this->_session[$this->_key] = []; + unset($this->_session); } - } /** diff --git a/civicrm/CRM/Core/Smarty.php b/civicrm/CRM/Core/Smarty.php index 5c3afb207f5a759cf869414eaf8a57ae4d8446af..b73df9730703e65bb44686aee94ef83e55bc80ee 100644 --- a/civicrm/CRM/Core/Smarty.php +++ b/civicrm/CRM/Core/Smarty.php @@ -95,13 +95,7 @@ class CRM_Core_Smarty extends Smarty { exit(); } - //Check for safe mode CRM-2207 - if (ini_get('safe_mode')) { - $this->use_sub_dirs = FALSE; - } - else { - $this->use_sub_dirs = TRUE; - } + $this->use_sub_dirs = TRUE; $customPluginsDir = NULL; if (isset($config->customPHPPathDir)) { diff --git a/civicrm/CRM/Core/Smarty/plugins/function.privacyFlag.php b/civicrm/CRM/Core/Smarty/plugins/function.privacyFlag.php index b6e76b11f2afe1ca23f5dbffe5b063adc385cf40..eab1a587ff7914312b2f64a12ef9e365c8cb34e5 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.privacyFlag.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.privacyFlag.php @@ -36,7 +36,7 @@ function smarty_function_privacyFlag($params, &$smarty) { 'do_not_phone' => 'fa-phone', 'do_not_email' => 'fa-paper-plane', 'do_not_mail' => 'fa-envelope', - 'do_not_sms' => 'fa-mobile', + 'do_not_sms' => 'fa-comments-o', 'do_not_trade' => 'fa-exchange', 'is_opt_out' => 'fa-paper-plane-o', ]; diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php index bef94f9d971514bbf2d84013c1a285473de9bb8b..2a175bcfc0132a7c3ad1a6b53d690143fc019a5d 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php @@ -21,14 +21,36 @@ * @param string $dateString * Date which needs to converted to human readable format. * - * @param null $dateFormat + * @param string|null $dateFormat + * A string per https://www.php.net/manual/en/function.strftime.php or + * one of our configured formats name - eg + * - dateformatDatetime + * - dateformatFull + * - dateformatPartial + * - dateformatTime + * - dateformatYear + * - dateformatFinancialBatch + * - dateformatshortdate + * * @param bool $onlyTime * * @return string * human readable date format | invalid date message */ -function smarty_modifier_crmDate($dateString, $dateFormat = NULL, $onlyTime = FALSE) { +function smarty_modifier_crmDate($dateString, ?string $dateFormat = NULL, bool $onlyTime = FALSE): string { if ($dateString) { + $configuredFormats = [ + 'Datetime', + 'Full', + 'Partial', + 'Time', + 'Year', + 'FinancialBatch', + 'shortdate', + ]; + if (in_array($dateFormat, $configuredFormats, TRUE)) { + $dateFormat = Civi::settings()->get('dateformat' . $dateFormat); + } // this check needs to be type sensitive // CRM-3689, CRM-2441 if ($dateFormat === 0) { diff --git a/civicrm/CRM/Core/TokenSmarty.php b/civicrm/CRM/Core/TokenSmarty.php index 209d7160e2f89f9c2a42a63a1670fbec042b89a4..4e88337c85b204058a047251c9ad437e4a8200a8 100644 --- a/civicrm/CRM/Core/TokenSmarty.php +++ b/civicrm/CRM/Core/TokenSmarty.php @@ -41,6 +41,7 @@ class CRM_Core_TokenSmarty { * @internal */ public static function render(array $messages, array $tokenContext = [], array $smartyAssigns = []): array { + $result = []; $tokenContextDefaults = [ 'controller' => __CLASS__, 'smarty' => TRUE, diff --git a/civicrm/CRM/Core/TokenTrait.php b/civicrm/CRM/Core/TokenTrait.php index 356bdc7fd09828905aa28769869cc89b18aff77a..36c6829bb826b5239b60a6e4b27bb60ae8289b36 100644 --- a/civicrm/CRM/Core/TokenTrait.php +++ b/civicrm/CRM/Core/TokenTrait.php @@ -46,29 +46,21 @@ trait CRM_Core_TokenTrait { if (array_key_exists($msgToken, $this->tokenNames)) { $activeTokens[] = $msgToken; } - else { - $altToken = preg_replace('/_\d+_/', '_N_', $msgToken); - if (array_key_exists($altToken, $this->tokenNames)) { - $activeTokens[] = $msgToken; - } - } } return array_unique($activeTokens); } /** * Find the fields that we need to get to construct the tokens requested. - * @param array $activeTokens list of active tokens + * * @return array list of fields needed to generate those tokens */ - public function getReturnFields($activeTokens) { + public function getReturnFields(): array { // Make sure we always return something $fields = ['id']; - $tokensInUse = array_intersect( - $activeTokens, - array_merge(array_keys(self::getBasicTokens()), array_keys(self::getCustomFieldTokens())) - ); + $tokensInUse = + array_merge(array_keys(self::getBasicTokens()), array_keys(self::getCustomFieldTokens())); foreach ($tokensInUse as $token) { if (isset(self::$fieldMapping[$token])) { $fields = array_merge($fields, self::$fieldMapping[$token]); @@ -86,7 +78,10 @@ trait CRM_Core_TokenTrait { */ protected function getCustomFieldTokens(): array { if (!isset($this->customFieldTokens)) { - $this->customFieldTokens = \CRM_Utils_Token::getCustomFieldTokens(ucfirst($this->getEntityName())); + $this->customFieldTokens = []; + foreach (CRM_Core_BAO_CustomField::getFields(ucfirst($this->getEntityName())) as $id => $info) { + $this->customFieldTokens['custom_' . $id] = $info['label'] . ' :: ' . $info['groupTitle']; + } } return $this->customFieldTokens; } diff --git a/civicrm/CRM/Custom/Form/DeleteField.php b/civicrm/CRM/Custom/Form/DeleteField.php index c713bbdbd115cd25fc58e277af80de7b2e00481f..993ed6138e86a128a27dafcca1a729339ad8421f 100644 --- a/civicrm/CRM/Custom/Form/DeleteField.php +++ b/civicrm/CRM/Custom/Form/DeleteField.php @@ -49,7 +49,7 @@ class CRM_Custom_Form_DeleteField extends CRM_Core_Form { $this->_title = $defaults['label'] ?? NULL; $this->assign('title', $this->_title); - CRM_Utils_System::setTitle(ts('Delete %1', [1 => $this->_title])); + $this->setTitle(ts('Delete %1', [1 => $this->_title])); } /** diff --git a/civicrm/CRM/Custom/Form/DeleteGroup.php b/civicrm/CRM/Custom/Form/DeleteGroup.php index a8e69436d430e5891fcdb5c12ea72f0eb0de4395..d3b9169fb02b28f23c3345f622e38e0ce3412d2c 100644 --- a/civicrm/CRM/Custom/Form/DeleteGroup.php +++ b/civicrm/CRM/Custom/Form/DeleteGroup.php @@ -60,7 +60,7 @@ class CRM_Custom_Form_DeleteGroup extends CRM_Core_Form { } $this->assign('title', $this->_title); - CRM_Utils_System::setTitle(ts('Confirm Custom Group Delete')); + $this->setTitle(ts('Confirm Custom Group Delete')); } /** diff --git a/civicrm/CRM/Custom/Form/Field.php b/civicrm/CRM/Custom/Form/Field.php index 756701b042c46ef6e6cf863512d521a94995b8c1..d766c9248d1edc6dcbf10e6c239340bc1ab4dfcc 100644 --- a/civicrm/CRM/Custom/Form/Field.php +++ b/civicrm/CRM/Custom/Form/Field.php @@ -191,7 +191,7 @@ class CRM_Custom_Form_Field extends CRM_Core_Form { public function buildQuickForm() { if ($this->_gid) { $this->_title = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_gid, 'title'); - CRM_Utils_System::setTitle($this->_title . ' - ' . ($this->_id ? ts('Edit Field') : ts('New Field'))); + $this->setTitle($this->_title . ' - ' . ($this->_id ? ts('Edit Field') : ts('New Field'))); $this->assign('gid', $this->_gid); } diff --git a/civicrm/CRM/Custom/Form/Group.php b/civicrm/CRM/Custom/Form/Group.php index ddf49e1c3a806d4dd98e3d95f2b660f844acb5ed..e8e665586959c5565a2fc9d1311ec2a7555e0659 100644 --- a/civicrm/CRM/Custom/Form/Group.php +++ b/civicrm/CRM/Custom/Form/Group.php @@ -59,14 +59,14 @@ class CRM_Custom_Form_Group extends CRM_Core_Form { // setting title for html page if ($this->_action == CRM_Core_Action::UPDATE) { $title = CRM_Core_BAO_CustomGroup::getTitle($this->_id); - CRM_Utils_System::setTitle(ts('Edit %1', [1 => $title])); + $this->setTitle(ts('Edit %1', [1 => $title])); } elseif ($this->_action == CRM_Core_Action::VIEW) { $title = CRM_Core_BAO_CustomGroup::getTitle($this->_id); - CRM_Utils_System::setTitle(ts('Preview %1', [1 => $title])); + $this->setTitle(ts('Preview %1', [1 => $title])); } else { - CRM_Utils_System::setTitle(ts('New Custom Field Set')); + $this->setTitle(ts('New Custom Field Set')); } if (isset($this->_id)) { diff --git a/civicrm/CRM/Custom/Form/MoveField.php b/civicrm/CRM/Custom/Form/MoveField.php index 3156bb15adf5e02759a9453361ae395d829aab7d..0dcd317734c7f55e45bc40189a30c0c153f96764 100644 --- a/civicrm/CRM/Custom/Form/MoveField.php +++ b/civicrm/CRM/Custom/Form/MoveField.php @@ -76,7 +76,7 @@ class CRM_Custom_Form_MoveField extends CRM_Core_Form { 'label' ); - CRM_Utils_System::setTitle(ts('Custom Field Move: %1', + $this->setTitle(ts('Custom Field Move: %1', [1 => $this->_srcFieldLabel] )); diff --git a/civicrm/CRM/Custom/Import/Controller.php b/civicrm/CRM/Custom/Import/Controller.php index c67e3990314cf229300676cfc20888cc20751840..0f740f59af543edbd6867fd989d50a4e37512828 100644 --- a/civicrm/CRM/Custom/Import/Controller.php +++ b/civicrm/CRM/Custom/Import/Controller.php @@ -15,10 +15,7 @@ class CRM_Custom_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php b/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php index ce14df0c5438ba5f2214aab23a253da7d5504e0d..4dedd05586b0ac3ae595191e5228c6e88c0c779c 100644 --- a/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php +++ b/civicrm/CRM/Dedupe/BAO/DedupeRuleGroup.php @@ -115,7 +115,7 @@ class CRM_Dedupe_BAO_DedupeRuleGroup extends CRM_Dedupe_DAO_DedupeRuleGroup { continue; } foreach ($cg['fields'] as $cf) { - $fields[$ctype][$cg['table_name']][$cf['column_name']] = $cf['label']; + $fields[$ctype][$cg['table_name']][$cf['column_name']] = $cg['title'] . ' : ' . $cf['label']; } } } diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 6baa7a793d492fbcb2e4e6cda97cc49394eb6494..680c2b5fa1eacdd30f3057b01030231a91f0401d 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -154,7 +154,10 @@ class CRM_Event_BAO_Event extends CRM_Event_DAO_Event { } $transaction->commit(); - + if (!empty($params['id'])) { + // Note that this will specifically clear cached event tokens. + Civi::cache('metadata')->clear(); + } return $event; } @@ -1093,7 +1096,7 @@ WHERE civicrm_event.is_active = 1 TRUE, $participantParams ); - list($profileValues) = $profileValues; + [$profileValues] = $profileValues; $val = [ 'id' => $gId, 'values' => $profileValues, @@ -1108,9 +1111,9 @@ WHERE civicrm_event.is_active = 1 if ($values['event']['is_email_confirm'] || $returnMessageText) { list($displayName, $email) = CRM_Contact_BAO_Contact_Location::getEmailDetails($contactID); - + $notifyEmail = CRM_Utils_Array::valueByRegexKey('/^email-/', $participantParams) ?? $email; //send email only when email is present - if (isset($email) || $returnMessageText) { + if (isset($notifyEmail) || $returnMessageText) { $preProfileID = $values['custom_pre_id'] ?? NULL; $postProfileID = $values['custom_post_id'] ?? NULL; @@ -1153,7 +1156,7 @@ WHERE civicrm_event.is_active = 1 $customPostTitles = NULL; } $tplParams = array_merge($values, $participantParams, [ - 'email' => $email, + 'email' => $notifyEmail, 'confirm_email_text' => $values['event']['confirm_email_text'] ?? NULL, 'isShowLocation' => $values['event']['is_show_location'] ?? NULL, // The concept of contributeMode is deprecated. @@ -1233,7 +1236,7 @@ WHERE civicrm_event.is_active = 1 else { $sendTemplateParams['from'] = CRM_Utils_Array::value('confirm_from_name', $values['event']) . " <" . CRM_Utils_Array::value('confirm_from_email', $values['event']) . ">"; $sendTemplateParams['toName'] = $displayName; - $sendTemplateParams['toEmail'] = $email; + $sendTemplateParams['toEmail'] = $notifyEmail; $sendTemplateParams['autoSubmitted'] = TRUE; $sendTemplateParams['cc'] = CRM_Utils_Array::value('cc_confirm', $values['event'] diff --git a/civicrm/CRM/Event/DAO/Participant.php b/civicrm/CRM/Event/DAO/Participant.php index 74b25157d243529468275fd4889fda3b20585809..1dd50ba91d8ed17e03121a914fb3d5dcd1936e70 100644 --- a/civicrm/CRM/Event/DAO/Participant.php +++ b/civicrm/CRM/Event/DAO/Participant.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Event/Participant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:fcaf9990a79e1ea3bd799a6ff75db893) + * (GenCodeChecksum:4ca199ee96c9079ad7ce673c7a06d5f6) */ /** @@ -315,7 +315,7 @@ class CRM_Event_DAO_Participant extends CRM_Core_DAO { 'participant_role_id' => [ 'name' => 'role_id', 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Participant Role'), + 'title' => ts('Participant Role ID'), 'description' => ts('Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.'), 'maxlength' => 128, 'size' => CRM_Utils_Type::HUGE, @@ -331,6 +331,7 @@ class CRM_Event_DAO_Participant extends CRM_Core_DAO { 'serialize' => self::SERIALIZE_SEPARATOR_TRIMMED, 'html' => [ 'type' => 'Select', + 'label' => ts("Participant Role"), ], 'pseudoconstant' => [ 'optionGroupName' => 'participant_role', diff --git a/civicrm/CRM/Event/Form/ParticipantFeeSelection.php b/civicrm/CRM/Event/Form/ParticipantFeeSelection.php index 876da092c258951cbbb5bfb0535450c6bb8b6214..a4cb587a92530c806623f4209d610e08870eab69 100644 --- a/civicrm/CRM/Event/Form/ParticipantFeeSelection.php +++ b/civicrm/CRM/Event/Form/ParticipantFeeSelection.php @@ -95,7 +95,7 @@ class CRM_Event_Form_ParticipantFeeSelection extends CRM_Core_Form { $title = ts("Change selections for %1", [1 => $this->_contributorDisplayName]); if ($title) { - CRM_Utils_System::setTitle($title); + $this->setTitle($title); } } diff --git a/civicrm/CRM/Event/Form/ParticipantView.php b/civicrm/CRM/Event/Form/ParticipantView.php index db19ee9c6e4d5eb226b8fdb4aa90e07557bb043a..6d205cc9bd42e8eea94792a609f09224871d0034 100644 --- a/civicrm/CRM/Event/Form/ParticipantView.php +++ b/civicrm/CRM/Event/Form/ParticipantView.php @@ -207,7 +207,7 @@ class CRM_Event_Form_ParticipantView extends CRM_Core_Form { } $this->assign('displayName', $displayName); // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container - CRM_Utils_System::setTitle(ts('View Event Registration for') . ' ' . $displayName); + $this->setTitle(ts('View Event Registration for') . ' ' . $displayName); $roleId = $values[$participantID]['role_id'] ?? NULL; $title = $displayName . ' (' . CRM_Utils_Array::value($roleId, $participantRoles) . ' - ' . $eventTitle . ')'; diff --git a/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php b/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php index e5614e018b289395357d40d155276bf87da32f52..37fcc48b4625620be24423654a8846f8e582d7fb 100644 --- a/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php +++ b/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php @@ -72,7 +72,7 @@ class CRM_Event_Form_Registration_AdditionalParticipant extends CRM_Event_Form_R if ($skipCount) { $this->assign('skipCount', $skipCount); } - CRM_Utils_System::setTitle(ts('Register Participant %1 of %2', [1 => $participantCnt, 2 => $participantTot])); + $this->setTitle(ts('Register Participant %1 of %2', [1 => $participantCnt, 2 => $participantTot])); //CRM-4320, hack to check last participant. $this->_lastParticipant = FALSE; diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php index d83cad562f706f6cf8446fcd6656e6397f01f668..fa09baa91ef0b10ec45b4f8b73c5983c776d44b7 100644 --- a/civicrm/CRM/Event/Form/Registration/Confirm.php +++ b/civicrm/CRM/Event/Form/Registration/Confirm.php @@ -87,7 +87,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { } if (isset($this->_values['event']['confirm_title'])) { - CRM_Utils_System::setTitle($this->_values['event']['confirm_title']); + $this->setTitle($this->_values['event']['confirm_title']); } // Personal campaign page diff --git a/civicrm/CRM/Event/Form/Registration/ThankYou.php b/civicrm/CRM/Event/Form/Registration/ThankYou.php index 12dbd1abfaaccfc83af16694d1c98abb05d4bcf7..f7f7e9386df1d442e320953f607f88f98f5d309b 100644 --- a/civicrm/CRM/Event/Form/Registration/ThankYou.php +++ b/civicrm/CRM/Event/Form/Registration/ThankYou.php @@ -46,7 +46,7 @@ class CRM_Event_Form_Registration_ThankYou extends CRM_Event_Form_Registration { CRM_Event_Form_Registration_Confirm::assignProfiles($this); - CRM_Utils_System::setTitle(CRM_Utils_Array::value('thankyou_title', $this->_values['event'])); + $this->setTitle(CRM_Utils_Array::value('thankyou_title', $this->_values['event'])); } /** @@ -73,7 +73,10 @@ class CRM_Event_Form_Registration_ThankYou extends CRM_Event_Form_Registration { // Assign the email address from a contact id lookup as in CRM_Event_BAO_Event->sendMail() $primaryContactId = $this->get('primaryContactId'); if ($primaryContactId) { - list($displayName, $email) = CRM_Contact_BAO_Contact_Location::getEmailDetails($primaryContactId); + $email = CRM_Utils_Array::valueByRegexKey('/^email-/', current($this->_params)); + if (!$email) { + $email = CRM_Contact_BAO_Contact::getPrimaryEmail($primaryContactId); + } $this->assign('email', $email); } $this->assignToTemplate(); diff --git a/civicrm/CRM/Event/Form/SelfSvcTransfer.php b/civicrm/CRM/Event/Form/SelfSvcTransfer.php index 22381d1efcd093afdd18cd62eb0b12806e706a0b..8d6a3488ec07411f9e649c2e3a8f37ee5e8c53a0 100644 --- a/civicrm/CRM/Event/Form/SelfSvcTransfer.php +++ b/civicrm/CRM/Event/Form/SelfSvcTransfer.php @@ -159,7 +159,7 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { $this->_event_title = CRM_Event_BAO_Event::getFieldValue('CRM_Event_DAO_Event', $this->_event_id, $daoName); $daoName = 'start_date'; $this->_event_start_date = CRM_Event_BAO_Event::getFieldValue('CRM_Event_DAO_Event', $this->_event_id, $daoName); - list($displayName, $email) = CRM_Contact_BAO_Contact_Location::getEmailDetails($this->_from_contact_id); + [$displayName, $email] = CRM_Contact_BAO_Contact_Location::getEmailDetails($this->_from_contact_id); $this->_contact_name = $displayName; $this->_contact_email = $email; @@ -342,21 +342,18 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { /** * Based on input, create participant row for transferee and send email * - * return @ void + * @param $participant * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ - public function participantTransfer($participant) { - $contactDetails = []; - $contactIds[] = $participant->contact_id; - list($currentContactDetails) = CRM_Utils_Token::getTokenDetails($contactIds, NULL, - FALSE, FALSE, NULL, [], 'CRM_Event_BAO_Participant'); - foreach ($currentContactDetails as $contactId => $contactValues) { - $contactDetails[$contactId] = $contactValues; - } + public function participantTransfer($participant): void { + $contactDetails = civicrm_api3('Contact', 'getsingle', ['id' => $participant->contact_id, 'return' => ['display_name', 'email']]); + $participantRoles = CRM_Event_PseudoConstant::participantRole(); $participantDetails = []; - $query = "SELECT * FROM civicrm_participant WHERE id = " . $participant->id; + $query = 'SELECT * FROM civicrm_participant WHERE id = ' . $participant->id; $dao = CRM_Core_DAO::executeQuery($query); while ($dao->fetch()) { $participantDetails[$dao->id] = [ @@ -371,23 +368,7 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { 'registered_by_id' => $dao->registered_by_id, ]; } - $domainValues = []; - if (empty($domainValues)) { - $domain = CRM_Core_BAO_Domain::getDomain(); - $tokens = [ - 'domain' => - [ - 'name', - 'phone', - 'address', - 'email', - ], - 'contact' => CRM_Core_SelectValues::contactTokens(), - ]; - foreach ($tokens['domain'] as $token) { - $domainValues[$token] = CRM_Utils_Token::getDomainTokenReplacement($token, $domain); - } - } + $eventDetails = []; $eventParams = ['id' => $participant->event_id]; CRM_Event_BAO_Event::retrieve($eventParams, $eventDetails); @@ -399,14 +380,15 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { 'entity_table' => 'civicrm_event', ]; $eventDetails['location'] = CRM_Core_BAO_Location::getValues($locParams, TRUE); - $toEmail = $contactDetails[$participant->contact_id]['email'] ?? NULL; + $toEmail = $contactDetails['email'] ?? NULL; if ($toEmail) { //take a receipt from as event else domain. - $receiptFrom = $domainValues['name'] . ' <' . $domainValues['email'] . '>'; + $receiptFrom = CRM_Core_BAO_Domain::getNameAndEmail(FALSE, TRUE); + $receiptFrom = reset($receiptFrom); if (!empty($eventDetails['confirm_from_name']) && !empty($eventDetails['confirm_from_email'])) { $receiptFrom = $eventDetails['confirm_from_name'] . ' <' . $eventDetails['confirm_from_email'] . '>'; } - $participantName = $contactDetails[$participant->contact_id]['display_name']; + $participantName = $contactDetails['display_name']; $tplParams = [ 'event' => $eventDetails, 'participant' => $participantDetails[$participant->id], diff --git a/civicrm/CRM/Event/Form/SelfSvcUpdate.php b/civicrm/CRM/Event/Form/SelfSvcUpdate.php index a87d7aff27c305acd112bbd447e431a5f34a8112..2f3ac769e020db198d675ba82b731122f50af5d6 100644 --- a/civicrm/CRM/Event/Form/SelfSvcUpdate.php +++ b/civicrm/CRM/Event/Form/SelfSvcUpdate.php @@ -160,7 +160,7 @@ class CRM_Event_Form_SelfSvcUpdate extends CRM_Core_Form { * return @void */ public function buildQuickForm() { - $this->add('select', 'action', ts('Transfer or Cancel Registration'), [ts('-select-'), ts('Transfer'), ts('Cancel')], TRUE); + $this->add('select', 'action', ts('Transfer or Cancel Registration'), [ts('-select-'), ts('Transfer'), ts('Cancel Registration')], TRUE); $this->addButtons([ [ 'type' => 'submit', diff --git a/civicrm/CRM/Event/Form/Task.php b/civicrm/CRM/Event/Form/Task.php index e3bbae330dac960309f39ffb304d15d2411b945c..a23da4c6b5312a6c5d9f49dd66792b17464764bd 100644 --- a/civicrm/CRM/Event/Form/Task.php +++ b/civicrm/CRM/Event/Form/Task.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Participant; + /** * Class for event form task actions. * FIXME: This needs refactoring to properly inherit from CRM_Core_Form_Task and share more functions. @@ -28,6 +30,16 @@ class CRM_Event_Form_Task extends CRM_Core_Form_Task { */ protected $_participantIds; + /** + * Rows to act on. + * + * Each row will have a participant ID & a contact ID using + * the keys the token processor expects. + * + * @var array + */ + protected $rows = []; + /** * Build all the data structures needed to build the form. * @@ -83,14 +95,36 @@ class CRM_Event_Form_Task extends CRM_Core_Form_Task { $form->setNextUrl('event'); } + /** + * Get the participant IDs. + * + * @return array + */ + public function getIDs(): array { + return $this->_participantIds; + } + /** * Given the participant id, compute the contact id * since its used for things like send email */ - public function setContactIDs() { - $this->_contactIds = CRM_Core_DAO::getContactIDsFromComponent($this->_participantIds, - 'civicrm_participant' - ); + public function setContactIDs(): void { + $this->_contactIds = $this->getContactIDs(); + } + + /** + * Get the relevant contact IDs. + * + * @return array + */ + protected function getContactIDs(): array { + if (isset($this->_contactIds)) { + return $this->_contactIds; + } + foreach ($this->getRows() as $row) { + $this->_contactIds[] = $row['contact_id']; + } + return $this->_contactIds; } /** @@ -119,4 +153,38 @@ class CRM_Event_Form_Task extends CRM_Core_Form_Task { ]); } + /** + * Get the rows form the search, keyed to make the token processor happy. + * + * @throws \API_Exception + */ + protected function getRows(): array { + if (empty($this->rows)) { + // checkPermissions set to false - in case form is bypassing in some way. + $participants = Participant::get(FALSE) + ->addWhere('id', 'IN', $this->getIDs()) + ->setSelect(['id', 'contact_id'])->execute(); + foreach ($participants as $participant) { + $this->rows[] = [ + 'contact_id' => $participant['contact_id'], + 'participant_id' => $participant['id'], + 'schema' => [ + 'contactId' => $participant['contact_id'], + 'participantId' => $participant['id'], + ], + ]; + } + } + return $this->rows; + } + + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + public function getTokenSchema(): array { + return ['participantId', 'contactId', 'eventId']; + } + } diff --git a/civicrm/CRM/Event/Form/Task/AddToGroup.php b/civicrm/CRM/Event/Form/Task/AddToGroup.php index 11a7f3fca7f58e778123f4d5356881d47d47498b..ac41fd7faa701b584612321fb135b0cf12fb9d3c 100644 --- a/civicrm/CRM/Event/Form/Task/AddToGroup.php +++ b/civicrm/CRM/Event/Form/Task/AddToGroup.php @@ -120,10 +120,10 @@ class CRM_Event_Form_Task_AddToGroup extends CRM_Event_Form_Task { // Set dynamic page title for 'Add Members Group (confirm)' if ($this->_id) { - CRM_Utils_System::setTitle(ts('Add Contacts: %1', [1 => $this->_title])); + $this->setTitle(ts('Add Contacts: %1', [1 => $this->_title])); } else { - CRM_Utils_System::setTitle(ts('Add Contacts to A Group')); + $this->setTitle(ts('Add Contacts to A Group')); } $this->addDefaultButtons(ts('Add to Group')); diff --git a/civicrm/CRM/Event/Form/Task/Badge.php b/civicrm/CRM/Event/Form/Task/Badge.php index 2c1a5eebb011dd2238ab3d257701b25edf16561d..501105c5c034b2f36e2a8f9c64ec1fd32881fc57 100644 --- a/civicrm/CRM/Event/Form/Task/Badge.php +++ b/civicrm/CRM/Event/Form/Task/Badge.php @@ -67,7 +67,7 @@ class CRM_Event_Form_Task_Badge extends CRM_Event_Form_Task { * Build the form object. */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Make Name Badges')); + $this->setTitle(ts('Make Name Badges')); // Ajax submit would interfere with file download $this->preventAjaxSubmit(); diff --git a/civicrm/CRM/Event/Form/Task/Batch.php b/civicrm/CRM/Event/Form/Task/Batch.php index 0107df02de5c05bcff5e64707cabe9792085e6ae..8e45031d14194034b7ded5d0ccb3cf81312dbb83 100644 --- a/civicrm/CRM/Event/Form/Task/Batch.php +++ b/civicrm/CRM/Event/Form/Task/Batch.php @@ -84,7 +84,7 @@ class CRM_Event_Form_Task_Batch extends CRM_Event_Form_Task { } $this->_title = ts('Update multiple participants') . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); - CRM_Utils_System::setTitle($this->_title); + $this->setTitle($this->_title); $this->addDefaultButtons(ts('Save')); $this->_fields = CRM_Core_BAO_UFGroup::getFields($ufGroupId, FALSE, CRM_Core_Action::VIEW); diff --git a/civicrm/CRM/Event/Form/Task/Cancel.php b/civicrm/CRM/Event/Form/Task/Cancel.php index 71a29f9d893e819bbfe4fd12921e84721606f047..32507e7e55536e841f9d0746c82d4e61d0a43751 100644 --- a/civicrm/CRM/Event/Form/Task/Cancel.php +++ b/civicrm/CRM/Event/Form/Task/Cancel.php @@ -46,7 +46,7 @@ class CRM_Event_Form_Task_Cancel extends CRM_Event_Form_Task { * @return void */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Cancel Registration for Event Participation')); + $this->setTitle(ts('Cancel Registration for Event Participation')); $session = CRM_Core_Session::singleton(); $this->addDefaultButtons(ts('Cancel Registrations'), 'done'); } diff --git a/civicrm/CRM/Event/Form/Task/Email.php b/civicrm/CRM/Event/Form/Task/Email.php index cd0270b3764bd661b2121f02695f271322cec0ab..85f1af9f80bf63466eb0a7b3bb6ab0ff0f518ebe 100644 --- a/civicrm/CRM/Event/Form/Task/Email.php +++ b/civicrm/CRM/Event/Form/Task/Email.php @@ -22,4 +22,17 @@ class CRM_Event_Form_Task_Email extends CRM_Event_Form_Task { use CRM_Contact_Form_Task_EmailTrait; + /** + * Only send one email per contact. + * + * This has historically been done for contributions & makes sense if + * no entity specific tokens are in use. + * + * @return bool + * @throws \CRM_Core_Exception + */ + protected function isGroupByContact(): bool { + return !empty($this->getMessageTokens()['participant']) || !empty($this->getMessageTokens()['event']); + } + } diff --git a/civicrm/CRM/Event/Form/Task/PDF.php b/civicrm/CRM/Event/Form/Task/PDF.php index 9ce1baed9c71cdfb82a34ebc1a8eaa1b1231c12c..0f0d25436f4f38f72f50013fa3cfa8e5c4b77271 100644 --- a/civicrm/CRM/Event/Form/Task/PDF.php +++ b/civicrm/CRM/Event/Form/Task/PDF.php @@ -48,28 +48,7 @@ class CRM_Event_Form_Task_PDF extends CRM_Event_Form_Task { public function preProcess() { $this->preProcessPDF(); parent::preProcess(); - - // we have all the participant ids, so now we get the contact ids - parent::setContactIDs(); - $this->assign('single', $this->_single); } - /** - * Process the form after the input has been submitted and validated. - */ - public function postProcess() { - CRM_Contact_Form_Task_PDFLetterCommon::postProcess($this); - } - - /** - * List available tokens for this form. - * - * @return array - */ - public function listTokens() { - $tokens = CRM_Core_SelectValues::contactTokens(); - return $tokens; - } - } diff --git a/civicrm/CRM/Event/Form/Task/PickProfile.php b/civicrm/CRM/Event/Form/Task/PickProfile.php index d120f81b5fd1764721364ddf41101ffcd3d0ddd7..6ec7b8757657b466d7b7d35b2be1404d18b21bea 100644 --- a/civicrm/CRM/Event/Form/Task/PickProfile.php +++ b/civicrm/CRM/Event/Form/Task/PickProfile.php @@ -51,7 +51,7 @@ class CRM_Event_Form_Task_PickProfile extends CRM_Event_Form_Task { $session = CRM_Core_Session::singleton(); $this->_userContext = $session->readUserContext(); - CRM_Utils_System::setTitle(ts('Update multiple participants')); + $this->setTitle(ts('Update multiple participants')); $validate = FALSE; //validations diff --git a/civicrm/CRM/Event/Form/Task/SaveSearch.php b/civicrm/CRM/Event/Form/Task/SaveSearch.php index 32f54f67f2f0207432a6e6598ffbc821c9ebf622..f05f682fd02258264f1b96a9d5457d0c96f04114 100644 --- a/civicrm/CRM/Event/Form/Task/SaveSearch.php +++ b/civicrm/CRM/Event/Form/Task/SaveSearch.php @@ -48,7 +48,7 @@ class CRM_Event_Form_Task_SaveSearch extends CRM_Event_Form_Task { * @return void */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Smart Group')); + $this->setTitle(ts('Smart Group')); // get the qill $query = new CRM_Event_BAO_Query($this->get('formValues')); $qill = $query->qill(); diff --git a/civicrm/CRM/Event/Import/Controller.php b/civicrm/CRM/Event/Import/Controller.php index baf5521a8893394eebfbc4a539769182315049e2..233b63231eab5222c8a5eef1f45e8c29c16f0627 100644 --- a/civicrm/CRM/Event/Import/Controller.php +++ b/civicrm/CRM/Event/Import/Controller.php @@ -26,10 +26,7 @@ class CRM_Event_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Event/ParticipantTokens.php b/civicrm/CRM/Event/ParticipantTokens.php new file mode 100644 index 0000000000000000000000000000000000000000..b29050fcf143fd24f98f5fdfba01af4557788751 --- /dev/null +++ b/civicrm/CRM/Event/ParticipantTokens.php @@ -0,0 +1,106 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +use Civi\Token\TokenRow; + +/** + * Class CRM_Event_ParticipantTokens + * + * Generate "participant.*" tokens. + */ +class CRM_Event_ParticipantTokens extends CRM_Core_EntityTokens { + + /** + * Get the entity name for api v4 calls. + * + * @return string + */ + protected function getApiEntityName(): string { + return 'Participant'; + } + + /** + * @return array + */ + public function getCurrencyFieldName(): array { + return ['fee_currency']; + } + + /** + * Get any tokens with custom calculation. + */ + protected function getBespokeTokens(): array { + return [ + 'balance' => [ + 'title' => ts('Event Balance'), + 'name' => 'balance', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'Money', + 'audience' => 'user', + ], + ]; + } + + public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e): void { + // When targeting `civicrm_participant` records, we enable both `{participant.*}` (per usual) and the related `{event.*}`. + parent::alterActionScheduleQuery($e); + if ($e->mapping->getEntity() === $this->getExtendableTableName()) { + $e->query->select('e.event_id AS tokenContext_eventId'); + } + } + + /** + * @inheritDoc + * @throws \CiviCRM_API3_Exception + */ + public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) { + $this->prefetch = (array) $prefetch; + if ($field === 'balance') { + // @todo - is this really a good idea to call this & potentially get the + // balance of the contribution attached to 'registered_by_id' + $info = \CRM_Contribute_BAO_Contribution::getPaymentInfo($this->getFieldValue($row, 'id'), 'event'); + $balancePay = $info['balance'] ?? NULL; + $balancePay = \CRM_Utils_Money::format($balancePay); + $row->tokens($entity, $field, $balancePay); + return; + } + parent::evaluateToken($row, $entity, $field, $prefetch); + } + + /** + * Do not show event id in the UI as event.id will also be available. + * + * Discount id is probably a bit esoteric. + * + * @return string[] + */ + protected function getHiddenTokens(): array { + return ['event_id', 'discount_id']; + } + + /** + * Get entity fields that should not be exposed as tokens. + * + * @return string[] + */ + protected function getSkippedFields(): array { + $fields = parent::getSkippedFields(); + // Never add these 2 fields - may not be a stable part of the schema. + // This field is on it's way out of core. + $fields[] = 'cart_id'; + // this will probably get schema changed out of the table at some point. + $fields[] = 'is_pay_later'; + return $fields; + } + +} diff --git a/civicrm/CRM/Event/Tokens.php b/civicrm/CRM/Event/Tokens.php index 15784cd87289b3ff72e1ee10b49559e24495c0b6..ca6fb553dd24d32fa444abb77dc4dffb177d5bfa 100644 --- a/civicrm/CRM/Event/Tokens.php +++ b/civicrm/CRM/Event/Tokens.php @@ -10,6 +10,9 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Event; +use Civi\Token\TokenRow; + /** * Class CRM_Event_Tokens * @@ -22,116 +25,162 @@ * implementation which is not tied to scheduled reminders, although * that is outside the current scope. */ -class CRM_Event_Tokens extends \Civi\Token\AbstractTokenSubscriber { +class CRM_Event_Tokens extends CRM_Core_EntityTokens { /** - * Class constructor. + * Get the entity name for api v4 calls. + * + * @return string */ - public function __construct() { - parent::__construct('event', array_merge( - [ - 'event_type' => ts('Event Type'), - 'title' => ts('Event Title'), - 'event_id' => ts('Event ID'), - 'start_date' => ts('Event Start Date'), - 'end_date' => ts('Event End Date'), - 'summary' => ts('Event Summary'), - 'description' => ts('Event Description'), - 'location' => ts('Event Location'), - 'info_url' => ts('Event Info URL'), - 'registration_url' => ts('Event Registration URL'), - 'fee_amount' => ts('Event Fee'), - 'contact_email' => ts('Event Contact (Email)'), - 'contact_phone' => ts('Event Contact (Phone)'), - 'balance' => ts('Event Balance'), + protected function getApiEntityName(): string { + return 'Event'; + } + + /** + * Get all tokens. + * + * This function will be removed once the parent class can determine it. + */ + protected function getBespokeTokens(): array { + return [ + 'location' => [ + 'title' => ts('Event Location'), + 'name' => 'location', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', + ], + 'info_url' => [ + 'title' => ts('Event Info URL'), + 'name' => 'info_url', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', + ], + 'registration_url' => [ + 'title' => ts('Event Registration URL'), + 'name' => 'registration_url', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', ], - CRM_Utils_Token::getCustomFieldTokens('Event') - )); + 'contact_email' => [ + 'title' => ts('Event Contact Email'), + 'name' => 'contact_email', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'String', + 'audience' => 'user', + ], + 'contact_phone' => [ + 'title' => ts('Event Contact Phone'), + 'name' => 'contact_phone', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => '', + 'audience' => 'user', + ], + ]; } /** * @inheritDoc + * @throws \API_Exception */ - public function checkActive(\Civi\Token\TokenProcessor $processor) { - // Extracted from scheduled-reminders code. See the class description. - return !empty($processor->context['actionMapping']) - && $processor->context['actionMapping']->getEntity() === 'civicrm_participant'; + public function evaluateToken(TokenRow $row, $entity, $field, $prefetch = NULL) { + $eventID = $this->getFieldValue($row, 'id'); + if (array_key_exists($field, $this->getEventTokenValues($eventID))) { + foreach ($this->getEventTokenValues($eventID)[$field] as $format => $value) { + $row->format($format)->tokens($entity, $field, $value ?? ''); + } + } } /** - * Alter action schedule query. + * Get the tokens available for the event. + * + * Cache by event as it's l * - * @param \Civi\ActionSchedule\Event\MailingQueryEvent $e + * @param int|null $eventID + * + * @return array + * + * @throws \API_Exception|\CRM_Core_Exception + * + * @internal */ - public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e) { - if ($e->mapping->getEntity() !== 'civicrm_participant') { - return; + protected function getEventTokenValues(int $eventID = NULL): array { + $cacheKey = __CLASS__ . 'event_tokens' . $eventID . '_' . CRM_Core_I18n::getLocale(); + if ($this->checkPermissions) { + $cacheKey .= '__' . CRM_Core_Session::getLoggedInContactID(); } + if (!Civi::cache('metadata')->has($cacheKey)) { + $event = Event::get($this->checkPermissions)->addWhere('id', '=', $eventID) + ->setSelect(array_merge([ + 'loc_block_id.address_id.street_address', + 'loc_block_id.address_id.city', + 'loc_block_id.address_id.state_province_id:label', + 'loc_block_id.address_id.postal_code', + 'loc_block_id.email_id.email', + 'loc_block_id.phone_id.phone', + 'custom.*', + ], $this->getExposedFields())) + ->execute()->first(); + $tokens['location']['text/plain'] = \CRM_Utils_Address::format([ + 'street_address' => $event['loc_block_id.address_id.street_address'], + 'city' => $event['loc_block_id.address_id.city'], + 'state_province' => $event['loc_block_id.address_id.state_province_id:label'], + 'postal_code' => $event['loc_block_id.address_id.postal_code'], + + ]); + $tokens['info_url']['text/html'] = \CRM_Utils_System::url('civicrm/event/info', 'reset=1&id=' . $eventID, TRUE, NULL, FALSE); + $tokens['registration_url']['text/html'] = \CRM_Utils_System::url('civicrm/event/register', 'reset=1&id=' . $eventID, TRUE, NULL, FALSE); + $tokens['start_date']['text/html'] = !empty($event['start_date']) ? new DateTime($event['start_date']) : ''; + $tokens['end_date']['text/html'] = !empty($event['end_date']) ? new DateTime($event['end_date']) : ''; + $tokens['event_type_id:label']['text/html'] = CRM_Core_PseudoConstant::getLabel('CRM_Event_BAO_Event', 'event_type_id', $event['event_type_id']); + $tokens['event_type_id:name']['text/html'] = CRM_Core_PseudoConstant::getName('CRM_Event_BAO_Event', 'event_type_id', $event['event_type_id']); + $tokens['contact_phone']['text/html'] = $event['loc_block_id.phone_id.phone']; + $tokens['contact_email']['text/html'] = $event['loc_block_id.email_id.email']; - // FIXME: seems too broad. - $e->query->select('e.*'); - $e->query->select('ov.label as event_type, ev.title, ev.id as event_id, ev.start_date, ev.end_date, ev.summary, ev.description, address.street_address, address.city, address.state_province_id, address.postal_code, email.email as contact_email, phone.phone as contact_phone'); - $e->query->join('participant_stuff', " -!casMailingJoinType civicrm_event ev ON e.event_id = ev.id -!casMailingJoinType civicrm_option_group og ON og.name = 'event_type' -!casMailingJoinType civicrm_option_value ov ON ev.event_type_id = ov.value AND ov.option_group_id = og.id -LEFT JOIN civicrm_loc_block lb ON lb.id = ev.loc_block_id -LEFT JOIN civicrm_address address ON address.id = lb.address_id -LEFT JOIN civicrm_email email ON email.id = lb.email_id -LEFT JOIN civicrm_phone phone ON phone.id = lb.phone_id -"); + foreach ($this->getTokenMetadata() as $fieldName => $fieldSpec) { + if (!isset($tokens[$fieldName])) { + if ($fieldSpec['type'] === 'Custom') { + $this->prefetch[$eventID] = $event; + $value = $event[$fieldSpec['name']]; + $tokens[$fieldName]['text/html'] = CRM_Core_BAO_CustomField::displayValue($value, $fieldSpec['custom_field_id']); + } + else { + $tokens[$fieldName]['text/html'] = $event[$fieldName]; + } + } + } + Civi::cache('metadata')->set($cacheKey, $tokens); + } + return Civi::cache('metadata')->get($cacheKey); } /** - * @inheritDoc + * Get entity fields that should be exposed as tokens. + * + * Event has traditionally exposed very few fields. This is probably because + * a) there are a tonne of weird fields so an opt out approach doesn't work and + * b) so people just added what they needed at the time... + * + * @return string[] + * */ - public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) { - $actionSearchResult = $row->context['actionSearchResult']; - - if ($field == 'location') { - $loc = []; - $stateProvince = \CRM_Core_PseudoConstant::stateProvince(); - $loc['street_address'] = $actionSearchResult->street_address; - $loc['city'] = $actionSearchResult->city; - $loc['state_province'] = $stateProvince[$actionSearchResult->state_province_id] ?? NULL; - $loc['postal_code'] = $actionSearchResult->postal_code; - //$entityTokenParams[$tokenEntity][$field] = \CRM_Utils_Address::format($loc); - $row->tokens($entity, $field, \CRM_Utils_Address::format($loc)); - } - elseif ($field == 'info_url') { - $row - ->tokens($entity, $field, \CRM_Utils_System::url('civicrm/event/info', 'reset=1&id=' . $actionSearchResult->event_id, TRUE, NULL, FALSE)); - } - elseif ($field == 'registration_url') { - $row - ->tokens($entity, $field, \CRM_Utils_System::url('civicrm/event/register', 'reset=1&id=' . $actionSearchResult->event_id, TRUE, NULL, FALSE)); - } - elseif (in_array($field, ['start_date', 'end_date'])) { - $row->tokens($entity, $field, \CRM_Utils_Date::customFormat($actionSearchResult->$field)); - } - elseif ($field == 'balance') { - if ($actionSearchResult->entityTable == 'civicrm_contact') { - $balancePay = 'N/A'; - } - elseif (!empty($actionSearchResult->entityID)) { - $info = \CRM_Contribute_BAO_Contribution::getPaymentInfo($actionSearchResult->entityID, 'event'); - $balancePay = $info['balance'] ?? NULL; - $balancePay = \CRM_Utils_Money::format($balancePay); - } - $row->tokens($entity, $field, $balancePay); - } - elseif ($field == 'fee_amount') { - $row->tokens($entity, $field, \CRM_Utils_Money::format($actionSearchResult->$field)); - } - elseif (isset($actionSearchResult->$field)) { - $row->tokens($entity, $field, $actionSearchResult->$field); - } - elseif ($cfID = \CRM_Core_BAO_CustomField::getKeyID($field)) { - $row->customToken($entity, $cfID, $actionSearchResult->entity_id); - } - else { - $row->tokens($entity, $field, ''); - } + protected function getExposedFields(): array { + return ['event_type_id', + 'title', + 'id', + 'start_date', + 'end_date', + 'summary', + 'description', + ]; } } diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php index 055c70778571ac1bcb228dfabd3bfc8429c52fe6..18a5663ff8d6180c75840ad2a1dcb7b22a1d20b7 100644 --- a/civicrm/CRM/Export/BAO/ExportProcessor.php +++ b/civicrm/CRM/Export/BAO/ExportProcessor.php @@ -794,7 +794,7 @@ class CRM_Export_BAO_ExportProcessor { //sort by state //CRM-15301 $query->_sort = $order; - list($select, $from, $where, $having) = $query->query(); + [$select, $from, $where, $having] = $query->query(); $this->setQueryFields($query->_fields); $whereClauses = ['trash_clause' => "contact_a.is_deleted != 1"]; if ($this->getComponentClause()) { @@ -844,7 +844,7 @@ class CRM_Export_BAO_ExportProcessor { $order .= ", contact_a.id"; } - list($field, $dir) = explode(' ', $order, 2); + [$field, $dir] = explode(' ', $order, 2); $field = trim($field); if (!empty($this->getReturnProperties()[$field])) { //CRM-15301 @@ -1464,6 +1464,16 @@ class CRM_Export_BAO_ExportProcessor { case CRM_Utils_Type::T_STRING: if (isset($fieldSpec['maxlength'])) { + // A localized string for the preferred_mail_format does not fit + // into the varchar(8) field. + // @see https://lab.civicrm.org/dev/core/-/issues/2645 + switch ($fieldName) { + case 'preferred_mail_format': + return "`$fieldName` text(16)"; + + default: + return "`$fieldName` varchar({$fieldSpec['maxlength']})"; + } } $dataType = $fieldSpec['data_type'] ?? ''; // set the sql columns for custom data @@ -1860,39 +1870,23 @@ class CRM_Export_BAO_ExportProcessor { } /** - * @param int $contactId + * Replace contact greetings in merged contacts. + * + * @param int $contactID * * @return array + * @throws \API_Exception + * @throws \CRM_Core_Exception */ - public function replaceMergeTokens($contactId) { - $greetings = []; - $contact = NULL; - - $greetingFields = [ - 'postal_greeting' => $this->getPostalGreetingTemplate(), - 'addressee' => $this->getAddresseeGreetingTemplate(), + public function replaceMergeTokens(int $contactID): array { + $messageTemplate = [ + 'postal_greeting' => $this->getPostalGreetingTemplate() ?? '', + 'addressee' => $this->getAddresseeGreetingTemplate() ?? '', ]; - foreach ($greetingFields as $greeting => $greetingLabel) { - $tokens = CRM_Utils_Token::getTokens($greetingLabel); - if (!empty($tokens)) { - if (empty($contact)) { - $values = [ - 'id' => $contactId, - 'version' => 3, - ]; - $contact = civicrm_api('contact', 'get', $values); - - if (!empty($contact['is_error'])) { - return $greetings; - } - $contact = $contact['values'][$contact['id']]; - } - - $tokens = ['contact' => $greetingLabel]; - $greetings[$greeting] = CRM_Utils_Token::replaceContactTokens($greetingLabel, $contact, NULL, $tokens); - } + if (array_filter($messageTemplate)) { + return CRM_Core_TokenSmarty::render($messageTemplate, ['contactId' => $contactID]); } - return $greetings; + return $messageTemplate; } /** @@ -2046,7 +2040,7 @@ WHERE id IN ( $deleteIDString ) */ public function getPreview($limit) { $rows = []; - list($outputColumns) = $this->getExportStructureArrays(); + [$outputColumns] = $this->getExportStructureArrays(); $query = $this->runQuery([], ''); CRM_Core_DAO::disableFullGroupByMode(); $result = CRM_Core_DAO::executeQuery($query[1] . ' LIMIT ' . (int) $limit); @@ -2362,10 +2356,8 @@ LIMIT $offset, $limit * * @return string */ - protected function getContactGreeting(int $contactID, string $type, string $default) { - return CRM_Utils_Array::value($type, - $this->contactGreetingFields[$contactID], $default - ); + protected function getContactGreeting(int $contactID, string $type, string $default): string { + return empty($this->contactGreetingFields[$contactID][$type]) ? $default : $this->contactGreetingFields[$contactID][$type]; } /** diff --git a/civicrm/CRM/Extension/Upgrades.php b/civicrm/CRM/Extension/Upgrades.php index d26a266ff6e9d9fa254a5b9165c720708a60f95a..adf3b1f49493501cda107cf59bf5654b2b772694 100644 --- a/civicrm/CRM/Extension/Upgrades.php +++ b/civicrm/CRM/Extension/Upgrades.php @@ -69,9 +69,27 @@ class CRM_Extension_Upgrades { CRM_Utils_Hook::upgrade('enqueue', $queue); + // dev/core#1618 When Extension Upgrades are run reconcile log tables + $task = new CRM_Queue_Task( + [__CLASS__, 'upgradeLogTables'], + [], + ts('Update log tables') + ); + // Set weight low so that it will be run last. + $queue->createItem($task, -2); + return $queue; } + /** + * Update log tables following execution of extension upgrades + */ + public static function upgradeLogTables() { + $logging = new CRM_Logging_Schema(); + $logging->fixSchemaDifferences(); + return TRUE; + } + /** * @return array * Array(string $extKey => CRM_Extension_Upgrader_Interface $upgrader) diff --git a/civicrm/CRM/Financial/BAO/Order.php b/civicrm/CRM/Financial/BAO/Order.php index ad32b31c45a2fdbe5872b78650c6a3926a6751b9..29cfc2793855ee3b36e47417f5d62697b4210bff 100644 --- a/civicrm/CRM/Financial/BAO/Order.php +++ b/civicrm/CRM/Financial/BAO/Order.php @@ -1058,6 +1058,26 @@ class CRM_Financial_BAO_Order { return $lines; } + /** + * Get the constructed line items formatted for the v3 Order api. + * + * @return array + * + * @internal core tested code only. + * + * @throws \CiviCRM_API3_Exception + */ + public function getLineItemForV3OrderApi(): array { + $lineItems = []; + foreach ($this->getLineItems() as $key => $line) { + $lineItems[] = [ + 'line_item' => [$line['price_field_value_id'] => $line], + 'params' => $this->entityParameters[$key] ?? [], + ]; + } + return $lineItems; + } + /** * @return array * @throws \API_Exception diff --git a/civicrm/CRM/Financial/Form/BatchTransaction.php b/civicrm/CRM/Financial/Form/BatchTransaction.php index ef90e96c026ad5536fbabb4a7e96297edda48fd6..5a52547bd6f4512e37a504e0a0aaa41b3c176b6d 100644 --- a/civicrm/CRM/Financial/Form/BatchTransaction.php +++ b/civicrm/CRM/Financial/Form/BatchTransaction.php @@ -53,7 +53,7 @@ class CRM_Financial_Form_BatchTransaction extends CRM_Contribute_Form_Search { $this->assign('validStatus', $validStatus); $this->_values = civicrm_api3('Batch', 'getSingle', ['id' => self::$_entityID]); $batchTitle = CRM_Core_DAO::getFieldValue('CRM_Batch_BAO_Batch', self::$_entityID, 'title'); - CRM_Utils_System::setTitle(ts('Accounting Batch - %1', [1 => $batchTitle])); + $this->setTitle(ts('Accounting Batch - %1', [1 => $batchTitle])); $columnHeaders = [ 'created_by' => ts('Created By'), diff --git a/civicrm/CRM/Financial/Form/FinancialBatch.php b/civicrm/CRM/Financial/Form/FinancialBatch.php index 00156171335fd739c237da41cf10c5e1ba7a5c71..8665b6fc2c3f71bc9db46dcc133c78a45d220d3d 100644 --- a/civicrm/CRM/Financial/Form/FinancialBatch.php +++ b/civicrm/CRM/Financial/Form/FinancialBatch.php @@ -62,7 +62,7 @@ class CRM_Financial_Form_FinancialBatch extends CRM_Contribute_Form { $this->setPageTitle(ts('Financial Batch')); if (!empty($this->_id)) { $this->_title = CRM_Core_DAO::getFieldValue('CRM_Batch_DAO_Batch', $this->_id, 'title'); - CRM_Utils_System::setTitle($this->_title . ' - ' . ts('Accounting Batch')); + $this->setTitle($this->_title . ' - ' . ts('Accounting Batch')); $this->assign('batchTitle', $this->_title); $contactID = CRM_Core_DAO::getFieldValue('CRM_Batch_DAO_Batch', $this->_id, 'created_id'); $contactName = CRM_Contact_BAO_Contact::displayName($contactID); diff --git a/civicrm/CRM/Financial/Form/FinancialTypeAccount.php b/civicrm/CRM/Financial/Form/FinancialTypeAccount.php index dd5733ca2a4cd0399053fefda140d17f2d25328e..a3e66c76b4c50d7528ba9af86c6d7d979c0eefd8 100644 --- a/civicrm/CRM/Financial/Form/FinancialTypeAccount.php +++ b/civicrm/CRM/Financial/Form/FinancialTypeAccount.php @@ -64,7 +64,7 @@ class CRM_Financial_Form_FinancialTypeAccount extends CRM_Core_Form { $this->_BAOName = 'CRM_Financial_BAO_FinancialTypeAccount'; if ($this->_aid && ($this->_action & CRM_Core_Action::ADD)) { $this->_title = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $this->_aid, 'name'); - CRM_Utils_System::setTitle($this->_title . ' - ' . ts('Financial Accounts')); + $this->setTitle($this->_title . ' - ' . ts('Financial Accounts')); $session = CRM_Core_Session::singleton(); $session->pushUserContext($url); @@ -85,7 +85,7 @@ class CRM_Financial_Form_FinancialTypeAccount extends CRM_Core_Form { if ($this->_id) { $financialAccount = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_EntityFinancialAccount', $this->_id, 'financial_account_id'); $fieldTitle = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialAccount', $financialAccount, 'name'); - CRM_Utils_System::setTitle($fieldTitle . ' - ' . ts('Financial Type Accounts')); + $this->setTitle($fieldTitle . ' - ' . ts('Financial Type Accounts')); } $breadCrumb = [ diff --git a/civicrm/CRM/Financial/Form/PaymentEdit.php b/civicrm/CRM/Financial/Form/PaymentEdit.php index e0f30ed75efa289fe334b6951935ed8edb900be4..23f41433079b0d05ee4a92ce1b40cbccedd32d56 100644 --- a/civicrm/CRM/Financial/Form/PaymentEdit.php +++ b/civicrm/CRM/Financial/Form/PaymentEdit.php @@ -16,6 +16,16 @@ */ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { + /** + * Should financials be checked after the test but before tear down. + * + * Ideally all tests (or at least all that call any financial api calls ) should do this but there + * are some test data issues and some real bugs currently blocking. + * + * @var bool + */ + protected $isValidateFinancialsOnPostAssert = TRUE; + /** * The id of the financial trxn. * @@ -84,7 +94,7 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { * Build quickForm. */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Update Payment details')); + $this->setTitle(ts('Update Payment details')); $paymentFields = $this->getPaymentFields(); $this->assign('paymentFields', $paymentFields); diff --git a/civicrm/CRM/Friend/Form.php b/civicrm/CRM/Friend/Form.php index bd1f64288551e3325ef50d056f21319bdfe1fca7..0441951d1e00d4b89283e2644c5125c3b794604a 100644 --- a/civicrm/CRM/Friend/Form.php +++ b/civicrm/CRM/Friend/Form.php @@ -140,7 +140,7 @@ class CRM_Friend_Form extends CRM_Core_Form { $defaults['entity_table'] = $this->_entityTable; CRM_Friend_BAO_Friend::getValues($defaults); - CRM_Utils_System::setTitle(CRM_Utils_Array::value('title', $defaults)); + $this->setTitle(CRM_Utils_Array::value('title', $defaults)); $this->assign('title', CRM_Utils_Array::value('title', $defaults)); $this->assign('intro', CRM_Utils_Array::value('intro', $defaults)); @@ -302,7 +302,7 @@ class CRM_Friend_Form extends CRM_Core_Form { } } - CRM_Utils_System::setTitle($defaults['thankyou_title']); + $this->setTitle($defaults['thankyou_title']); $this->assign('thankYouText', $defaults['thankyou_text']); } diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php index 801342f9e05cb811bf8f3b5f1e1e07ef3689a163..0afebfb8108840ceb44b764a47f8ce36453ca163 100644 --- a/civicrm/CRM/Group/Form/Edit.php +++ b/civicrm/CRM/Group/Form/Edit.php @@ -122,7 +122,7 @@ class CRM_Group_Form_Edit extends CRM_Core_Form { catch (CRM_Core_Exception $e) { // If the group is borked the query might fail but delete should be possible. } - CRM_Utils_System::setTitle(ts('Confirm Group Delete')); + $this->setTitle(ts('Confirm Group Delete')); } if ($this->_groupValues['is_reserved'] == 1 && !CRM_Core_Permission::check('administer reserved groups')) { CRM_Core_Error::statusBounce(ts("You do not have sufficient permission to delete this reserved group.")); @@ -151,7 +151,7 @@ class CRM_Group_Form_Edit extends CRM_Core_Form { $this->assign_by_ref('group', $groupValues); - CRM_Utils_System::setTitle(ts('Group Settings: %1', array(1 => $this->_title))); + $this->setTitle(ts('Group Settings: %1', array(1 => $this->_title))); } $session = CRM_Core_Session::singleton(); $session->pushUserContext(CRM_Utils_System::url('civicrm/group', 'reset=1')); diff --git a/civicrm/CRM/Logging/Schema.php b/civicrm/CRM/Logging/Schema.php index ad09e3a32c20431bbc7266fee8c543f441424377..9d09e62d20fd7c76b0ba65791a4e5163d4276002 100644 --- a/civicrm/CRM/Logging/Schema.php +++ b/civicrm/CRM/Logging/Schema.php @@ -429,16 +429,18 @@ AND (TABLE_NAME LIKE 'log_civicrm_%' $nonStandardTableNameString ) * name of the relevant table. * @param array $cols * Mixed array of columns to add or null (to check for the missing columns). - * - * @return bool */ - public function fixSchemaDifferencesFor($table, $cols = []) { - if (empty($table)) { - return FALSE; + public function fixSchemaDifferencesFor(string $table, array $cols = []): void { + if (!in_array($table, $this->tables, TRUE)) { + // Create the table if the log table does not exist and + // the table is in 'this->tables'. This latter array + // could have been altered by a hook if the site does not + // want to log a specific table. + return; } if (empty($this->logs[$table])) { $this->createLogTableFor($table); - return TRUE; + return; } if (empty($cols)) { @@ -480,8 +482,6 @@ AND (TABLE_NAME LIKE 'log_civicrm_%' $nonStandardTableNameString ) } $this->resetSchemaCacheForTable("log_$table"); - - return TRUE; } /** diff --git a/civicrm/CRM/Mailing/BAO/Mailing.php b/civicrm/CRM/Mailing/BAO/Mailing.php index 2e53e4a388f2fc7b9445eed7694f4c53ab51cb95..3270945ca2ed6f826a369985ef8f3173298e5143 100644 --- a/civicrm/CRM/Mailing/BAO/Mailing.php +++ b/civicrm/CRM/Mailing/BAO/Mailing.php @@ -304,25 +304,10 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { ->execute(); } - // Construct the filtered search queries. - $dao = CRM_Utils_SQL_Select::from('civicrm_mailing_group') - ->select('search_id, search_args, entity_id') - ->where('search_id IS NOT NULL AND mailing_id = #mailingID') - ->param('#mailingID', $mailingID) - ->execute(); - while ($dao->fetch()) { - $customSQL = CRM_Contact_BAO_SearchCustom::civiMailSQL($dao->search_id, - $dao->search_args, - $dao->entity_id - ); - $query = "REPLACE INTO {$includedTempTablename} ($entityColumn, contact_id) {$customSQL} "; - $mailingGroup->query($query); - } - list($aclFrom, $aclWhere) = CRM_Contact_BAO_Contact_Permission::cacheClause(); // clear all the mailing recipients before populating - CRM_Core_DAO::executeQuery(" DELETE FROM civicrm_mailing_recipients WHERE mailing_id = %1 ", [ + CRM_Core_DAO::executeQuery(' DELETE FROM civicrm_mailing_recipients WHERE mailing_id = %1 ', [ 1 => [ $mailingID, 'Integer', @@ -449,39 +434,6 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { return [$location_filter, $orderBy]; } - /** - * @param string $type - * - * @return array - */ - private function _getMailingGroupIds($type = 'Include') { - $mailingGroup = new CRM_Mailing_DAO_MailingGroup(); - $group = CRM_Contact_DAO_Group::getTableName(); - if (!isset($this->id)) { - // we're just testing tokens, so return any group - $query = "SELECT id AS entity_id - FROM $group - ORDER BY id - LIMIT 1"; - } - else { - $mg = CRM_Mailing_DAO_MailingGroup::getTableName(); - $query = "SELECT entity_id - FROM $mg - WHERE mailing_id = {$this->id} - AND group_type = '$type' - AND entity_table = '$group'"; - } - $mailingGroup->query($query); - - $groupIds = []; - while ($mailingGroup->fetch()) { - $groupIds[] = $mailingGroup->entity_id; - } - - return $groupIds; - } - /** * Returns the regex patterns that are used for preparing the text and html templates. * @@ -1518,7 +1470,6 @@ ORDER BY civicrm_email.is_bulkmail DESC * Form values. * * @param array $params - * @param array $ids * * @return object * $mailing The new mailing object @@ -1526,12 +1477,7 @@ ORDER BY civicrm_email.is_bulkmail DESC * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function create(&$params, $ids = []) { - - if (empty($params['id']) && (array_filter($ids) !== [])) { - $params['id'] = $ids['mailing_id'] ?? $ids['id']; - CRM_Core_Error::deprecatedWarning('Parameter $ids is no longer used by Mailing::create. Use the api or just pass $params'); - } + public static function create(&$params) { // CRM-#1843 // If it is a mass sms, set url_tracking to false diff --git a/civicrm/CRM/Mailing/Event/BAO/Confirm.php b/civicrm/CRM/Mailing/Event/BAO/Confirm.php index 5ac6641fe30c87c263de874b06eaff34d367eaf0..15f16ab6eb9bc5d7f752b22d14c7526d935b31e1 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/BAO/Confirm.php @@ -87,7 +87,7 @@ class CRM_Mailing_Event_BAO_Confirm extends CRM_Mailing_Event_DAO_Confirm { $config = CRM_Core_Config::singleton(); $domain = CRM_Core_BAO_Domain::getDomain(); - list($domainEmailName, $_) = CRM_Core_BAO_Domain::getNameAndEmail(); + list($domainEmailName, $domainEmailAddress) = CRM_Core_BAO_Domain::getNameAndEmail(); list($display_name, $email) = CRM_Contact_BAO_Contact_Location::getEmailDetails($se->contact_id); @@ -125,7 +125,7 @@ class CRM_Mailing_Event_BAO_Confirm extends CRM_Mailing_Event_DAO_Confirm { $mailParams = [ 'groupName' => 'Mailing Event ' . $component->component_type, 'subject' => $component->subject, - 'from' => "\"$domainEmailName\" <" . CRM_Core_BAO_Domain::getNoReplyEmailAddress() . '>', + 'from' => "\"{$domainEmailName}\" <{$domainEmailAddress}>", 'toEmail' => $email, 'toName' => $display_name, 'replyTo' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), diff --git a/civicrm/CRM/Mailing/Event/BAO/Delivered.php b/civicrm/CRM/Mailing/Event/BAO/Delivered.php index f14176652be68660b73d0cf7c9e9c6af68264bec..477faa61da686ab02268e761919cd4289bce8879 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Delivered.php +++ b/civicrm/CRM/Mailing/Event/BAO/Delivered.php @@ -275,6 +275,7 @@ class CRM_Mailing_Event_BAO_Delivered extends CRM_Mailing_Event_DAO_Delivered { ->createWithColumns('id int primary key, reset_date datetime'); $temporaryTableName = $temporaryTable->getName(); + // also exclude on_hold = opt-out (2) $query = " INSERT INTO {$temporaryTableName} (id, reset_date) SELECT civicrm_email.id as email_id, @@ -288,6 +289,7 @@ class CRM_Mailing_Event_BAO_Delivered extends CRM_Mailing_Event_DAO_Delivered { AND civicrm_mailing_job.status = 'Complete' AND civicrm_mailing_job.end_date BETWEEN DATE_SUB(NOW(), INTERVAL $maxDays day) AND DATE_SUB(NOW(), INTERVAL $minDays day) AND (civicrm_email.reset_date IS NULL OR civicrm_email.reset_date < civicrm_mailing_job.start_date) + AND civicrm_email.on_hold != 2 GROUP BY civicrm_email.id "; CRM_Core_DAO::executeQuery($query); diff --git a/civicrm/CRM/Mailing/Event/BAO/Reply.php b/civicrm/CRM/Mailing/Event/BAO/Reply.php index ed240b720f23ae333b46a82dc23900667d9a6568..d618b20143705644e40abb1216f7fbebedec0f12 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Reply.php +++ b/civicrm/CRM/Mailing/Event/BAO/Reply.php @@ -228,12 +228,12 @@ class CRM_Mailing_Event_BAO_Reply extends CRM_Mailing_Event_DAO_Reply { $component->find(TRUE); $domain = CRM_Core_BAO_Domain::getDomain(); - list($domainEmailName, $_) = CRM_Core_BAO_Domain::getNameAndEmail(); + list($domainEmailName, $domainEmailAddress) = CRM_Core_BAO_Domain::getNameAndEmail(); $params = [ 'subject' => $component->subject, 'toEmail' => $to, - 'from' => "\"$domainEmailName\" <" . CRM_Core_BAO_Domain::getNoReplyEmailAddress() . '>', + 'from' => "\"{$domainEmailName}\" <{$domainEmailAddress}>", 'replyTo' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), 'returnPath' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), ]; diff --git a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php index 3468c533b17bd9c55e70a1730a3158495af315aa..73e15ec35dafcf9c73cca1e68852b8b4f58026e0 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php @@ -249,7 +249,7 @@ class CRM_Mailing_Event_BAO_Resubscribe { $params = [ 'subject' => $component->subject, - 'from' => "\"$domainEmailName\" <" . CRM_Core_BAO_Domain::getNoReplyEmailAddress() . '>', + 'from' => "\"{$domainEmailName}\" <{$domainEmailAddress}>", 'toEmail' => $eq->email, 'replyTo' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), 'returnPath' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), diff --git a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php index 73f61f549c3a6aa72d3bd3416724988e58521a7b..ec9f8a53c8192ec3eb6a768eaf88c4eb80bc3e2b 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php @@ -135,7 +135,7 @@ WHERE email = %2 if (in_array($mailing_type, ['experiment', 'winner'])) { // The mailing belongs to an AB test. // See if we can find an AB test where this is variant B. - $mailing_id_a = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingAB', mailing_id, 'mailing_id_a', 'mailing_id_b'); + $mailing_id_a = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_MailingAB', $mailing_id, 'mailing_id_a', 'mailing_id_b'); if (!empty($mailing_id_a)) { // OK, we were given mailing B and we looked up variant A which is the relevant one. $relevant_mailing_id = $mailing_id_a; @@ -384,7 +384,7 @@ WHERE email = %2 $params = [ 'subject' => $component->subject, - 'from' => "\"$domainEmailName\" <" . CRM_Core_BAO_Domain::getNoReplyEmailAddress() . '>', + 'from' => "\"{$domainEmailName}\" <{$domainEmailAddress}>", 'toEmail' => $eq->email, 'replyTo' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), 'returnPath' => CRM_Core_BAO_Domain::getNoReplyEmailAddress(), diff --git a/civicrm/CRM/Mailing/Form/Approve.php b/civicrm/CRM/Mailing/Form/Approve.php index e14304013457154dc5099ad03e9bb961a3f549b4..ac554fae91ca305fd265c4f2081082c8b3489fda 100644 --- a/civicrm/CRM/Mailing/Form/Approve.php +++ b/civicrm/CRM/Mailing/Form/Approve.php @@ -73,7 +73,7 @@ class CRM_Mailing_Form_Approve extends CRM_Core_Form { */ public function buildQuickform() { $title = ts('Approve/Reject Mailing') . " - {$this->_mailing->name}"; - CRM_Utils_System::setTitle($title); + $this->setTitle($title); $this->addElement('textarea', 'approval_note', ts('Approve/Reject Note')); diff --git a/civicrm/CRM/Mailing/Form/ForwardMailing.php b/civicrm/CRM/Mailing/Form/ForwardMailing.php index 66eb266871b45458273f0de03ca32b6932f73b88..416ecaf44db109e0f1ec962d06780c11cf9bddc6 100644 --- a/civicrm/CRM/Mailing/Form/ForwardMailing.php +++ b/civicrm/CRM/Mailing/Form/ForwardMailing.php @@ -46,7 +46,7 @@ class CRM_Mailing_Form_ForwardMailing extends CRM_Core_Form { // Show the subject instead of the name here, since it's being // displayed to external contacts/users. - CRM_Utils_System::setTitle(ts('Forward Mailing: %1', [1 => $mailing->subject])); + $this->setTitle(ts('Forward Mailing: %1', [1 => $mailing->subject])); $this->set('queue_id', $queue_id); $this->set('job_id', $job_id); diff --git a/civicrm/CRM/Mailing/Form/Optout.php b/civicrm/CRM/Mailing/Form/Optout.php index e809d497b76f73e090b193bfd6a50dbab7d5e580..39707570e905dd742a1af1dd52238dc9c93d0fb1 100644 --- a/civicrm/CRM/Mailing/Form/Optout.php +++ b/civicrm/CRM/Mailing/Form/Optout.php @@ -16,18 +16,40 @@ */ class CRM_Mailing_Form_Optout extends CRM_Core_Form { - public function preProcess() { - - $this->_type = 'optout'; + /** + * Prevent people double-submitting the form (e.g. by double-clicking). + * https://lab.civicrm.org/dev/core/-/issues/1773 + * + * @var bool + */ + public $submitOnce = TRUE; + + /** + * @var int + */ + private $_job_id; + + /** + * @var int + */ + private $_queue_id; + + /** + * @var string + */ + private $_hash; + + /** + * @var string + */ + private $_email; + public function preProcess() { $this->_job_id = $job_id = CRM_Utils_Request::retrieve('jid', 'Integer', $this); $this->_queue_id = $queue_id = CRM_Utils_Request::retrieve('qid', 'Integer', $this); $this->_hash = $hash = CRM_Utils_Request::retrieve('h', 'String', $this); - if (!$job_id || - !$queue_id || - !$hash - ) { + if (!$job_id || !$queue_id || !$hash) { throw new CRM_Core_Exception(ts("Missing input parameters")); } @@ -47,10 +69,7 @@ class CRM_Mailing_Form_Optout extends CRM_Core_Form { public function buildQuickForm() { CRM_Utils_System::addHTMLHead('<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">'); - CRM_Utils_System::setTitle(ts('Opt Out Confirmation')); - - $this->add('text', 'email_confirm', ts('Verify email address to opt out:')); - $this->addRule('email_confirm', ts('Email address is required to opt out.'), 'required'); + $this->setTitle(ts('Opt Out Confirmation')); $buttons = [ [ @@ -68,42 +87,17 @@ class CRM_Mailing_Form_Optout extends CRM_Core_Form { } public function postProcess() { - - $values = $this->exportValues(); - - // check if EmailTyped matches Email address - $result = CRM_Utils_String::compareStr($this->_email, $values['email_confirm'], TRUE); - - $job_id = $this->_job_id; - $queue_id = $this->_queue_id; - $hash = $this->_hash; - - $confirmURL = CRM_Utils_System::url("civicrm/mailing/{$this->_type}", "reset=1&jid={$job_id}&qid={$queue_id}&h={$hash}&confirm=1"); + $confirmURL = CRM_Utils_System::url("civicrm/mailing/optout", "reset=1&jid={$this->_job_id}&qid={$this->_queue_id}&h={$this->_hash}&confirm=1"); $this->assign('confirmURL', $confirmURL); - $session = CRM_Core_Session::singleton(); - $session->pushUserContext($confirmURL); - - if ($result == TRUE) { - // Email address verified - if (CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_domain($job_id, $queue_id, $hash)) { - CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($queue_id, NULL, TRUE, $job_id); - } - - $statusMsg = ts('%1 opt out confirmed.', - [1 => $values['email_confirm']] - ); - - CRM_Core_Session::setStatus($statusMsg, '', 'success'); - } - elseif ($result == FALSE) { - // Email address not verified - $statusMsg = ts('%1 is not associated with this opt out request.', - [1 => $values['email_confirm']] - ); + CRM_Core_Session::singleton()->pushUserContext($confirmURL); - CRM_Core_Session::setStatus($statusMsg, '', 'error'); + // Email address verified + if (CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_domain($this->_job_id, $this->_queue_id, $this->_hash)) { + CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($this->_queue_id, NULL, TRUE, $this->_job_id); } + $statusMsg = ts('%1 opt out confirmed.', [1 => CRM_Utils_String::maskEmail($this->_email)]); + CRM_Core_Session::setStatus($statusMsg, '', 'success'); } } diff --git a/civicrm/CRM/Mailing/Form/Subscribe.php b/civicrm/CRM/Mailing/Form/Subscribe.php index 4afec4edc65fd9f83031b2f166b57f8149274dab..2f045d42c71ace70e76998fad56fe51c602052f2 100644 --- a/civicrm/CRM/Mailing/Form/Subscribe.php +++ b/civicrm/CRM/Mailing/Form/Subscribe.php @@ -43,7 +43,7 @@ SELECT title, frontend_title, description, frontend_description $dao = CRM_Core_DAO::executeQuery($query); if ($dao->fetch()) { $this->assign('groupName', !empty($dao->frontend_title) ? $dao->frontend_title : $dao->title); - CRM_Utils_System::setTitle(ts('Subscribe to Mailing List - %1', [1 => !empty($dao->frontend_title) ? $dao->frontend_title : $dao->title])); + $this->setTitle(ts('Subscribe to Mailing List - %1', [1 => !empty($dao->frontend_title) ? $dao->frontend_title : $dao->title])); } else { CRM_Core_Error::statusBounce("The specified group is not configured for this action OR The group doesn't exist."); @@ -53,7 +53,7 @@ SELECT title, frontend_title, description, frontend_description } else { $this->assign('single', FALSE); - CRM_Utils_System::setTitle(ts('Mailing List Subscription')); + $this->setTitle(ts('Mailing List Subscription')); } } diff --git a/civicrm/CRM/Mailing/Form/Unsubscribe.php b/civicrm/CRM/Mailing/Form/Unsubscribe.php index c63263ba0b9e73632fcb54a0be36cfab34dd67ab..77f54983f6e73ea537fc98d71b9287aa2ee2dc71 100644 --- a/civicrm/CRM/Mailing/Form/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Form/Unsubscribe.php @@ -24,18 +24,33 @@ class CRM_Mailing_Form_Unsubscribe extends CRM_Core_Form { */ public $submitOnce = TRUE; - public function preProcess() { + /** + * @var int + */ + private $_job_id; + + /** + * @var int + */ + private $_queue_id; - $this->_type = 'unsubscribe'; + /** + * @var string + */ + private $_hash; + + /** + * @var string + */ + private $_email; + public function preProcess() { $this->_job_id = $job_id = CRM_Utils_Request::retrieve('jid', 'Integer', $this); $this->_queue_id = $queue_id = CRM_Utils_Request::retrieve('qid', 'Integer', $this); $this->_hash = $hash = CRM_Utils_Request::retrieve('h', 'String', $this); + $isConfirm = CRM_Utils_Request::retrieveValue('confirm', 'Boolean', FALSE, FALSE, 'GET'); - if (!$job_id || - !$queue_id || - !$hash - ) { + if (!$job_id || !$queue_id || !$hash) { throw new CRM_Core_Exception(ts('Missing Parameters')); } @@ -55,27 +70,21 @@ class CRM_Mailing_Form_Unsubscribe extends CRM_Core_Form { $groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($job_id, $queue_id, $hash, TRUE); $this->assign('groups', $groups); $groupExist = NULL; - foreach ($groups as $key => $value) { + foreach ($groups as $value) { if ($value) { $groupExist = TRUE; } } - if (!$groupExist) { - $statusMsg = ts('%1 has been unsubscribed.', - [1 => $email] - ); + if (!$groupExist && !$isConfirm) { + $statusMsg = ts('%1 has already been unsubscribed.', [1 => $email]); CRM_Core_Session::setStatus($statusMsg, '', 'error'); } $this->assign('groupExist', $groupExist); - } public function buildQuickForm() { CRM_Utils_System::addHTMLHead('<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">'); - CRM_Utils_System::setTitle(ts('Unsubscribe Confirmation')); - - $this->add('text', 'email_confirm', ts('Verify email address to unsubscribe:')); - $this->addRule('email_confirm', ts('Email address is required to unsubscribe.'), 'required'); + $this->setTitle(ts('Unsubscribe Confirmation')); $buttons = [ [ @@ -93,42 +102,19 @@ class CRM_Mailing_Form_Unsubscribe extends CRM_Core_Form { } public function postProcess() { - $values = $this->exportValues(); - - // check if EmailTyped matches Email address - $result = CRM_Utils_String::compareStr($this->_email, $values['email_confirm'], TRUE); - $job_id = $this->_job_id; - $queue_id = $this->_queue_id; - $hash = $this->_hash; - - $confirmURL = CRM_Utils_System::url("civicrm/mailing/{$this->_type}", "reset=1&jid={$job_id}&qid={$queue_id}&h={$hash}&confirm=1"); + $confirmURL = CRM_Utils_System::url("civicrm/mailing/unsubscribe", "reset=1&jid={$this->_job_id}&qid={$this->_queue_id}&h={$this->_hash}&confirm=1"); $this->assign('confirmURL', $confirmURL); - $session = CRM_Core_Session::singleton(); - $session->pushUserContext($confirmURL); + CRM_Core_Session::singleton()->pushUserContext($confirmURL); - if ($result == TRUE) { - // Email address verified - $groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($job_id, $queue_id, $hash); + // Email address verified + $groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing($this->_job_id, $this->_queue_id, $this->_hash); - if (count($groups)) { - CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($queue_id, $groups, FALSE, $job_id); - } - - $statusMsg = ts('%1 is unsubscribed.', - [1 => $values['email_confirm']] - ); - - CRM_Core_Session::setStatus($statusMsg, '', 'success'); + if (count($groups)) { + CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response($this->_queue_id, $groups, FALSE, $this->_job_id); } - elseif ($result == FALSE) { - // Email address not verified - $statusMsg = ts('%1 is not associated with this unsubscribe request.', - [1 => $values['email_confirm']] - ); - CRM_Core_Session::setStatus($statusMsg, '', 'error'); - - } + $statusMsg = ts('%1 has been unsubscribed successfully.', [1 => $this->_email]); + CRM_Core_Session::setStatus($statusMsg, '', 'success'); } } diff --git a/civicrm/CRM/Mailing/Info.php b/civicrm/CRM/Mailing/Info.php index d26c57dc993069fb7884d26eb510072f4c0c698d..c670df0d9644e5f47dc4194269f3cd25e2355832 100644 --- a/civicrm/CRM/Mailing/Info.php +++ b/civicrm/CRM/Mailing/Info.php @@ -68,15 +68,15 @@ class CRM_Mailing_Info extends CRM_Core_Component_Info { $emailAdd = civicrm_api3('Email', 'get', [ 'sequential' => 1, - 'return' => "email", + 'return' => 'email', 'contact_id' => $contactID, ]); $mesTemplate = civicrm_api3('MessageTemplate', 'get', $params + [ 'sequential' => 1, 'is_active' => 1, - 'return' => ["id", "msg_title"], - 'workflow_id' => ['IS NULL' => ""], + 'return' => ['id', 'msg_title'], + 'workflow_name' => ['IS NULL' => ''], ]); $mailTokens = civicrm_api3('Mailing', 'gettokens', [ 'entity' => ['contact', 'mailing'], diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index 2c4b04ca4f7f2a167d323aba7b2860b7082d086e..3a04e646c9d8ae238f7c964863a9f8aa379e4e72 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -289,9 +289,9 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { else { $calcDates = []; } - $params['start_date'] = $params['start_date'] ?? ($calcDates['start_date'] ?? 'null'); - $params['end_date'] = $params['end_date'] ?? ($calcDates['end_date'] ?? 'null'); - $params['join_date'] = $params['join_date'] ?? ($calcDates['join_date'] ?? 'null'); + $params['start_date'] = empty($params['start_date']) ? ($calcDates['start_date'] ?? 'null') : $params['start_date']; + $params['end_date'] = empty($params['end_date']) ? ($calcDates['end_date'] ?? 'null') : $params['end_date']; + $params['join_date'] = empty($params['join_date']) ? ($calcDates['join_date'] ?? 'null') : $params['join_date']; //fix for CRM-3570, during import exclude the statuses those having is_admin = 1 $excludeIsAdmin = $params['exclude_is_admin'] ?? FALSE; diff --git a/civicrm/CRM/Member/BAO/MembershipType.php b/civicrm/CRM/Member/BAO/MembershipType.php index a0b599f282a093068bcf3d83232c3f04e6efa55c..1ec67d2e16a547386545969da79b4d9d1ccc323a 100644 --- a/civicrm/CRM/Member/BAO/MembershipType.php +++ b/civicrm/CRM/Member/BAO/MembershipType.php @@ -818,8 +818,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { * List of membershipType details keyed by membershipTypeID * @throws \CiviCRM_API3_Exception */ - public static function getAllMembershipTypes() { - $cacheString = __CLASS__ . __FUNCTION__ . CRM_Core_Config::domainID(); + public static function getAllMembershipTypes(): array { + $cacheString = __CLASS__ . __FUNCTION__ . CRM_Core_Config::domainID() . '_' . CRM_Core_I18n::getLocale(); if (!Civi::cache('metadata')->has($cacheString)) { $types = civicrm_api3('MembershipType', 'get', ['options' => ['limit' => 0, 'sort' => 'weight']])['values']; $taxRates = CRM_Core_PseudoConstant::getTaxRates(); diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index 7e9c28faeb0457d34b875f5af107732e1bac78ab..683f1863954a0b2fb29f34dfbef403def8b75c88 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -134,11 +134,13 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { */ public function setDeleteMessage() { $this->deleteMessage = '<span class="font-red bold">' - . ts('WARNING: Deleting this membership will also delete any related payment (contribution) records.' . ts('This action cannot be undone.') - . '</span><p>' - . ts('Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.') - . '</p><p>' - . ts("Click 'Delete' if you want to continue.") . '</p>'); + . ts('WARNING: Deleting this membership will also delete any related payment (contribution) records.') + . ' ' + . ts('This action cannot be undone.') + . '</span><p>' + . ts('Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.') + . '</p><p>' + . ts("Click 'Delete' if you want to continue.") . '</p>'; } /** diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php index 4b0fdbe072049c42a483f900a90babfb0ec333e7..ff06bbf8664d4aa21608eda2513f007329171653 100644 --- a/civicrm/CRM/Member/Form/MembershipRenewal.php +++ b/civicrm/CRM/Member/Form/MembershipRenewal.php @@ -162,7 +162,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { CRM_Custom_Form_CustomData::setDefaultValues($this); } - CRM_Utils_System::setTitle(ts('Renew Membership')); + $this->setTitle(ts('Renew Membership')); parent::preProcess(); } diff --git a/civicrm/CRM/Member/Form/MembershipView.php b/civicrm/CRM/Member/Form/MembershipView.php index e376a87824b6e9aec0c46c5dd13bad6cb9b3262e..8df997d5832368a559a61c782f14e93957f92540 100644 --- a/civicrm/CRM/Member/Form/MembershipView.php +++ b/civicrm/CRM/Member/Form/MembershipView.php @@ -341,7 +341,7 @@ SELECT r.id, c.id as cid, c.display_name as name, c.job_title as comment, } // omitting contactImage from title for now since the summary overlay css doesn't work outside crm-container - CRM_Utils_System::setTitle(ts('View Membership for') . ' ' . $displayName); + $this->setTitle(ts('View Membership for') . ' ' . $displayName); // add viewed membership to recent items list $recentTitle = $displayName . ' - ' . ts('Membership Type:') . ' ' . $values['membership_type']; diff --git a/civicrm/CRM/Member/Form/Task.php b/civicrm/CRM/Member/Form/Task.php index 8d5d042ab8b282f01217dbb00d0a06058cf28a67..756355c1e949a5944a9779dd6e43a6555bd88cee 100644 --- a/civicrm/CRM/Member/Form/Task.php +++ b/civicrm/CRM/Member/Form/Task.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Membership; + /** * Class for member form task actions. * FIXME: This needs refactoring to properly inherit from CRM_Core_Form_Task and share more functions. @@ -95,4 +97,45 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { ); } + /** + * @return array + */ + protected function getIDS() { + return $this->_memberIds; + } + + /** + * Get the rows form the search, keyed to make the token processor happy. + * + * @throws \API_Exception + */ + protected function getRows(): array { + if (empty($this->rows)) { + // checkPermissions set to false - in case form is bypassing in some way. + $memberships = Membership::get(FALSE) + ->addWhere('id', 'IN', $this->getIDs()) + ->setSelect(['id', 'contact_id'])->execute(); + foreach ($memberships as $membership) { + $this->rows[] = [ + 'contact_id' => $membership['contact_id'], + 'membership_id' => $membership['id'], + 'schema' => [ + 'contactId' => $membership['contact_id'], + 'membershipId' => $membership['id'], + ], + ]; + } + } + return $this->rows; + } + + /** + * Get the token processor schema required to list any tokens for this task. + * + * @return array + */ + public function getTokenSchema(): array { + return ['membershipId', 'contactId']; + } + } diff --git a/civicrm/CRM/Member/Form/Task/Batch.php b/civicrm/CRM/Member/Form/Task/Batch.php index 603bd9d3ca5a663255ce981c9441f06d1ac77315..188fc9232c98f069328deeb98b675ce4789b1a8f 100644 --- a/civicrm/CRM/Member/Form/Task/Batch.php +++ b/civicrm/CRM/Member/Form/Task/Batch.php @@ -77,7 +77,7 @@ class CRM_Member_Form_Task_Batch extends CRM_Member_Form_Task { CRM_Core_Error::statusBounce(ts('ufGroupId is missing')); } $this->_title = ts('Update multiple memberships') . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); - CRM_Utils_System::setTitle($this->_title); + $this->setTitle($this->_title); $this->addDefaultButtons(ts('Save')); $this->_fields = []; diff --git a/civicrm/CRM/Member/Form/Task/Email.php b/civicrm/CRM/Member/Form/Task/Email.php index 5e0e6d4baa61941ac9092f1cad8a107fe7d10e07..9f19d0fe7ee6d8a57f0ca0f3065a39acd53a26f8 100644 --- a/civicrm/CRM/Member/Form/Task/Email.php +++ b/civicrm/CRM/Member/Form/Task/Email.php @@ -22,4 +22,17 @@ class CRM_Member_Form_Task_Email extends CRM_Member_Form_Task { use CRM_Contact_Form_Task_EmailTrait; + /** + * Only send one email per contact. + * + * This has historically been done for contributions & makes sense if + * no entity specific tokens are in use. + * + * @return bool + * @throws \CRM_Core_Exception + */ + protected function isGroupByContact(): bool { + return !empty($this->getMessageTokens()['membership']); + } + } diff --git a/civicrm/CRM/Member/Form/Task/PDFLetter.php b/civicrm/CRM/Member/Form/Task/PDFLetter.php index d6cb9df570e0ce8971ba04ee31de3d102da79770..f7464b1b705f114e46b330eb07ee1eaced87132f 100644 --- a/civicrm/CRM/Member/Form/Task/PDFLetter.php +++ b/civicrm/CRM/Member/Form/Task/PDFLetter.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Membership; + /** * This class provides the functionality to create PDF letter for a group of * contacts or a single contact. @@ -70,47 +72,35 @@ class CRM_Member_Form_Task_PDFLetter extends CRM_Member_Form_Task { $this->setContactIDs(); $skipOnHold = $this->skipOnHold ?? FALSE; $skipDeceased = $this->skipDeceased ?? TRUE; - self::postProcessMembers( - $this, $this->_memberIds, $skipOnHold, $skipDeceased, $this->_contactIds - ); + $this->postProcessMembers($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 + * + * @throws \CRM_Core_Exception + * @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 + * */ - public static function postProcessMembers(&$form, $membershipIDs, $skipOnHold, $skipDeceased, $contactIDs) { + public function postProcessMembers($membershipIDs, $skipOnHold, $skipDeceased, $contactIDs) { + $form = $this; $formValues = $form->controller->exportValues($form->getName()); - list($formValues, $categories, $html_message, $messageToken, $returnProperties) = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues); + [$formValues, $html_message, $messageToken, $returnProperties] = $this->processMessageTemplate($formValues); $html - = self::generateHTML( + = $this->generateHTML( $membershipIDs, - $returnProperties, - $skipOnHold, - $skipDeceased, $messageToken, - $html_message, - $categories + $html_message ); - 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->createActivities($html_message, $contactIDs, $formValues['subject'], CRM_Utils_Array::value('campaign_id', $formValues)); + CRM_Utils_PDF_Utils::html2pdf($html, $this->getFileName() . '.pdf', FALSE, $formValues); $form->postProcessHook(); @@ -121,56 +111,39 @@ class CRM_Member_Form_Task_PDFLetter extends CRM_Member_Form_Task { * 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 + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @internal + * */ - public static function generateHTML($membershipIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $html_message, $categories) { - $memberships = CRM_Utils_Token::getMembershipTokenDetails($membershipIDs); + public function generateHTML($membershipIDs, $messageToken, $html_message): array { + $memberships = Membership::get(FALSE) + ->addWhere('id', 'IN', $membershipIDs) + ->addSelect('contact_id')->execute(); $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; - + foreach ($memberships as $membership) { + $html[] = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'messageTemplate' => ['msg_html' => $html_message], + 'contactId' => $membership['contact_id'], + 'tokenContext' => ['membershipId' => $membership['id']], + 'disableSmarty' => !defined('CIVICRM_MAIL_SMARTY') || !CIVICRM_MAIL_SMARTY, + ])['html']; } return $html; } /** - * List available tokens for this form. + * Get the token processor schema required to list any tokens for this task. * * @return array */ - public function listTokens() { - $tokens = CRM_Core_SelectValues::contactTokens(); - $tokens = array_merge(CRM_Core_SelectValues::membershipTokens(), $tokens); - return $tokens; + public function getTokenSchema(): array { + return ['membershipId', 'contactId']; } } diff --git a/civicrm/CRM/Member/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Member/Form/Task/PDFLetterCommon.php index 86191d616e7467cf87e6a92e87f0124b2645e507..7fdc8dce859e6f7d8c4298db60133459b6b2ac8c 100644 --- a/civicrm/CRM/Member/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Member/Form/Task/PDFLetterCommon.php @@ -1,5 +1,7 @@ <?php +use Civi\Api4\Membership; + /** * This class provides the common functionality for creating PDF letter for * members @@ -24,7 +26,7 @@ class CRM_Member_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDFLett 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) = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues); + [$formValues, $categories, $html_message, $messageToken, $returnProperties] = CRM_Contact_Form_Task_PDFLetterCommon::processMessageTemplate($formValues); $html = self::generateHTML( @@ -64,39 +66,27 @@ class CRM_Member_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDFLett * @param $html_message * @param $categories * - * @deprecated - * * @return array + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \Civi\API\Exception\UnauthorizedException + * @deprecated */ public static function generateHTML($membershipIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $html_message, $categories) { CRM_Core_Error::deprecatedFunctionWarning('no alternative'); - $memberships = CRM_Utils_Token::getMembershipTokenDetails($membershipIDs); + $memberships = Membership::get(FALSE) + ->addWhere('id', 'IN', $membershipIDs) + ->addSelect('contact_id')->execute(); $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; - + foreach ($memberships as $membership) { + $html[] = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'messageTemplate' => ['msg_html' => $html_message], + 'contactId' => $membership['contact_id'], + 'schema' => ['contactId', 'membershipId'], + 'tokenContext' => ['membershipId' => $membership['id']], + 'disableSmarty' => !defined('CIVICRM_MAIL_SMARTY') || !CIVICRM_MAIL_SMARTY, + ])['html']; } return $html; } diff --git a/civicrm/CRM/Member/Form/Task/PickProfile.php b/civicrm/CRM/Member/Form/Task/PickProfile.php index f8fe9db2454fa0b5aef5c701b3c779c709e41fb2..c74bd95cfd2c4d07ea8881d57f0806ebe44a784c 100644 --- a/civicrm/CRM/Member/Form/Task/PickProfile.php +++ b/civicrm/CRM/Member/Form/Task/PickProfile.php @@ -50,7 +50,7 @@ class CRM_Member_Form_Task_PickProfile extends CRM_Member_Form_Task { $session = CRM_Core_Session::singleton(); $this->_userContext = $session->readUserContext(); - CRM_Utils_System::setTitle(ts('Update multiple memberships')); + $this->setTitle(ts('Update multiple memberships')); $validate = FALSE; //validations diff --git a/civicrm/CRM/Member/Import/Controller.php b/civicrm/CRM/Member/Import/Controller.php index 2a57c0a38190c1f638e8d9e3f707df817086f98c..b647e940e5657c8ef1a77c13b0e4e61474283c93 100644 --- a/civicrm/CRM/Member/Import/Controller.php +++ b/civicrm/CRM/Member/Import/Controller.php @@ -26,10 +26,7 @@ class CRM_Member_Import_Controller extends CRM_Core_Controller { public function __construct($title = NULL, $action = CRM_Core_Action::NONE, $modal = TRUE) { parent::__construct($title, $modal); - // lets get around the time limit issue if possible, CRM-2113 - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $this->_stateMachine = new CRM_Import_StateMachine($this, $action); diff --git a/civicrm/CRM/Member/Tokens.php b/civicrm/CRM/Member/Tokens.php index 686cc71f4652102c7c29e474dfd94c4102fb0592..35ba54a3557d5fa6db017dbe8a8bfa5923c70cad 100644 --- a/civicrm/CRM/Member/Tokens.php +++ b/civicrm/CRM/Member/Tokens.php @@ -22,74 +22,104 @@ * implementation which is not tied to scheduled reminders, although * that is outside the current scope. */ -class CRM_Member_Tokens extends \Civi\Token\AbstractTokenSubscriber { +class CRM_Member_Tokens extends CRM_Core_EntityTokens { /** - * Class constructor. + * Get the entity name for api v4 calls. + * + * @return string */ - public function __construct() { - parent::__construct('membership', array_merge( - [ - 'fee' => ts('Membership Fee'), - 'id' => ts('Membership ID'), - 'join_date' => ts('Membership Join Date'), - 'start_date' => ts('Membership Start Date'), - 'end_date' => ts('Membership End Date'), - 'status' => ts('Membership Status'), - 'type' => ts('Membership Type'), - ], - CRM_Utils_Token::getCustomFieldTokens('Membership') - )); + protected function getApiEntityName(): string { + return 'Membership'; } /** - * @inheritDoc + * List out the fields that are exposed. + * + * For historical reasons these are the only exposed fields. + * + * It is also possible to list 'skippedFields' + * + * @return string[] */ - public function checkActive(\Civi\Token\TokenProcessor $processor) { - // Extracted from scheduled-reminders code. See the class description. - return !empty($processor->context['actionMapping']) - && $processor->context['actionMapping']->getEntity() === 'civicrm_membership'; + protected function getExposedFields(): array { + return [ + 'id', + 'join_date', + 'start_date', + 'end_date', + 'status_id', + 'membership_type_id', + 'source', + 'status_override_end_date', + ]; } /** - * Alter action schedule query. - * - * @param \Civi\ActionSchedule\Event\MailingQueryEvent $e + * @inheritDoc + * @throws \CiviCRM_API3_Exception */ - public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e) { - if ($e->mapping->getEntity() !== 'civicrm_membership') { - return; + public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) { + if ($field === 'fee') { + $membershipType = CRM_Member_BAO_MembershipType::getMembershipType($this->getFieldValue($row, 'membership_type_id')); + $row->tokens($entity, $field, \CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($membershipType['minimum_fee'])); + } + else { + parent::evaluateToken($row, $entity, $field, $prefetch); } + } - // FIXME: `select('e.*')` seems too broad. - $e->query - ->select('e.*') - ->select('mt.minimum_fee as fee, e.id as id , e.join_date, e.start_date, e.end_date, ms.name as status, mt.name as type') - ->join('mt', "!casMailingJoinType civicrm_membership_type mt ON e.membership_type_id = mt.id") - ->join('ms', "!casMailingJoinType civicrm_membership_status ms ON e.status_id = ms.id"); + /** + * Get any overrides for token metadata. + * + * This is most obviously used for setting the audience, which + * will affect widget-presence. + * + * Changing the audience is done in order to simplify the + * UI for more general users. + * + * @return \string[][] + */ + protected function getTokenMetadataOverrides(): array { + return [ + 'owner_membership_id' => ['audience' => 'sysadmin'], + 'max_related' => ['audience' => 'sysadmin'], + 'contribution_recur_id' => ['audience' => 'sysadmin'], + 'is_override' => ['audience' => 'sysadmin'], + 'is_test' => ['audience' => 'sysadmin'], + // Pay later is considered to be unreliable in the schema + // and will eventually be removed. + 'is_pay_later' => ['audience' => 'deprecated'], + ]; } /** - * @inheritDoc + * Get fields which need to be returned to render another token. + * + * @return array */ - public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) { - $actionSearchResult = $row->context['actionSearchResult']; + public function getDependencies(): array { + return ['fee' => 'membership_type_id']; + } - if (in_array($field, ['start_date', 'end_date', 'join_date'])) { - $row->tokens($entity, $field, \CRM_Utils_Date::customFormat($actionSearchResult->$field)); - } - elseif ($field == 'fee') { - $row->tokens($entity, $field, \CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($actionSearchResult->$field)); - } - elseif (isset($actionSearchResult->$field)) { - $row->tokens($entity, $field, $actionSearchResult->$field); - } - elseif ($cfID = \CRM_Core_BAO_CustomField::getKeyID($field)) { - $row->customToken($entity, $cfID, $actionSearchResult->entity_id); - } - else { - $row->tokens($entity, $field, ''); - } + /** + * Get any tokens with custom calculation. + * + * In this case 'fee' should be converted to{membership.membership_type_id.fee} + * but we don't have the formatting support to do that with no + * custom intervention yet. + */ + protected function getBespokeTokens(): array { + return [ + 'fee' => [ + 'title' => ts('Membership Fee'), + 'name' => 'fee', + 'type' => 'calculated', + 'options' => NULL, + 'data_type' => 'integer', + 'audience' => 'user', + ], + ]; } } diff --git a/civicrm/CRM/PCP/Form/Campaign.php b/civicrm/CRM/PCP/Form/Campaign.php index 6445366044aac3d33b80abd2ca04b51725221a5c..538300bb4aca3e3735861e98dabb7c870193663a 100644 --- a/civicrm/CRM/PCP/Form/Campaign.php +++ b/civicrm/CRM/PCP/Form/Campaign.php @@ -44,7 +44,7 @@ class CRM_PCP_Form_Campaign extends CRM_Core_Form { $title = ts('Edit Your Personal Campaign Page'); } - CRM_Utils_System::setTitle($title); + $this->setTitle($title); parent::preProcess(); } diff --git a/civicrm/CRM/PCP/Form/Event.php b/civicrm/CRM/PCP/Form/Event.php index 265ee1c623ac7dd5c4839b83de2c2d3fc09ca3fd..3a0f95f7452adb3addac734238ae8d12b7d10bd7 100644 --- a/civicrm/CRM/PCP/Form/Event.php +++ b/civicrm/CRM/PCP/Form/Event.php @@ -42,7 +42,7 @@ class CRM_PCP_Form_Event extends CRM_Event_Form_ManageEvent { $defaults = []; if (isset($this->_id)) { $title = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $this->_id, 'title'); - CRM_Utils_System::setTitle(ts('Personal Campaign Page Settings (%1)', [1 => $title])); + $this->setTitle(ts('Personal Campaign Page Settings (%1)', [1 => $title])); $params = ['entity_id' => $this->_id, 'entity_table' => 'civicrm_event']; CRM_Core_DAO::commonRetrieve('CRM_PCP_DAO_PCPBlock', $params, $defaults); diff --git a/civicrm/CRM/PCP/Form/PCPAccount.php b/civicrm/CRM/PCP/Form/PCPAccount.php index 9925bdbf70f095ae79ddbc6ab9a460dab2df367b..fd148fdd3eb56c304a2867cfab459494f26992e2 100644 --- a/civicrm/CRM/PCP/Form/PCPAccount.php +++ b/civicrm/CRM/PCP/Form/PCPAccount.php @@ -100,7 +100,7 @@ class CRM_PCP_Form_PCPAccount extends CRM_Core_Form { $this->assign('pcpComponent', $this->_component); if ($this->_single) { - CRM_Utils_System::setTitle(ts('Update Contact Information')); + $this->setTitle(ts('Update Contact Information')); } } diff --git a/civicrm/CRM/Pledge/Form/Payment.php b/civicrm/CRM/Pledge/Form/Payment.php index 119533b567e3d1d3c8cb1e4748fdd09d61a807a8..02a7d41474558a65b8ec2a4de6ab7593437bae66 100644 --- a/civicrm/CRM/Pledge/Form/Payment.php +++ b/civicrm/CRM/Pledge/Form/Payment.php @@ -54,7 +54,7 @@ class CRM_Pledge_Form_Payment extends CRM_Core_Form { $this->_id = CRM_Utils_Request::retrieve('ppId', 'Positive', $this); - CRM_Utils_System::setTitle(ts('Edit Scheduled Pledge Payment')); + $this->setTitle(ts('Edit Scheduled Pledge Payment')); } /** diff --git a/civicrm/CRM/Pledge/Form/PledgeView.php b/civicrm/CRM/Pledge/Form/PledgeView.php index e2095af55eaf119804a162fa8275746b783753a8..a18a84a4665f240c08acf6ebea36105d03bc8eff 100644 --- a/civicrm/CRM/Pledge/Form/PledgeView.php +++ b/civicrm/CRM/Pledge/Form/PledgeView.php @@ -99,7 +99,7 @@ class CRM_Pledge_Form_PledgeView extends CRM_Core_Form { $displayName .= ' (' . ts('default organization') . ')'; } // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container - CRM_Utils_System::setTitle(ts('View Pledge by') . ' ' . $displayName); + $this->setTitle(ts('View Pledge by') . ' ' . $displayName); // do check for campaigns if ($campaignId = CRM_Utils_Array::value('campaign_id', $values)) { diff --git a/civicrm/CRM/Price/Form/DeleteField.php b/civicrm/CRM/Price/Form/DeleteField.php index b6a961abb86e94b94fd960a12fc832ac6bfb460c..b9876cc57bafa82b7f40043686b76ef8a4b8d1bd 100644 --- a/civicrm/CRM/Price/Form/DeleteField.php +++ b/civicrm/CRM/Price/Form/DeleteField.php @@ -50,7 +50,7 @@ class CRM_Price_Form_DeleteField extends CRM_Core_Form { $this->assign('title', $this->_title); - CRM_Utils_System::setTitle(ts('Confirm Price Field Delete')); + $this->setTitle(ts('Confirm Price Field Delete')); } /** diff --git a/civicrm/CRM/Price/Form/Set.php b/civicrm/CRM/Price/Form/Set.php index 96a5b53cb3491a67a4e0910c6dfca6fda7b26038..88a24f76a48ce8820e24ac5aab92645967923630 100644 --- a/civicrm/CRM/Price/Form/Set.php +++ b/civicrm/CRM/Price/Form/Set.php @@ -108,7 +108,7 @@ class CRM_Price_Form_Set extends CRM_Core_Form { elseif ($this->_action & CRM_Core_Action::VIEW) { $title = ts('Preview %1', [1 => $title]); } - CRM_Utils_System::setTitle($title); + $this->setTitle($title); $url = CRM_Utils_System::url('civicrm/admin/price', 'reset=1'); $breadCrumb = [ diff --git a/civicrm/CRM/Profile/Form/Edit.php b/civicrm/CRM/Profile/Form/Edit.php index b2cfc16bf4477b5cb2ece554fffe62cf017824ab..c0f7ec2076a90fd09b35e482ecb3901e2b28ae1f 100644 --- a/civicrm/CRM/Profile/Form/Edit.php +++ b/civicrm/CRM/Profile/Form/Edit.php @@ -104,23 +104,23 @@ class CRM_Profile_Form_Edit extends CRM_Profile_Form { parent::preProcess(); // and also the profile is of type 'Profile' - $query = " + $query = ' SELECT module,is_reserved FROM civicrm_uf_group LEFT JOIN civicrm_uf_join ON uf_group_id = civicrm_uf_group.id WHERE civicrm_uf_group.id = %1 -"; +'; $params = [1 => [$this->_gid, 'Integer']]; $dao = CRM_Core_DAO::executeQuery($query, $params); $isProfile = FALSE; while ($dao->fetch()) { - $isProfile = ($isProfile || ($dao->module == "Profile")); + $isProfile = ($isProfile || ($dao->module === 'Profile')); } //Check that the user has the "add contacts" Permission - $canAdd = CRM_Core_Permission::check("add contacts"); + $canAdd = CRM_Core_Permission::check('add contacts'); //Remove need for Profile module type when using reserved profiles [CRM-14488] if (!$dao->N || (!$isProfile && !($dao->is_reserved && $canAdd))) { @@ -141,16 +141,16 @@ SELECT module,is_reserved // set the title if ($this->_multiRecord && $this->_customGroupTitle) { - $groupTitle = ($this->_multiRecord & CRM_Core_Action::UPDATE) ? 'Edit ' . $this->_customGroupTitle . ' Record' : $this->_customGroupTitle; + $this->setTitle(($this->_multiRecord & CRM_Core_Action::UPDATE) ? 'Edit ' . $this->_customGroupTitle . ' Record' : $this->_customGroupTitle); } else { - $groupTitle = CRM_Core_BAO_UFGroup::getFrontEndTitle($this->_ufGroup['id']); + $this->setTitle(CRM_Core_BAO_UFGroup::getFrontEndTitle($this->_ufGroup['id'])); } - CRM_Utils_System::setTitle($groupTitle); + $this->assign('recentlyViewed', FALSE); - if ($this->_context != 'dialog') { + if ($this->_context !== 'dialog') { $this->_postURL = $this->_ufGroup['post_URL']; $this->_cancelURL = $this->_ufGroup['cancel_URL']; @@ -160,7 +160,7 @@ SELECT module,is_reserved } if (!$this->_postURL) { - if ($this->_context == 'Search') { + if ($this->_context === 'Search') { $this->_postURL = CRM_Utils_System::url('civicrm/contact/search'); } elseif ($this->_id && $this->_gid) { @@ -243,6 +243,9 @@ SELECT module,is_reserved /** * Process the user submitted custom data values. * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function postProcess() { parent::postProcess(); @@ -260,7 +263,7 @@ SELECT module,is_reserved } // When saving (not deleting) and not in an ajax popup - if (empty($_POST[$this->_deleteButtonName]) && $this->_context != 'dialog') { + if (empty($_POST[$this->_deleteButtonName]) && $this->_context !== 'dialog') { CRM_Core_Session::setStatus(ts('Your information has been saved.'), ts('Thank you.'), 'success'); } @@ -287,20 +290,11 @@ SELECT module,is_reserved $url = CRM_Utils_System::url('civicrm/profile/view', $urlParams); } else { - // Replace tokens from post URL - $contactParams = [ - 'contact_id' => $this->_id, - 'version' => 3, - ]; - - $contact = civicrm_api('contact', 'get', $contactParams); - $contact = reset($contact['values']); - - $dummyMail = new CRM_Mailing_BAO_Mailing(); - $dummyMail->body_text = $this->_postURL; - $tokens = $dummyMail->getTokens(); - - $url = CRM_Utils_Token::replaceContactTokens($this->_postURL, $contact, FALSE, CRM_Utils_Array::value('text', $tokens)); + $url = CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'messageTemplate' => ['msg_text' => $this->_postURL], + 'contactId' => $this->_id, + 'disableSmarty' => TRUE, + ])['text']; } $session->replaceUserContext($url); diff --git a/civicrm/CRM/Report/BAO/ReportInstance.php b/civicrm/CRM/Report/BAO/ReportInstance.php index a0950787c1badafceedcd0cf678376df7d07fd21..9d755dabd06971c2ef80a665d9b836ef4e324116 100644 --- a/civicrm/CRM/Report/BAO/ReportInstance.php +++ b/civicrm/CRM/Report/BAO/ReportInstance.php @@ -14,7 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Report_BAO_ReportInstance extends CRM_Report_DAO_ReportInstance { +class CRM_Report_BAO_ReportInstance extends CRM_Report_DAO_ReportInstance implements Civi\Test\HookInterface { /** * Takes an associative array and creates an instance object. @@ -219,22 +219,27 @@ class CRM_Report_BAO_ReportInstance extends CRM_Report_DAO_ReportInstance { * Delete the instance of the Report. * * @param int $id - * + * @deprecated * @return mixed - * $results no of deleted Instance on success, false otherwise */ public static function del($id = NULL) { - $navId = CRM_Core_DAO::getFieldValue('CRM_Report_DAO_ReportInstance', $id, 'navigation_id', 'id'); - $dao = new CRM_Report_DAO_ReportInstance(); - $dao->id = $id; - $result = $dao->delete(); - - // Delete navigation if exists. - if ($navId) { - CRM_Core_BAO_Navigation::processDelete($navId); - CRM_Core_BAO_Navigation::resetNavigation(); + self::deleteRecord(['id' => $id]); + return 1; + } + + /** + * Event fired prior to modifying a ReportInstance. + * @param \Civi\Core\Event\PreEvent $event + */ + public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) { + if ($event->action === 'delete' && $event->id) { + // When deleting a report, also delete from navigation menu + $navId = CRM_Core_DAO::getFieldValue('CRM_Report_DAO_ReportInstance', $event->id, 'navigation_id'); + if ($navId) { + CRM_Core_BAO_Navigation::processDelete($navId); + CRM_Core_BAO_Navigation::resetNavigation(); + } } - return $result; } /** diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 1e297cbb83c60a2ac472148f6bdcc6388a5bd8e2..da4e6ba09d07968ffef4655648fdf6cdd931e13a 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -626,6 +626,10 @@ class CRM_Report_Form extends CRM_Core_Form { // set qfkey so that pager picks it up and use it in the "Next > Last >>" links. // FIXME: Note setting it in $_GET doesn't work, since pager generates link based on QUERY_STRING + if (!isset($_SERVER['QUERY_STRING'])) { + // in php 7.4 can do this with less lines with ??= + $_SERVER['QUERY_STRING'] = ''; + } $_SERVER['QUERY_STRING'] .= "&qfKey={$this->controller->_key}"; } @@ -1361,20 +1365,8 @@ class CRM_Report_Form extends CRM_Core_Form { !is_array($field['options']) || empty($field['options']) ) { // If there's no option list for this filter, define one. - $field['options'] = [ - 1 => ts('January'), - 2 => ts('February'), - 3 => ts('March'), - 4 => ts('April'), - 5 => ts('May'), - 6 => ts('June'), - 7 => ts('July'), - 8 => ts('August'), - 9 => ts('September'), - 10 => ts('October'), - 11 => ts('November'), - 12 => ts('December'), - ]; + $field['options'] = CRM_Utils_Date::getFullMonthNames(); + // Add this option list to this column _columns. This is // required so that filter statistics show properly. $this->_columns[$table]['filters'][$fieldName]['options'] = $field['options']; diff --git a/civicrm/CRM/Report/Form/Event/Summary.php b/civicrm/CRM/Report/Form/Event/Summary.php index 11af2ed73a543ff5bede2e7a8d32d7c1786adfa5..308d07edaf977604cd478286ddd9796b3dc0aee8 100644 --- a/civicrm/CRM/Report/Form/Event/Summary.php +++ b/civicrm/CRM/Report/Form/Event/Summary.php @@ -85,6 +85,23 @@ class CRM_Report_Form_Event_Summary extends CRM_Report_Form { 'operatorType' => CRM_Report_Form::OP_DATE, ], ], + 'order_bys' => [ + 'event_start_date' => [ + 'title' => ts('Event Start Date'), + 'default' => '1', + 'default_weight' => '0', + 'default_order' => 'DESC', + ], + 'event_end_date' => [ + 'title' => ts('Event End Date'), + ], + 'max_participants' => [ + 'title' => ts('Capacity'), + ], + 'title' => [ + 'title' => ts('Event Title'), + ], + ], ], ]; $this->_currencyColumn = 'civicrm_participant_fee_currency'; diff --git a/civicrm/CRM/Report/Form/Register.php b/civicrm/CRM/Report/Form/Register.php index cc1440150e62456f8ba86a6902844ea8253350bd..f1ccbfc59d9e9aa8ea1af1b4ced19ef501abcab6 100644 --- a/civicrm/CRM/Report/Form/Register.php +++ b/civicrm/CRM/Report/Form/Register.php @@ -22,7 +22,7 @@ class CRM_Report_Form_Register extends CRM_Core_Form { $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE); $this->_id = CRM_Utils_Request::retrieve('id', 'String', $this, FALSE); - CRM_Utils_System::setTitle(ts('Report Template')); + $this->setTitle(ts('Report Template')); if ($this->_action & CRM_Core_Action::DELETE) { return; diff --git a/civicrm/CRM/UF/Form/Group.php b/civicrm/CRM/UF/Form/Group.php index 58c9b9f5404449b33ee8815ffc7b78d4439c50ad..07a03b6267d62450d926b2ce340241cf3b450e0a 100644 --- a/civicrm/CRM/UF/Form/Group.php +++ b/civicrm/CRM/UF/Form/Group.php @@ -124,7 +124,7 @@ class CRM_UF_Form_Group extends CRM_Core_Form { // setting title for html page if ($this->_action & CRM_Core_Action::UPDATE) { - CRM_Utils_System::setTitle(ts('Profile Settings') . " - $title"); + $this->setTitle(ts('Profile Settings') . " - $title"); } elseif ($this->_action & (CRM_Core_Action::DISABLE | CRM_Core_Action::DELETE)) { $ufGroup['module'] = implode(' , ', CRM_Core_BAO_UFGroup::getUFJoinRecord($this->_id, TRUE)); @@ -149,7 +149,7 @@ class CRM_UF_Form_Group extends CRM_Core_Form { $this->assign('message', $message); } else { - CRM_Utils_System::setTitle(ts('New CiviCRM Profile')); + $this->setTitle(ts('New CiviCRM Profile')); } } diff --git a/civicrm/CRM/Upgrade/4.5.0.msg_template/civicrm_msg_template.tpl b/civicrm/CRM/Upgrade/4.5.0.msg_template/civicrm_msg_template.tpl deleted file mode 100644 index df3eeb6fa08ec9a48b1f1c96c9679eafda294711..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.0.msg_template/civicrm_msg_template.tpl +++ /dev/null @@ -1,16 +0,0 @@ -{php} - $dir = SMARTY_DIR . '/../../CRM/Upgrade/4.5.0.msg_template/message_templates'; - $templates = array(); - foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { - $parts = explode('_', basename($filename, '.tpl')); - $templates[] = array('type' => array_pop($parts), 'name' => implode('_', $parts), 'filename' => "$dir/$filename"); - } - $this->assign('templates', $templates); -{/php} - -{foreach from=$templates item=tpl} - {fetch assign=content file=$tpl.filename} - SELECT @workflow_id := MAX(id) FROM civicrm_option_value WHERE name = '{$tpl.name}'; - SELECT @content := msg_{$tpl.type} FROM civicrm_msg_template WHERE workflow_id = @workflow_id AND is_reserved = 1 LIMIT 1; - UPDATE civicrm_msg_template SET msg_{$tpl.type} = '{$content|escape:"quotes"}' WHERE workflow_id = @workflow_id AND (is_reserved = 1 OR (is_default = 1 AND msg_{$tpl.type} = @content)); -{/foreach} diff --git a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_html.tpl b/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_html.tpl deleted file mode 100644 index 0ef701f9c28b3dea9d20a0761674718caafcdfda..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_html.tpl +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> - <p>{ts}Your recurring contribution has been updated as requested:{/ts} - <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p> - - <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p> - </td> - </tr> - <tr> - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_text.tpl b/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_text.tpl deleted file mode 100644 index 774597acd771a2495e85f4012dba80d5eeb57b0f..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_edit_text.tpl +++ /dev/null @@ -1,8 +0,0 @@ -{ts 1=$contact.display_name}Dear %1{/ts}, - -{ts}Your recurring contribution has been updated as requested:{/ts} - -{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts} -{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if} - -{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts} diff --git a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_html.tpl b/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_html.tpl deleted file mode 100644 index f7b6387c81370242dbf3a0f45564bed8fe0ebe07..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_html.tpl +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$displayName}Dear %1{/ts},</p> - </td> - </tr> - - <tr> - <td> </td> - </tr> - - {if $recur_txnType eq 'START'} - {if $auto_renew_membership} - <tr> - <td> - <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p> - <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p> - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - {else} - <tr> - <td> - <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p> - <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p> - <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p> - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - {/if} - - {elseif $recur_txnType eq 'END'} - - {if $auto_renew_membership} - <tr> - <td> - <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p> - </td> - </tr> - {else} - <tr> - <td> - <p>{ts}Your recurring contribution term has ended.{/ts}</p> - <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you for your support.{/ts}</p> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Start Date{/ts} - </td> - <td {$valueStyle}> - {$recur_start_date|crmDate} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}End Date{/ts} - </td> - <td {$valueStyle}> - {$recur_end_date|crmDate} - </td> - </tr> - </table> - </td> - </tr> - - {/if} - {/if} - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_text.tpl b/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_text.tpl deleted file mode 100644 index 6146808ce2456716fe325835a6bea41ab5579c82..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.0.msg_template/message_templates/contribution_recurring_notify_text.tpl +++ /dev/null @@ -1,50 +0,0 @@ -{ts 1=$displayName}Dear %1{/ts}, - -{if $recur_txnType eq 'START'} -{if $auto_renew_membership} -{ts}Thanks for your auto renew membership sign-up.{/ts} - - -{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts} - -{ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} - -{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} - -{else} -{ts}Thanks for your recurring contribution sign-up.{/ts} - - -{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}. - -{ts}Start Date{/ts}: {$recur_start_date|crmDate} - -{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href="%1">visiting this web page</a>.{/ts} - -{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} - -{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} -{/if} - -{elseif $recur_txnType eq 'END'} -{if $auto_renew_membership} -{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts} - - -{else} -{ts}Your recurring contribution term has ended.{/ts} - - -{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you for your support.{/ts} - - -================================================== -{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts} - -================================================== -{ts}Start Date{/ts}: {$recur_start_date|crmDate} - -{ts}End Date{/ts}: {$recur_end_date|crmDate} - -{/if} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/civicrm_msg_template.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/civicrm_msg_template.tpl deleted file mode 100644 index 07553db60b979da789ea147c272e5e0b506355a5..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/civicrm_msg_template.tpl +++ /dev/null @@ -1,57 +0,0 @@ -{php} - $dir = SMARTY_DIR . '/../../CRM/Upgrade/4.5.alpha1.msg_template/message_templates'; - $templates = array(); - foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { - $parts = explode('_', basename($filename, '.tpl')); - $templates[] = array('type' => array_pop($parts), 'name' => implode('_', $parts), 'filename' => "$dir/$filename"); - } - $this->assign('templates', $templates); -{/php} - -{foreach from=$templates item=tpl} - {fetch assign=content file=$tpl.filename} - SELECT @workflow_id := MAX(id) FROM civicrm_option_value WHERE name = '{$tpl.name}'; - SELECT @content := msg_{$tpl.type} FROM civicrm_msg_template WHERE workflow_id = @workflow_id AND is_reserved = 1 LIMIT 1; - UPDATE civicrm_msg_template SET msg_{$tpl.type} = '{$content|escape:"quotes"}' WHERE workflow_id = @workflow_id AND (is_reserved = 1 OR (is_default = 1 AND msg_{$tpl.type} = @content)); -{/foreach} - -{php} - $ovNames = array( - 'contribution' => array( - 'payment_or_refund_notification' => ts('Additional Payment Receipt or Refund Notification', array('escape' => 'sql')), - ), - ); - - $this->assign('ovNames', $ovNames); - $this->assign('dir', $dir); -{/php} - -{foreach from=$ovNames key=name item=ignore} - SELECT @tpl_ogid_{$name} := MAX(id) FROM civicrm_option_group WHERE name = 'msg_tpl_workflow_{$name}'; -{/foreach} - -INSERT INTO civicrm_option_value - (option_group_id, name, {localize field='label'}label{/localize}, value, weight) VALUES -{foreach from=$ovNames key=gName item=ovs name=for_groups} -{foreach from=$ovs key=vName item=label name=for_values} - (@tpl_ogid_{$gName}, '{$vName}', {localize}'{$label}'{/localize}, {$smarty.foreach.for_values.iteration}, {$smarty.foreach.for_values.iteration}) {if $smarty.foreach.for_groups.last and $smarty.foreach.for_values.last};{else},{/if} -{/foreach} -{/foreach} - -{foreach from=$ovNames key=gName item=ovs} -{foreach from=$ovs key=vName item=label} - SELECT @tpl_ovid_{$vName} := MAX(id) FROM civicrm_option_value WHERE option_group_id = @tpl_ogid_{$gName} AND name = '{$vName}'; -{/foreach} -{/foreach} - -INSERT INTO civicrm_msg_template - (msg_title, msg_subject, msg_text, msg_html, workflow_id, is_default, is_reserved) VALUES -{foreach from=$ovNames key=gName item=ovs name=for_groups} -{foreach from=$ovs key=vName item=title name=for_values} - {fetch assign=subject file="`$smarty.const.SMARTY_DIR`/../../CRM/Upgrade/4.5.alpha1.msg_template/message_templates/`$vName`_subject.tpl"} - {fetch assign=text file="`$smarty.const.SMARTY_DIR`/../../CRM/Upgrade/4.5.alpha1.msg_template/message_templates/`$vName`_text.tpl"} - {fetch assign=html file="`$smarty.const.SMARTY_DIR`/../../CRM/Upgrade/4.5.alpha1.msg_template/message_templates/`$vName`_html.tpl"} - ('{$title}', '{$subject|escape:"quotes"}', '{$text|escape:"quotes"}', '{$html|escape:"quotes"}', @tpl_ovid_{$vName}, 1, 0), - ('{$title}', '{$subject|escape:"quotes"}', '{$text|escape:"quotes"}', '{$html|escape:"quotes"}', @tpl_ovid_{$vName}, 0, 1) {if $smarty.foreach.for_groups.last and $smarty.foreach.for_values.last};{else},{/if} -{/foreach} -{/foreach} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_html.tpl deleted file mode 100644 index 8f85b57180f797351f3312a3fac0a98007c0ebda..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_html.tpl +++ /dev/null @@ -1,265 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - - {if $formValues.receipt_text} - <p>{$formValues.receipt_text|htmlize}</p> - {else} - <p>{ts}Thank you for your support.{/ts}</p> - {/if} - - <p>{ts}Please print this receipt for your records.{/ts}</p> - - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Contribution Information{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$formValues.contributionType_name} - </td> - </tr> - - {if $lineItem and !$is_quick_config} - {foreach from=$lineItem item=value key=priceset} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Qty{/ts}</th> - <th>{ts}Each{/ts}</th> - <th>{ts}Total{/ts}</th> - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.qty} - </td> - <td> - {$line.unit_price|crmMoney:$currency} - </td> - <td> - {$line.line_total|crmMoney:$currency} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/foreach} - {/if} - - <tr> - <td {$labelStyle}> - {ts}Total Amount{/ts} - </td> - <td {$valueStyle}> - {$formValues.total_amount|crmMoney:$currency} - </td> - </tr> - - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Received Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|truncate:10:''|crmDate} - </td> - </tr> - {/if} - - {if $receipt_date} - <tr> - <td {$labelStyle}> - {ts}Receipt Date{/ts} - </td> - <td {$valueStyle}> - {$receipt_date|truncate:10:''|crmDate} - </td> - </tr> - {/if} - - {if $formValues.paidBy and !$formValues.hidden_CreditCard} - <tr> - <td {$labelStyle}> - {ts}Paid By{/ts} - </td> - <td {$valueStyle}> - {$formValues.paidBy} - </td> - </tr> - {if $formValues.check_number} - <tr> - <td {$labelStyle}> - {ts}Check Number{/ts} - </td> - <td {$valueStyle}> - {$formValues.check_number} - </td> - </tr> - {/if} - {/if} - - {if $formValues.trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction ID{/ts} - </td> - <td {$valueStyle}> - {$formValues.trxn_id} - </td> - </tr> - {/if} - - {if $ccContribution} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} - </td> - </tr> - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} - </td> - </tr> - {/if} - - {if $softCreditTypes and $softCredits} - {foreach from=$softCreditTypes item=softCreditType key=n} - <tr> - <th {$headerStyle}> - {$softCreditType} - </th> - </tr> - {foreach from=$softCredits.$n item=value key=label} - <tr> - <td {$labelStyle}> - {$label} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - {if $customGroup} - {foreach from=$customGroup item=value key=customName} - <tr> - <th {$headerStyle}> - {$customName} - </th> - </tr> - {foreach from=$value item=v key=n} - <tr> - <td {$labelStyle}> - {$n} - </td> - <td {$valueStyle}> - {$v} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - {if $formValues.product_name} - <tr> - <th {$headerStyle}> - {ts}Premium Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$labelStyle}> - {$formValues.product_name} - </td> - </tr> - {if $formValues.product_option} - <tr> - <td {$labelStyle}> - {ts}Option{/ts} - </td> - <td {$valueStyle}> - {$formValues.product_option} - </td> - </tr> - {/if} - {if $formValues.product_sku} - <tr> - <td {$labelStyle}> - {ts}SKU{/ts} - </td> - <td {$valueStyle}> - {$formValues.product_sku} - </td> - </tr> - {/if} - {if $fulfilled_date} - <tr> - <td {$labelStyle}> - {ts}Sent{/ts} - </td> - <td {$valueStyle}> - {$fulfilled_date|truncate:10:''|crmDate} - </td> - </tr> - {/if} - {/if} - - </table> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_text.tpl deleted file mode 100644 index 1bf0cca72655a014de386f92a8cf1f0707b481d3..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_offline_receipt_text.tpl +++ /dev/null @@ -1,98 +0,0 @@ -{if $formValues.receipt_text} -{$formValues.receipt_text} -{else}{ts}Thank you for your support.{/ts}{/if} - -{ts}Please print this receipt for your records.{/ts} - - -=========================================================== -{ts}Contribution Information{/ts} - -=========================================================== -{ts}Financial Type{/ts}: {$formValues.contributionType_name} -{if $lineItem} -{foreach from=$lineItem item=value key=priceset} ---------------------------------------------------------- -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_qty}{ts}Qty{/ts}{/capture} -{capture assign=ts_each}{ts}Each{/ts}{/capture} -{capture assign=ts_total}{ts}Total{/ts}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} ----------------------------------------------------------- -{foreach from=$value item=line} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {$line.line_total|crmMoney:$currency|string_format:"%10s"} -{/foreach} -{/foreach} -{/if} - -{ts}Total Amount{/ts}: {$formValues.total_amount|crmMoney:$currency} -{if $receive_date} -{ts}Received Date{/ts}: {$receive_date|truncate:10:''|crmDate} -{/if} -{if $receipt_date} -{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:''|crmDate} -{/if} -{if $formValues.paidBy and !$formValues.hidden_CreditCard} -{ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} -{ts}Check Number{/ts}: {$formValues.check_number} -{/if} -{/if} -{if $formValues.trxn_id} -{ts}Transaction ID{/ts}: {$formValues.trxn_id} -{/if} - -{if $ccContribution} -=========================================================== -{ts}Billing Name and Address{/ts} - -=========================================================== -{$billingName} -{$address} - -=========================================================== -{ts}Credit Card Information{/ts} - -=========================================================== -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} -{if $customGroup} -{foreach from=$customGroup item=value key=customName} -=========================================================== -{$customName} -=========================================================== -{foreach from=$value item=v key=n} -{$n}: {$v} -{/foreach} -{/foreach} -{/if} - -{if $softCreditTypes and $softCredits} -{foreach from=$softCreditTypes item=softCreditType key=n} -=========================================================== -{$softCreditType} -=========================================================== -{foreach from=$softCredits.$n item=value key=label} -{$label}: {$value} -{/foreach} -{/foreach} -{/if} - -{if $formValues.product_name} -=========================================================== -{ts}Premium Information{/ts} - -=========================================================== -{$formValues.product_name} -{if $formValues.product_option} -{ts}Option{/ts}: {$formValues.product_option} -{/if} -{if $formValues.product_sku} -{ts}SKU{/ts}: {$formValues.product_sku} -{/if} -{if $fulfilled_date} -{ts}Sent{/ts}: {$fulfilled_date|crmDate} -{/if} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_html.tpl deleted file mode 100644 index 8970c3af47be92ebcdcff60596ae692dc8b3b123..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_html.tpl +++ /dev/null @@ -1,409 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - - {if $receipt_text} - <p>{$receipt_text|htmlize}</p> - {/if} - - {if $is_pay_later} - <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} - {else} - <p>{ts}Please print this confirmation for your records.{/ts}</p> - {/if} - - </td> - </tr> - </table> - <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> - - {if $amount} - - - <tr> - <th {$headerStyle}> - {ts}Contribution Information{/ts} - </th> - </tr> - - {if $lineItem and $priceSetID and !$is_quick_config} - - {foreach from=$lineItem item=value key=priceset} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Qty{/ts}</th> - <th>{ts}Each{/ts}</th> - <th>{ts}Total{/ts}</th> - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.qty} - </td> - <td> - {$line.unit_price|crmMoney:$currency} - </td> - <td> - {$line.line_total|crmMoney:$currency} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/foreach} - <tr> - <td {$labelStyle}> - {ts}Total Amount{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney:$currency} - </td> - </tr> - - {else} - - <tr> - <td {$labelStyle}> - {ts}Amount{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if} - </td> - </tr> - - {/if} - - {/if} - - - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|crmDate} - </td> - </tr> - {/if} - - {if $is_monetary and $trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction #{/ts} - </td> - <td {$valueStyle}> - {$trxn_id} - </td> - </tr> - {/if} - - {if $is_recur} - {if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} - <tr> - <td colspan="2" {$labelStyle}> - {ts 1=$cancelSubscriptionUrl}This is a recurring contribution. You can cancel future contributions by <a href="%1">visiting this web page</a>.{/ts} - </td> - {if $updateSubscriptionBillingUrl} - <tr> - </tr> - <td colspan="2" {$labelStyle}> - {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} - </td> - {/if} - <tr> - </tr> - <td colspan="2" {$labelStyle}> - {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - {/if} - {/if} - - {if $honor_block_is_active} - <tr> - <th {$headerStyle}> - {$soft_credit_type} - </th> - </tr> - {foreach from=$honoreeProfile item=value key=label} - <tr> - <td {$labelStyle}> - {$label} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/foreach} - {elseif $softCreditTypes and $softCredits} - {foreach from=$softCreditTypes item=softCreditType key=n} - <tr> - <th {$headerStyle}> - {$softCreditType} - </th> - </tr> - {foreach from=$softCredits.$n item=value key=label} - <tr> - <td {$labelStyle}> - {$label} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - {if $pcpBlock} - <tr> - <th {$headerStyle}> - {ts}Personal Campaign Page{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Display In Honor Roll{/ts} - </td> - <td {$valueStyle}> - {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} - </td> - </tr> - {if $pcp_roll_nickname} - <tr> - <td {$labelStyle}> - {ts}Nickname{/ts} - </td> - <td {$valueStyle}> - {$pcp_roll_nickname} - </td> - </tr> - {/if} - {if $pcp_personal_note} - <tr> - <td {$labelStyle}> - {ts}Personal Note{/ts} - </td> - <td {$valueStyle}> - {$pcp_personal_note} - </td> - </tr> - {/if} - {/if} - - {if $onBehalfProfile} - <tr> - <th {$headerStyle}> - {$onBehalfProfile_grouptitle} - </th> - </tr> - {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} - <tr> - <td {$labelStyle}> - {$onBehalfName} - </td> - <td {$valueStyle}> - {$onBehalfValue} - </td> - </tr> - {/foreach} - {/if} - - {if $isShare} - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=contributionUrl}{crmURL p='civicrm/contribute/transact' q="reset=1&id=`$contributionPageId`" a=true fe=1 h=1}{/capture} - {include file="CRM/common/SocialNetwork.tpl" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl} - </td> - </tr> - {/if} - - {if ! ($contributeMode eq 'notify' OR $contributeMode eq 'directIPN') and $is_monetary} - {if $is_pay_later} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$email} - </td> - </tr> - {elseif $amount GT 0} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br}<br /> - {$email} - </td> - </tr> - {/if} - {/if} - - {if $contributeMode eq 'direct' AND !$is_pay_later AND $amount GT 0} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> - </td> - </tr> - {/if} - - {if $selectPremium} - <tr> - <th {$headerStyle}> - {ts}Premium Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$labelStyle}> - {$product_name} - </td> - </tr> - {if $option} - <tr> - <td {$labelStyle}> - {ts}Option{/ts} - </td> - <td {$valueStyle}> - {$option} - </td> - </tr> - {/if} - {if $sku} - <tr> - <td {$labelStyle}> - {ts}SKU{/ts} - </td> - <td {$valueStyle}> - {$sku} - </td> - </tr> - {/if} - {if $start_date} - <tr> - <td {$labelStyle}> - {ts}Start Date{/ts} - </td> - <td {$valueStyle}> - {$start_date|crmDate} - </td> - </tr> - {/if} - {if $end_date} - <tr> - <td {$labelStyle}> - {ts}End Date{/ts} - </td> - <td {$valueStyle}> - {$end_date|crmDate} - </td> - </tr> - {/if} - {if $contact_email OR $contact_phone} - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} - <p>{$contact_email}</p> - {/if} - {if $contact_phone} - <p>{$contact_phone}</p> - {/if} - </td> - </tr> - {/if} - {if $is_deductible AND $price} - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p> - </td> - </tr> - {/if} - {/if} - - {if $customPre} - <tr> - <th {$headerStyle}> - {$customPre_grouptitle} - </th> - </tr> - {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$customValue} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $customPost} - <tr> - <th {$headerStyle}> - {$customPost_grouptitle} - </th> - </tr> - {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$customValue} - </td> - </tr> - {/if} - {/foreach} - {/if} - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_text.tpl deleted file mode 100644 index aa8fe702412db847159dad6bd2e41ac0aee38882..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/contribution_online_receipt_text.tpl +++ /dev/null @@ -1,188 +0,0 @@ -{if $receipt_text} -{$receipt_text} -{/if} -{if $is_pay_later} - -=========================================================== -{$pay_later_receipt} -=========================================================== -{else} - -{ts}Please print this receipt for your records.{/ts} -{/if} - -{if $amount} -=========================================================== -{ts}Contribution Information{/ts} - -=========================================================== -{if $lineItem and $priceSetID and !$is_quick_config} -{foreach from=$lineItem item=value key=priceset} ---------------------------------------------------------- -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_qty}{ts}Qty{/ts}{/capture} -{capture assign=ts_each}{ts}Each{/ts}{/capture} -{capture assign=ts_total}{ts}Total{/ts}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} ----------------------------------------------------------- -{foreach from=$value item=line} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {$line.line_total|crmMoney:$currency|string_format:"%10s"} -{/foreach} -{/foreach} - -{ts}Total Amount{/ts}: {$amount|crmMoney:$currency} -{else} -{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if $amount_level } - {$amount_level} {/if} -{/if} -{/if} -{if $receive_date} - -{ts}Date{/ts}: {$receive_date|crmDate} -{/if} -{if $is_monetary and $trxn_id} -{ts}Transaction #{/ts}: {$trxn_id} -{/if} - -{if $is_recur and ($contributeMode eq 'notify' or $contributeMode eq 'directIPN')} -{ts}This is a recurring contribution. You can cancel future contributions at:{/ts} - -{$cancelSubscriptionUrl} - -{if $updateSubscriptionBillingUrl} -{ts}You can update billing details for this recurring contribution at:{/ts} - -{$updateSubscriptionBillingUrl} - -{/if} -{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts} - -{$updateSubscriptionUrl} - -{/if} - -{if $honor_block_is_active} -=========================================================== -{$soft_credit_type} -=========================================================== -{foreach from=$honoreeProfile item=value key=label} -{$label}: {$value} -{/foreach} -{elseif $softCreditTypes and $softCredits} -{foreach from=$softCreditTypes item=softCreditType key=n} -=========================================================== -{$softCreditType} -=========================================================== -{foreach from=$softCredits.$n item=value key=label} -{$label}: {$value} -{/foreach} -{/foreach} -{/if} -{if $pcpBlock} -=========================================================== -{ts}Personal Campaign Page{/ts} - -=========================================================== -{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} - -{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if} - -{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} - -{/if} -{if $onBehalfProfile} -=========================================================== -{ts}On Behalf Of{/ts} - -=========================================================== -{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} -{$onBehalfName}: {$onBehalfValue} -{/foreach} -{/if} - -{if !( $contributeMode eq 'notify' OR $contributeMode eq 'directIPN' ) and $is_monetary} -{if $is_pay_later} -=========================================================== -{ts}Registered Email{/ts} - -=========================================================== -{$email} -{elseif $amount GT 0} -=========================================================== -{ts}Billing Name and Address{/ts} - -=========================================================== -{$billingName} -{$address} - -{$email} -{/if} {* End ! is_pay_later condition. *} -{/if} -{if $contributeMode eq 'direct' AND !$is_pay_later AND $amount GT 0} - -=========================================================== -{ts}Credit Card Information{/ts} - -=========================================================== -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} - -{if $selectPremium } -=========================================================== -{ts}Premium Information{/ts} - -=========================================================== -{$product_name} -{if $option} -{ts}Option{/ts}: {$option} -{/if} -{if $sku} -{ts}SKU{/ts}: {$sku} -{/if} -{if $start_date} -{ts}Start Date{/ts}: {$start_date|crmDate} -{/if} -{if $end_date} -{ts}End Date{/ts}: {$end_date|crmDate} -{/if} -{if $contact_email OR $contact_phone} - -{ts}For information about this premium, contact:{/ts} - -{if $contact_email} - {$contact_email} -{/if} -{if $contact_phone} - {$contact_phone} -{/if} -{/if} -{if $is_deductible AND $price} - -{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if} -{/if} - -{if $customPre} -=========================================================== -{$customPre_grouptitle} - -=========================================================== -{foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/if} - - -{if $customPost} -=========================================================== -{$customPost_grouptitle} - -=========================================================== -{foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_html.tpl deleted file mode 100644 index c346302e592c377871538e2a3b360c8a61b33493..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_html.tpl +++ /dev/null @@ -1,474 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} - <p>{$event.confirm_email_text|htmlize}</p> - {/if} - - {if $isOnWaitlist} - <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} - <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p> - {/if} - {elseif $isRequireApproval} - <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} - <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p> - {/if} - {elseif $is_pay_later} - <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} - {else} - <p>{ts}Please print this confirmation for your records.{/ts}</p> - {/if} - - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - - {if $event.participant_role neq 'Attendee' and $defaultRole} - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts} - </td> - <td {$valueStyle}> - {$event.participant_role} - </td> - </tr> - {/if} - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $location.address.1.name} - {$location.address.1.name}<br /> - {/if} - {if $location.address.1.street_address} - {$location.address.1.street_address}<br /> - {/if} - {if $location.address.1.supplemental_address_1} - {$location.address.1.supplemental_address_1}<br /> - {/if} - {if $location.address.1.supplemental_address_2} - {$location.address.1.supplemental_address_2}<br /> - {/if} - {if $location.address.1.city} - {$location.address.1.city} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if}<br /> - {/if} - </td> - </tr> - {/if} - - {if $location.phone.1.phone || $location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type} - {$phone.phone_type_display} - {else} - {ts}Phone{/ts} - {/if} - </td> - <td {$valueStyle}> - {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $event.is_public} - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> - </td> - </tr> - {/if} - - {if $email} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$email} - </td> - </tr> - {/if} - - - {if $event.is_monetary} - - <tr> - <th {$headerStyle}> - {$event.fee_label} - </th> - </tr> - - {if $lineItem} - {foreach from=$lineItem item=value key=priceset} - {if $value neq 'skip'} - {if $isPrimary} - {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} - <tr> - <td colspan="2" {$labelStyle}> - {ts 1=$priceset+1}Participant %1{/ts} - </td> - </tr> - {/if} - {/if} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Qty{/ts}</th> - <th>{ts}Each{/ts}</th> - <th>{ts}Total{/ts}</th> - {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if} - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.qty} - </td> - <td> - {$line.unit_price|crmMoney} - </td> - <td> - {$line.line_total|crmMoney} - </td> - {if $pricesetFieldsCount } - <td> - {$line.participant_count} - </td> - {/if} - </tr> - {/foreach} - </table> - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $amount && !$lineItem} - {foreach from=$amount item=amnt key=level} - <tr> - <td colspan="2" {$valueStyle}> - {$amnt.amount|crmMoney} {$amnt.label} - </td> - </tr> - {/foreach} - {/if} - {if $isPrimary} - <tr> - <td {$labelStyle}> - {if $balanceAmount} - {ts}Total Paid{/ts} - {else} - {ts}Total Amount{/ts} - {/if} - </td> - <td {$valueStyle}> - {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} - </td> - </tr> - {if $balanceAmount} - <tr> - <td {$labelStyle}> - {ts}Balance{/ts} - </td> - <td {$valueStyle}> - {$balanceAmount|crmMoney} - </td> - </tr> - {/if} - {if $pricesetFieldsCount } - <tr> - <td {$labelStyle}> - {ts}Total Participants{/ts}</td> - <td {$valueStyle}> - {assign var="count" value= 0} - {foreach from=$lineItem item=pcount} - {assign var="lineItemCount" value=0} - {if $pcount neq 'skip'} - {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} - {/foreach} - {if $lineItemCount < 1 } - assign var="lineItemCount" value=1} - {/if} - {assign var="count" value=$count+$lineItemCount} - {/if} - {/foreach} - {$count} - </td> - </tr> - {/if} - {if $is_pay_later} - <tr> - <td colspan="2" {$labelStyle}> - {$pay_later_receipt} - </td> - </tr> - {/if} - - {if $register_date} - <tr> - <td {$labelStyle}> - {ts}Registration Date{/ts} - </td> - <td {$valueStyle}> - {$register_date|crmDate} - </td> - </tr> - {/if} - - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Transaction Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|crmDate} - </td> - </tr> - {/if} - - {if $contributionTypeName} - <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$contributionTypeName} - </td> - </tr> - {/if} - - {if $trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction #{/ts} - </td> - <td {$valueStyle}> - {$trxn_id} - </td> - </tr> - {/if} - - {if $paidBy} - <tr> - <td {$labelStyle}> - {ts}Paid By{/ts} - </td> - <td {$valueStyle}> - {$paidBy} - </td> - </tr> - {/if} - - {if $checkNumber} - <tr> - <td {$labelStyle}> - {ts}Check Number{/ts} - </td> - <td {$valueStyle}> - {$checkNumber} - </td> - </tr> - {/if} - - {if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} - </td> - </tr> - {/if} - - {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} - </td> - </tr> - {/if} - - {/if} - - {/if} {* End of conditional section for Paid events *} - - {if $customPre} - <tr> - <th {$headerStyle}> - {$customPre_grouptitle} - </th> - </tr> - {foreach from=$customPre item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $customPost} - <tr> - <th {$headerStyle}> - {$customPost_grouptitle} - </th> - </tr> - {foreach from=$customPost item=value key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $customProfile} - {foreach from=$customProfile item=value key=customName} - <tr> - <th {$headerStyle}> - {ts 1=$customName+1}Participant Information - Participant %1{/ts} - </th> - </tr> - {foreach from=$value item=val key=field} - {if $field eq 'additionalCustomPre' or $field eq 'additionalCustomPost'} - <tr> - <td colspan="2" {$labelStyle}> - {if $field eq 'additionalCustomPre'} - {$additionalCustomPre_grouptitle} - {else} - {$additionalCustomPost_grouptitle} - {/if} - </td> - </tr> - {foreach from=$val item=v key=f} - <tr> - <td {$labelStyle}> - {$f} - </td> - <td {$valueStyle}> - {$v} - </td> - </tr> - {/foreach} - {/if} - {/foreach} - {/foreach} - {/if} - - {if $customGroup} - {foreach from=$customGroup item=value key=customName} - <tr> - <th {$headerStyle}> - {$customName} - </th> - </tr> - {foreach from=$value item=v key=n} - <tr> - <td {$labelStyle}> - {$n} - </td> - <td {$valueStyle}> - {$v} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - </table> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_text.tpl deleted file mode 100644 index fcc0a43be5bb035bfc469945663125eaf6d3f358..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_offline_receipt_text.tpl +++ /dev/null @@ -1,281 +0,0 @@ -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} -{$event.confirm_email_text} -{/if} - -{if $isOnWaitlist} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}You have been added to the WAIT LIST for this event.{/ts} - -{if $isPrimary} -{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts} - -{/if} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Your registration has been submitted.{/ts} - -{if $isPrimary} -{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts} - -{/if} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{elseif $is_pay_later} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{else} - -{ts}Please print this confirmation for your records.{/ts} -{/if} - - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Event Information and Location{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - -{if $event.participant_role neq 'Attendee' and $defaultRole} -{ts}Participant Role{/ts}: {$event.participant_role} -{/if} - -{if $isShowLocation} -{if $location.address.1.name} - -{$location.address.1.name} -{/if} -{if $location.address.1.street_address}{$location.address.1.street_address} -{/if} -{if $location.address.1.supplemental_address_1}{$location.address.1.supplemental_address_1} -{/if} -{if $location.address.1.supplemental_address_2}{$location.address.1.supplemental_address_2} -{/if} -{if $location.address.1.city}{$location.address.1.city} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $location.phone.1.phone || $location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} -{/foreach} -{foreach from=$location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} - -{if $event.is_public} -{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} -{/if} - -{if $email} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Registered Email{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$email} -{/if} -{if $event.is_monetary} {* This section for Paid events only.*} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{if $lineItem}{foreach from=$lineItem item=value key=priceset} - -{if $value neq 'skip'} -{if $isPrimary} -{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} -{ts 1=$priceset+1}Participant %1{/ts} -{/if} -{/if} ----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_qty}{ts}Qty{/ts}{/capture} -{capture assign=ts_each}{ts}Each{/ts}{/capture} -{capture assign=ts_total}{ts}Total{/ts}{/capture} -{capture assign=ts_participant_total}{if $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} {$ts_participant_total|string_format:"%10s"} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{foreach from=$value item=line} -{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney|string_format:"%10s"} {$line.line_total|crmMoney|string_format:"%10s"} {$ts_participant_count|string_format:"%10s"} -{/foreach} -{/if} -{/foreach} -{/if} -{if $amount && !$lineItem} -{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label} -{/foreach} -{/if} -{if $isPrimary} - -{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} - -{if $balanceAmount} -{ts}Balance{/ts}: {$balanceAmount|crmMoney} -{/if} - -{if $pricesetFieldsCount } - {assign var="count" value= 0} - {foreach from=$lineItem item=pcount} - {assign var="lineItemCount" value=0} - {if $pcount neq 'skip'} - {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} - {/foreach} - {if $lineItemCount < 1 } - {assign var="lineItemCount" value=1} - {/if} - {assign var="count" value=$count+$lineItemCount} - {/if} - {/foreach} - -{ts}Total Participants{/ts}: {$count} -{/if} - -{if $is_pay_later } - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{/if} - -{if $register_date} -{ts}Registration Date{/ts}: {$register_date|crmDate} -{/if} -{if $receive_date} -{ts}Transaction Date{/ts}: {$receive_date|crmDate} -{/if} -{if $contributionTypeName} -{ts}Financial Type{/ts}: {$contributionTypeName} -{/if} -{if $trxn_id} -{ts}Transaction #{/ts}: {$trxn_id} -{/if} -{if $paidBy} -{ts}Paid By{/ts}: {$paidBy} -{/if} -{if $checkNumber} -{ts}Check Number{/ts}: {$checkNumber} -{/if} -{if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Billing Name and Address{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$billingName} -{$address} -{/if} - -{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} -=========================================================== -{ts}Credit Card Information{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} -{/if} -{/if} {* End of conditional section for Paid events *} - -{if $customPre} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$customPre_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$customPre item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} -{$customName}: {$value} -{/if} -{/foreach} -{/if} - -{if $customPost} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$customPost_grouptitle} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$customPost item=value key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} -{$customName}: {$value} -{/if} -{/foreach} -{/if} -{if $customProfile} - -{foreach from=$customProfile item=value key=customName} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts 1=$customName+1}Participant Information - Participant %1{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$value item=val key=field} -{if $field eq 'additionalCustomPre' or $field eq 'additionalCustomPost' } -{if $field eq 'additionalCustomPre' } -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{$additionalCustomPre_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{else} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{$additionalCustomPost_grouptitle} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{/if} -{foreach from=$val item=v key=f} -{$f}: {$v} -{/foreach} -{/if} -{/foreach} -{/foreach} -{/if} -{if $customGroup} -{foreach from=$customGroup item=value key=customName} -=========================================================={if $pricesetFieldsCount }===================={/if} - -{$customName} -=========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$value item=v key=n} -{$n}: {$v} -{/foreach} -{/foreach} -{/if} - - diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_html.tpl deleted file mode 100644 index 70540857c2f62e9b717a29de2149bbe209d251e9..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_html.tpl +++ /dev/null @@ -1,454 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>Dear {contact.display_name},</p> - - {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} - <p>{$event.confirm_email_text|htmlize}</p> - - {else} - <p>Thank you for your participation. This letter is a confirmation that your registration has been received and your status has been updated to <strong>{if $participant_status}{$participant_status}{else}{if $isOnWaitlist}waitlisted{else}registered{/if}{/if}</strong>.</p> - - {/if} - - <p> - {if $isOnWaitlist} - <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> - {if $isPrimary} - <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p> - {/if} - {elseif $isRequireApproval} - <p>{ts}Your registration has been submitted.{/ts}</p> - {if $isPrimary} - <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p> - {/if} - {elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} - <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} - {else} - <p>{ts}Please print this confirmation for your records.{/ts}</p> - {/if} - - </td> - </tr> - <tr> - <td> - <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|date_format:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:"%A"} {$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - - - {if $conference_sessions} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Your schedule:{/ts} - </td> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {assign var='group_by_day' value='NA'} - {foreach from=$conference_sessions item=session} - {if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} - {assign var='group_by_day' value=$session.start_date} - <em>{$group_by_day|date_format:"%m/%d/%Y"}</em><br /> - {/if} - {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br /> - {if $session.location} {$session.location}<br />{/if} - {/foreach} - </td> - </tr> - {/if} - - {if $event.participant_role neq 'Attendee' and $defaultRole} - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts} - </td> - <td {$valueStyle}> - {$event.participant_role} - </td> - </tr> - {/if} - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $location.address.1.name} - {$location.address.1.name}<br /> - {/if} - {if $location.address.1.street_address} - {$location.address.1.street_address}<br /> - {/if} - {if $location.address.1.supplemental_address_1} - {$location.address.1.supplemental_address_1}<br /> - {/if} - {if $location.address.1.supplemental_address_2} - {$location.address.1.supplemental_address_2}<br /> - {/if} - {if $location.address.1.city} - {$location.address.1.city}, {$location.address.1.state_province} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if}<br /> - {/if} - </td> - </tr> - {/if} - - {if $location.phone.1.phone || $location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type} - {$phone.phone_type_display} - {else} - {ts}Phone{/ts} - {/if} - </td> - <td {$valueStyle}> - {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $event.is_public} - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> - </td> - </tr> - {/if} - - {if $event.is_share} - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=eventUrl}{crmURL p='civicrm/event/info' q="id=`$event.id`&reset=1" a=true fe=1 h=1}{/capture} - {include file="CRM/common/SocialNetwork.tpl" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl} - </td> - </tr> - {/if} - {if $payer.name} - <tr> - <th {$headerStyle}> - {ts}You were registered by:{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$payer.name} - </td> - </tr> - {/if} - {if $event.is_monetary} - - <tr> - <th {$headerStyle}> - {$event.fee_label} - </th> - </tr> - - {if $lineItem} - {foreach from=$lineItem item=value key=priceset} - {if $value neq 'skip'} - {if $isPrimary} - {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} - <tr> - <td colspan="2" {$labelStyle}> - {ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info} - </td> - </tr> - {/if} - {/if} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Qty{/ts}</th> - <th>{ts}Each{/ts}</th> - <th>{ts}Total{/ts}</th> - {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if} - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.qty} - </td> - <td> - {$line.unit_price|crmMoney:$currency} - </td> - <td> - {$line.line_total|crmMoney:$currency} - </td> - {if $pricesetFieldsCount }<td>{$line.participant_count}</td> {/if} - </tr> - {/foreach} - </table> - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $amounts && !$lineItem} - {foreach from=$amounts item=amnt key=level} - <tr> - <td colspan="2" {$valueStyle}> - {$amnt.amount|crmMoney:$currency} {$amnt.label} - </td> - </tr> - {/foreach} - {/if} - - {if $isPrimary} - <tr> - <td {$labelStyle}> - {ts}Total Amount{/ts} - </td> - <td {$valueStyle}> - {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} - </td> - </tr> - {if $pricesetFieldsCount } - <tr> - <td {$labelStyle}> - {ts}Total Participants{/ts}</td> - <td {$valueStyle}> - {assign var="count" value= 0} - {foreach from=$lineItem item=pcount} - {assign var="lineItemCount" value=0} - {if $pcount neq 'skip'} - {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} - {/foreach} - {if $lineItemCount < 1 } - {assign var="lineItemCount" value=1} - {/if} - {assign var="count" value=$count+$lineItemCount} - {/if} - {/foreach} - {$count} - </td> </tr> - {/if} - - {if $register_date} - <tr> - <td {$labelStyle}> - {ts}Registration Date{/ts} - </td> - <td {$valueStyle}> - {$register_date|crmDate} - </td> - </tr> - {/if} - - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Transaction Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|crmDate} - </td> - </tr> - {/if} - - {if $contributionTypeName} - <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$contributionTypeName} - </td> - </tr> - {/if} - - {if $trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction #{/ts} - </td> - <td {$valueStyle}> - {$trxn_id} - </td> - </tr> - {/if} - - {if $paidBy} - <tr> - <td {$labelStyle}> - {ts}Paid By{/ts} - </td> - <td {$valueStyle}> - {$paidBy} - </td> - </tr> - {/if} - - {if $checkNumber} - <tr> - <td {$labelStyle}> - {ts}Check Number{/ts} - </td> - <td {$valueStyle}> - {$checkNumber} - </td> - </tr> - {/if} - - {if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} - </td> - </tr> - {/if} - - {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} - </td> - </tr> - {/if} - - {/if} - - {/if} {* End of conditional section for Paid events *} - - -{if $customPre} -{foreach from=$customPre item=customPr key=i} - <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr> - {foreach from=$customPr item=customValue key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - <tr> - <td {$labelStyle}>{$customName}</td> - <td {$valueStyle}>{$customValue}</td> - </tr> - {/if} - {/foreach} -{/foreach} -{/if} - -{if $customPost} -{foreach from=$customPost item=customPos key=j} - <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr> - {foreach from=$customPos item=customValue key=customName} - {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - <tr> - <td {$labelStyle}>{$customName}</td> - <td {$valueStyle}>{$customValue}</td> - </tr> -{/if} -{/foreach} -{/foreach} -{/if} - -{if $customProfile} -{foreach from=$customProfile.profile item=eachParticipant key=participantID} - <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr> - {foreach from=$eachParticipant item=eachProfile key=pid} - <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr> - {foreach from=$eachProfile item=val key=field} - <tr>{foreach from=$val item=v key=f} - <td {$labelStyle}>{$field}</td> - <td {$valueStyle}>{$v}</td> - {/foreach} - </tr> - {/foreach} -{/foreach} -{/foreach} -{/if} - - {if $customGroup} - {foreach from=$customGroup item=value key=customName} - <tr> - <th {$headerStyle}> - {$customName} - </th> - </tr> - {foreach from=$value item=v key=n} - <tr> - <td {$labelStyle}> - {$n} - </td> - <td {$valueStyle}> - {$v} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - </table> - </td> - </tr> - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_text.tpl deleted file mode 100644 index d6f5c64535939e1a17808c9d795092f89c48f036..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/event_online_receipt_text.tpl +++ /dev/null @@ -1,279 +0,0 @@ -Dear {contact.display_name}, - -{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} -{$event.confirm_email_text} - -{else} -Thank you for your participation. This letter is a confirmation that your registration has been received and your status has been updated to {if $participant_status}{$participant_status}{else}{if $isOnWaitlist}waitlisted{else}registered{/if}{/if}. - -{/if} - -{if $isOnWaitlist} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}You have been added to the WAIT LIST for this event.{/ts} - -{if $isPrimary} -{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts} -{/if} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{elseif $isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Your registration has been submitted.{/ts} - -{if $isPrimary} -{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts} - -{/if} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$pay_later_receipt} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{else} - -{ts}Please print this confirmation for your records.{/ts} -{/if} - - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Event Information and Location{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$event.event_title} -{$event.event_start_date|date_format:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:"%A"} {$event.event_end_date|crmDate}{/if}{/if} -{if $conference_sessions} - - -{ts}Your schedule:{/ts} -{assign var='group_by_day' value='NA'} -{foreach from=$conference_sessions item=session} -{if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} -{assign var='group_by_day' value=$session.start_date} - -{$group_by_day|date_format:"%m/%d/%Y"} - - -{/if} -{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title} -{if $session.location} {$session.location}{/if} -{/foreach} -{/if} - -{if $event.participant_role neq 'Attendee' and $defaultRole} -{ts}Participant Role{/ts}: {$event.participant_role} -{/if} - -{if $isShowLocation} -{if $location.address.1.name} - -{$location.address.1.name} -{/if} -{if $location.address.1.street_address}{$location.address.1.street_address} -{/if} -{if $location.address.1.supplemental_address_1}{$location.address.1.supplemental_address_1} -{/if} -{if $location.address.1.supplemental_address_2}{$location.address.1.supplemental_address_2} -{/if} -{if $location.address.1.city}{$location.address.1.city}, {$location.address.1.state_province} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $location.phone.1.phone || $location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} -{/foreach} -{foreach from=$location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} - -{if $event.is_public} -{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} -{/if} - -{if $payer.name} -You were registered by: {$payer.name} -{/if} -{if $event.is_monetary} {* This section for Paid events only.*} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$event.fee_label} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{if $lineItem}{foreach from=$lineItem item=value key=priceset} - -{if $value neq 'skip'} -{if $isPrimary} -{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} -{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info} - -{/if} -{/if} ------------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_qty}{ts}Qty{/ts}{/capture} -{capture assign=ts_each}{ts}Each{/ts}{/capture} -{capture assign=ts_total}{ts}Total{/ts}{/capture} -{if $pricesetFieldsCount }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if} -{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} {$ts_participant_total|string_format:"%10s"} ------------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{foreach from=$value item=line} -{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {$line.line_total|crmMoney:$currency|string_format:"%10s"}{$ts_participant_count|string_format:"%10s"} -{/foreach} -{/if} -{/foreach} -{/if} -{if $amounts && !$lineItem} -{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label} -{/foreach} -{/if} -{if $isPrimary } - -{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} - -{if $pricesetFieldsCount } - {assign var="count" value= 0} - {foreach from=$lineItem item=pcount} - {assign var="lineItemCount" value=0} - {if $pcount neq 'skip'} - {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} - {/foreach} - {if $lineItemCount < 1 } - {assign var="lineItemCount" value=1} - {/if} - {assign var="count" value=$count+$lineItemCount} - {/if} - {/foreach} - -{ts}Total Participants{/ts}: {$count} -{/if} - -{if $register_date} -{ts}Registration Date{/ts}: {$register_date|crmDate} -{/if} -{if $receive_date} -{ts}Transaction Date{/ts}: {$receive_date|crmDate} -{/if} -{if $contributionTypeName} -{ts}Financial Type{/ts}: {$contributionTypeName} -{/if} -{if $trxn_id} -{ts}Transaction #{/ts}: {$trxn_id} -{/if} -{if $paidBy} -{ts}Paid By{/ts}: {$paidBy} -{/if} -{if $checkNumber} -{ts}Check Number{/ts}: {$checkNumber} -{/if} -{if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Billing Name and Address{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$billingName} -{$address} -{/if} - -{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts}Credit Card Information{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} -{/if} -{/if} {* End of conditional section for Paid events *} - -{if $customPre} -{foreach from=$customPre item=customPr key=i} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$customPre_grouptitle.$i} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$customPr item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/foreach} -{/if} - -{if $customPost} -{foreach from=$customPost item=customPos key=j} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{$customPost_grouptitle.$j} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$customPos item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/foreach} -{/if} -{if $customProfile} - -{foreach from=$customProfile.profile item=eachParticipant key=participantID} -==========================================================={if $pricesetFieldsCount }===================={/if} - -{ts 1=$participantID+2}Participant Information - Participant %1{/ts} - -==========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$eachParticipant item=eachProfile key=pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{$customProfile.title.$pid} -----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} - -{foreach from=$eachProfile item=val key=field} -{foreach from=$val item=v key=f} -{$field}: {$v} -{/foreach} -{/foreach} -{/foreach} -{/foreach} -{/if} -{if $customGroup} -{foreach from=$customGroup item=value key=customName} -=========================================================={if $pricesetFieldsCount }===================={/if} - -{$customName} -=========================================================={if $pricesetFieldsCount }===================={/if} - -{foreach from=$value item=v key=n} -{$n}: {$v} -{/foreach} -{/foreach} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_html.tpl deleted file mode 100644 index af216f8956717aac5f393e4161d26c98124b7209..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_html.tpl +++ /dev/null @@ -1,509 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - - {if $receipt_text} - <p>{$receipt_text|htmlize}</p> - {/if} - - {if $is_pay_later} - <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} - {else} - <p>{ts}Please print this confirmation for your records.{/ts}</p> - {/if} - - </td> - </tr> - </table> - <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> - - {if $membership_assign && !$useForMember} - <tr> - <th {$headerStyle}> - {ts}Membership Information{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Membership Type{/ts} - </td> - <td {$valueStyle}> - {$membership_name} - </td> - </tr> - {if $mem_start_date} - <tr> - <td {$labelStyle}> - {ts}Membership Start Date{/ts} - </td> - <td {$valueStyle}> - {$mem_start_date|crmDate} - </td> - </tr> - {/if} - {if $mem_end_date} - <tr> - <td {$labelStyle}> - {ts}Membership End Date{/ts} - </td> - <td {$valueStyle}> - {$mem_end_date|crmDate} - </td> - </tr> - {/if} - {/if} - - - {if $amount} - <tr> - <th {$headerStyle}> - {ts}Membership Fee{/ts} - </th> - </tr> - - {if !$useForMember and $membership_amount and $is_quick_config} - - <tr> - <td {$labelStyle}> - {ts 1=$membership_name}%1 Membership{/ts} - </td> - <td {$valueStyle}> - {$membership_amount|crmMoney} - </td> - </tr> - {if $amount} - {if ! $is_separate_payment } - <tr> - <td {$labelStyle}> - {ts}Contribution Amount{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney} - </td> - </tr> - {else} - <tr> - <td {$labelStyle}> - {ts}Additional Contribution{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney} - </td> - </tr> - {/if} - {/if} - <tr> - <td {$labelStyle}> - {ts}Total{/ts} - </td> - <td {$valueStyle}> - {$amount+$membership_amount|crmMoney} - </td> - </tr> - - {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config} - - {foreach from=$lineItem item=value key=priceset} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Qty{/ts}</th> - <th>{ts}Each{/ts}</th> - <th>{ts}Total{/ts}</th> - </tr> - {foreach from=$value item=line} - <tr> - <td> - {$line.description|truncate:30:"..."} - </td> - <td> - {$line.qty} - </td> - <td> - {$line.unit_price|crmMoney} - </td> - <td> - {$line.line_total|crmMoney} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/foreach} - <tr> - <td {$labelStyle}> - {ts}Total Amount{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney} - </td> - </tr> - - {else} - {if $useForMember && $lineItem and !$is_quick_config} - {foreach from=$lineItem item=value key=priceset} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Fee{/ts}</th> - <th>{ts}Membership Start Date{/ts}</th> - <th>{ts}Membership End Date{/ts}</th> - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.line_total|crmMoney} - </td> - <td> - {$line.start_date} - </td> - <td> - {$line.end_date} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/foreach} - {/if} - <tr> - <td {$labelStyle}> - {ts}Amount{/ts} - </td> - <td {$valueStyle}> - {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if} - </td> - </tr> - - {/if} - - - {elseif $membership_amount} - - - <tr> - <th {$headerStyle}> - {ts}Membership Fee{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts 1=$membership_name}%1 Membership{/ts} - </td> - <td {$valueStyle}> - {$membership_amount|crmMoney} - </td> - </tr> - - - {/if} - - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|crmDate} - </td> - </tr> - {/if} - - {if $is_monetary and $trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction #{/ts} - </td> - <td {$valueStyle}> - {$trxn_id} - </td> - </tr> - {/if} - - {if $membership_trx_id} - <tr> - <td {$labelStyle}> - {ts}Membership Transaction #{/ts} - </td> - <td {$valueStyle}> - {$membership_trx_id} - </td> - </tr> - {/if} - {if $is_recur} - {if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} - <tr> - <td colspan="2" {$labelStyle}> - {ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - <tr> - <td colspan="2" {$labelStyle}> - {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} - </td> - </tr> - {/if} - {/if} - - {if $honor_block_is_active} - <tr> - <th {$headerStyle}> - {$soft_credit_type} - </th> - </tr> - {foreach from=$honoreeProfile item=value key=label} - <tr> - <td {$labelStyle}> - {$label} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/foreach} - {/if} - - {if $pcpBlock} - <tr> - <th {$headerStyle}> - {ts}Personal Campaign Page{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Display In Honor Roll{/ts} - </td> - <td {$valueStyle}> - {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} - </td> - </tr> - {if $pcp_roll_nickname} - <tr> - <td {$labelStyle}> - {ts}Nickname{/ts} - </td> - <td {$valueStyle}> - {$pcp_roll_nickname} - </td> - </tr> - {/if} - {if $pcp_personal_note} - <tr> - <td {$labelStyle}> - {ts}Personal Note{/ts} - </td> - <td {$valueStyle}> - {$pcp_personal_note} - </td> - </tr> - {/if} - {/if} - - {if $onBehalfProfile} - <tr> - <th {$headerStyle}> - {$onBehalfProfile_grouptitle} - </th> - </tr> - {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} - <tr> - <td {$labelStyle}> - {$onBehalfName} - </td> - <td {$valueStyle}> - {$onBehalfValue} - </td> - </tr> - {/foreach} - {/if} - - {if ! ($contributeMode eq 'notify' OR $contributeMode eq 'directIPN') and $is_monetary} - {if $is_pay_later} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$email} - </td> - </tr> - {elseif $amount GT 0 OR $membership_amount GT 0} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br}<br /> - {$email} - </td> - </tr> - {/if} - {/if} - - {if $contributeMode eq 'direct' AND !$is_pay_later AND ($amount GT 0 OR $membership_amount GT 0)} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> - </td> - </tr> - {/if} - - {if $selectPremium} - <tr> - <th {$headerStyle}> - {ts}Premium Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$labelStyle}> - {$product_name} - </td> - </tr> - {if $option} - <tr> - <td {$labelStyle}> - {ts}Option{/ts} - </td> - <td {$valueStyle}> - {$option} - </td> - </tr> - {/if} - {if $sku} - <tr> - <td {$labelStyle}> - {ts}SKU{/ts} - </td> - <td {$valueStyle}> - {$sku} - </td> - </tr> - {/if} - {if $start_date} - <tr> - <td {$labelStyle}> - {ts}Start Date{/ts} - </td> - <td {$valueStyle}> - {$start_date|crmDate} - </td> - </tr> - {/if} - {if $end_date} - <tr> - <td {$labelStyle}> - {ts}End Date{/ts} - </td> - <td {$valueStyle}> - {$end_date|crmDate} - </td> - </tr> - {/if} - {if $contact_email OR $contact_phone} - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts}For information about this premium, contact:{/ts}</p> - {if $contact_email} - <p>{$contact_email}</p> - {/if} - {if $contact_phone} - <p>{$contact_phone}</p> - {/if} - </td> - </tr> - {/if} - {if $is_deductible AND $price} - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p> - </td> - </tr> - {/if} - {/if} - - {if $customPre} - <tr> - <th {$headerStyle}> - {$customPre_grouptitle} - </th> - </tr> - {foreach from=$customPre item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$customValue} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $customPost} - <tr> - <th {$headerStyle}> - {$customPost_grouptitle} - </th> - </tr> - {foreach from=$customPost item=customValue key=customName} - {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$customValue} - </td> - </tr> - {/if} - {/foreach} - {/if} - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_text.tpl deleted file mode 100644 index 481eaf84a6caa390a16c7104654dc141a3568b34..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/membership_online_receipt_text.tpl +++ /dev/null @@ -1,220 +0,0 @@ -{if $receipt_text} -{$receipt_text} -{/if} -{if $is_pay_later} - -=========================================================== -{$pay_later_receipt} -=========================================================== -{else} - -{ts}Please print this receipt for your records.{/ts} -{/if} - -{if $membership_assign && !$useForMember} -=========================================================== -{ts}Membership Information{/ts} - -=========================================================== -{ts}Membership Type{/ts}: {$membership_name} -{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate} -{/if} -{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate} -{/if} - -{/if} -{if $amount} -=========================================================== -{ts}Membership Fee{/ts} - -=========================================================== -{if !$useForMember && $membership_amount && $is_quick_config} -{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} -{if $amount} -{if ! $is_separate_payment } -{ts}Contribution Amount{/ts}: {$amount|crmMoney} -{else} -{ts}Additional Contribution{/ts}: {$amount|crmMoney} -{/if} -{/if} -------------------------------------------- -{ts}Total{/ts}: {$amount+$membership_amount|crmMoney} -{elseif !$useForMember && $lineItem and $priceSetID & !$is_quick_config} -{foreach from=$lineItem item=value key=priceset} ---------------------------------------------------------- -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_qty}{ts}Qty{/ts}{/capture} -{capture assign=ts_each}{ts}Each{/ts}{/capture} -{capture assign=ts_total}{ts}Total{/ts}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} ----------------------------------------------------------- -{foreach from=$value item=line} -{$line.description|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney|string_format:"%10s"} {$line.line_total|crmMoney|string_format:"%10s"} -{/foreach} -{/foreach} - -{ts}Total Amount{/ts}: {$amount|crmMoney} -{else} -{if $useForMember && $lineItem && !$is_quick_config} -{foreach from=$lineItem item=value key=priceset} -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_total}{ts}Fee{/ts}{/capture} -{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture} -{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {$ts_start_date|string_format:"%20s"} {$ts_end_date|string_format:"%20s"} --------------------------------------------------------------------------------------------------- - -{foreach from=$value item=line} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.line_total|crmMoney|string_format:"%10s"} {$line.start_date|string_format:"%20s"} {$line.end_date|string_format:"%20s"} -{/foreach} -{/foreach} --------------------------------------------------------------------------------------------------- -{/if} -{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if} -{/if} -{elseif $membership_amount} -=========================================================== -{ts}Membership Fee{/ts} - -=========================================================== -{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} -{/if} - -{if $receive_date} - -{ts}Date{/ts}: {$receive_date|crmDate} -{/if} -{if $is_monetary and $trxn_id} -{ts}Transaction #{/ts}: {$trxn_id} - -{/if} -{if $membership_trx_id} -{ts}Membership Transaction #{/ts}: {$membership_trx_id} - -{/if} -{if $is_recur} -{if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} -{ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by visiting this web page: %1.{/ts} - -{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} -{/if} -{/if} - -{if $honor_block_is_active } -=========================================================== -{$soft_credit_type} -=========================================================== -{foreach from=$honoreeProfile item=value key=label} -{$label}: {$value} -{/foreach} - -{/if} -{if $pcpBlock} -=========================================================== -{ts}Personal Campaign Page{/ts} - -=========================================================== -{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} - -{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if} - -{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} - -{/if} -{if $onBehalfProfile} -=========================================================== -{ts}On Behalf Of{/ts} - -=========================================================== -{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} -{$onBehalfName}: {$onBehalfValue} -{/foreach} -{/if} - -{if !( $contributeMode eq 'notify' OR $contributeMode eq 'directIPN' ) and $is_monetary} -{if $is_pay_later} -=========================================================== -{ts}Registered Email{/ts} - -=========================================================== -{$email} -{elseif $amount GT 0 OR $membership_amount GT 0 } -=========================================================== -{ts}Billing Name and Address{/ts} - -=========================================================== -{$billingName} -{$address} - -{$email} -{/if} {* End ! is_pay_later condition. *} -{/if} -{if $contributeMode eq 'direct' AND !$is_pay_later AND ( $amount GT 0 OR $membership_amount GT 0 ) } - -=========================================================== -{ts}Credit Card Information{/ts} - -=========================================================== -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} - -{if $selectPremium } -=========================================================== -{ts}Premium Information{/ts} - -=========================================================== -{$product_name} -{if $option} -{ts}Option{/ts}: {$option} -{/if} -{if $sku} -{ts}SKU{/ts}: {$sku} -{/if} -{if $start_date} -{ts}Start Date{/ts}: {$start_date|crmDate} -{/if} -{if $end_date} -{ts}End Date{/ts}: {$end_date|crmDate} -{/if} -{if $contact_email OR $contact_phone} - -{ts}For information about this premium, contact:{/ts} - -{if $contact_email} - {$contact_email} -{/if} -{if $contact_phone} - {$contact_phone} -{/if} -{/if} -{if $is_deductible AND $price} - -{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if} -{/if} - -{if $customPre} -=========================================================== -{$customPre_grouptitle} - -=========================================================== -{foreach from=$customPre item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/if} - - -{if $customPost} -=========================================================== -{$customPost_grouptitle} - -=========================================================== -{foreach from=$customPost item=customValue key=customName} -{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} - {$customName}: {$customValue} -{/if} -{/foreach} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_html.tpl deleted file mode 100644 index d7af3a78595f3326dbc0127b31da7f4d343b1a70..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_html.tpl +++ /dev/null @@ -1,146 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> - <p>{ts}Your Event Registration has been cancelled.{/ts}</p> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts}: - </td> - <td {$valueStyle}> - {$participant.role} - </td> - </tr> - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $event.location.address.1.name} - {$event.location.address.1.name}<br /> - {/if} - {if $event.location.address.1.street_address} - {$event.location.address.1.street_address}<br /> - {/if} - {if $event.location.address.1.supplemental_address_1} - {$event.location.address.1.supplemental_address_1}<br /> - {/if} - {if $event.location.address.1.supplemental_address_2} - {$event.location.address.1.supplemental_address_2}<br /> - {/if} - {if $event.location.address.1.city} - {$event.location.address.1.city} {$event.location.address.1.postal_code} - {if $event.location.address.1.postal_code_suffix} - - {$event.location.address.1.postal_code_suffix} - {/if} - {/if} - </td> - </tr> - {/if} - - {if $event.location.phone.1.phone || $event.location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$event.location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} - </td> - <td {$valueStyle}> - {$phone.phone} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$event.location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $contact.email} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$contact.email} - </td> - </tr> - {/if} - - {if $register_date} - <tr> - <td {$labelStyle}> - {ts}Registration Date{/ts} - </td> - <td {$valueStyle}> - {$participant.register_date|crmDate} - </td> - </tr> - {/if} - - </table> - </td> - </tr> - - <tr> - <td> - <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_text.tpl deleted file mode 100644 index f79abd2c02b879874df2ba6af0c5196a5f6b6341..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_cancelled_text.tpl +++ /dev/null @@ -1,59 +0,0 @@ -{ts 1=$contact.display_name}Dear %1{/ts}, - -{ts}Your Event Registration has been cancelled.{/ts} - - -=========================================================== -{ts}Event Information and Location{/ts} - -=========================================================== -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - -{ts}Participant Role{/ts}: {$participant.role} - -{if $isShowLocation} -{if $event.location.address.1.name} - -{$event.location.address.1.name} -{/if} -{if $event.location.address.1.street_address}{$event.location.address.1.street_address} -{/if} -{if $event.location.address.1.supplemental_address_1}{$event.location.address.1.supplemental_address_1} -{/if} -{if $event.location.address.1.supplemental_address_2}{$event.location.address.1.supplemental_address_2} -{/if} -{if $event.location.address.1.city}{$event.location.address.1.city} {$event.location.address.1.postal_code}{if $event.location.address.1.postal_code_suffix} - {$event.location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $event.location.phone.1.phone || $event.location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$event.location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} -{/foreach} -{foreach from=$event.location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} - -{if $contact.email} - -=========================================================== -{ts}Registered Email{/ts} - -=========================================================== -{$contact.email} -{/if} - -{if $register_date} -{ts}Registration Date{/ts}: {$participant.register_date|crmDate} -{/if} - -{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} - diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_html.tpl deleted file mode 100644 index b1a5aa349c3a9e9fba18641068784d91c32bb2a1..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_html.tpl +++ /dev/null @@ -1,187 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> - </td> - </tr> - {if !$isAdditional and $participant.id} - <tr> - <th {$headerStyle}> - {ts}Confirm Your Registration{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=confirmUrl}{crmURL p='civicrm/event/confirm' q="reset=1&participantId=`$participant.id`&cs=`$checksumValue`" a=true h=0 fe=1}{/capture} - <a href="{$confirmUrl}">Go to a web page where you can confirm your registration online</a> - </td> - </tr> - {/if} - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - {if $conference_sessions} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Your schedule:{/ts} - </td> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {assign var='group_by_day' value='NA'} - {foreach from=$conference_sessions item=session} - {if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} - {assign var='group_by_day' value=$session.start_date} - <em>{$group_by_day|date_format:"%m/%d/%Y"}</em><br /> - {/if} - {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br /> - {if $session.location} {$session.location}<br />{/if} - {/foreach} - </td> - </tr> - {/if} - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts}: - </td> - <td {$valueStyle}> - {$participant.role} - </td> - </tr> - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $event.location.address.1.name} - {$event.location.address.1.name}<br /> - {/if} - {if $event.location.address.1.street_address} - {$event.location.address.1.street_address}<br /> - {/if} - {if $event.location.address.1.supplemental_address_1} - {$event.location.address.1.supplemental_address_1}<br /> - {/if} - {if $event.location.address.1.supplemental_address_2} - {$event.location.address.1.supplemental_address_2}<br /> - {/if} - {if $event.location.address.1.city} - {$event.location.address.1.city} {$event.location.address.1.postal_code} - {if $event.location.address.1.postal_code_suffix} - - {$event.location.address.1.postal_code_suffix} - {/if} - {/if} - </td> - </tr> - {/if} - - {if $event.location.phone.1.phone || $event.location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$event.location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} - </td> - <td {$valueStyle}> - {$phone.phone} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$event.location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $event.is_public} - <tr> - <td colspan="2" {$valueStyle}> - {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} - <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> - </td> - </tr> - {/if} - - {if $contact.email} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$contact.email} - </td> - </tr> - {/if} - - {if $register_date} - <tr> - <td {$labelStyle}> - {ts}Registration Date{/ts} - </td> - <td {$valueStyle}> - {$participant.register_date|crmDate} - </td> - </tr> - {/if} - - </table> - </td> - </tr> - - <tr> - <td> - <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_text.tpl deleted file mode 100644 index 73d15a6f1bb6228ad9425fc6d571b806ec21bb50..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_confirm_text.tpl +++ /dev/null @@ -1,89 +0,0 @@ -{ts 1=$contact.display_name}Dear %1{/ts}, -{if !$isAdditional and $participant.id} - -=========================================================== -{ts}Confirm Your Registration{/ts} - -=========================================================== -{capture assign=confirmUrl}{crmURL p='civicrm/event/confirm' q="reset=1&participantId=`$participant.id`&cs=`$checksumValue`" a=true h=0 fe=1}{/capture} -Click this link to go to a web page where you can confirm your registration online: -{$confirmUrl} -{/if} - -=========================================================== -{ts}Event Information and Location{/ts} - -=========================================================== -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} -{if $conference_sessions} - - -{ts}Your schedule:{/ts} -{assign var='group_by_day' value='NA'} -{foreach from=$conference_sessions item=session} -{if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} -{assign var='group_by_day' value=$session.start_date} - -{$group_by_day|date_format:"%m/%d/%Y"} - - -{/if} -{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title} -{if $session.location} {$session.location}{/if} -{/foreach} -{/if} - - -{ts}Participant Role{/ts}: {$participant.role} - -{if $isShowLocation} -{if $event.location.address.1.name} - -{$event.location.address.1.name} -{/if} -{if $event.location.address.1.street_address}{$event.location.address.1.street_address} -{/if} -{if $event.location.address.1.supplemental_address_1}{$event.location.address.1.supplemental_address_1} -{/if} -{if $event.location.address.1.supplemental_address_2}{$event.location.address.1.supplemental_address_2} -{/if} -{if $event.location.address.1.city}{$event.location.address.1.city} {$event.location.address.1.postal_code}{if $event.location.address.1.postal_code_suffix} - {$event.location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $event.location.phone.1.phone || $event.location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$event.location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} -{/foreach} -{foreach from=$event.location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} - -{if $event.is_public} -{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} -{ts}Download iCalendar File:{/ts} {$icalFeed} -{/if} - -{if $contact.email} - -=========================================================== -{ts}Registered Email{/ts} - -=========================================================== -{$contact.email} -{/if} - -{if $register_date} -{ts}Registration Date{/ts}: {$participant.register_date|crmDate} -{/if} - -{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} - diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_html.tpl deleted file mode 100644 index ca2621f9e5cec7bdb69d51b9fb55c1e222fb2d69..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_html.tpl +++ /dev/null @@ -1,149 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> - <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired -because you did not confirm your registration.{/ts}</p> - <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions -or want to inquire about reinstating your registration for this event.{/ts}</p> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts}: - </td> - <td {$valueStyle}> - {$participant.role} - </td> - </tr> - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $event.location.address.1.name} - {$event.location.address.1.name}<br /> - {/if} - {if $event.location.address.1.street_address} - {$event.location.address.1.street_address}<br /> - {/if} - {if $event.location.address.1.supplemental_address_1} - {$event.location.address.1.supplemental_address_1}<br /> - {/if} - {if $event.location.address.1.supplemental_address_2} - {$event.location.address.1.supplemental_address_2}<br /> - {/if} - {if $event.location.address.1.city} - {$event.location.address.1.city} {$event.location.address.1.postal_code} - {if $event.location.address.1.postal_code_suffix} - - {$event.location.address.1.postal_code_suffix} - {/if} - {/if} - </td> - </tr> - {/if} - - {if $event.location.phone.1.phone || $event.location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$event.location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} - </td> - <td {$valueStyle}> - {$phone.phone} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$event.location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} - - {if $contact.email} - <tr> - <th {$headerStyle}> - {ts}Registered Email{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$contact.email} - </td> - </tr> - {/if} - - {if $register_date} - <tr> - <td {$labelStyle}> - {ts}Registration Date{/ts} - </td> - <td {$valueStyle}> - {$participant.register_date|crmDate} - </td> - </tr> - {/if} - - </table> - </td> - </tr> - - <tr> - <td> - <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_text.tpl deleted file mode 100644 index 534c1c6578fcd90785d902e2b07e6ce419060325..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/participant_expired_text.tpl +++ /dev/null @@ -1,63 +0,0 @@ -{ts 1=$contact.display_name}Dear %1{/ts}, - -{ts 1=$event.event_title}Your pending event registration for %1 has expired -because you did not confirm your registration.{/ts} - - -{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions -or want to inquire about reinstating your registration for this event.{/ts} - -=========================================================== -{ts}Event Information and Location{/ts} - -=========================================================== -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - -{ts}Participant Role{/ts}: {$participant.role} - -{if $isShowLocation} -{if $event.location.address.1.name} - -{$event.location.address.1.name} -{/if} -{if $event.location.address.1.street_address}{$event.location.address.1.street_address} -{/if} -{if $event.location.address.1.supplemental_address_1}{$event.location.address.1.supplemental_address_1} -{/if} -{if $event.location.address.1.supplemental_address_2}{$event.location.address.1.supplemental_address_2} -{/if} -{if $event.location.address.1.city}{$event.location.address.1.city} {$event.location.address.1.postal_code}{if $event.location.address.1.postal_code_suffix} - {$event.location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $event.location.phone.1.phone || $event.location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$event.location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} -{/foreach} -{foreach from=$event.location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} - -{if $contact.email} - -=========================================================== -{ts}Registered Email{/ts} - -=========================================================== -{$contact.email} -{/if} - -{if $register_date} -{ts}Registration Date{/ts}: {$participant.register_date|crmDate} -{/if} - -{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} - diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_html.tpl deleted file mode 100644 index 56d344d311144caa7783168e81002f3553c2f0b8..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_html.tpl +++ /dev/null @@ -1,269 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} -{capture assign=emptyBlockStyle }style="padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;"{/capture} -{capture assign=emptyBlockValueStyle }style="padding: 10px; border-bottom: 1px solid #999;"{/capture} - -<p>Dear {$contactDisplayName}</p> -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - {if $paymentConfig.confirm_email_text} - <p>{$paymentConfig.confirm_email_text|htmlize}</p> - {elseif $isRefund} - <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p> - {else} - <p>{ts}A payment has been received.{/ts}</p> - {/if} - <p>{ts}Please print this confirmation for your records.{/ts}</p> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $isRefund} - <tr> - <th {$headerStyle}>{ts}Refund Details{/ts}</th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Total Fees{/ts} - </td> - <td {$valueStyle}> - {$totalAmount|crmMoney} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}You Paid{/ts} - </td> - <td {$valueStyle}> - {$totalPaid|crmMoney} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Refund Amount{/ts} - </td> - <td {$valueStyle}> - {$refundAmount|crmMoney} - <td> - </tr> - {else} - <tr> - <th {$headerStyle}>{ts}Payment Details{/ts}</th> - </tr> - <tr> - <td {$labelStyle}> - {ts}{if $component eq 'event'}Total Fees{/if}{/ts} - </td> - <td {$valueStyle}> - {$totalAmount|crmMoney} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}This Payment Amount{/ts} - </td> - <td {$valueStyle}> - {$paymentAmount|crmMoney} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Balance Owed{/ts} - </td> - <td {$valueStyle}> - {$amountOwed|crmMoney} - </td> {* This will be zero after final payment. *} - </tr> - <tr> <td {$emptyBlockStyle}></td> - <td {$emptyBlockValueStyle}></td></tr> - {if $paymentsComplete} - <tr> - <td colspan='2' {$valueStyle}> - {ts}Thank-you. This completes your payment for {if $component eq 'event'}{$event.event_title}{/if}.{/ts} - </td> - </tr> - {/if} - {/if} - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Transaction Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|crmDate} - </td> - </tr> - {/if} - {if $trxn_id} - <tr> - <td {$labelStyle}> - {ts}Transaction #{/ts} - </td> - <td {$valueStyle}> - {$trxn_id} - </td> - </tr> - {/if} - {if $paidBy} - <tr> - <td {$labelStyle}> - {ts}Paid By{/ts} - </td> - <td {$valueStyle}> - {$paidBy} - </td> - </tr> - {/if} - {if $checkNumber} - <tr> - <td {$labelStyle}> - {ts}Check Number{/ts} - </td> - <td {$valueStyle}> - {$checkNumber} - </td> - </tr> - {/if} - </table> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if $contributeMode eq 'direct' and !$isAmountzero} - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$billingName}<br /> - {$address|nl2br} - </td> - </tr> - {/if} - {if $contributeMode eq'direct' and !$isAmountzero} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number}<br /> - {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:''|crmDate} - </td> - </tr> - {/if} - {if $component eq 'event'} - <tr> - <th {$headerStyle}> - {ts}Event Information and Location{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - {$event.event_title}<br /> - {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - </td> - </tr> - - {if $event.participant_role neq 'Attendee' and $defaultRole} - <tr> - <td {$labelStyle}> - {ts}Participant Role{/ts} - </td> - <td {$valueStyle}> - {$event.participant_role} - </td> - </tr> - {/if} - - {if $isShowLocation} - <tr> - <td colspan="2" {$valueStyle}> - {if $location.address.1.name} - {$location.address.1.name}<br /> - {/if} - {if $location.address.1.street_address} - {$location.address.1.street_address}<br /> - {/if} - {if $location.address.1.supplemental_address_1} - {$location.address.1.supplemental_address_1}<br /> - {/if} - {if $location.address.1.supplemental_address_2} - {$location.address.1.supplemental_address_2}<br /> - {/if} - {if $location.address.1.city} - {$location.address.1.city} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if}<br /> - {/if} - </td> - </tr> - {/if} - - {if $location.phone.1.phone || $location.email.1.email} - <tr> - <td colspan="2" {$labelStyle}> - {ts}Event Contacts:{/ts} - </td> - </tr> - {foreach from=$location.phone item=phone} - {if $phone.phone} - <tr> - <td {$labelStyle}> - {if $phone.phone_type} - {$phone.phone_type_display} - {else} - {ts}Phone{/ts} - {/if} - </td> - <td {$valueStyle}> - {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} - </td> - </tr> - {/if} - {/foreach} - {foreach from=$location.email item=eventEmail} - {if $eventEmail.email} - <tr> - <td {$labelStyle}> - {ts}Email{/ts} - </td> - <td {$valueStyle}> - {$eventEmail.email} - </td> - </tr> - {/if} - {/foreach} - {/if} {*phone block close*} - {/if} - </table> - </td> - </tr> - - </table> - </center> - - </body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_subject.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_subject.tpl deleted file mode 100644 index 3849cf8dfd1dff346682c052855aaf93a791f800..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_subject.tpl +++ /dev/null @@ -1 +0,0 @@ -{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if} - {if $component eq 'event'}{$event.title}{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_text.tpl deleted file mode 100644 index 35a37f5e5f7ed12b6ee15a67bcf4c3007e43a334..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/payment_or_refund_notification_text.tpl +++ /dev/null @@ -1,116 +0,0 @@ -Dear {$contactDisplayName} -{if $paymentConfig.confirm_email_text} -{$paymentConfig.confirm_email_text} -{elseif $isRefund} -{ts}A refund has been issued based on changes in your registration selections.{/ts} -{else} -{ts}A payment has been received.{/ts} -{/if} - -{ts}Please print this confirmation for your records.{/ts} - -{if $isRefund} -=============================================================================== - -{ts}Refund Details{/ts} - -=============================================================================== -{ts}Total Fees{/ts}: {$totalAmount|crmMoney} -{ts}You Paid{/ts}: {$totalPaid|crmMoney} ------------------------------------------------------------------------------------- -{ts}Refund Amount{/ts}: {$refundAmount|crmMoney} - -{else} -=============================================================================== - -{ts}Payment Details{/ts} - -=============================================================================== -{ts}Total Fees{/ts}: {$totalAmount|crmMoney} -{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney} ------------------------------------------------------------------------------------- -{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *} - -{if $paymentsComplete} - -{ts}Thank-you. This completes your payment for {/ts}{if $component eq 'event'}{$event.event_title}{/if}. -{/if} -{/if} -{if $receive_date} -{ts}Transaction Date{/ts}: {$receive_date|crmDate} -{/if} -{if $trxn_id} -{ts}Transaction #{/ts}: {$trxn_id} -{/if} -{if $paidBy} -{ts}Paid By{/ts}: {$paidBy} -{/if} -{if $checkNumber} -{ts}Check Number{/ts}: {$checkNumber} -{/if} -{if $contributeMode eq 'direct' and !$isAmountzero} - -=============================================================================== - -{ts}Billing Name and Address{/ts} - -=============================================================================== - -{$billingName} -{$address} -{/if} - -{if $contributeMode eq 'direct' and !$isAmountzero} -=========================================================== -{ts}Credit Card Information{/ts} - -=============================================================================== - -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} -{if $component eq 'event'} -=============================================================================== - -{ts}Event Information and Location{/ts} - -=============================================================================== - -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} - -{if $event.participant_role neq 'Attendee' and $defaultRole} -{ts}Participant Role{/ts}: {$event.participant_role} -{/if} - -{if $isShowLocation} -{if $location.address.1.name} - -{$location.address.1.name} -{/if} -{if $location.address.1.street_address}{$location.address.1.street_address} -{/if} -{if $location.address.1.supplemental_address_1}{$location.address.1.supplemental_address_1} -{/if} -{if $location.address.1.supplemental_address_2}{$location.address.1.supplemental_address_2} -{/if} -{if $location.address.1.city}{$location.address.1.city} {$location.address.1.postal_code}{if $location.address.1.postal_code_suffix} - {$location.address.1.postal_code_suffix}{/if} -{/if} - -{/if}{*End of isShowLocation condition*} - -{if $location.phone.1.phone || $location.email.1.email} - -{ts}Event Contacts:{/ts} -{foreach from=$location.phone item=phone} -{if $phone.phone} - -{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} -{/foreach} -{foreach from=$location.email item=eventEmail} -{if $eventEmail.email} - -{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} -{/if} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_html.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_html.tpl deleted file mode 100644 index c0727c407892d75ab4c4dfead936aef9c7d44f96..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_html.tpl +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - <p>{ts 1=$contact.display_name}dear %1{/ts},</p> - <p>{ts}thank you for your generous pledge. please print this acknowledgment for your records.{/ts}</p> - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Pledge Information{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Pledge Received{/ts} - </td> - <td {$valueStyle}> - {$create_date|truncate:10:''|crmDate} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Total Pledge Amount{/ts} - </td> - <td {$valueStyle}> - {$total_pledge_amount|crmMoney:$currency} - </td> - </tr> - <tr> - <th {$headerStyle}> - {ts}Payment Schedule{/ts} - </th> - </tr> - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p> - - {if $frequency_day} - <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p> - {/if} - </td> - </tr> - - {if $payments} - {assign var="count" value="1"} - {foreach from=$payments item=payment} - <tr> - <td {$labelStyle}> - {ts 1=$count}Payment %1{/ts} - </td> - <td {$valueStyle}> - {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:''|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:''|crmDate}{/if} - </td> - </tr> - {assign var="count" value=`$count+1`} - {/foreach} - {/if} - - <tr> - <td colspan="2" {$valueStyle}> - <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions -or need to modify your payment schedule.{/ts}</p> - </td> - </tr> - - {if $customGroup} - {foreach from=$customGroup item=value key=customName} - <tr> - <th {$headerStyle}> - {$customName} - </th> - </tr> - {foreach from=$value item=v key=n} - <tr> - <td {$labelStyle}> - {$n} - </td> - <td {$valueStyle}> - {$v} - </td> - </tr> - {/foreach} - {/foreach} - {/if} - - </table> - </td> - </tr> - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_text.tpl b/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_text.tpl deleted file mode 100644 index 571f1b1bea2ab45dfce3b2a1a24d0f36ebc04472..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.alpha1.msg_template/message_templates/pledge_acknowledge_text.tpl +++ /dev/null @@ -1,45 +0,0 @@ -{ts 1=$contact.display_name}Dear %1{/ts}, - -{ts}Thank you for your generous pledge. Please print this acknowledgment for your records.{/ts} - -=========================================================== -{ts}Pledge Information{/ts} - -=========================================================== -{ts}Pledge Received{/ts}: {$create_date|truncate:10:''|crmDate} -{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency} - -=========================================================== -{ts}Payment Schedule{/ts} - -=========================================================== -{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts} - -{if $frequency_day} - -{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts} -{/if} - -{if $payments} -{assign var="count" value="1"} -{foreach from=$payments item=payment} - -{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:''|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:''|crmDate}{/if} -{assign var="count" value=`$count+1`} -{/foreach} -{/if} - - -{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions -or need to modify your payment schedule.{/ts} - -{if $customGroup} -{foreach from=$customGroup item=value key=customName} -=========================================================== -{$customName} -=========================================================== -{foreach from=$value item=v key=n} -{$n}: {$v} -{/foreach} -{/foreach} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/civicrm_msg_template.tpl b/civicrm/CRM/Upgrade/4.5.beta2.msg_template/civicrm_msg_template.tpl deleted file mode 100644 index 744e54456638dee0fe9211f066e246176f614ad7..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/civicrm_msg_template.tpl +++ /dev/null @@ -1,32 +0,0 @@ -{php} - $dir = SMARTY_DIR . '/../../CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample'; - $templates = array(); - foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { - $templates[] = array('name' => basename($filename, '.tpl'), 'filename' => "$dir/$filename"); - } - $this->assign('templates', $templates); -{/php} - -{foreach from=$templates item=tpl} - {fetch assign=content file=$tpl.filename} -INSERT INTO civicrm_msg_template - (msg_title, msg_subject, msg_text, msg_html, workflow_id, is_default, is_reserved) VALUES - ('{$tpl.name} Template', '{$tpl.name}', '', '{$content|escape:"quotes"}' ,NULL, 1, 0); -{/foreach} - -{php} - $dir = SMARTY_DIR . '/../../CRM/Upgrade/4.5.beta2.msg_template/message_templates'; - $templates = array(); - foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { - $parts = explode('_', basename($filename, '.tpl')); - $templates[] = array('type' => array_pop($parts), 'name' => implode('_', $parts), 'filename' => "$dir/$filename"); - } - $this->assign('templates', $templates); -{/php} - -{foreach from=$templates item=tpl} - {fetch assign=content file=$tpl.filename} - SELECT @workflow_id := MAX(id) FROM civicrm_option_value WHERE name = '{$tpl.name}'; - SELECT @content := msg_{$tpl.type} FROM civicrm_msg_template WHERE workflow_id = @workflow_id AND is_reserved = 1 LIMIT 1; - UPDATE civicrm_msg_template SET msg_{$tpl.type} = '{$content|escape:"quotes"}' WHERE workflow_id = @workflow_id AND (is_reserved = 1 OR (is_default = 1 AND msg_{$tpl.type} = @content)); -{/foreach} diff --git a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_html.tpl b/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_html.tpl deleted file mode 100644 index 06c43bb6dacdbe7a714f9e84094ee37f25524bba..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_html.tpl +++ /dev/null @@ -1,240 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title></title> -</head> -<body> - -{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} -{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} -{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} - -<center> - <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> - - <!-- BEGIN HEADER --> - <!-- You can add table row(s) here with logo or other header elements --> - <!-- END HEADER --> - - <!-- BEGIN CONTENT --> - - <tr> - <td> - {if $formValues.receipt_text_signup} - <p>{$formValues.receipt_text_signup|htmlize}</p> - {elseif $formValues.receipt_text_renewal} - <p>{$formValues.receipt_text_renewal|htmlize}</p> - {else} - <p>{ts}Thank you for your support.{/ts}</p> - {/if} - {if ! $cancelled} - <p>{ts}Please print this receipt for your records.{/ts}</p> - {/if} - </td> - </tr> - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - {if !$lineItem} - <tr> - <th {$headerStyle}> - {ts}Membership Information{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {ts}Membership Type{/ts} - </td> - <td {$valueStyle}> - {$membership_name} - </td> - </tr> - {/if} - {if ! $cancelled} - {if !$lineItem} - <tr> - <td {$labelStyle}> - {ts}Membership Start Date{/ts} - </td> - <td {$valueStyle}> - {$mem_start_date} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Membership End Date{/ts} - </td> - <td {$valueStyle}> - {$mem_end_date} - </td> - </tr> - {/if} - {if $formValues.total_amount OR $formValues.total_amount eq 0 } - <tr> - <th {$headerStyle}> - {ts}Membership Fee{/ts} - </th> - </tr> - {if $formValues.contributionType_name} - <tr> - <td {$labelStyle}> - {ts}Financial Type{/ts} - </td> - <td {$valueStyle}> - {$formValues.contributionType_name} - </td> - </tr> - {/if} - - {if $lineItem} - {foreach from=$lineItem item=value key=priceset} - <tr> - <td colspan="2" {$valueStyle}> - <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} - <tr> - <th>{ts}Item{/ts}</th> - <th>{ts}Fee{/ts}</th> - <th>{ts}Membership Start Date{/ts}</th> - <th>{ts}Membership End Date{/ts}</th> - </tr> - {foreach from=$value item=line} - <tr> - <td> - {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} - </td> - <td> - {$line.line_total|crmMoney} - </td> - <td> - {$line.start_date} - </td> - <td> - {$line.end_date} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/foreach} - {/if} - <tr> - <td {$labelStyle}> - {ts}Amount{/ts} - </td> - <td {$valueStyle}> - {$formValues.total_amount|crmMoney} - </td> - </tr> - {if $receive_date} - <tr> - <td {$labelStyle}> - {ts}Received Date{/ts} - </td> - <td {$valueStyle}> - {$receive_date|truncate:10:''|crmDate} - </td> - </tr> - {/if} - {if $formValues.paidBy} - <tr> - <td {$labelStyle}> - {ts}Paid By{/ts} - </td> - <td {$valueStyle}> - {$formValues.paidBy} - </td> - </tr> - {if $formValues.check_number} - <tr> - <td {$labelStyle}> - {ts}Check Number{/ts} - </td> - <td {$valueStyle}> - {$formValues.check_number} - </td> - </tr> - {/if} - {/if} - {/if} - {/if} - </table> - </td> - </tr> - - {if $isPrimary} - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - - {if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later } - <tr> - <th {$headerStyle}> - {ts}Billing Name and Address{/ts} - </th> - </tr> - <tr> - <td {$labelStyle}> - {$billingName}<br /> - {$address} - </td> - </tr> - {/if} - - {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later} - <tr> - <th {$headerStyle}> - {ts}Credit Card Information{/ts} - </th> - </tr> - <tr> - <td {$valueStyle}> - {$credit_card_type}<br /> - {$credit_card_number} - </td> - </tr> - <tr> - <td {$labelStyle}> - {ts}Expires{/ts} - </td> - <td {$valueStyle}> - {$credit_card_exp_date|truncate:7:''|crmDate} - </td> - </tr> - {/if} - - </table> - </td> - </tr> - {/if} - - {if $customValues} - <tr> - <td> - <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> - <tr> - <th {$headerStyle}> - {ts}Membership Options{/ts} - </th> - </tr> - {foreach from=$customValues item=value key=customName} - <tr> - <td {$labelStyle}> - {$customName} - </td> - <td {$valueStyle}> - {$value} - </td> - </tr> - {/foreach} - </table> - </td> - </tr> - {/if} - - </table> -</center> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_text.tpl b/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_text.tpl deleted file mode 100644 index 383167a68f431b4ec75c86cb7dcaf28ee2904186..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/membership_offline_receipt_text.tpl +++ /dev/null @@ -1,90 +0,0 @@ -{if $formValues.receipt_text_signup} -{$formValues.receipt_text_signup} -{elseif $formValues.receipt_text_renewal} -{$formValues.receipt_text_renewal} -{else}{ts}Thank you for your support.{/ts}{/if} - -{if ! $cancelled}{ts}Please print this receipt for your records.{/ts} - - -{/if} -{if !$lineItem} -=========================================================== -{ts}Membership Information{/ts} - -=========================================================== -{ts}Membership Type{/ts}: {$membership_name} -{/if} -{if ! $cancelled} -{if !$lineItem} -{ts}Membership Start Date{/ts}: {$mem_start_date} -{ts}Membership End Date{/ts}: {$mem_end_date} -{/if} - -{if $formValues.total_amount OR $formValues.total_amount eq 0 } -=========================================================== -{ts}Membership Fee{/ts} - -=========================================================== -{if $formValues.contributionType_name} -{ts}Financial Type{/ts}: {$formValues.contributionType_name} -{/if} -{if $lineItem} -{foreach from=$lineItem item=value key=priceset} -{capture assign=ts_item}{ts}Item{/ts}{/capture} -{capture assign=ts_total}{ts}Fee{/ts}{/capture} -{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture} -{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture} -{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {$ts_start_date|string_format:"%20s"} {$ts_end_date|string_format:"%20s"} --------------------------------------------------------------------------------------------------- - -{foreach from=$value item=line} -{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.line_total|crmMoney|string_format:"%10s"} {$line.start_date|string_format:"%20s"} {$line.end_date|string_format:"%20s"} -{/foreach} -{/foreach} --------------------------------------------------------------------------------------------------- -{/if} -{ts}Amount{/ts}: {$formValues.total_amount|crmMoney} -{if $receive_date} -{ts}Received Date{/ts}: {$receive_date|truncate:10:''|crmDate} -{/if} -{if $formValues.paidBy} -{ts}Paid By{/ts}: {$formValues.paidBy} -{if $formValues.check_number} -{ts}Check Number{/ts}: {$formValues.check_number} -{/if} -{/if} -{/if} -{/if} - -{if $isPrimary } -{if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later } - -=========================================================== -{ts}Billing Name and Address{/ts} - -=========================================================== -{$billingName} -{$address} -{/if} - -{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later} -=========================================================== -{ts}Credit Card Information{/ts} - -=========================================================== -{$credit_card_type} -{$credit_card_number} -{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} -{/if} -{/if} - -{if $customValues} -=========================================================== -{ts}Membership Options{/ts} - -=========================================================== -{foreach from=$customValues item=value key=customName} - {$customName} : {$value} -{/foreach} -{/if} diff --git a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl b/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl deleted file mode 100644 index 86ffc2351d284c60ab65dd4b68d81b84780df53f..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl +++ /dev/null @@ -1,496 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml"> -<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> - <meta content="width=device-width, initial-scale=1.0" name="viewport" /> - <title></title> - - <style type="text/css"> - {literal} - /* Client-specific Styles */ - #outlook a {padding:0;} /* Force Outlook to provide a "view in browser" menu link. */ - body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;} - - /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */ - .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */ - .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */ - #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;} - img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;} - a img {border:none;} - .image_fix {display:block;} - p {margin: 0px 0px !important;} - table td {border-collapse: collapse;} - table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; } - a {text-decoration: none;text-decoration:none;} - - /*STYLES*/ - table[class=full] { width: 100%; clear: both; } - - /*IPAD STYLES*/ - @media only screen and (max-width: 640px) { - a[href^="tel"], a[href^="sms"] {text-decoration: none;color:#136388;pointer-events: none;cursor: default;} - .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color:#136388;pointer-events: auto;cursor: default;} - table[class=devicewidth] {width: 440px!important;text-align:center!important;} - table[class=devicewidthmob] {width: 416px!important;text-align:center!important;} - table[class=devicewidthinner] {width: 416px!important;text-align:center!important;} - img[class=banner] {width: 440px!important;auto!important;} - img[class=col2img] {width: 440px!important;height:auto!important;} - table[class="cols3inner"] {width: 100px!important;} - table[class="col3img"] {width: 131px!important;} - img[class="col3img"] {width: 131px!important;height: auto!important;} - table[class="removeMobile"]{width:10px!important;} - img[class="blog"] {width: 440px!important;height: auto!important;} - } - - /*IPHONE STYLES*/ - @media only screen and (max-width: 480px) { - a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #136388;pointer-events: none;cursor: default;} - .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: none;color:#136388;pointer-events: auto;cursor: default;} - - table[class=devicewidth] {width: 280px!important;text-align:center!important;} - table[class=devicewidthmob] {width: 260px!important;text-align:center!important;} - table[class=devicewidthinner] {width: 260px!important;text-align:center!important;} - img[class=banner] {width: 280px!important;height:100px!important;} - img[class=col2img] {width: 280px!important;height:auto!important;} - table[class="cols3inner"] {width: 260px!important;} - img[class="col3img"] {width: 280px!important;height: auto!important;} - table[class="col3img"] {width: 280px!important;} - img[class="blog"] {width: 280px!important;auto!important;} - td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} - td[class="padding-right15"]{padding-right:15px !important;} - } - - @media only screen and (max-device-width: 800px) - {td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} - td[class="padding-right15"]{padding-right:15px !important;}} - @media only screen and (max-device-width: 769px) { - .devicewidthmob {font-size:16px;} - } - - @media only screen and (max-width: 640px) { - .desktop-spacer {display:none !important;} - } - {/literal} - </style> - -<body> - <!-- Start of preheader --><!-- Start of preheader --> - <table bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td height="20" width="100%"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="310"> - <tbody> - <tr> - <td align="left" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height:120%; color: #f8f8f8;padding-left:15px; padding-bottom:5px;" valign="middle">Organization or Program Name Here</td> - </tr> - </tbody> - </table> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="emhide" width="310"> - <tbody> - <tr> - <td align="right" style="font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px; text-align:right;" valign="middle">Month and Year</td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="20" width="100%"> </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- End of main-banner--> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td height="20" width="100%"> - <table align="center" border="0" cellpadding="2" cellspacing="0" width="93%"> - <tbody> - <tr> - <td rowspan="2" style="padding-top:10px; padding-bottom:10px;" width="38%"><img src="https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png" alt="Replace with your own logo" width="220" border="0" /></td> - <td align="right" width="62%"> - <h6 class="collapse"> </h6> - </td> - </tr> - <tr> - <td align="right"> - <h5 style="font-family: Gill Sans, Gill Sans MT, Myriad Pro, DejaVu Sans Condensed, Helvetica, Arial, sans-serif; color:#136388;"> </h5> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- /Spacing --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 23px; color:#f8f8f8; text-align:left; line-height: 32px; padding:5px 15px; background-color:#136388;">Headline Here</td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> - <tbody><!-- hero story --> - <tr> - <td align="center" class="devicewidthinner" width="100%"> - <div class="imgpop"><a href="#"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/650x396.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> - </td> - </tr> - <!-- /hero image --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px; color:#89c66b;"><a href="#" style="color:#89c66b;">Your Heading Here</a></td> - </tr> - <!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td style="padding:0 15px;"> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;">{contact.email_greeting}, </p> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></p> - </td> - </tr> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;"><a href="#" style="color:#136388;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> - </tr> - <!-- /button --><!-- Spacing --> - <tr> - <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --><!-- end of content --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- end of hero image and story --><!-- story 1 --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidthinner" width="100%"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="250" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> - </td> - </tr> - <!-- /image --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;"><a href="#" style="color:#89c66b;">Your Heading Here</a></td> - </tr> - <!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td style="padding:0 15px;"> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p> - </td> - </tr> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;"><a href="#" style="color:#136388;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> - </tr> - <!-- /button --><!-- Spacing --> - <tr> - <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --><!-- end of content --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /story 2--><!-- banner1 --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidthinner" width="100%"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> - </td> - </tr> - <!-- /image --><!-- content --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --> - <tr> - <td style="padding:15px;"> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p> - </td> - </tr> - <!-- /button --><!-- white button --> - <!-- /button --><!-- Spacing --><!-- end of content --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /banner 1--><!-- banner 2 --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#136388" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidthinner" width="100%"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> - </td> - </tr> - <!-- /image --><!-- content --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --> - <tr> - <td style="padding: 15px;"> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;">Remember to link the facebook and twitter links below to your pages!</p> - </td> - </tr> - <!-- /button --><!-- white button --> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-bottom:10px; padding-left:15px;"><a href="#" style="color:#ffffff;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> - </tr> - <!-- /button --><!-- Spacing --><!-- end of content --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /banner2 --><!-- footer --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="footer" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> - <tbody><!-- Spacing --> - <tr> - <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td><!-- logo --> - <table align="left" border="0" cellpadding="0" cellspacing="0" width="250"> - <tbody> - <tr> - <td width="20"> </td> - <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;"><a href="{action.unsubscribeUrl}" style="color: #f0f0f0; ">Unsubscribe | </a><a href="{action.subscribeUrl}" style="color: #f0f0f0;">Subscribe |</a> <a href="{action.optOutUrl}" style="color: #f0f0f0;">Opt out</a></span></td> - </tr> - <tr> - <td width="20"> </td> - <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;">{domain.address}</span></td> - </tr> - </tbody> - </table> - <!-- end of logo --><!-- start of social icons --> - - <table align="right" border="0" cellpadding="0" cellspacing="0" height="40" vaalign="middle" width="60"> - <tbody> - <tr> - <td align="left" height="22" width="22"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> - </td> - <td align="left" style="font-size:1px; line-height:1px;" width="10"> </td> - <td align="right" height="22" width="22"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> - </td> - <td align="left" style="font-size:1px; line-height:1px;" width="20"> </td> - </tr> - </tbody> - </table> - <!-- end of social icons --></td> - </tr> - <!-- Spacing --> - <tr> - <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - -</body> -</html> diff --git a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl b/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl deleted file mode 100644 index 14c140fa13685aa868ce03b30075aedfc36db4f0..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/4.5.beta2.msg_template/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl +++ /dev/null @@ -1,672 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml"> - <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> - <meta content="width=device-width, initial-scale=1.0" name="viewport" /> - <title></title> - <style type="text/css"> - {literal} - img {height: auto !important;} - /* Client-specific Styles */ - #outlook a {padding:0;} /* Force Outlook to provide a "view in browser" menu link. */ - body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;} - - /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */ - .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */ - .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */ - #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;} - img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;} - a img {border:none;} - .image_fix {display:block;} - p {margin: 0px 0px !important;} - table td {border-collapse: collapse;} - table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; } - a {/*color: #33b9ff;*/text-decoration: none;text-decoration:none!important;} - - - /*STYLES*/ - table[class=full] { width: 100%; clear: both; } - - /*IPAD STYLES*/ - @media only screen and (max-width: 640px) { - a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;} - .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color: #0a8cce !important;pointer-events: auto;cursor: default;} - table[class=devicewidth] {width: 440px!important;text-align:center!important;} - table[class=devicewidthmob] {width: 414px!important;text-align:center!important;} - table[class=devicewidthinner] {width: 414px!important;text-align:center!important;} - img[class=banner] {width: 440px!important;auto!important;} - img[class=col2img] {width: 440px!important;height:auto!important;} - table[class="cols3inner"] {width: 100px!important;} - table[class="col3img"] {width: 131px!important;} - img[class="col3img"] {width: 131px!important;height: auto!important;} - table[class="removeMobile"]{width:10px!important;} - img[class="blog"] {width: 440px!important;height: auto!important;} - } - - /*IPHONE STYLES*/ - @media only screen and (max-width: 480px) { - a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;} - .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color: #0a8cce !important; pointer-events: auto;cursor: default;} - table[class=devicewidth] {width: 280px!important;text-align:center!important;} - table[class=devicewidthmob] {width: 260px!important;text-align:center!important;} - table[class=devicewidthinner] {width: 260px!important;text-align:center!important;} - img[class=banner] {width: 280px!important;height:100px!important;} - img[class=col2img] {width: 280px!important;height:auto!important;} - table[class="cols3inner"] {width: 260px!important;} - img[class="col3img"] {width: 280px!important;height: auto!important;} - table[class="col3img"] {width: 280px!important;} - img[class="blog"] {width: 280px!important;auto!important;} - td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} - td[class="padding-right15"]{padding-right:15px !important;} - } - - @media only screen and (max-device-width: 800px) - {td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} - td[class="padding-right15"]{padding-right:15px !important;}} - @media only screen and (max-device-width: 769px) {.devicewidthmob {font-size:14px;}} - - @media only screen and (max-width: 640px) {.desktop-spacer {display:none !important;} - } - {/literal} - </style> - <body> - <!-- Start of preheader --><!-- Start of preheader --> - <table bgcolor="#0B4151" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td height="20" width="100%"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="360"> - <tbody> - <tr> - <td align="left" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height:120%; color: #f8f8f8;padding-left:15px;" valign="middle">Organization or Program Name Here</td> - </tr> - </tbody> - </table> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="emhide" width="320"> - <tbody> - <tr> - <td align="right" style="font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px;" valign="middle">Month Year</td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="20" width="100%"> </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- End of preheader --><!-- start of logo --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td height="20" width="100%"> - <table align="center" border="0" cellpadding="2" cellspacing="0" width="93%"> - <tbody> - <tr> - <td rowspan="2" width="330"><a href="#"> <div class="imgpop"><img src="https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png" alt="Replace with your own logo" width="220" border="0" style="display:block;"/></div></a></td> - <td align="right" > - <h6 class="collapse"> </h6> - </td> - </tr> - <tr> - <td align="right"> - - </td> - </tr> - </tbody> - </table> - </td> - </tr> - - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- end of logo --> <!-- hero story 1 --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="101%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#f8f8f8" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#f8f8f8" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- /Spacing --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457">Hero Story Heading</td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="700"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidthinner" width="100%"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="396" src="https://civicrm.org/sites/default/files/civicrm/custom/images/700x396.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="700" /></a></div> - </td> - </tr> - <!-- /image --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- hero story --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Subheading Here</a></td> - </tr> - <!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr><!-- /Spacing --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 26px; padding:0 15px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></td> - </tr> - - <!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr><!-- /Spacing --> - - <!-- /Spacing --><!-- /hero story --> - - <!-- Spacing --> <!-- Spacing --> - - - - <!-- Spacing --><!-- end of content --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Section Heading --> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457">Section Heading Here</td> - </tr> - <!-- /Section Heading --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /hero story 1 --><!-- story one --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> - <tbody> - <tr> - <td><!-- Start of left column --> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> - </tr> - <!-- /image --> - </tbody> - </table> - <!-- end of left column --><!-- spacing for mobile devices--> - - <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> - <tbody> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - </tbody> - </table> - <!-- end of for mobile devices--><!-- start of right column --> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> - <tbody> - <tr> - <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="CiviCRM helps keep the “City Beautiful†Movementâ€going strong"></a></td> - </tr> - <!-- end of title --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna </span></td> - </tr> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="CiviCRM helps keep the “City Beautiful†Movementâ€going strong">Read More</a></td> - </tr> - <!-- /button --><!-- end of content --> - </tbody> - </table> - <!-- end of right column --></td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /story one --> - <!-- story two --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --><!-- Spacing --> - <tr> - <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> - <tbody> - <tr> - <td><!-- Start of left column --> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> - </tr> - <!-- /image --> - </tbody> - </table> - <!-- end of left column --><!-- spacing for mobile devices--> - - <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> - <tbody> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - </tbody> - </table> - <!-- end of for mobile devices--><!-- start of right column --> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> - <tbody> - <tr> - <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="How CiviCRM will take Tribodar Eco Learning Center to another level"></a></td> - </tr> - <!-- end of title --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna </span></td> - </tr> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="How CiviCRM will take Tribodar Eco Learning Center to another level">Read More</a></td> - </tr> - <!-- /button --><!-- end of content --> - </tbody> - </table> - <!-- end of right column --></td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /story two --><!-- story three --> - - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --><!-- Spacing --> - <tr> - <td height="20" class="desktop-spacer" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> - <tbody> - <tr> - <td><!-- Start of left column --> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> - </tr> - <!-- /image --> - </tbody> - </table> - <!-- end of left column --><!-- spacing for mobile devices--> - - <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> - <tbody> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - </tbody> - </table> - <!-- end of for mobile devices--><!-- start of right column --> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> - <tbody> - <tr> - <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River"></a></td> - </tr> - <!-- end of title --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna </span></td> - </tr> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River">Read More</a></td> - </tr> - <!-- /button --><!-- end of content --> - </tbody> - </table> - <!-- end of right column --></td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /story three --> - - - - - - <!-- story four --> - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <!-- Spacing --> - <tr> - <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <!-- Spacing --> - <tr> - <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> - <tbody> - <tr> - <td><!-- Start of left column --> - <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> - <tbody><!-- image --> - <tr> - <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> - </tr> - <!-- /image --> - </tbody> - </table> - <!-- end of left column --><!-- spacing for mobile devices--> - - <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> - <tbody> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - </tbody> - </table> - <!-- end of for mobile devices--><!-- start of right column --> - - <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> - <tbody> - <tr> - <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px;text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="Google Summer of Code"></a></td> - </tr> - <!-- end of title --><!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --><!-- content --> - <tr> - <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna </span></td> - </tr> - <tr> - <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="Google Summer of Code">Read More</a></td> - </tr> - <!-- /button --><!-- end of content --> - </tbody> - </table> - <!-- end of right column --></td> - </tr> - </tbody> - </table> - </td> - </tr> - <!-- Spacing --> - <tr> - <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> - </tr> - <!-- /Spacing --> - <tr> - <td style="padding: 15px;"> - <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color:#076187; text-align:left; line-height: 26px; padding-bottom:10px;">Remember to link the facebook and twitter links below to your pages!</p> - </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- /story four --> - - <!-- footer --> - - <!-- End of footer --><!-- Start of postfooter --> - <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="footer" width="100%"> - <tbody> - <tr> - <td> - <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody> - <tr> - <td width="100%"> - <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> - <tbody><!-- Spacing --> - <tr> - <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td><!-- logo --> - <table align="left" border="0" cellpadding="0" cellspacing="0" width="250"> - <tbody> - <tr> - <td width="20"> </td> - <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;"><a href="{action.unsubscribeUrl}" style="color: #f0f0f0;">Unsubscribe | </a><a href="{action.subscribeUrl}" style="color: #f0f0f0;">Subscribe |</a> <a href="{action.optOutUrl}" style="color: #f0f0f0;">Opt out</a></span></td> - </tr> - <tr> - <td width="20"> </td> - <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;">{domain.address}</span></td> - </tr> - </tbody> - </table> - <!-- end of logo --><!-- start of social icons --> - <table align="right" border="0" cellpadding="0" cellspacing="0" height="40" vaalign="middle" width="60"> - <tbody> - <tr> - <td align="left" height="22" width="22"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> </td> - <td align="left" style="font-size:1px; line-height:1px;" width="10"> </td> - <td align="right" height="22" width="22"> - <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> - </td> - <td align="left" style="font-size:1px; line-height:1px;" width="20"> </td> - </tr> - </tbody> - </table> - <!-- end of social icons --></td> - </tr> - <!-- Spacing --> - <tr> - <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> - </tr> - <!-- Spacing --> - <tr> - <td bgcolor="#80C457" height="10" width="100%"> </td> - </tr> - <!-- Spacing --> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - <!-- End of footer --> - </body> -</html> diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index b8da51a09cc0a39720a740021a86f115113b51ca..79305b2fcedb97f27e12b2c3fb21cc57c03e6c34 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -25,7 +25,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { /** * Minimum previous CiviCRM version we can directly upgrade from */ - const MINIMUM_UPGRADABLE_VERSION = '4.4.7'; + const MINIMUM_UPGRADABLE_VERSION = '4.5.9'; /** * @var \CRM_Core_Config @@ -187,7 +187,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { } public function preProcess() { - CRM_Utils_System::setTitle($this->getTitle()); + $this->setTitle($this->getTitle()); if (!$this->verifyPreDBState($errorMessage)) { if (!isset($errorMessage)) { $errorMessage = 'pre-condition failed for current upgrade step'; diff --git a/civicrm/CRM/Upgrade/Headless.php b/civicrm/CRM/Upgrade/Headless.php index 0e1e869b0c732586d70db9012c4ee1c51b19029b..6bd63d32ddd26831d436f899d6956070f2b3955e 100644 --- a/civicrm/CRM/Upgrade/Headless.php +++ b/civicrm/CRM/Upgrade/Headless.php @@ -25,10 +25,7 @@ class CRM_Upgrade_Headless { * - message: string, HTML-ish blob */ public function run($enablePrint = TRUE) { - // lets get around the time limit issue if possible for upgrades - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); $upgrade = new CRM_Upgrade_Form(); list($currentVer, $latestVer) = $upgrade->getUpgradeVersions(); diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 8e2e8641f7471661bdf3c984ed0ae1bc905de931..883dc50e165eeb1044b21dab3ce030d44f4bfefc 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -264,12 +264,17 @@ class CRM_Upgrade_Incremental_Base { */ public static function updateMessageToken($ctx, string $workflowName, string $old, string $new, $version):bool { $messageObj = new CRM_Upgrade_Incremental_MessageTemplates($version); - $messageObj->replaceTokenInTemplate($workflowName, $old, $new); + if (!empty($workflowName)) { + $messageObj->replaceTokenInTemplate($workflowName, $old, $new); + } + else { + $messageObj->replaceTokenInMessageTemplates($old, $new); + } return TRUE; } /** - * Updated a message token within a template. + * Updated a message token within a scheduled reminder. * * @param CRM_Queue_TaskContext $ctx * @param string $old @@ -284,6 +289,38 @@ class CRM_Upgrade_Incremental_Base { return TRUE; } + /** + * Updated a message token within a label. + * + * @param CRM_Queue_TaskContext $ctx + * @param string $old + * @param string $new + * @param $version + * + * @return bool + */ + public static function updatePrintLabelToken($ctx, string $old, string $new, $version):bool { + $messageObj = new CRM_Upgrade_Incremental_MessageTemplates($version); + $messageObj->replaceTokenInPrintLabel($old, $new); + return TRUE; + } + + /** + * Updated a message token within greeting options. + * + * @param CRM_Queue_TaskContext $ctx + * @param string $old + * @param string $new + * @param $version + * + * @return bool + */ + public static function updateGreetingOptions($ctx, string $old, string $new, $version):bool { + $messageObj = new CRM_Upgrade_Incremental_MessageTemplates($version); + $messageObj->replaceTokenInGreetingOptions($old, $new); + return TRUE; + } + /** * Re-save any valid values from contribute settings into the normal setting * format. diff --git a/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php b/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php index f2a8b8c6181b5bfedfd81564882e605b9a2c8942..1b10beb756f0d12f769c0a26bdff85a5a2010af7 100644 --- a/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php +++ b/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php @@ -249,6 +249,16 @@ class CRM_Upgrade_Incremental_MessageTemplates { ['name' => 'pledge_reminder', 'type' => 'text'], ], ], + [ + 'version' => '5.43.alpha1', + 'upgrade_descriptor' => ts('Missed templates from earlier versions'), + 'templates' => [ + ['name' => 'contribution_online_receipt', 'type' => 'text'], + ['name' => 'case_activity', 'type' => 'html'], + ['name' => 'case_activity', 'type' => 'text'], + ['name' => 'case_activity', 'type' => 'subject'], + ], + ], ]; } @@ -289,6 +299,24 @@ class CRM_Upgrade_Incremental_MessageTemplates { "); } + /** + * Replace a token with the new preferred option in non-workflow templates. + * + * @param string $old + * @param string $new + */ + public function replaceTokenInMessageTemplates(string $old, string $new): void { + $oldToken = '{' . $old . '}'; + $newToken = '{' . $new . '}'; + CRM_Core_DAO::executeQuery("UPDATE civicrm_msg_template + SET + msg_text = REPLACE(msg_text, '$oldToken', '$newToken'), + msg_subject = REPLACE(msg_subject, '$oldToken', '$newToken'), + msg_html = REPLACE(msg_html, '$oldToken', '$newToken') + WHERE workflow_name IS NULL + "); + } + /** * Replace a token with the new preferred option. * @@ -306,6 +334,43 @@ class CRM_Upgrade_Incremental_MessageTemplates { "); } + /** + * Replace a token with the new preferred option in a print label. + * + * @param string $old + * @param string $new + */ + public function replaceTokenInPrintLabel(string $old, string $new): void { + $oldToken = '{' . $old . '}'; + $newToken = '{' . $new . '}'; + CRM_Core_DAO::executeQuery("UPDATE civicrm_print_label + SET + data = REPLACE(data, '$oldToken', '$newToken') + "); + } + + /** + * Replace a token with the new preferred option in a print label. + * + * @param string $old + * @param string $new + * + * @throws \API_Exception + */ + public function replaceTokenInGreetingOptions(string $old, string $new): void { + $oldToken = '{' . $old . '}'; + $newToken = '{' . $new . '}'; + $options = (array) Civi\Api4\OptionValue::get(FALSE) + ->addWhere('option_group_id:name', 'IN', ['email_greeting', 'postal_greeting', 'addressee']) + ->setSelect(['id'])->execute()->indexBy('id'); + CRM_Core_DAO::executeQuery("UPDATE civicrm_option_value + SET + label = REPLACE(label, '$oldToken', '$newToken'), + name = REPLACE(name, '$oldToken', '$newToken') + WHERE id IN (" . implode(',', array_keys($options)) . ')' + ); + } + /** * Get the upgrade messages. */ diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveFortyThree.php b/civicrm/CRM/Upgrade/Incremental/php/FiveFortyThree.php new file mode 100644 index 0000000000000000000000000000000000000000..db117ecd7300f43d8b30f7f3e60ad555c3594bbf --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveFortyThree.php @@ -0,0 +1,210 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for FiveFortyThree + */ +class CRM_Upgrade_Incremental_php_FiveFortyThree extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL): void { + // Example: Generate a pre-upgrade message. + if ($rev === '5.43.alpha1' && !empty(CRM_Core_Component::getEnabledComponents()['CiviCase'])) { + $preUpgradeMessage .= '<p>' . ts('Minor changes have been made to how the tokens to render case.is_deleted, case.created_date and case.modified_date. See https://docs.civicrm.org/sysadmin/en/latest/upgrade/version-specific/ for more') . '</p>'; + } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev): void { + // Example: Generate a post-upgrade message. + // if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + // } + } + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_43_alpha1(string $rev): void { + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('Fix DB Collation if needed on the relationship cache table', 'fixRelationshipCacheTableCollation'); + $this->addTask('Make mapping field foreign key cascade delete', 'alterMappingFK'); + $this->addTask('Replace legacy displayName smarty token in Online contribution workflow template', + 'updateMessageToken', 'contribution_online_receipt', '$displayName', 'contact.display_name', $rev + ); + $this->addTask('Replace legacy first_name smarty token in Online contribution workflow template', + 'updateMessageToken', 'contribution_online_receipt', '$first_name', 'contact.first_name', $rev + ); + $this->addTask('Replace legacy last_name smarty token in Online contribution workflow template', + 'updateMessageToken', 'contribution_online_receipt', '$last_name', 'contact.last_name', $rev + ); + $this->addTask('Replace membership status token in action schedule', + 'updateActionScheduleToken', 'membership.status', 'membership.status_id:label', $rev + ); + $this->addTask('Replace membership type token in action schedule', + 'updateActionScheduleToken', 'membership.type', 'membership.membership_type_id:label', $rev + ); + $this->addTask('Replace event type token in action schedule', + 'updateActionScheduleToken', 'event.event_type_id', 'event.event_type_id:label', $rev + ); + $this->addTask('Replace event balance in action schedule', + 'updateActionScheduleToken', 'event.balance', 'participant.balance', $rev + ); + $this->addTask('Replace event fee amount in action schedule', + 'updateActionScheduleToken', 'event.fee_amount', 'participant.fee_amount', $rev + ); + $this->addTask('Replace contact.preferred_communication_method in action schedule', + 'updateActionScheduleToken', 'contact.preferred_communication_method', 'contact.preferred_communication_method:label', $rev + ); + $this->addTask('Replace event event_id in action schedule', + 'updateActionScheduleToken', 'event.event_id', 'event.id', $rev + ); + $this->addTask('Replace duplicate event title token in event badges', + 'updatePrintLabelToken', 'participant.event_title', 'event.title', $rev + ); + $this->addTask('Replace duplicate event start date token in event badges', + 'updatePrintLabelToken', 'participant.event_start_date', 'event.start_date', $rev + ); + $this->addTask('Replace duplicate event end date token in event badges', + 'updatePrintLabelToken', 'participant.event_end_date', 'event.end_date', $rev + ); + $this->addTask('Update participant status id token in event badges', + 'updatePrintLabelToken', 'participant.participant_status_id', 'participant.status_id', $rev + ); + $this->addTask('Update participant role id token in event badges', + 'updatePrintLabelToken', 'participant.participant_role_id', 'participant.role_id', $rev + ); + $this->addTask('Update participant role label token in event badges', + 'updatePrintLabelToken', 'participant.participant_role', 'participant.role_id:label', $rev + ); + $this->addTask('Update participant register date token in event badges', + 'updatePrintLabelToken', 'participant.participant_register_date', 'participant.register_date', $rev + ); + $this->addTask('Update participant source token in event badges', + 'updatePrintLabelToken', 'participant.participant_source', 'participant.source', $rev + ); + $this->addTask('Update participant fee level token in event badges', + 'updatePrintLabelToken', 'participant.participant_fee_level', 'participant.fee_level', $rev + ); + $this->addTask('Update participant fee amount token in event badges', + 'updatePrintLabelToken', 'participant.participant_fee_amount', 'participant.fee_amount', $rev + ); + $this->addTask('Update participant registered by id token in event badges', + 'updatePrintLabelToken', 'participant.participant_registered_by_id', 'participant.registered_by_id', $rev + ); + $this->addTask('Update preferred_communication_method token in saved message templates', + 'updateMessageToken', '', 'contact.preferred_communication_method', 'contact.preferred_communication_method:label', $rev + ); + $this->addTask('Update contribution status token in saved message templates', + 'updateMessageToken', '', 'contribution.contribution_status', 'contribution.contribution_status_id:label', $rev + ); + $this->addTask('Update campaign token in saved message templates', + 'updateMessageToken', '', 'contribution.campaign', 'contribution.campaign_id:label', $rev); + $this->addTask('Update start date token in event badges', + 'updatePrintLabelToken', 'event.start_date', 'event.start_date|crmDate:"%B %E%f', $rev + ); + $this->addTask('Update end date token in event badges', + 'updatePrintLabelToken', 'event.end_date', 'event.end_date|crmDate:"%B %E%f', $rev + ); + $this->addTask('Update event id token in event badges', + 'updatePrintLabelToken', 'event.event_id', 'participant.event_id', $rev + ); + // prefix_id was a short lived variant around civicrm 4.4 - it's unlikely any + // cases exist, but they will resolve as an integer if not updated + $this->addTask('Update legacy prefix id token in greetings (use {contact.prefix_id:label})', + 'updateGreetingOptions', 'contact.prefix_id', 'contact.prefix_id:label', $rev + ); + // suffix_id was a short lived variant around civicrm 4.4 - it's unlikely any + // cases exist, but they will resolve as an integer if not updated + $this->addTask('Update legacy suffix id token in greetings (use {contact.suffix_id:label})', + 'updateGreetingOptions', 'contact.suffix_id', 'contact.suffix_id:label', $rev + ); + // individual_prefix still works but is now deprecated + $this->addTask('Update individual_prefix token in greetings (use {contact.prefix_id:label})', + 'updateGreetingOptions', 'contact.individual_prefix', 'contact.prefix_id:label', $rev + ); + // individual_prefix still works but is now deprecated + $this->addTask('Update individual_suffix token in greetings (use {contact.suffix_id:label})', + 'updateGreetingOptions', 'contact.individual_suffix', 'contact.suffix_id:label', $rev + ); + + $this->addTask('Set note_date field to NOT NULL', 'setNoteDateFieldNotNull'); + } + + /** + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + */ + public static function alterMappingFK(CRM_Queue_TaskContext $ctx): bool { + CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_mapping_field', 'FK_civicrm_mapping_field_mapping_id'); + CRM_Core_DAO::executeQuery(' + ALTER TABLE civicrm_mapping_field + ADD CONSTRAINT `FK_civicrm_mapping_field_mapping_id` + FOREIGN KEY (`mapping_id`) + REFERENCES `civicrm_mapping`(`id`) ON DELETE CASCADE + ', [], TRUE, NULL, FALSE, FALSE); + return TRUE; + } + + public static function fixRelationshipCacheTableCollation():bool { + $contactTableCollation = CRM_Core_BAO_SchemaHandler::getInUseCollation(); + $dao = CRM_Core_DAO::executeQuery('SHOW TABLE STATUS LIKE \'civicrm_relationship_cache\''); + $dao->fetch(); + $relationshipCacheCollation = $dao->Collation; + $characterSet = 'utf8'; + if (stripos($contactTableCollation, 'utf8mb4') !== FALSE) { + $characterSet = 'utf8mb4'; + } + if ($contactTableCollation !== $relationshipCacheCollation) { + CRM_Core_BAO_SchemaHandler::migrateUtf8mb4(($characterSet === 'utf8mb4' ? FALSE : TRUE), ['%civicrm_relationship_cache%']); + } + return TRUE; + } + + /** + * Ensure note_date is NOT NULL + * + * Since note_date is exposed in the UI, we want to ensure an empty value + * results in CURRENT_TIME, not a NULL date. + */ + public static function setNoteDateFieldNotNull(): bool { + $i18nRewrite = FALSE; + $query = "UPDATE civicrm_note SET note_date = created_date WHERE note_date IS NULL"; + CRM_Core_DAO::executeQuery($query, [], TRUE, NULL, FALSE, $i18nRewrite); + $query = "ALTER TABLE civicrm_note CHANGE COLUMN `note_date` `note_date` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'Date attached to the note'"; + CRM_Core_DAO::executeQuery($query, [], TRUE, NULL, FALSE, $i18nRewrite); + return TRUE; + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourFive.php b/civicrm/CRM/Upgrade/Incremental/php/FourFive.php deleted file mode 100644 index 0f27a0be48ed49c7f4589bb20380a8843263019d..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/php/FourFive.php +++ /dev/null @@ -1,358 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * Upgrade logic for 4.5 - */ -class CRM_Upgrade_Incremental_php_FourFive extends CRM_Upgrade_Incremental_Base { - - /** - * Compute any messages which should be displayed after upgrade. - * - * @param string $postUpgradeMessage - * alterable. - * @param string $rev - * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. - */ - public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { - if ($rev == '4.5.alpha1') { - $postUpgradeMessage .= '<br /><br />' . ts('Default versions of the following System Workflow Message Templates have been modified to handle new functionality: <ul><li>Contributions - Receipt (off-line)</li><li>Contributions - Receipt (on-line)</li><li>Contributions - Recurring Start and End Notification</li><li>Contributions - Recurring Updates</li><li>Memberships - Receipt (on-line)</li><li>Memberships - Signup and Renewal Receipts (off-line)</li><li>Pledges - Acknowledgement</li></ul> If you have modified these templates, please review the new default versions and implement updates as needed to your copies (Administer > Communications > Message Templates > System Workflow Messages). (<a href="%1">learn more...</a>)', [1 => 'http://wiki.civicrm.org/confluence/display/CRMDOC/Updating+System+Workflow+Message+Templates+after+Upgrades+-+method+1+-+kdiff']); - $postUpgradeMessage .= '<br /><br />' . ts('This release allows you to view and edit multiple-record custom field sets in a table format which will be more usable in some cases. You can try out the format by navigating to Administer > Custom Data & Screens > Custom Fields. Click Settings for a custom field set and change Display Style to "Tab with Tables".'); - $postUpgradeMessage .= '<br /><br />' . ts('This release changes the way that anonymous event registrations match participants with existing contacts. By default, all event participants will be matched with existing individuals using the Unsupervised rule, even if multiple registrations with the same email address are allowed. However, you can now select a different matching rule to use for each event. Please review your events to make sure you choose the appropriate matching rule and collect sufficient information for it to match contacts.'); - } - if ($rev == '4.5.beta2') { - $postUpgradeMessage .= '<br /><br />' . ts('If you use CiviMail for newsletters or other communications, check out the new sample CiviMail templates which use responsive design to optimize display on mobile devices (Administer > Communications > Message Templates ).'); - } - if ($rev == '4.5.1') { - $postUpgradeMessage .= '<br /><br />' . ts('WARNING: If you use CiviCase with v4.5.alpha*, v4.5.beta*, or v4.5.0, it is possible that previous upgrades corrupted some CiviCase metadata. If you have not already done so, please identify any custom field sets, smart groups, or reports which refer to CiviCase and ensure that they are properly configured.'); - } - } - - /** - * @param $rev - * - * @return bool - */ - public function upgrade_4_5_alpha1($rev) { - // task to process sql - $this->addTask('Migrate honoree information to module_data', 'migrateHonoreeInfo'); - $this->addTask(ts('Upgrade DB to %1: SQL', [1 => '4.5.alpha1']), 'runSql', $rev); - $this->addTask('Set default for Individual name fields configuration', 'addNameFieldOptions'); - - // CRM-14522 - The below schema checking is done as foreign key name - // for pdf_format_id column varies for different databases - // if DB is been into upgrade for 3.4.2 version, it would have pdf_format_id name for FK - // else FK_civicrm_msg_template_pdf_format_id - $config = CRM_Core_Config::singleton(); - $dsn = CRM_Utils_SQL::autoSwitchDSN($config->dsn); - $dbUf = DB::parseDSN($dsn); - $query = " -SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS -WHERE TABLE_NAME = 'civicrm_msg_template' -AND CONSTRAINT_TYPE = 'FOREIGN KEY' -AND TABLE_SCHEMA = %1 -"; - $params = [1 => [$dbUf['database'], 'String']]; - $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, FALSE); - if ($dao->fetch()) { - if ($dao->CONSTRAINT_NAME == 'FK_civicrm_msg_template_pdf_format_id' || - $dao->CONSTRAINT_NAME == 'pdf_format_id' - ) { - $sqlDropFK = "ALTER TABLE `civicrm_msg_template` -DROP FOREIGN KEY `{$dao->CONSTRAINT_NAME}`, -DROP KEY `{$dao->CONSTRAINT_NAME}`"; - CRM_Core_DAO::executeQuery($sqlDropFK, [], TRUE, NULL, FALSE, FALSE); - } - } - - return TRUE; - } - - /** - * @param $rev - * - * @return bool - */ - public function upgrade_4_5_beta9($rev) { - $this->addTask(ts('Upgrade DB to %1: SQL', [1 => '4.5.beta9']), 'runSql', $rev); - - $entityTable = [ - 'Participant' => 'civicrm_participant_payment', - 'Contribution' => 'civicrm_contribution', - 'Membership' => 'civicrm_membership', - ]; - - foreach ($entityTable as $label => $tableName) { - list($minId, $maxId) = CRM_Core_DAO::executeQuery("SELECT coalesce(min(id),0), coalesce(max(id),0) - FROM {$tableName}")->getDatabaseResult()->fetchRow(); - for ($startId = $minId; $startId <= $maxId; $startId += self::BATCH_SIZE) { - $endId = $startId + self::BATCH_SIZE - 1; - $title = ts("Upgrade DB to 4.5.beta9: Fix line items for {$label} (%1 => %2)", [ - 1 => $startId, - 2 => $endId, - ]); - $this->addTask($title, 'task_4_5_0_fixLineItem', $startId, $endId, $label); - } - } - return TRUE; - } - - /** - * (Queue Task Callback) - * - * update the line items - * - * - * @param CRM_Queue_TaskContext $ctx - * @param int $startId - * the first/lowest entity ID to convert. - * @param int $endId - * the last/highest entity ID to convert. - * @param string $entityTable - * - * @return bool - */ - public static function task_4_5_0_fixLineItem(CRM_Queue_TaskContext $ctx, $startId, $endId, $entityTable) { - - $sqlParams = [ - 1 => [$startId, 'Integer'], - 2 => [$endId, 'Integer'], - ]; - switch ($entityTable) { - case 'Contribution': - // update all the line item entity_table and entity_id with contribution due to bug CRM-15055 - CRM_Core_DAO::executeQuery("UPDATE civicrm_line_item li - INNER JOIN civicrm_contribution cc ON cc.id = li.contribution_id - SET entity_id = li.contribution_id, entity_table = 'civicrm_contribution' - WHERE li.contribution_id IS NOT NULL AND li.entity_table <> 'civicrm_participant' AND (cc.id BETWEEN %1 AND %2)", $sqlParams); - - // update the civicrm_line_item.contribution_id - CRM_Core_DAO::executeQuery("UPDATE civicrm_line_item li - INNER JOIN civicrm_contribution cc ON cc.id = li.entity_id - SET contribution_id = entity_id - WHERE li.contribution_id IS NULL AND li.entity_table = 'civicrm_contribution' AND (cc.id BETWEEN %1 AND %2)", $sqlParams); - break; - - case 'Participant': - // update the civicrm_line_item.contribution_id - CRM_Core_DAO::executeQuery("UPDATE civicrm_line_item li - INNER JOIN civicrm_participant_payment pp ON pp.participant_id = li.entity_id - SET li.contribution_id = pp.contribution_id - WHERE li.entity_table = 'civicrm_participant' AND li.contribution_id IS NULL AND (pp.id BETWEEN %1 AND %2)", $sqlParams); - break; - - case 'Membership': - $upgrade = new CRM_Upgrade_Form(); - // update the line item of membership - CRM_Core_DAO::executeQuery("UPDATE civicrm_line_item li - INNER JOIN civicrm_membership_payment mp ON mp.contribution_id = li.contribution_id - INNER JOIN civicrm_membership cm ON mp.membership_id = cm.id - INNER JOIN civicrm_price_field_value pv ON pv.id = li.price_field_value_id - SET li.entity_table = 'civicrm_membership', li.entity_id = mp.membership_id - WHERE li.entity_table = 'civicrm_contribution' - AND pv.membership_type_id IS NOT NULL AND cm.membership_type_id = pv.membership_type_id AND (cm.id BETWEEN %1 AND %2)", $sqlParams); - - CRM_Core_DAO::executeQuery("UPDATE civicrm_line_item li - INNER JOIN civicrm_membership_payment mp ON mp.contribution_id = li.contribution_id - INNER JOIN civicrm_price_field_value pv ON pv.id = li.price_field_value_id - SET li.entity_table = 'civicrm_membership', li.entity_id = mp.membership_id - WHERE li.entity_table = 'civicrm_contribution' - AND pv.membership_type_id IS NOT NULL AND (mp.membership_id BETWEEN %1 AND %2)", $sqlParams); - - CRM_Core_DAO::executeQuery("INSERT INTO civicrm_line_item (entity_table, entity_id, price_field_id, label, - qty, unit_price, line_total, price_field_value_id, financial_type_id) - SELECT 'civicrm_membership', cm.id, cpf.id price_field_id, cpfv.label, 1 as qty, cpfv.amount, cpfv.amount line_total, - cpfv.id price_field_value_id, cpfv.financial_type_id FROM civicrm_membership cm - LEFT JOIN civicrm_membership_payment cmp ON cmp.membership_id = cm.id - INNER JOIN civicrm_price_field_value cpfv ON cpfv.membership_type_id = cm.membership_type_id - INNER JOIN civicrm_price_field cpf ON cpf.id = cpfv.price_field_id - INNER JOIN civicrm_price_set cps ON cps.id = cpf.price_set_id - WHERE cmp.contribution_id IS NULL AND cps.name = 'default_membership_type_amount' AND (cm.id BETWEEN %1 AND %2)", $sqlParams); - break; - } - return TRUE; - } - - /** - * Add defaults for the newly introduced name fields configuration in 'contact_edit_options' setting - * - * @param CRM_Queue_TaskContext $ctx - * - * @return bool - * TRUE for success - */ - public static function addNameFieldOptions(CRM_Queue_TaskContext $ctx) { - $query = "SELECT `value` FROM `civicrm_setting` WHERE `group_name` = 'CiviCRM Preferences' AND `name` = 'contact_edit_options'"; - $dao = CRM_Core_DAO::executeQuery($query); - $dao->fetch(); - $oldValue = unserialize($dao->value); - - $newValue = $oldValue . '1214151617'; - - $query = "UPDATE `civicrm_setting` SET `value` = %1 WHERE `group_name` = 'CiviCRM Preferences' AND `name` = 'contact_edit_options'"; - $params = [1 => [serialize($newValue), 'String']]; - CRM_Core_DAO::executeQuery($query, $params); - - return TRUE; - } - - /** - * Migrate honoree information to uf_join.module_data as honoree columns (text and title) will be dropped - * on DB upgrade - * - * @param CRM_Queue_TaskContext $ctx - * - * @return bool - * TRUE for success - */ - public static function migrateHonoreeInfo(CRM_Queue_TaskContext $ctx) { - $query = "ALTER TABLE `civicrm_uf_join` - ADD COLUMN `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module'"; - CRM_Core_DAO::executeQuery($query); - - $honorTypes = array_keys(CRM_Core_OptionGroup::values('honor_type')); - $ufGroupDAO = new CRM_Core_DAO_UFGroup(); - $ufGroupDAO->name = 'new_individual'; - $ufGroupDAO->find(TRUE); - - $query = "SELECT * FROM civicrm_contribution_page"; - $dao = CRM_Core_DAO::executeQuery($query); - - if ($dao->N) { - $domain = new CRM_Core_DAO_Domain(); - $domain->find(TRUE); - while ($dao->fetch()) { - $honorParams = ['soft_credit' => ['soft_credit_types' => $honorTypes]]; - if ($domain->locales) { - $locales = explode(CRM_Core_DAO::VALUE_SEPARATOR, $domain->locales); - foreach ($locales as $locale) { - $honor_block_title = "honor_block_title_{$locale}"; - $honor_block_text = "honor_block_text_{$locale}"; - $honorParams['soft_credit'] += [ - $locale => [ - 'honor_block_title' => $dao->$honor_block_title, - 'honor_block_text' => $dao->$honor_block_text, - ], - ]; - } - } - else { - $honorParams['soft_credit'] += [ - 'default' => [ - 'honor_block_title' => $dao->honor_block_title, - 'honor_block_text' => $dao->honor_block_text, - ], - ]; - } - $ufJoinParam = [ - 'module' => 'soft_credit', - 'entity_table' => 'civicrm_contribution_page', - 'is_active' => $dao->honor_block_is_active, - 'entity_id' => $dao->id, - 'uf_group_id' => $ufGroupDAO->id, - 'module_data' => json_encode($honorParams), - ]; - CRM_Core_BAO_UFJoin::create($ufJoinParam); - } - } - - return TRUE; - } - - /** - * Upgrade function. - * - * @param string $rev - * @return bool - */ - public function upgrade_4_5_9($rev) { - // Task to process sql. - $this->addTask('Upgrade DB to 4.5.9: Fix saved searches consisting of multi-choice custom field(s)', 'updateSavedSearch'); - - return TRUE; - } - - /** - * Update saved search for multi-select custom fields on DB upgrade - * - * @param CRM_Queue_TaskContext $ctx - * - * @return bool TRUE for success - */ - public static function updateSavedSearch(CRM_Queue_TaskContext $ctx) { - $sql = "SELECT id, form_values FROM civicrm_saved_search"; - $dao = CRM_Core_DAO::executeQuery($sql); - while ($dao->fetch()) { - $copy = $formValues = unserialize($dao->form_values); - $update = FALSE; - foreach ($copy as $field => $data_value) { - if (preg_match('/^custom_/', $field) && is_array($data_value) && !array_key_exists("${field}_operator", $formValues)) { - // Now check for CiviCRM_OP_OR as either key or value in the data_value array. - // This is the conclusive evidence of an old-style data format. - if (array_key_exists('CiviCRM_OP_OR', $data_value) || FALSE !== array_search('CiviCRM_OP_OR', $data_value)) { - // We have old style data. Mark this record to be updated. - $update = TRUE; - $op = 'and'; - if (!preg_match('/^custom_([0-9]+)/', $field, $matches)) { - // fatal error? - continue; - } - $fieldID = $matches[1]; - if (array_key_exists('CiviCRM_OP_OR', $data_value)) { - // This indicates data structure identified by jamie in the form: - // value1 => 1, value2 => , value3 => 1. - $data_value = array_keys($data_value, 1); - - // If CiviCRM_OP_OR - change OP from default to OR - if ($data_value['CiviCRM_OP_OR'] == 1) { - $op = 'or'; - } - unset($data_value['CiviCRM_OP_OR']); - } - else { - // The value is here, but it is not set as a key. - // This is using the style identified by Monish - the existence of the value - // indicates an OR search and values are set in the form of: - // 0 => value1, 1 => value1, 3 => value2. - $key = array_search('CiviCRM_OP_OR', $data_value); - $op = 'or'; - unset($data_value[$key]); - } - - //If only Or operator has been chosen, means we need to select all values and - //so to execute OR operation between these values according to new data structure - if (count($data_value) == 0 && $op == 'or') { - $customOption = CRM_Core_BAO_CustomOption::getCustomOption($fieldID); - foreach ($customOption as $option) { - $data_value[] = $option['value'] ?? NULL; - } - } - - $formValues[$field] = $data_value; - $formValues["${field}_operator"] = $op; - } - } - } - - if ($update) { - $sql = "UPDATE civicrm_saved_search SET form_values = %0 WHERE id = %1"; - CRM_Core_DAO::executeQuery($sql, - [ - [serialize($formValues), 'String'], - [$dao->id, 'Integer'], - ] - ); - } - } - return TRUE; - } - -} diff --git a/civicrm/CRM/Upgrade/Incremental/php/Template.php b/civicrm/CRM/Upgrade/Incremental/php/Template.php index debafbfa8a84b2d972def52ef19b629d8ad42565..94bc6339fed90541a0796e18e8454b4dcfb9c3ef 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/Template.php +++ b/civicrm/CRM/Upgrade/Incremental/php/Template.php @@ -30,7 +30,7 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. * @param null $currentVer */ - public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL): void { // Example: Generate a pre-upgrade message. // if ($rev == '5.12.34') { // $preUpgradeMessage .= '<p>' . ts('A new permission, "%1", has been added. This permission is now used to control access to the Manage Tags screen.', array(1 => ts('manage tags'))) . '</p>'; @@ -48,7 +48,7 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad * @param string $rev * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. */ - public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev): void { // Example: Generate a post-upgrade message. // if ($rev == '5.12.34') { // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); @@ -66,7 +66,7 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad // * // * @param string $rev // */ - // public function upgrade_5_0_x($rev) { + // public function upgrade_5_0_x($rev): void { // $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); // $this->addTask('Do the foo change', 'taskFoo', ...); // // Additional tasks here... @@ -74,7 +74,7 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. // } - // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) { + // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...): bool { // return TRUE; // } diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.0.mysql.tpl deleted file mode 100644 index 66aea8ae3c087906d1f5c79f2e43f8d930240afd..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.0.mysql.tpl +++ /dev/null @@ -1,11 +0,0 @@ -{* file to handle db changes in 4.5.0 during upgrade *} - -{include file='../CRM/Upgrade/4.5.0.msg_template/civicrm_msg_template.tpl'} - -ALTER TABLE `civicrm_action_schedule` - ADD COLUMN `sms_template_id` int(10) unsigned DEFAULT NULL COMMENT 'SMS Reminder Template. FK to id in civicrm_msg_template.' AFTER `msg_template_id`, - ADD COLUMN `sms_body_text` longtext COLLATE utf8_unicode_ci COMMENT 'Body of the mailing in html format.' AFTER `body_html`, - ADD CONSTRAINT `FK_civicrm_action_schedule_sms_template_id` FOREIGN KEY (`sms_template_id`) REFERENCES civicrm_msg_template(`id`) ON DELETE SET NULL; - -ALTER TABLE `civicrm_msg_template` - ADD COLUMN `is_sms` tinyint(4) DEFAULT '0' COMMENT 'Is this message template used for sms?'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.1.mysql.tpl deleted file mode 100644 index c0965058eb67a91a747897e041dcd5450fe604ed..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.1.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.2.mysql.tpl deleted file mode 100644 index e4f828739b4889cc1371241457bb0c9a82f9f678..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.2.mysql.tpl +++ /dev/null @@ -1,5 +0,0 @@ -{* file to handle db changes in 4.5.2 during upgrade *} - --- CRM-15467 Also fix group_type for Honoree Profile -UPDATE civicrm_uf_group SET group_type = 'Individual,Contact' WHERE name = 'honoree_individual'; - diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.3.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.3.mysql.tpl deleted file mode 100644 index 01e35c7c0a183c0f3316d06ff107b909320aaf7a..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.3.mysql.tpl +++ /dev/null @@ -1,12 +0,0 @@ -{* file to handle db changes in 4.5.3 during upgrade *} - --- CRM-15475 -SELECT @membershipStatusId := id FROM civicrm_membership_status WHERE name = 'Cancelled'; -SELECT @membershipStatusWeight := max(weight) + 1 FROM civicrm_membership_status; - -INSERT INTO civicrm_membership_status (id, name, {localize field='label'}label{/localize}, start_event, start_event_adjust_unit, start_event_adjust_interval, end_event, end_event_adjust_unit, end_event_adjust_interval, is_current_member, is_admin, weight, is_default, is_active, is_reserved) -VALUES (@membershipStatusId, 'Cancelled', {localize}'{ts escape="sql"}Cancelled{/ts}'{/localize}, 'join_date', null, null, 'join_date', null, null, 0, 0, @membershipStatusWeight, 0, 0, 1) -ON DUPLICATE KEY UPDATE is_reserved = 1; - --- CRM-15558 -ALTER TABLE `civicrm_mailing_bounce_type` CHANGE `name` `name` VARCHAR( 24 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'Type of bounce'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.4.mysql.tpl deleted file mode 100644 index f5971ae9b71d8276d39b76ecb1c3641d99e310b9..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.4.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.4 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.5.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.5.mysql.tpl deleted file mode 100644 index b97d8681e6b806d1eb3c84988d880275ea7d91e1..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.5.mysql.tpl +++ /dev/null @@ -1,5 +0,0 @@ -{* file to handle db changes in 4.5.5 during upgrade *} - --- https://issues.civicrm.org/jira/browse/CRM-15630 - -UPDATE civicrm_msg_template SET msg_html = REPLACE(msg_html, 'email=true', 'emailMode=true') WHERE msg_title = 'Petition - signature added'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.6.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.6.mysql.tpl deleted file mode 100644 index eb65ae8028e74b375866adda19217e4432a86cdc..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.6.mysql.tpl +++ /dev/null @@ -1,4 +0,0 @@ -{* file to handle db changes in 4.5.6 during upgrade *} - --- CRM-15760 -ALTER TABLE `civicrm_action_schedule` CHANGE `entity_value` `entity_value` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Entity value'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.7.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.7.mysql.tpl deleted file mode 100644 index 3becf6350c39b6a4521c7948b902daa231f5549b..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.7.mysql.tpl +++ /dev/null @@ -1,6 +0,0 @@ -{* file to handle db changes in 4.5.7 during upgrade *} - --- CRM-15931 -UPDATE civicrm_mailing_group SET group_type = 'Include' WHERE group_type = 'include'; -UPDATE civicrm_mailing_group SET group_type = 'Exclude' WHERE group_type = 'exclude'; -UPDATE civicrm_mailing_group SET group_type = 'Base' WHERE group_type = 'base'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.8.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.8.mysql.tpl deleted file mode 100644 index 3c2f7c6ce0e44b83a695ea6e44ce43eea242c1da..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.8.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.8 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.9.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.9.mysql.tpl deleted file mode 100644 index 232ca048ac170fb6e89e1ca44e4e7333ec3fb989..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.9.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* CRM-16846 - This file is never run, but it doesn't matter because it's empty *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha1.mysql.tpl deleted file mode 100644 index 540c96db3c78dc940b293b21f591568a80a1926b..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha1.mysql.tpl +++ /dev/null @@ -1,541 +0,0 @@ -{* file to handle db changes in 4.5.alpha1 during upgrade *} -{include file='../CRM/Upgrade/4.5.alpha1.msg_template/civicrm_msg_template.tpl'} - -ALTER TABLE `civicrm_contact` - ADD COLUMN `formal_title` varchar(64) COMMENT 'Formal (academic or similar) title in front of name. (Prof., Dr. etc.)' AFTER `suffix_id`; - -ALTER TABLE `civicrm_contact` - ADD COLUMN `communication_style_id` int(10) unsigned COMMENT 'Communication style (e.g. formal vs. familiar) to use with this contact. FK to communication styles in civicrm_option_value.' AFTER `formal_title`, - ADD INDEX `index_communication_style_id` (`communication_style_id`); - -INSERT INTO - `civicrm_option_group` (`name`, {localize field='title'}`title`{/localize}, `is_reserved`, `is_active`) -VALUES - ('communication_style', {localize}'{ts escape="sql"}Communication Style{/ts}'{/localize}, 1, 1); - -SELECT @option_group_id_communication_style := max(id) from civicrm_option_group where name = 'communication_style'; - -INSERT INTO - `civicrm_option_value` (`option_group_id`, {localize field='label'}`label`{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES - (@option_group_id_communication_style, {localize}'{ts escape="sql"}Formal{/ts}'{/localize}, 1, 'formal' , NULL, 0, 1, 1, 0, 0, 1, NULL, NULL), - (@option_group_id_communication_style, {localize}'{ts escape="sql"}Familiar{/ts}'{/localize}, 2, 'familiar', NULL, 0, 0, 2, 0, 0, 1, NULL, NULL); - --- Insert menu item at Administer > Communications, above the various Greeting Formats - -SELECT @parent_id := `id` FROM `civicrm_navigation` WHERE `name` = 'Communications' AND `domain_id` = {$domainID}; -SELECT @add_weight := MIN(`weight`) FROM `civicrm_navigation` WHERE `name` IN('Email Greeting Formats', 'Postal Greeting Formats', 'Addressee Formats') AND `parent_id` = @parent_id; - -UPDATE `civicrm_navigation` -SET `weight` = `weight`+1 -WHERE `parent_id` = @parent_id -AND `weight` >= @add_weight; - -INSERT INTO `civicrm_navigation` - ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) -VALUES - ( {$domainID}, 'civicrm/admin/options/communication_style&group=communication_style&reset=1', '{ts escape="sql" skip="true"}Communication Style Options{/ts}', 'Communication Style Options', 'administer CiviCRM', '', @parent_id, '1', NULL, @add_weight ); - --- CRM-9988 Change world region of Panama country to America South, Central, North and Caribbean -UPDATE `civicrm_country` SET `region_id` = 2 WHERE `id` = 1166; - -SELECT @option_group_id_contact_edit_options := max(id) from civicrm_option_group where name = 'contact_edit_options'; - -INSERT INTO - `civicrm_option_value` (`option_group_id`, {localize field='label'}`label`{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}Prefix{/ts}'{/localize} , 12, 'Prefix' , NULL, 2, NULL, 12, 0, 0, 1, NULL, NULL), - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}Formal Title{/ts}'{/localize}, 13, 'Formal Title', NULL, 2, NULL, 13, 0, 0, 1, NULL, NULL), - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}First Name{/ts}'{/localize} , 14, 'First Name' , NULL, 2, NULL, 14, 0, 0, 1, NULL, NULL), - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}Middle Name{/ts}'{/localize} , 15, 'Middle Name' , NULL, 2, NULL, 15, 0, 0, 1, NULL, NULL), - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}Last Name{/ts}'{/localize} , 16, 'Last Name' , NULL, 2, NULL, 16, 0, 0, 1, NULL, NULL), - (@option_group_id_contact_edit_options, {localize}'{ts escape="sql"}Suffix{/ts}'{/localize} , 17, 'Suffix' , NULL, 2, NULL, 17, 0, 0, 1, NULL, NULL); - --- CRM-13857 -ALTER TABLE civicrm_group - ADD COLUMN `modified_id` INT(10) unsigned DEFAULT NULL COMMENT 'FK to contact table, modifier of the group.', - ADD CONSTRAINT `FK_civicrm_group_modified_id` FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL; - --- CRM-13913 -ALTER TABLE civicrm_word_replacement - ALTER COLUMN `is_active` SET DEFAULT 1; - ---CRM-13833 Implement Soft Credit Type for Contribution -INSERT INTO civicrm_option_group - (name, {localize field='title'}title{/localize}, is_reserved, is_active) VALUES ('soft_credit_type', {localize}'{ts escape="sql"}Soft Credit Types{/ts}'{/localize}, 1, 1); - -SELECT @option_group_id_soft_credit_type := max(id) from civicrm_option_group where name = 'soft_credit_type'; - -INSERT INTO `civicrm_option_value` (`option_group_id`, {localize field='label'}`label`{/localize}, `value`, `name`, `weight`, `is_default`, `is_active`, `is_reserved`) - VALUES - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}In Honor of{/ts}'{/localize}, 1, 'in_honor_of', 1, 0, 1, 1), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}In Memory of{/ts}'{/localize}, 2, 'in_memory_of', 2, 0, 1, 1), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Solicited{/ts}'{/localize}, 3, 'solicited', 3, 0, 1, 1), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Household{/ts}'{/localize}, 4, 'household', 4, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Workplace Giving{/ts}'{/localize}, 5, 'workplace', 5, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Foundation Affiliate{/ts}'{/localize}, 6, 'foundation_affiliate', 6, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}3rd-party Service{/ts}'{/localize}, 7, '3rd-party_service', 7, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Donor-advised Fund{/ts}'{/localize}, 8, 'donor-advised_fund', 8, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Matched Gift{/ts}'{/localize}, 9, 'matched_gift', 9, 0, 1, 0), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Personal Campaign Page{/ts}'{/localize}, 10, 'pcp', 10, 0, 1, 1), - (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Gift{/ts}'{/localize}, 11, 'gift', 11, 0, 1, 1); - -ALTER TABLE `civicrm_contribution_soft` - ADD COLUMN `soft_credit_type_id` int(10) unsigned COMMENT 'Soft Credit Type ID.Implicit FK to civicrm_option_value where option_group = soft_credit_type.'; - -INSERT INTO civicrm_contribution_soft(contribution_id, contact_id, amount, currency, soft_credit_type_id) -SELECT id, honor_contact_id, total_amount, currency, honor_type_id -FROM civicrm_contribution -WHERE honor_contact_id IS NOT NULL; - -SELECT @sct_pcp_id := value from civicrm_option_value where name = 'pcp' and option_group_id = @option_group_id_soft_credit_type; - -UPDATE `civicrm_contribution_soft` -SET soft_credit_type_id = @sct_pcp_id -WHERE pcp_id IS NOT NULL; - ---CRM-13734 make basic Case Activity Types reserved -SELECT @option_group_id_activity_type := id from civicrm_option_group where name = 'activity_type'; -SELECT @caseCompId := id FROM `civicrm_component` where `name` like 'CiviCase'; - -UPDATE `civicrm_option_value` -SET is_reserved = 1 -WHERE is_reserved = 0 AND option_group_id = @option_group_id_activity_type AND component_id = @caseCompId; - --- CRM-13912 -ALTER TABLE civicrm_action_schedule -ADD COLUMN `mode` varchar(128) COLLATE utf8_unicode_ci DEFAULT 'Email' COMMENT 'Send the message as email or sms or both.'; - -INSERT INTO -civicrm_option_group (name, {localize field='title'}title{/localize}, is_reserved, is_active) -VALUES -('msg_mode', {localize}'{ts escape="sql"}Message Mode{/ts}'{/localize}, 1, 1); - -SELECT @option_group_id_msg_mode := max(id) from civicrm_option_group where name = 'msg_mode'; - -INSERT INTO -civicrm_option_value (option_group_id, {localize field='label'}`label`{/localize}, value, name, is_default, weight, is_reserved, is_active) -VALUES -(@option_group_id_msg_mode, {localize}'{ts escape="sql"}Email{/ts}'{/localize}, 'Email', 'Email', 1, 1, 1, 1), -(@option_group_id_msg_mode, {localize}'{ts escape="sql"}SMS{/ts}'{/localize},'SMS', 'SMS', 0, 2, 1, 1), -(@option_group_id_msg_mode, {localize}'{ts escape="sql"}User Preference{/ts}'{/localize}, 'User_Preference', 'User Preference', 0, 3, 1, 1); - -ALTER TABLE civicrm_action_schedule ADD sms_provider_id int(10) unsigned NULL COMMENT 'FK to civicrm_sms_provider id '; -ALTER TABLE civicrm_action_schedule ADD CONSTRAINT FK_civicrm_action_schedule_sms_provider_id FOREIGN KEY (`sms_provider_id`) REFERENCES `civicrm_sms_provider` (`id`) ON DELETE SET NULL; - ---CRM-13981 migrate 'In Honor of' to Soft Credits -INSERT INTO `civicrm_uf_group` - (`name`, `group_type`, {localize field='title'}`title`{/localize}, `is_cms_user`, `is_reserved`) -VALUES - ('honoree_individual', 'Individual,Contact', {localize}'{ts escape="sql"}Honoree Individual{/ts}'{/localize}, 0, 1); - -SELECT @uf_group_id_honoree_individual := id from civicrm_uf_group where name = 'honoree_individual'; -SELECT @primaryLocation := id FROM civicrm_location_type WHERE is_default = 1; - -INSERT INTO `civicrm_uf_field` - (`uf_group_id`, `field_name`, `is_required`, `is_reserved`, `weight`, `visibility`, `in_selector`, `is_searchable`, `location_type_id`, {localize field='label'}`label`{/localize}, field_type) -VALUES - (@uf_group_id_honoree_individual, 'prefix_id', 0, 1, 1, 'User and User Admin Only', 0, 1, NULL, {localize}'{ts escape="sql"}Individual Prefix{/ts}'{/localize}, 'Individual'), - (@uf_group_id_honoree_individual, 'first_name', 0, 1, 2, 'User and User Admin Only', 0, 1, NULL, {localize}'{ts escape="sql"}First Name{/ts}'{/localize}, 'Individual'), - (@uf_group_id_honoree_individual, 'last_name', 0, 1, 3, 'User and User Admin Only', 0, 1, NULL, {localize}'{ts escape="sql"}Last Name{/ts}'{/localize}, 'Individual'), - (@uf_group_id_honoree_individual, 'email', 0, 1, 4, 'User and User Admin Only', 0, 1, @primaryLocation, {localize}'{ts escape="sql"}Email Address{/ts}'{/localize}, 'Individual'); - -UPDATE civicrm_uf_join SET uf_group_id = @uf_group_id_honoree_individual WHERE module = 'soft_credit'; - -{if $multilingual} - {foreach from=$locales item=loc} - ALTER TABLE civicrm_contribution_page DROP honor_block_title_{$loc}; - ALTER TABLE civicrm_contribution_page DROP honor_block_text_{$loc}; - {/foreach} -{else} - ALTER TABLE civicrm_contribution_page DROP honor_block_title; - ALTER TABLE civicrm_contribution_page DROP honor_block_text; -{/if} -ALTER TABLE civicrm_contribution_page DROP honor_block_is_active; - -ALTER TABLE civicrm_contribution DROP FOREIGN KEY `FK_civicrm_contribution_honor_contact_id`; -ALTER TABLE civicrm_contribution DROP honor_contact_id; -ALTER TABLE civicrm_contribution DROP honor_type_id; - -ALTER TABLE civicrm_pledge DROP FOREIGN KEY `FK_civicrm_pledge_honor_contact_id`; -ALTER TABLE civicrm_pledge DROP honor_contact_id; -ALTER TABLE civicrm_pledge DROP honor_type_id; - --- CRM-13964 and CRM-13965 -SELECT @option_group_id_cs := max(id) from civicrm_option_group where name = 'contribution_status'; -SELECT @option_val_id_cs_wt := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cs; -SELECT @option_val_id_cs_val := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cs; - -INSERT INTO - `civicrm_option_value` (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES - (@option_group_id_cs, {localize}'{ts escape="sql"}Partially paid{/ts}'{/localize}, @option_val_id_cs_val+1, 'Partially paid', NULL, 0, NULL, @option_val_id_cs_wt+1, 0, 1, 1, NULL, NULL), - (@option_group_id_cs, {localize}'{ts escape="sql"}Pending refund{/ts}'{/localize}, @option_val_id_cs_val+2, 'Pending refund', NULL, 0, NULL, @option_val_id_cs_wt+2, 0, 1, 1, NULL, NULL); - --- participant status adding -SELECT @participant_status_wt := max(id) from civicrm_participant_status_type; - -INSERT INTO civicrm_participant_status_type (name, {localize field='label'}label{/localize}, class, is_reserved, is_active, is_counted, weight, visibility_id) -VALUES - ('Partially paid', {localize}'{ts escape="sql"}Partially paid{/ts}'{/localize}, 'Positive', 1, 1, 1, @participant_status_wt+1, 2), - ('Pending refund', {localize}'{ts escape="sql"}Pending refund{/ts}'{/localize}, 'Positive', 1, 1, 1, @participant_status_wt+2, 2); - --- new activity types required for partial payments -SELECT @option_group_id_act := max(id) from civicrm_option_group where name = 'activity_type'; -SELECT @option_group_id_act_wt := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_act; -SELECT @option_group_id_act_val := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_act; -SELECT @contributeCompId := max(id) FROM civicrm_component where name = 'CiviContribute'; - -INSERT INTO - `civicrm_option_value` (`option_group_id`, {localize field='label'}`label`{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, {localize field='description'}`description`{/localize}, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES - (@option_group_id_act, {localize}'{ts escape="sql"}Payment{/ts}'{/localize}, @option_group_id_act_val+1, 'Payment', NULL, 1, NULL, @option_group_id_act_wt+1, {localize}'{ts escape="sql"}Additional payment recorded for event or membership fee.{/ts}'{/localize}, 0, 1, 1, @contributeCompId, NULL), - (@option_group_id_act, {localize}'{ts escape="sql"}Refund{/ts}'{/localize}, @option_group_id_act_val+2, 'Refund', NULL, 1, NULL, @option_group_id_act_wt+2, {localize}'{ts escape="sql"}Refund recorded for event or membership fee.{/ts}'{/localize}, 0, 1, 1, @contributeCompId, NULL), - (@option_group_id_act, {localize}'{ts escape="sql"}Change Registration{/ts}'{/localize}, @option_group_id_act_val+3, 'Change Registration', NULL, 1, NULL, @option_group_id_act_wt+3, {localize}'{ts escape="sql"}Changes to an existing event registration.{/ts}'{/localize}, 0, 1, 1, @eventCompId, NULL); - --- CRM-13970 -UPDATE civicrm_navigation set url = 'civicrm/admin/options/from_email_address&reset=1' WHERE url LIKE 'civicrm/admin/options/from_email%'; -UPDATE civicrm_navigation set url = CONCAT(SUBSTRING_INDEX(url, '&', 1), '&reset=1') WHERE url LIKE 'civicrm/admin/options/%'; - --- CRM-14181 -ALTER TABLE civicrm_acl CHANGE operation operation VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'What operation does this ACL entry control?'; -ALTER TABLE civicrm_campaign_group CHANGE group_type group_type VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Type of Group.'; -ALTER TABLE `civicrm_acl_contact_cache` CHANGE `operation` `operation` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'What operation does this user have permission on?'; -ALTER TABLE `civicrm_price_field` CHANGE `html_type` `html_type` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; -ALTER TABLE `civicrm_pledge` CHANGE `frequency_unit` `frequency_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'month' COMMENT 'Time units for recurrence of pledge payments.'; -ALTER TABLE `civicrm_membership_type` CHANGE `duration_unit` `duration_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Unit in which membership period is expressed.'; -ALTER TABLE `civicrm_membership_type` CHANGE `period_type` `period_type` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Rolling membership period starts on signup date. Fixed membership periods start on fixed_period_start_day.'; -ALTER TABLE `civicrm_membership_status` CHANGE `start_event` `start_event` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Event when this status starts.'; -ALTER TABLE `civicrm_membership_status` CHANGE `start_event_adjust_unit` `start_event_adjust_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Unit used for adjusting from start_event.'; -ALTER TABLE `civicrm_membership_status` CHANGE `end_event` `end_event` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Event after which this status ends.'; -ALTER TABLE `civicrm_membership_status` CHANGE `end_event_adjust_unit` `end_event_adjust_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Unit used for adjusting from the ending event.'; -ALTER TABLE `civicrm_mailing_job` CHANGE `status` `status` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'The state of this job'; -ALTER TABLE `civicrm_mailing_group` CHANGE `group_type` `group_type` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Are the members of the group included or excluded?.'; -ALTER TABLE `civicrm_mailing` CHANGE `visibility` `visibility` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is the mailing contents visible (online viewing)'; -ALTER TABLE `civicrm_mailing_component` CHANGE `component_type` `component_type` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Type of Component.'; -ALTER TABLE `civicrm_mailing_bounce_type` CHANGE `name` `name` VARCHAR( 24 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'Type of bounce'; -ALTER TABLE `civicrm_participant_status_type` CHANGE `class` `class` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'the general group of status type this one belongs to'; -ALTER TABLE `civicrm_dedupe_rule_group` CHANGE `contact_type` `contact_type` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'The type of contacts this group applies to'; -ALTER TABLE `civicrm_dedupe_rule_group` CHANGE `used` `used` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)'; -ALTER TABLE `civicrm_word_replacement` CHANGE `match_type` `match_type` VARCHAR( 16 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'wildcardMatch'; -ALTER TABLE `civicrm_uf_field` CHANGE `visibility` `visibility` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.'; -ALTER TABLE `civicrm_mapping_field` CHANGE `operator` `operator` VARCHAR( 16 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'SQL WHERE operator for search-builder mapping fields (search criteria).'; -ALTER TABLE `civicrm_job` CHANGE `run_frequency` `run_frequency` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'Daily' COMMENT 'Scheduled job run frequency.'; -ALTER TABLE `civicrm_extension` CHANGE `type` `type` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; -ALTER TABLE `civicrm_custom_group` CHANGE `style` `style` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Visual relationship between this form and its parent.'; -ALTER TABLE `civicrm_custom_field` CHANGE `data_type` `data_type` VARCHAR( 16 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'Controls location of data storage in extended_data table.'; -ALTER TABLE `civicrm_custom_field` CHANGE `html_type` `html_type` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT 'HTML types plus several built-in extended types.'; -ALTER TABLE `civicrm_action_schedule` CHANGE `start_action_unit` `start_action_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Time units for reminder.'; -ALTER TABLE `civicrm_action_schedule` CHANGE `repetition_frequency_unit` `repetition_frequency_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Time units for repetition of reminder.'; -ALTER TABLE `civicrm_action_schedule` CHANGE `end_frequency_unit` `end_frequency_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'Time units till repetition of reminder.'; -ALTER TABLE `civicrm_product` CHANGE `period_type` `period_type` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'rolling' COMMENT 'Rolling means we set start/end based on current day, fixed means we set start/end for current year or month(e.g. 1 year + fixed -> we would set start/end for 1/1/06 thru 12/31/06 for any premium chosen in 2006) '; -ALTER TABLE `civicrm_product` CHANGE `duration_unit` `duration_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'year'; -ALTER TABLE `civicrm_product` CHANGE `frequency_unit` `frequency_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'month' COMMENT 'Frequency unit and interval allow option to store actual delivery frequency for a subscription or service.'; -ALTER TABLE `civicrm_contribution_recur` CHANGE `frequency_unit` `frequency_unit` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'month' COMMENT 'Time units for recurrence of payment.'; -ALTER TABLE `civicrm_subscription_history` CHANGE `method` `method` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'How the (un)subscription was triggered'; -ALTER TABLE `civicrm_subscription_history` CHANGE `status` `status` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'The state of the contact within the group'; -ALTER TABLE `civicrm_relationship_type` CHANGE `contact_type_a` `contact_type_a` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'If defined, contact_a in a relationship of this type must be a specific contact_type.'; -ALTER TABLE `civicrm_relationship_type` CHANGE `contact_type_b` `contact_type_b` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'If defined, contact_b in a relationship of this type must be a specific contact_type.'; -ALTER TABLE `civicrm_group_contact` CHANGE `status` `status` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'status of contact relative to membership in group'; -ALTER TABLE `civicrm_group` CHANGE `visibility` `visibility` VARCHAR( 24 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'User and User Admin Only' COMMENT 'In what context(s) is this field visible.'; -ALTER TABLE `civicrm_contact` CHANGE `preferred_mail_format` `preferred_mail_format` VARCHAR( 8 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'Both' COMMENT 'What is the preferred mode of sending an email.'; - --- CRM-14183 -INSERT IGNORE INTO civicrm_state_province (country_id, abbreviation, name) VALUES (1157, "PL", "Plateau"); -UPDATE civicrm_state_province SET name = "Abuja Federal Capital Territory" WHERE name = "Abuja Capital Territory"; - --- CRM-13992 -ALTER TABLE `civicrm_custom_field` - ADD COLUMN `in_selector` tinyint(4) DEFAULT '0' COMMENT 'Should the multi-record custom field values be displayed in tab table listing'; -UPDATE civicrm_custom_field cf - LEFT JOIN civicrm_custom_group cg - ON cf.custom_group_id = cg.id - SET cf.in_selector = 1 - WHERE cg.is_multiple = 1 AND cf.html_type != 'TextArea'; -ALTER TABLE `civicrm_custom_group` - CHANGE COLUMN `style` `style` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Visual relationship between this form and its parent.'; - --- Add "developer" help menu -SELECT @parent_id := `id` FROM `civicrm_navigation` WHERE `name` = 'Help' AND `domain_id` = {$domainID}; - -INSERT INTO civicrm_navigation -( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) -VALUES -( {$domainID}, NULL, '{ts escape="sql" skip="true"}Developer{/ts}', 'Developer', 'administer CiviCRM', '', @parent_id, '1', NULL, 5 ); - -SET @devellastID:=LAST_INSERT_ID(); -INSERT INTO civicrm_navigation -( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) -VALUES -( {$domainID}, 'civicrm/api', '{ts escape="sql" skip="true"}API Explorer{/ts}','API Explorer', 'administer CiviCRM', '', @devellastID, '1', NULL, 1 ), -( {$domainID}, 'http://wiki.civicrm.org/confluence/display/CRMDOC/Develop', '{ts escape="sql" skip="true"}Developer Docs{/ts}', 'Developer Docs', 'administer CiviCRM', '', @devellastID, '1', NULL, 3 ); - --- CRM-14435 -ALTER TABLE `civicrm_mail_settings` - ADD CONSTRAINT `FK_civicrm_mail_settings_domain_id` FOREIGN KEY (`domain_id`) REFERENCES `civicrm_domain` (`id`) ON DELETE CASCADE; - --- CRM-14436 -ALTER TABLE `civicrm_mailing` - ADD COLUMN `hash` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Key for validating requests related to this mailing.', - ADD INDEX `index_hash` (`hash`); - --- CRM-14300 -UPDATE `civicrm_event` SET is_template = 0 WHERE is_template IS NULL; -ALTER TABLE `civicrm_event` - CHANGE is_template is_template tinyint(4) DEFAULT '0' COMMENT 'whether the event has template'; - --- CRM-14493 -INSERT IGNORE INTO civicrm_state_province (country_id, abbreviation, name) VALUES (1085, "61", "Pieria"); - --- CRM-14445 -ALTER TABLE `civicrm_option_group` - ADD COLUMN `is_locked` int(1) DEFAULT 0 COMMENT 'A lock to remove the ability to add new options via the UI'; - -UPDATE `civicrm_option_group` SET is_locked = 1 WHERE name IN ('contribution_status','activity_contacts','advanced_search_options','auto_renew_options','contact_autocomplete_options','batch_status','batch_type','batch_mode','contact_edit_options','contact_reference_options','contact_smart_group_display','contact_view_options','financial_item_status','mapping_type','pcp_status','user_dashboard_options','tag_used_for'); - --- CRM-14449 -CREATE TABLE IF NOT EXISTS `civicrm_system_log` ( -`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key: ID.', -`message` VARCHAR(128) NOT NULL COMMENT 'Standardized message', -`context` LONGTEXT NULL COMMENT 'JSON encoded data', -`level` VARCHAR(9) NOT NULL DEFAULT 'info' COMMENT 'error level per PSR3', -`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp of when event occurred.', -`contact_id` INT(11) NULL DEFAULT NULL COMMENT 'Optional Contact ID that created the log. Not an FK as we keep this regardless', - hostname VARCHAR(128) NOT NULL COMMENT 'Optional Name of logging host', -PRIMARY KEY (`id`), -INDEX `message` (`message`), -INDEX `contact_id` (`contact_id`), -INDEX `level` (`level`) -) -COMMENT='Table that contains logs of all system events.' -COLLATE='utf8_general_ci'; - --- CRM-14473 civicrm_case_type table creation and migration -CREATE TABLE IF NOT EXISTS `civicrm_case_type` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Autoincremented type id', - `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Machine name for Case Type', - {localize field='title'}title varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Natural language name for Case Type'{/localize}, - {localize field='description'}description varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'Description of the Case Type'{/localize}, - `is_active` tinyint(4) DEFAULT NULL COMMENT 'Is this entry active?', - `is_reserved` tinyint(4) DEFAULT NULL COMMENT 'Is this case type a predefined system type?', - `weight` int(11) NOT NULL DEFAULT '1' COMMENT 'Ordering of the case types', - `definition` blob COMMENT 'xml definition of case type', - PRIMARY KEY (`id`), - UNIQUE KEY `case_type_name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; - -SELECT @option_group_id_case_type := max(id) from civicrm_option_group where name = 'case_type'; - -INSERT IGNORE INTO civicrm_case_type - (id, name, {localize field='title'}title{/localize}, {localize field='description'}description{/localize}, is_active, is_reserved, weight) - SELECT - value, - name, - {localize field='label'}label{/localize}, - {localize field='description'}description{/localize}, - is_active, - is_reserved, - weight - FROM civicrm_option_value - WHERE - option_group_id = @option_group_id_case_type; - --- Remove the special character, earlier used as a separator and reference to civicrm_case_type.id -UPDATE civicrm_case SET case_type_id = replace(case_type_id, 0x01, ''); - -ALTER TABLE civicrm_case - MODIFY case_type_id int(10) unsigned COLLATE utf8_unicode_ci NULL COMMENT 'FK to civicrm_case_type.id', - ADD CONSTRAINT FK_civicrm_case_case_type_id FOREIGN KEY (case_type_id) REFERENCES civicrm_case_type (id) ON DELETE SET NULL; - --- CRM-15343 set the auto increment civicrm_case_type.id start point to max id to avoid conflict in future insertion -SELECT @max_case_type_id := max(id) from civicrm_case_type; -SET @query = CONCAT("ALTER TABLE civicrm_case_type AUTO_INCREMENT = ", IFNULL(@max_case_type_id,1)); -PREPARE alter_case_type_auto_inc FROM @query; -EXECUTE alter_case_type_auto_inc; -DEALLOCATE PREPARE alter_case_type_auto_inc; - -DELETE FROM civicrm_option_value WHERE option_group_id = @option_group_id_case_type; - -DELETE FROM civicrm_option_group WHERE id = @option_group_id_case_type; - --- CRM-14611 -{if $multilingual} - {foreach from=$locales item=locale} - ALTER TABLE civicrm_survey ADD title_{$locale} varchar(255); - UPDATE civicrm_survey SET title_{$locale} = title; - - ALTER TABLE civicrm_survey ADD instructions_{$locale} TEXT; - UPDATE civicrm_survey SET instructions_{$locale} = instructions; - {/foreach} - - ALTER TABLE civicrm_survey DROP title; - ALTER TABLE civicrm_survey DROP instructions; -{/if} - --- CRM-11182 -- Make event confirmation page optional - ALTER TABLE civicrm_event - ADD COLUMN is_confirm_enabled tinyint(4) DEFAULT '1'; - - UPDATE civicrm_event - SET is_confirm_enabled = 1 - WHERE is_monetary = 1; - - UPDATE civicrm_event - SET is_confirm_enabled = 0 - WHERE is_monetary = 0; - --- CRM-11182 -ALTER TABLE civicrm_event - ADD COLUMN dedupe_rule_group_id int(10) unsigned DEFAULT NULL COMMENT 'Rule to use when matching registrations for this event', - ADD CONSTRAINT `FK_civicrm_event_dedupe_rule_group_id` FOREIGN KEY (`dedupe_rule_group_id`) REFERENCES `civicrm_dedupe_rule_group` (`id`); - --- CRM-9288 -SELECT @option_web_id := id FROM civicrm_option_group WHERE name = 'website_type'; - -SELECT @website_default := value FROM civicrm_option_value WHERE option_group_id = @option_web_id and is_default = 1; - -SELECT @website_work := value FROM civicrm_option_value WHERE option_group_id = @option_web_id and name= 'Work'; - -UPDATE civicrm_option_value -SET is_default = 1 WHERE option_group_id = @option_web_id and value = IFNULL(@website_default , @website_work); - -SELECT @website_default := value FROM civicrm_option_value WHERE option_group_id = @option_web_id and is_default = 1; - -ALTER TABLE civicrm_uf_field - ADD COLUMN `website_type_id` int(10) unsigned DEFAULT NULL COMMENT 'Website Type Id, if required' AFTER phone_type_id, - ADD INDEX `IX_website_type_id` (`website_type_id`); - -UPDATE civicrm_uf_field -SET website_type_id = @website_default, -field_name = 'url' WHERE field_name LIKE 'url%'; - -SELECT @website_value := max(cast(value as UNSIGNED)) FROM civicrm_option_value WHERE option_group_id = @option_web_id; -SELECT @website_weight := max(weight) FROM civicrm_option_value WHERE option_group_id = @option_web_id; - -INSERT INTO civicrm_option_value(option_group_id, {localize field='label'}label{/localize}, name, value, weight) -SELECT @option_web_id, {localize}website{/localize}, website, (@website_value := @website_value + 1), (@website_weight := @website_weight + 1) FROM ( -SELECT 'Google+' AS website - UNION ALL -SELECT 'Instagram' AS website - UNION ALL -SELECT 'LinkedIn' AS website - UNION ALL -SELECT 'Pinterest' AS website - UNION ALL -SELECT 'Tumblr' AS website - UNION ALL -SELECT 'SnapChat' AS website - UNION ALL -SELECT 'Vine' AS website -) AS temp -LEFT JOIN civicrm_option_value co ON co.name = temp.website -AND option_group_id = @option_web_id -WHERE co.id IS NULL; - --- CRM-14627 civicrm navigation inconsistent -UPDATE civicrm_navigation -SET civicrm_navigation.url = CONCAT(SUBSTRING(url FROM 1 FOR LOCATE('&', url) - 1), '?', SUBSTRING(url FROM LOCATE('&', url) + 1)) -WHERE civicrm_navigation.url LIKE "%&%" AND civicrm_navigation.url NOT LIKE "%?%"; - --- CRM-14478 Add a "cleanup" policy for managed entities -ALTER TABLE `civicrm_managed` -ADD COLUMN `cleanup` varchar(32) COMMENT 'Policy on when to cleanup entity (always, never, unused)'; - --- CRM-14639 - -SELECT @option_grant_status := id FROM civicrm_option_group WHERE name = 'grant_status'; -UPDATE civicrm_option_value -SET -{if !$multilingual} - label = - CASE - WHEN lower(name) = 'granted' - THEN 'Paid' - WHEN lower(name) = 'approved' - THEN 'Eligible' - WHEN lower(name) = 'rejected' - THEN 'Ineligible' - ELSE 'Submitted' - END, -{else} - {foreach from=$locales item=locale} - label_{$locale} = - CASE - WHEN lower(name) = 'granted' - THEN 'Paid' - WHEN lower(name) = 'approved' - THEN 'Eligible' - WHEN lower(name) = 'rejected' - THEN 'Ineligible' - ELSE 'Submitted' - END, - {/foreach} -{/if} -name = -CASE - WHEN lower(name) = 'granted' - THEN 'Paid' - WHEN lower(name) = 'approved' - THEN 'Eligible' - WHEN lower(name) = 'rejected' - THEN 'Ineligible' - ELSE 'Submitted' -END -WHERE option_group_id = @option_grant_status and name IN ('granted', 'pending', 'approved', 'rejected'); - -SELECT @grant_value := max(cast(value as UNSIGNED)) FROM civicrm_option_value WHERE option_group_id = @option_grant_status; -SELECT @grant_weight := max(weight) FROM civicrm_option_value WHERE option_group_id = @option_grant_status; - -INSERT INTO civicrm_option_value(option_group_id, {localize field='label'}label{/localize}, name, value, weight) -SELECT @option_grant_status, {localize}grantstatus{/localize}, grantstatus, @grant_value := @grant_value + 1, @grant_weight := @grant_weight + 1 FROM ( -SELECT 'Submitted' AS grantstatus - UNION ALL -SELECT 'Approved for Payment' AS grantstatus - UNION ALL -SELECT 'Eligible' AS grantstatus - UNION ALL -SELECT 'Awaiting Information' AS grantstatus - UNION ALL -SELECT 'Withdrawn' AS grantstatus -) AS temp -LEFT JOIN civicrm_option_value co ON co.name = temp.grantstatus -AND option_group_id = @option_grant_status -WHERE co.id IS NULL; - --- Fix trailing single quote in grant status label -{if !$multilingual} - UPDATE civicrm_option_value v - INNER JOIN civicrm_option_group g - ON v.option_group_id = g.id AND g.name = 'grant_status' - SET label = 'Awaiting Information' - WHERE v.label = 'Awaiting Information\'' and v.name = 'Awaiting Information'; -{else} - UPDATE civicrm_option_value v - INNER JOIN civicrm_option_group g - ON v.option_group_id = g.id AND g.name = 'grant_status' - SET - {foreach from=$locales item=locale} - v.label_{$locale} = CASE - WHEN v.label_{$locale} = 'Awaiting Information\'' THEN 'Awaiting Information' - ELSE v.label_{$locale} - END, - {/foreach} - v.name = v.name - WHERE v.name = 'Awaiting Information'; -{/if} - --- CRM-14197 Add contribution_id to civicrm_line_item - -ALTER TABLE civicrm_line_item ADD contribution_id INT(10) unsigned COMMENT 'Contribution ID' NULL AFTER entity_id; - --- FK to civicrm_contribution - -ALTER TABLE civicrm_line_item -ADD CONSTRAINT `FK_civicrm_contribution_id` FOREIGN KEY (`contribution_id`) REFERENCES civicrm_contribution (`id`) ON DELETE SET NULL; - -ALTER TABLE `civicrm_line_item` -DROP INDEX `UI_line_item_value`, -ADD UNIQUE INDEX `UI_line_item_value` (`entity_table`, `entity_id`, `contribution_id`, `price_field_value_id`, `price_field_id`); - --- update case type menu -UPDATE civicrm_navigation set url = 'civicrm/a/#/caseType' WHERE url LIKE 'civicrm/admin/options/case_type%'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha2.mysql.tpl deleted file mode 100644 index d315558c61d200cd6e46861b7e64785adf8985e8..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.alpha2.mysql.tpl +++ /dev/null @@ -1,35 +0,0 @@ -UPDATE civicrm_dashboard - SET civicrm_dashboard.url = CONCAT(SUBSTRING(url FROM 1 FOR LOCATE('&', url) - 1), '?', SUBSTRING(url FROM LOCATE('&', url) + 1)) - WHERE civicrm_dashboard.url LIKE "%&%" AND civicrm_dashboard.url NOT LIKE "%?%"; - -UPDATE civicrm_dashboard - SET civicrm_dashboard.fullscreen_url = CONCAT(SUBSTRING(fullscreen_url FROM 1 FOR LOCATE('&', fullscreen_url) - 1), '?', SUBSTRING(fullscreen_url FROM LOCATE('&', fullscreen_url) + 1)) - WHERE civicrm_dashboard.fullscreen_url LIKE "%&%" AND civicrm_dashboard.fullscreen_url NOT LIKE "%?%"; - --- CRM-14843 Added States for Chile and Modify Santiago Metropolitan for consistency -INSERT IGNORE INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES - (NULL, 1044, "LR", "Los Rios"), - (NULL, 1044, "AP", "Arica y Parinacota"), - (NULL, 1169, "AMA", "Amazonas"); - -UPDATE civicrm_state_province - SET name = "Santiago Metropolitan", abbreviation = "SM" - WHERE name = "Region Metropolitana de Santiago" AND abbreviation = "RM"; - --- CRM-14879 contact fields for scheduled reminders -INSERT INTO civicrm_action_mapping - (entity, entity_value, entity_value_label, entity_status, entity_status_label, entity_date_start, entity_date_end, entity_recipient) - VALUES - ( 'civicrm_contact', 'civicrm_contact', 'Date Field', 'contact_date_reminder_options', 'Annual Options', 'date_field', NULL, NULL); - -INSERT INTO `civicrm_option_group` (`name`, {localize field='title'}`title`{/localize}, `is_reserved`, `is_active`, `is_locked`) - VALUES - ('contact_date_reminder_options', {localize}'{ts escape="sql"}Contact Date Reminder Options{/ts}'{/localize}, 1, 1, 1); - -SELECT @option_group_id_contactDateMode := max(id) from civicrm_option_group where name = 'contact_date_reminder_options'; - -INSERT INTO `civicrm_option_value` - (`option_group_id`, {localize field='label'}`label`{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) - VALUES - (@option_group_id_contactDateMode, {localize}'{ts escape="sql"}Actual date only{/ts}'{/localize}, '1', 'Actual date only', NULL, NULL, 0, 1, 0, 1, 1, NULL, NULL), - (@option_group_id_contactDateMode, {localize}'{ts escape="sql"}Each anniversary{/ts}'{/localize}, '2', 'Each anniversary', NULL, NULL, 0, 2, 0, 1, 1, NULL, NULL); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta1.mysql.tpl deleted file mode 100644 index f1a4e4ba1cef664c2dc3e8ab3cface18ec4e17da..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta1.mysql.tpl +++ /dev/null @@ -1,6 +0,0 @@ -{* file to handle db changes in 4.5.beta1 during upgrade *} --- CRM-14807 -ALTER TABLE `civicrm_action_schedule` - ADD COLUMN `from_name` varchar(255) AFTER `absolute_date`; -ALTER TABLE `civicrm_action_schedule` - ADD COLUMN `from_email` varchar(255) AFTER `from_name`; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta2.mysql.tpl deleted file mode 100644 index 35218350a53f38dd9d9562639dd774a653216656..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta2.mysql.tpl +++ /dev/null @@ -1,13 +0,0 @@ -{* file to handle db changes in 4.5.beta2 during upgrade *} - -{include file='../CRM/Upgrade/4.5.beta2.msg_template/civicrm_msg_template.tpl'} - ---CRM-14948 To delete list of outdated Russian provinance -DELETE FROM `civicrm_state_province` WHERE `name` IN ('Komi-Permyatskiy avtonomnyy okrug','Taymyrskiy (Dolgano-Nenetskiy)','Evenkiyskiy avtonomnyy okrug','Koryakskiy avtonomnyy okrug','Ust\'-Ordynskiy Buryatskiy','Aginskiy Buryatskiy avtonomnyy'); - ---CRM-14948 To update new list of new Russian provinance -UPDATE `civicrm_state_province` SET `name`='Perm krai',`abbreviation`='PEK',`country_id`= 1177 WHERE `id` = 4270; - -UPDATE `civicrm_state_province` SET `name`='Kamchatka Krai',`country_id`= 1177 WHERE `id` = 4252; - -UPDATE `civicrm_state_province` SET `name`='Zabaykalsky Krai',`abbreviation`='ZSK',`country_id`= 1177 WHERE `id` = 4247; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta3.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta3.mysql.tpl deleted file mode 100644 index 27bd4bac6d39a157a7abc07ab6bb972dad0d7e74..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta3.mysql.tpl +++ /dev/null @@ -1,4 +0,0 @@ -{* file to handle db changes in 4.5.beta3 during upgrade *} ---CRM-15009 -ALTER TABLE `civicrm_payment_processor` -CHANGE COLUMN `signature` `signature` LONGTEXT NULL DEFAULT NULL; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta4.mysql.tpl deleted file mode 100644 index a3f33a597811688a02ce99743de188316057f96c..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta4.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.beta4 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta5.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta5.mysql.tpl deleted file mode 100644 index ba5b8053fdfebaca0549354ceac0b883b747c22d..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta5.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.beta5 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta6.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta6.mysql.tpl deleted file mode 100644 index 6d58233b9ab546b28eb35518cd7eebb218e1a718..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta6.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 4.5.beta6 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta7.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta7.mysql.tpl deleted file mode 100644 index 15c91a5eb12f4fead87061328a2b98070ab74d46..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta7.mysql.tpl +++ /dev/null @@ -1,2 +0,0 @@ -{* file to handle db changes in 4.5.beta7 during upgrade *} -UPDATE civicrm_contribution SET net_amount = total_amount - fee_amount WHERE net_amount = 0 OR net_amount IS NULL; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta8.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta8.mysql.tpl deleted file mode 100644 index de6aaf381eef8ccabf1ef0235d3575c10c5f80e9..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta8.mysql.tpl +++ /dev/null @@ -1,18 +0,0 @@ -{* file to handle db changes in 4.5.beta8 during upgrade *} - --- CRM-15143 Add Postal Code to contact reference and quick search options -SELECT @option_group_id_cao := max(id) from civicrm_option_group where name = 'contact_autocomplete_options'; -SELECT @option_val_id_cao_wt := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cao; -SELECT @option_val_id_cao_val := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cao; -INSERT INTO -`civicrm_option_value` (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES -(@option_group_id_cao, {localize}'{ts escape="sql"}Postal Code{/ts}'{/localize}, @option_val_id_cao_val+1, 'postal_code', NULL, 0, NULL, @option_val_id_cao_wt+1, 0, 1, 1, NULL, NULL); - -SELECT @option_group_id_cro := max(id) from civicrm_option_group where name = 'contact_reference_options'; -SELECT @option_val_id_cro_wt := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cro; -SELECT @option_val_id_cro_val := MAX(ROUND(value)) FROM civicrm_option_value WHERE option_group_id = @option_group_id_cro; -INSERT INTO -`civicrm_option_value` (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`) -VALUES -(@option_group_id_cro, {localize}'{ts escape="sql"}Postal Code{/ts}'{/localize}, @option_val_id_cro_val+1, 'postal_code', NULL, 0, NULL, @option_val_id_cro_wt+1, 0, 1, 1, NULL, NULL); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta9.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta9.mysql.tpl deleted file mode 100644 index 8bfdb728ff6b4a765c8e1a7fd2e0c8283704b83a..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.5.beta9.mysql.tpl +++ /dev/null @@ -1,36 +0,0 @@ -{* file to handle db changes in 4.5.beta9 during upgrade *} - --- CRM-15211 -UPDATE `civicrm_dashboard` SET `permission` = 'access my cases and activities,access all cases and activities', `permission_operator` = 'OR' WHERE `name` = 'casedashboard'; - --- CRM-15218 -UPDATE `civicrm_uf_group` SET name = LOWER(name) WHERE name IN ("New_Individual", "New_Organization", "New_Household"); - --- CRM-15220 -UPDATE `civicrm_navigation` SET url = 'civicrm/admin/options/grant_type?reset=1' WHERE url = 'civicrm/admin/options/grant_type&reset=1'; - -SELECT @parent_id := `id` FROM `civicrm_navigation` WHERE `name` = 'CiviGrant' AND `domain_id` = {$domainID}; -INSERT INTO civicrm_navigation -( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) -VALUES -( {$domainID}, 'civicrm/admin/options/grant_status?reset=1', '{ts escape="sql" skip="true"}Grant Status{/ts}', 'Grant Status', 'access CiviGrant,administer CiviCRM', 'AND', @parent_id, '1', NULL, 2 ); - --- CRM-14853 -UPDATE civicrm_financial_trxn cft -INNER JOIN ( SELECT max(cft.id) trxn_id, ceft.entity_id contribution_id -FROM civicrm_financial_trxn cft -LEFT JOIN civicrm_entity_financial_trxn ceft ON ceft.financial_trxn_id = cft.id -WHERE ceft.entity_table = 'civicrm_contribution' -GROUP BY ceft.entity_id ) as temp ON temp.trxn_id = cft.id -INNER JOIN civicrm_contribution cc ON cc.id = temp.contribution_id -AND cc.payment_instrument_id <> cft.payment_instrument_id -SET cft.payment_instrument_id = cc.payment_instrument_id; - ---CRM-15086 -SELECT @option_group_id_batch_status := id FROM civicrm_option_group WHERE name = 'batch_status'; - -UPDATE civicrm_option_value SET name = 'Open' WHERE value = 1 AND option_group_id = @option_group_id_batch_status; -UPDATE civicrm_option_value SET name = 'Closed' WHERE value = 2 AND option_group_id = @option_group_id_batch_status; -UPDATE civicrm_option_value SET name = 'Data Entry' WHERE value = 3 AND option_group_id = @option_group_id_batch_status; -UPDATE civicrm_option_value SET name = 'Reopened' WHERE value = 4 AND option_group_id = @option_group_id_batch_status; -UPDATE civicrm_option_value SET name = 'Exported' WHERE value = 5 AND option_group_id = @option_group_id_batch_status; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.29.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.29.alpha1.mysql.tpl index 18b176d4b0f0de31ccc1b70281538caa5d8822ef..b28c407113fc7c8e4973d8f19efd8dd89e940aad 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.29.alpha1.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.29.alpha1.mysql.tpl @@ -27,7 +27,7 @@ CREATE TABLE `civicrm_relationship_cache` ( CONSTRAINT FK_civicrm_relationship_cache_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_cache_near_contact_id FOREIGN KEY (`near_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_relationship_cache_far_contact_id FOREIGN KEY (`far_contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; +) ENGINE=InnoDB; -- Fix missing resubscribeUrl token. There doesn't seem to be any precedent -- for doing an upgrade for these, since the last update was in 2009 when diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.43.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.43.alpha1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..943d62201f23158ecd36b77fc96c1c68d3333f35 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.43.alpha1.mysql.tpl @@ -0,0 +1,7 @@ +{* file to handle db changes in 5.43.alpha1 during upgrade *} +UPDATE civicrm_msg_template SET is_reserved = 0 WHERE is_reserved IS NULL; +ALTER TABLE civicrm_msg_template +MODIFY COLUMN `is_reserved` tinyint(4) DEFAULT 0 COMMENT 'is this the reserved message template which we ship for the workflow referenced by workflow_id?'; + +{* https://github.com/civicrm/civicrm-core/pull/21472 *} +ALTER TABLE civicrm_contribution_recur MODIFY COLUMN modified_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received'; diff --git a/civicrm/CRM/Upgrade/Page/Upgrade.php b/civicrm/CRM/Upgrade/Page/Upgrade.php index 06a377924c141abcfc58504a5249f41437250b69..28b900df42c5efe4929720492f19ac3844e8995a 100644 --- a/civicrm/CRM/Upgrade/Page/Upgrade.php +++ b/civicrm/CRM/Upgrade/Page/Upgrade.php @@ -29,10 +29,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { * @throws \Exception */ public function run() { - // lets get around the time limit issue if possible for upgrades - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); Civi::resources()->addStyleFile('civicrm', 'css/admin.css'); @@ -77,7 +74,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { $upgrade = new CRM_Upgrade_Form(); $template = CRM_Core_Smarty::singleton(); list($currentVer, $latestVer) = $upgrade->getUpgradeVersions(); - + CRM_Core_Smarty::singleton()->assign('sid', CRM_Utils_System::getSiteID()); // Show success msg if db already upgraded if (version_compare($currentVer, $latestVer) == 0) { $template->assign('upgraded', TRUE); @@ -191,7 +188,6 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { $template->assign('message', $postUpgradeMessage); $template->assign('upgraded', TRUE); - $template->assign('sid', CRM_Utils_System::getSiteID()); $template->assign('newVersion', $latestVer); // Render page header diff --git a/civicrm/CRM/Utils/Array.php b/civicrm/CRM/Utils/Array.php index bbc931c38f91e27c54393b4f359c6dfdd1b164f3..f507f7978b8d382a5707b3f327b6587a4c8ee302 100644 --- a/civicrm/CRM/Utils/Array.php +++ b/civicrm/CRM/Utils/Array.php @@ -1167,6 +1167,38 @@ class CRM_Utils_Array { } } + /** + * Attempt to synchronize or fill aliased items. + * + * If $canonPath is set, copy to $altPath; or... + * If $altPath is set, copy to $canonPath. + * + * @param array $params + * Data-tree + * @param string[] $canonPath + * Preferred path + * @param string[] $altPath + * Old/alternate/deprecated path. + * @param callable|null $filter + * Optional function to filter the value as it passes through (canonPath=>altPath or altPath=>canonPath). + * function(mixed $v, bool $isCanon): mixed + */ + public static function pathSync(&$params, $canonPath, $altPath, ?callable $filter = NULL) { + $MISSING = new \stdClass(); + + $v = static::pathGet($params, $canonPath, $MISSING); + if ($v !== $MISSING) { + static::pathSet($params, $altPath, $filter ? $filter($v, TRUE) : $v); + return; + } + + $v = static::pathGet($params, $altPath, $MISSING); + if ($v !== $MISSING) { + static::pathSet($params, $canonPath, $filter ? $filter($v, FALSE) : $v); + return; + } + } + /** * Convert a simple dictionary into separate key+value records. * diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index 093862b8449ce954dd0c459447dff8131720c810..d2a7bab78daaa66d81e460af5e209bfb1a71d886 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -160,8 +160,10 @@ class CRM_Utils_Date { * */ public static function getAbbrWeekdayNames() { - static $days = []; + $key = 'abbrDays_' . \CRM_Core_I18n::getLocale(); + $days = &\Civi::$statics[__CLASS__][$key]; if (!$days) { + $days = []; // First day of the week $firstDay = Civi::settings()->get('weekBegins'); @@ -189,8 +191,10 @@ class CRM_Utils_Date { * */ public static function getFullWeekdayNames() { - static $days = []; + $key = 'fullDays_' . \CRM_Core_I18n::getLocale(); + $days = &\Civi::$statics[__CLASS__][$key]; if (!$days) { + $days = []; // First day of the week $firstDay = Civi::settings()->get('weekBegins'); @@ -214,7 +218,8 @@ class CRM_Utils_Date { * */ public static function &getAbbrMonthNames($month = FALSE) { - static $abbrMonthNames; + $key = 'abbrMonthNames_' . \CRM_Core_I18n::getLocale(); + $abbrMonthNames = &\Civi::$statics[__CLASS__][$key]; if (!isset($abbrMonthNames)) { // set LC_TIME and build the arrays from locale-provided names @@ -237,16 +242,28 @@ class CRM_Utils_Date { * */ public static function &getFullMonthNames() { - static $fullMonthNames; - if (!isset($fullMonthNames)) { - - // set LC_TIME and build the arrays from locale-provided names - CRM_Core_I18n::setLcTime(); - for ($i = 1; $i <= 12; $i++) { - $fullMonthNames[$i] = strftime('%B', mktime(0, 0, 0, $i, 10, 1970)); - } + $key = 'fullMonthNames_' . \CRM_Core_I18n::getLocale(); + if (empty(\Civi::$statics[__CLASS__][$key])) { + // Not relying on strftime because it depends on the operating system + // and most people will not have a non-US locale configured out of the box + // Ignoring other date names for now, since less visible by default + \Civi::$statics[__CLASS__][$key] = [ + 1 => ts('January'), + 2 => ts('February'), + 3 => ts('March'), + 4 => ts('April'), + 5 => ts('May'), + 6 => ts('June'), + 7 => ts('July'), + 8 => ts('August'), + 9 => ts('September'), + 10 => ts('October'), + 11 => ts('November'), + 12 => ts('December'), + ]; } - return $fullMonthNames; + + return \Civi::$statics[__CLASS__][$key]; } /** diff --git a/civicrm/CRM/Utils/GuzzleMiddleware.php b/civicrm/CRM/Utils/GuzzleMiddleware.php index b6e8fb7e2d4232cf8d1cdbb16c4bee928cd21de3..0c9815361265abe5839d95abfa7c7ade40b66a71 100644 --- a/civicrm/CRM/Utils/GuzzleMiddleware.php +++ b/civicrm/CRM/Utils/GuzzleMiddleware.php @@ -8,6 +8,106 @@ use Psr\Http\Message\RequestInterface; */ class CRM_Utils_GuzzleMiddleware { + /** + * The authx middleware sends authenticated requests via JWT. + * + * To add an authentication token to a specific request, the `$options` + * must specify `authx_user` or `authx_contact_id`. Examples: + * + * $http = new GuzzleHttp\Client(['authx_user' => 'admin']); + * $http->post('civicrm/admin', ['authx_user' => 'admin']); + * + * Supported options: + * - authx_ttl (int): Seconds of validity for JWT's + * - authx_host (string): Only send tokens for the given host. + * - authx_contact_id (int): The CiviCRM contact to authenticate with + * - authx_user (string): The CMS user to authenticate with + * - authx_flow (string): How to format the auth token. One of: 'param', 'xheader', 'header'. + * + * @return \Closure + */ + public static function authx($defaults = []) { + $defaults = array_merge([ + 'authx_ttl' => 60, + 'authx_host' => parse_url(CIVICRM_UF_BASEURL, PHP_URL_HOST), + 'authx_contact_id' => NULL, + 'authx_user' => NULL, + 'authx_flow' => 'param', + ], $defaults); + return function(callable $handler) use ($defaults) { + return function (RequestInterface $request, array $options) use ($handler, $defaults) { + if ($request->getUri()->getHost() !== $defaults['authx_host']) { + return $handler($request, $options); + } + + $options = array_merge($defaults, $options); + if (!empty($options['authx_contact_id'])) { + $cid = $options['authx_contact_id']; + } + elseif (!empty($options['authx_user'])) { + $r = civicrm_api3("Contact", "get", ["id" => "@user:" . $options['authx_user']]); + foreach ($r['values'] as $id => $value) { + $cid = $id; + break; + } + if (empty($cid)) { + throw new \RuntimeException("Failed to identify user ({$options['authx_user']})"); + } + } + else { + $cid = NULL; + } + + if ($cid) { + if (!CRM_Extension_System::singleton()->getMapper()->isActiveModule('authx')) { + throw new \RuntimeException("Authx is not enabled. Authenticated requests will not work."); + } + $tok = \Civi::service('crypto.jwt')->encode([ + 'exp' => time() + $options['authx_ttl'], + 'sub' => 'cid:' . $cid, + 'scope' => 'authx', + ]); + + switch ($options['authx_flow']) { + case 'header': + $request = $request->withHeader('Authorization', "Bearer $tok"); + break; + + case 'xheader': + $request = $request->withHeader('X-Civi-Auth', "Bearer $tok"); + break; + + case 'param': + if ($request->getMethod() === 'POST') { + if (!empty($request->getHeader('Content-Type')) && !preg_grep(';application/x-www-form-urlencoded;', $request->getHeader('Content-Type'))) { + throw new \RuntimeException("Cannot append authentication credentials to HTTP POST. Unrecognized content type."); + } + $query = (string) $request->getBody(); + $request = $request->withHeader('Content-Type', 'application/x-www-form-urlencoded'); + $request = new GuzzleHttp\Psr7\Request( + $request->getMethod(), + $request->getUri(), + $request->getHeaders(), + http_build_query(['_authx' => "Bearer $tok"]) . ($query ? '&' : '') . $query + ); + } + else { + $query = $request->getUri()->getQuery(); + $request = $request->withUri($request->getUri()->withQuery( + http_build_query(['_authx' => "Bearer $tok"]) . ($query ? '&' : '') . $query + )); + } + break; + + default: + throw new \RuntimeException("Unrecognized authx flow: {$options['authx_flow']}"); + } + } + return $handler($request, $options); + }; + }; + } + /** * Add this as a Guzzle handler/middleware if you wish to simplify * the construction of Civi-related URLs. It enables URL schemes for: diff --git a/civicrm/CRM/Utils/HttpClient.php b/civicrm/CRM/Utils/HttpClient.php index c2d12ae18cffc677d923bd78b7b1c62a78147289..0286c4f793263d50225ab2106091b1d7881bff8f 100644 --- a/civicrm/CRM/Utils/HttpClient.php +++ b/civicrm/CRM/Utils/HttpClient.php @@ -201,7 +201,7 @@ class CRM_Utils_HttpClient { * @return bool */ public function isRedirectSupported() { - return (ini_get('open_basedir') == '') && (ini_get('safe_mode') == 'Off' || ini_get('safe_mode') == '' || ini_get('safe_mode') === FALSE); + return (ini_get('open_basedir') == ''); } } diff --git a/civicrm/CRM/Utils/PDF/Document.php b/civicrm/CRM/Utils/PDF/Document.php index e087a9228aacff7e805a1de6542692d7efed07f7..0b796322a2e82210d5b1b56689a99f27830bdca9 100644 --- a/civicrm/CRM/Utils/PDF/Document.php +++ b/civicrm/CRM/Utils/PDF/Document.php @@ -68,6 +68,15 @@ class CRM_Utils_PDF_Document { 'marginBottom' => self::toTwip(CRM_Core_BAO_PdfFormat::getValue('margin_bottom', $format), $metric), 'marginLeft' => self::toTwip(CRM_Core_BAO_PdfFormat::getValue('margin_left', $format), $metric), ]; + if (CIVICRM_UF === 'UnitTests' && headers_sent()) { + // Streaming content will 'die' in unit tests unless ob_start() + // has been called. + throw new CRM_Core_Exception_PrematureExitException('_html2doc called', [ + 'html' => $pages, + 'fileName' => $fileName, + 'pageStyle' => $pageStyle, + ]); + } $ext = pathinfo($fileName, PATHINFO_EXTENSION); diff --git a/civicrm/CRM/Utils/PDF/Utils.php b/civicrm/CRM/Utils/PDF/Utils.php index 2459ce3af24d252599e6b4f2de72e23519e4fd48..8c97d681a80569fe7fb17460ffde7d3568969215 100644 --- a/civicrm/CRM/Utils/PDF/Utils.php +++ b/civicrm/CRM/Utils/PDF/Utils.php @@ -179,10 +179,7 @@ class CRM_Utils_PDF_Utils { * @return string */ public static function _html2pdf_dompdf($paper_size, $orientation, $html, $output, $fileName) { - // CRM-12165 - Remote file support required for image handling. - $options = new Options(); - $options->set('isRemoteEnabled', TRUE); - + $options = self::getDompdfOptions(); $dompdf = new DOMPDF($options); $dompdf->set_paper($paper_size, $orientation); $dompdf->load_html($html); @@ -300,4 +297,28 @@ class CRM_Utils_PDF_Utils { return $value; } + /** + * Allow setting some dompdf options. + * + * We don't support all the available dompdf options. + * + * @return \Dompdf\Options + */ + private static function getDompdfOptions(): Options { + $options = new Options(); + $settings = [ + // CRM-12165 - Remote file support required for image handling so default to TRUE + 'enable_remote' => \Civi::settings()->get('dompdf_enable_remote') ?? TRUE, + ]; + // only set these ones if a setting exists for them + foreach (['font_dir', 'chroot', 'log_output_file'] as $setting) { + $value = \Civi::settings()->get("dompdf_$setting"); + if (isset($value)) { + $settings[$setting] = $value; + } + } + $options->set($settings); + return $options; + } + } diff --git a/civicrm/CRM/Utils/System/Backdrop.php b/civicrm/CRM/Utils/System/Backdrop.php index 3d72779f15692f5b2825f865f65d7edd8cbbd434..3fb3b6cc776b39c618b8fbe14db05a705a00817e 100644 --- a/civicrm/CRM/Utils/System/Backdrop.php +++ b/civicrm/CRM/Utils/System/Backdrop.php @@ -1056,4 +1056,16 @@ AND u.status = 1 return ['ufAccessURL' => url('admin/config/people/permissions')]; } + /** + * Get the CRM database as a 'prefix'. + * + * This returns a string that can be prepended to a query to include a CRM table. + * + * However, this string should contain backticks, or not, in accordance with the + * CMS's drupal views expectations, if any. + */ + public function getCRMDatabasePrefix(): string { + return str_replace(parent::getCRMDatabasePrefix(), '`', ''); + } + } diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index e08bad2c069a0a7ee567575011cda4f79baa7a15..933a952a597e595a41ef491cd9b5811f7f44138b 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -1051,6 +1051,23 @@ abstract class CRM_Utils_System_Base { return []; } + /** + * Get the CRM database as a 'prefix'. + * + * This returns a string that can be prepended to a query to include a CRM table. + * + * However, this string should contain backticks, or not, in accordance with the + * CMS's drupal views expectations, if any. + */ + public function getCRMDatabasePrefix(): string { + $crmDatabase = DB::parseDSN(CRM_Core_Config::singleton()->dsn)['database']; + $cmsDatabase = DB::parseDSN(CRM_Core_Config::singleton()->userFrameworkDSN)['database']; + if ($crmDatabase === $cmsDatabase) { + return ''; + } + return "`$crmDatabase`."; + } + /** * Invalidates the cache of dynamic routes and forces a rebuild. */ diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index a1ef60ee45fb4d66daff3039b7085e308bcd4331..06db4707141284d712b0bd74a149d1154a8ad088 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -82,10 +82,11 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { // self-registers. // - 'register_pending_approval': Welcome message, user pending admin // approval. - // @Todo: Should we only send off emails if $params['notify'] is set? switch (TRUE) { case $user_register_conf == 'admin_only' || $user->isAuthenticated(): - _user_mail_notify('register_admin_created', $account); + if (!empty($params['notify'])) { + _user_mail_notify('register_admin_created', $account); + } break; case $user_register_conf == 'visitors': diff --git a/civicrm/CRM/Utils/System/UnitTests.php b/civicrm/CRM/Utils/System/UnitTests.php index 6ac827fa919a022e6f4bccfdd3f3df363d01218c..547b93f98dbf0446030a139e9416dd3376c9d9ff 100644 --- a/civicrm/CRM/Utils/System/UnitTests.php +++ b/civicrm/CRM/Utils/System/UnitTests.php @@ -34,6 +34,7 @@ class CRM_Utils_System_UnitTests extends CRM_Utils_System_Base { $listenerMap = \Civi\Core\Event\EventScanner::findListeners($test); \Civi::dispatcher()->addListenerMap($test, $listenerMap); } + \Civi\Test::eventChecker()->addListeners(); } /** diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index d69c0fcc21af2c28f86f7e0806cd19d4f0af88c5..5348ae6cf1433fe7e98881179505a8abd2c3b8f9 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -922,7 +922,10 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { if (!current_user_can('create_users')) { $creds = []; $creds['user_login'] = $params['cms_name']; + $creds['user_password'] = $user_data['user_pass']; $creds['remember'] = TRUE; + + // @todo handle a wp_signon failure wp_signon($creds, FALSE); } diff --git a/civicrm/CRM/Utils/Token.php b/civicrm/CRM/Utils/Token.php index f2aec1d44e89fe1b062e628efc166bc69e0fcbbd..3dddf5602f09285cb0cd813e8aeb047b4c91fec5 100644 --- a/civicrm/CRM/Utils/Token.php +++ b/civicrm/CRM/Utils/Token.php @@ -257,56 +257,11 @@ class CRM_Utils_Token { * @return null|string */ public static function getDomainTokenReplacement($token, $domain, $html = FALSE, $escapeSmarty = FALSE): ?string { - // check if the token we were passed is valid - // we have to do this because this function is - // called only when we find a token in the string - - $loc = $domain->getLocationValues(); - - if (!in_array($token, self::$_tokens['domain'])) { - $value = "{domain.$token}"; - } - elseif ($token === 'address') { - $cacheKey = __CLASS__ . 'address_token_cache' . CRM_Core_Config::domainID(); - $addressCache = Civi::cache()->has($cacheKey) ? Civi::cache()->get($cacheKey) : []; - - $fieldKey = $html ? 'address-html' : 'address-text'; - if (array_key_exists($fieldKey, $addressCache)) { - return $addressCache[$fieldKey]; - } - - $value = NULL; - // Construct the address token - - if (!empty($loc[$token])) { - if ($html) { - $value = str_replace("\n", '<br />', $loc[$token][1]['display']); - } - else { - $value = $loc[$token][1]['display_text']; - } - Civi::cache()->set($cacheKey, $addressCache); - } - } - elseif ($token === 'name' || $token === 'id' || $token === 'description') { - $value = $domain->$token; - } - elseif ($token === 'phone' || $token === 'email') { - // Construct the phone and email tokens - - $value = NULL; - if (!empty($loc[$token])) { - foreach ($loc[$token] as $index => $entity) { - $value = $entity[$token]; - break; - } - } - } - + $tokens = CRM_Core_DomainTokens::getDomainTokenValues($domain->id, $html); + $value = $tokens[$token] ?? "{domain.$token}"; if ($escapeSmarty) { $value = self::tokenEscapeSmarty($value); } - return $value; } @@ -341,6 +296,7 @@ class CRM_Utils_Token { * The processed string */ public static function replaceOrgTokens($str, &$org, $html = FALSE, $escapeSmarty = FALSE) { + CRM_Core_Error::deprecatedFunctionWarning('token processor'); self::$_tokens['org'] = array_merge( array_keys(CRM_Contact_BAO_Contact::importableFields('Organization')), @@ -715,7 +671,7 @@ class CRM_Utils_Token { // we have to do this because this function is // called only when we find a token in the string - if (!in_array($token, self::$_tokens['contact'])) { + if (!in_array(str_replace(':label', '', $token), self::$_tokens['contact'])) { $noReplace = TRUE; } elseif ($token == 'checksum') { @@ -729,10 +685,10 @@ class CRM_Utils_Token { $value = "cs={$cs}"; } else { - $value = (array) CRM_Utils_Array::retrieveValueRecursive($contact, $token); + $value = (array) CRM_Utils_Array::retrieveValueRecursive($contact, str_replace(':label', '', $token)); foreach ($value as $index => $item) { - $value[$index] = self::convertPseudoConstantsUsingMetadata($value[$index], $token); + $value[$index] = self::convertPseudoConstantsUsingMetadata($value[$index], str_replace(':label', '', $token)); } $value = implode(', ', $value); } @@ -821,6 +777,7 @@ class CRM_Utils_Token { * @param string $entityType * @return string * html parsed through smarty + * @deprecated */ public static function parseThroughSmarty($tokenHtml, $entity, $entityType = 'contact') { if (defined('CIVICRM_MAIL_SMARTY') && CIVICRM_MAIL_SMARTY) { @@ -867,6 +824,8 @@ class CRM_Utils_Token { * * this routine will remove the extra backslashes and braces * + * @deprecated + * * @param $str ref to the string that will be scanned and modified */ public static function unescapeTokens(&$str) { @@ -1066,8 +1025,11 @@ class CRM_Utils_Token { * * @return string * The processed string + * + * @deprecated */ - public static function &replaceComponentTokens(&$str, $contact, $components, $escapeSmarty = FALSE, $returnEmptyToken = TRUE) { + public static function replaceComponentTokens(&$str, $contact, $components, $escapeSmarty = FALSE, $returnEmptyToken = TRUE) { + CRM_Core_Error::deprecatedFunctionWarning('use the token processor'); if (!is_array($components) || empty($contact)) { return $str; } @@ -1321,6 +1283,8 @@ class CRM_Utils_Token { * Get Membership Token Details. * @param array $membershipIDs * Array of membership IDS. + * + * @deprecated */ public static function getMembershipTokenDetails($membershipIDs) { $memberships = civicrm_api3('membership', 'get', [ @@ -1559,20 +1523,42 @@ class CRM_Utils_Token { return $value; } + /** + * @deprecated + * + * Do not use this function - it still needs full removal from active code + * in CRM_Contribute_Form_Task_PDFLetter. + */ protected static function _buildContributionTokens() { $key = 'contribution'; if (!isset(Civi::$statics[__CLASS__][__FUNCTION__][$key])) { - $processor = new CRM_Contribute_Tokens(); $tokens = array_merge(CRM_Contribute_BAO_Contribution::exportableFields('All'), ['campaign' => [], 'financial_type' => [], 'payment_instrument' => []], self::getCustomFieldTokens('Contribution'), - $processor->getPseudoTokens() + [ + 'financial_type_id:label', + 'financial_type_id:name', + 'contribution_page_id:label', + 'contribution_page_id:name', + 'payment_instrument_id:label', + 'payment_instrument_id:name', + 'is_test:label', + 'is_pay_later:label', + 'contribution_status_id:label', + 'contribution_status_id:name', + 'is_template:label', + 'campaign_id:label', + 'campaign_id:name', + ] ); foreach ($tokens as $token) { if (!empty($token['name'])) { $tokens[$token['name']] = []; } + elseif (is_string($token) && strpos($token, ':') !== FALSE) { + $tokens[$token] = []; + } } Civi::$statics[__CLASS__][__FUNCTION__][$key] = array_keys($tokens); } @@ -1580,21 +1566,10 @@ class CRM_Utils_Token { } /** - * Store membership tokens on the static _tokens array. - */ - protected static function _buildMembershipTokens() { - $key = 'membership'; - if (!isset(self::$_tokens[$key]) || self::$_tokens[$key] == NULL) { - $membershipTokens = []; - $tokens = CRM_Core_SelectValues::membershipTokens(); - foreach ($tokens as $token => $dontCare) { - $membershipTokens[] = substr($token, (strpos($token, '.') + 1), -1); - } - self::$_tokens[$key] = $membershipTokens; - } - } - - /** + * Do not use. + * + * @deprecated + * * Replace tokens for an entity. * @param string $entity * @param array $entityArray @@ -1616,7 +1591,12 @@ class CRM_Utils_Token { $fn = is_callable(['CRM_Utils_Token', $fn]) ? $fn : 'getApiTokenReplacement'; // since we already know the tokens lets just use them & do str_replace which is faster & simpler than preg_replace foreach ($knownTokens[$entity] as $token) { - $replacement = self::$fn($entity, $token, $entityArray); + // We are now supporting the syntax case_type_id:label + // so strip anything after the ':' + // (we aren't supporting 'name' at this stage, so we can assume 'label' + // test cover in TokenConsistencyTest. + $parts = explode(':', $token); + $replacement = self::$fn($entity, $parts[0], $entityArray); if ($escapeSmarty) { $replacement = self::tokenEscapeSmarty($replacement); } @@ -1626,6 +1606,8 @@ class CRM_Utils_Token { } /** + * @deprecated + * * @param int $caseId * @param string $str * @param array $knownTokens @@ -1647,6 +1629,8 @@ class CRM_Utils_Token { /** * Generic function for formatting token replacement for an api field * + * @deprecated + * * @param string $entity * @param string $token * @param array $entityArray @@ -1673,13 +1657,15 @@ class CRM_Utils_Token { return implode(', ', $ret); } // Format date fields - elseif ($entityArray[$token] && $fieldType == CRM_Utils_Type::T_DATE) { + elseif ($entityArray[$token] && in_array($fieldType, [CRM_Utils_Type::T_DATE, CRM_Utils_Type::T_TIMESTAMP, (CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME)])) { return CRM_Utils_Date::customFormat($entityArray[$token]); } return implode(', ', (array) $entityArray[$token]); } /** + * Do not use - unused in core. + * * Replace Contribution tokens in html. * * @param string $str @@ -1688,6 +1674,8 @@ class CRM_Utils_Token { * @param string $knownTokens * @param bool|string $escapeSmarty * + * @deprecated + * * @return mixed */ public static function replaceContributionTokens($str, &$contribution, $html = FALSE, $knownTokens = NULL, $escapeSmarty = FALSE) { @@ -1729,9 +1717,12 @@ class CRM_Utils_Token { * @param array $contributions * @param array $knownTokens * + * @deprecated + * * @return string */ public static function replaceMultipleContributionTokens(string $separator, string $str, array $contributions, array $knownTokens): string { + CRM_Core_Error::deprecatedFunctionWarning('no alternative'); foreach ($knownTokens['contribution'] ?? [] as $token) { $resolvedTokens = []; foreach ($contributions as $contribution) { @@ -1745,6 +1736,14 @@ class CRM_Utils_Token { /** * Get replacement strings for any membership tokens (only a small number of tokens are implemnted in the first instance * - this is used by the pdfLetter task from membership search + * + * This is called via replaceEntityTokens. + * + * In the near term it will not be called at all from core as + * the pdf letter task is updated to use the processor. + * + * @deprecated + * * @param string $entity * should always be "membership" * @param string $token @@ -1754,13 +1753,29 @@ class CRM_Utils_Token { * @return string token replacement */ public static function getMembershipTokenReplacement($entity, $token, $membership) { - self::_buildMembershipTokens(); + $supportedTokens = [ + 'id', + 'status', + 'status_id', + 'type', + 'membership_type_id', + 'start_date', + 'join_date', + 'end_date', + 'fee', + ]; switch ($token) { case 'type': + // membership_type_id would only be requested if the calling + // class is mapping it to '{membership:membership_type_id:label'} + case 'membership_type_id': $value = $membership['membership_name']; break; case 'status': + // status_id would only be requested if the calling + // class is mapping it to '{membership:status_id:label'} + case 'status_id': $statuses = CRM_Member_BAO_Membership::buildOptions('status_id'); $value = $statuses[$membership['status_id']]; break; @@ -1781,7 +1796,7 @@ class CRM_Utils_Token { break; default: - if (in_array($token, self::$_tokens[$entity])) { + if (in_array($token, $supportedTokens)) { $value = $membership[$token]; if (CRM_Utils_String::endsWith($token, '_date')) { $value = CRM_Utils_Date::customFormat($value); @@ -1798,15 +1813,19 @@ class CRM_Utils_Token { } /** + * Do not use - unused in core. + * * @param $token * @param $contribution * @param bool $html * @param bool $escapeSmarty * + * @deprecated + * * @return mixed|string * @throws \CRM_Core_Exception */ - public static function getContributionTokenReplacement($token, &$contribution, $html = FALSE, $escapeSmarty = FALSE) { + public static function getContributionTokenReplacement($token, $contribution, $html = FALSE, $escapeSmarty = FALSE) { self::_buildContributionTokens(); switch ($token) { @@ -1827,6 +1846,10 @@ class CRM_Utils_Token { $value = CRM_Utils_Date::customFormat($value, $config->dateformatDatetime); break; + case 'source': + $value = CRM_Utils_Array::retrieveValueRecursive($contribution, 'contribution_source'); + break; + default: if (!in_array($token, self::$_tokens['contribution'])) { $value = "{contribution.$token}"; @@ -1859,19 +1882,17 @@ class CRM_Utils_Token { /** * Get all custom field tokens of $entity * - * @param string $entity - * @param bool $usedForTokenWidget + * @deprecated * + * @param string $entity * @return array * return custom field tokens in array('custom_N' => 'label') format */ - public static function getCustomFieldTokens($entity, $usedForTokenWidget = FALSE) { + public static function getCustomFieldTokens($entity) { $customTokens = []; - $tokenName = $usedForTokenWidget ? "{contribution.custom_%d}" : "custom_%d"; foreach (CRM_Core_BAO_CustomField::getFields($entity) as $id => $info) { - $customTokens[sprintf($tokenName, $id)] = $info['label']; + $customTokens['custom_' . $id] = $info['label'] . ' :: ' . $info['groupTitle']; } - return $customTokens; } @@ -1947,6 +1968,12 @@ class CRM_Utils_Token { 'contribution_invoice_receipt' => [ '$display_name' => 'contact.display_name', ], + 'contribution_online_receipt' => [ + '$contributeMode' => 'no longer available / relevant', + '$first_name' => 'contact.first_name', + '$last_name' => 'contact.last_name', + '$displayName' => 'contact.display_name', + ], ], ]; } diff --git a/civicrm/Civi.php b/civicrm/Civi.php index a018bb54d9d2ef2ff07fd2f682688783a3b13de7..f087d19c8d6b00ceefb777d1b1d81c86d94ef44a 100644 --- a/civicrm/Civi.php +++ b/civicrm/Civi.php @@ -1,5 +1,7 @@ <?php +use Civi\Core\Format; + /** * Class Civi * @@ -103,6 +105,15 @@ class Civi { return \Civi\Core\Container::getBootService('paths'); } + /** + * Obtain the formatting object. + * + * @return \Civi\Core\Format + */ + public static function format(): Format { + return new Civi\Core\Format(); + } + /** * Fetch a service from the container. * diff --git a/civicrm/Civi/API/Request.php b/civicrm/Civi/API/Request.php index 5ad9b9d21996acc4424cd11b620bdae0609f50b9..65d5c280353b9d76edf2f281a988edf7de9bdade 100644 --- a/civicrm/Civi/API/Request.php +++ b/civicrm/Civi/API/Request.php @@ -10,7 +10,7 @@ */ namespace Civi\API; -use Civi\Api4\Utils\CoreUtil; +use Civi\Api4\Event\CreateApi4RequestEvent; /** * Class Request @@ -45,17 +45,17 @@ class Request { ]; case 4: - // For custom pseudo-entities - if (strpos($entity, 'Custom_') === 0) { - $apiRequest = \Civi\Api4\CustomValue::$action(substr($entity, 7)); - } - else { - $callable = [CoreUtil::getApiClass($entity), $action]; - if (!is_callable($callable)) { - throw new \Civi\API\Exception\NotImplementedException("API ($entity, $action) does not exist (join the API team and implement it!)"); - } - $apiRequest = call_user_func($callable); + // Load the API kernel service for registering API providers, as + // otherwise subscribers to the civi.api4.createRequest event registered + // through the EventSubscriberInterface will not be registered. + $kernel = \Civi::service('civi_api_kernel'); + $e = new CreateApi4RequestEvent($entity); + \Civi::dispatcher()->dispatch('civi.api4.createRequest', $e); + $callable = [$e->className, $action]; + if (!$e->className || !is_callable($callable)) { + throw new \Civi\API\Exception\NotImplementedException("API ($entity, $action) does not exist (join the API team and implement it!)"); } + $apiRequest = call_user_func_array($callable, $e->args); foreach ($params as $name => $param) { $setter = 'set' . ucfirst($name); $apiRequest->$setter($param); diff --git a/civicrm/Civi/ActionSchedule/Event/MailingQueryEvent.php b/civicrm/Civi/ActionSchedule/Event/MailingQueryEvent.php index bd6324c4294a683e82b6026790f49e05eeb22d8c..eaad9364ee849a81fc36ce60a5b11fa13d08a008 100644 --- a/civicrm/Civi/ActionSchedule/Event/MailingQueryEvent.php +++ b/civicrm/Civi/ActionSchedule/Event/MailingQueryEvent.php @@ -32,13 +32,10 @@ use Symfony\Component\EventDispatcher\Event; * * - Joining to business tables - to help target filter-criteria/temporal criteria on other entites. * (Ex: Join to the `civicrm_participant` table and filter on participant status or registration date.) - * - Joining business tables - to select/return additional columns. Feed the data downstream for mail-merge/token-handling. As in: - * - (Recommended) Return the IDs of business-records. Use the prefix `tokenContext_*`. - * Ex query: `$event->query->select('foo.id AS tokenContext_fooId') - * Ex output: `$tokenRow->context['fooId']` - * - (Deprecated) Return detailed data of business-records. Ex: - * Ex query: `$event->query->select('foo.title as foo_title, foo.status_id as foo_status_id')` - * Ex output: `$tokenRow->context['actionSearchResult']->foo_title` + * - Joining business tables - to select/return additional columns. In particular, return the IDs of business-records that + * may be useful for token-handling. Use the prefix `tokenContext_*`. + * Ex query: `$event->query->select('foo.id AS tokenContext_fooId') + * Ex output: `$tokenRow->context['fooId']` * * There are several parameters pre-set for use in queries: * - 'casActionScheduleId' diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 024ffadba26351c6364288f06d635c3264b64bad..3e98e7f348abe56eb6119a47b1d037b08bbbc15e 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -12,10 +12,10 @@ namespace Civi\Api4\Action\Entity; -use Civi\Api4\CustomGroup; use Civi\Api4\CustomValue; use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable; use Civi\Api4\Utils\CoreUtil; +use Civi\Core\Event\GenericHookEvent; /** * Get the names & docblocks of all APIv4 entities. @@ -36,31 +36,23 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { * Scan all api directories to discover entities */ protected function getRecords() { - $entities = []; - $namesRequested = $this->_itemsToGet('name'); + $cache = \Civi::cache('metadata'); + $entities = $cache->get('api4.entities.info', []); - if ($namesRequested) { - foreach ($namesRequested as $entityName) { - if (strpos($entityName, 'Custom_') !== 0) { - $className = CoreUtil::getApiClass($entityName); - if ($className) { - $this->loadEntity($className, $entities); - } - } - } - } - else { + if (!$entities) { + // Load entities declared in API files foreach ($this->getAllApiClasses() as $className) { $this->loadEntity($className, $entities); } - } - - // Fetch custom entities unless we've already fetched everything requested - if (!$namesRequested || array_diff($namesRequested, array_keys($entities))) { + // Load entities based on custom data $entities = array_merge($entities, $this->getCustomEntities()); + // Allow extensions to modify the list of entities + $event = GenericHookEvent::create(['entities' => &$entities]); + \Civi::dispatcher()->dispatch('civi.api4.entityTypes', $event); + ksort($entities); + $cache->set('api4.entities.info', $entities); } - ksort($entities); return $entities; } @@ -81,24 +73,20 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { * @return \Civi\Api4\Generic\AbstractEntity[] */ private function getAllApiClasses() { - $cache = \Civi::cache('metadata'); - $classNames = $cache->get('api4.entities.classNames', []); - if (!$classNames) { - $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], - array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') - ); - foreach ($locations as $location) { - $dir = \CRM_Utils_File::addTrailingSlash(dirname($location)) . 'Civi/Api4'; - if (is_dir($dir)) { - foreach (glob("$dir/*.php") as $file) { - $className = 'Civi\Api4\\' . basename($file, '.php'); - if (is_a($className, 'Civi\Api4\Generic\AbstractEntity', TRUE)) { - $classNames[] = $className; - } + $classNames = []; + $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], + array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') + ); + foreach ($locations as $location) { + $dir = \CRM_Utils_File::addTrailingSlash(dirname($location)) . 'Civi/Api4'; + if (is_dir($dir)) { + foreach (glob("$dir/*.php") as $file) { + $className = 'Civi\Api4\\' . basename($file, '.php'); + if (is_a($className, 'Civi\Api4\Generic\AbstractEntity', TRUE)) { + $classNames[] = $className; } } } - $cache->set('api4.entities.classNames', $classNames); } return $classNames; } @@ -109,39 +97,35 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { * @return array[] */ private function getCustomEntities() { - $cache = \Civi::cache('metadata'); - $entities = $cache->get('api4.entities.custom'); - if (!isset($entities)) { - $entities = []; - $customEntities = CustomGroup::get() - ->addWhere('is_multiple', '=', 1) - ->addWhere('is_active', '=', 1) - ->setSelect(['name', 'title', 'help_pre', 'help_post', 'extends', 'icon']) - ->setCheckPermissions(FALSE) - ->execute(); - $baseInfo = CustomValue::getInfo(); - foreach ($customEntities as $customEntity) { - $fieldName = 'Custom_' . $customEntity['name']; - $baseEntity = CoreUtil::getApiClass(CustomGroupJoinable::getEntityFromExtends($customEntity['extends'])); - $entities[$fieldName] = [ - 'name' => $fieldName, - 'title' => $customEntity['title'], - 'title_plural' => $customEntity['title'], - 'description' => ts('Custom group for %1', [1 => $baseEntity::getInfo()['title_plural']]), - 'paths' => [ - 'view' => "civicrm/contact/view/cd?reset=1&gid={$customEntity['id']}&recId=[id]&multiRecordDisplay=single", - ], - 'icon' => $customEntity['icon'] ?: NULL, - ] + $baseInfo; - if (!empty($customEntity['help_pre'])) { - $entities[$fieldName]['comment'] = $this->plainTextify($customEntity['help_pre']); - } - if (!empty($customEntity['help_post'])) { - $pre = empty($entities[$fieldName]['comment']) ? '' : $entities[$fieldName]['comment'] . "\n\n"; - $entities[$fieldName]['comment'] = $pre . $this->plainTextify($customEntity['help_post']); - } + $entities = []; + $baseInfo = CustomValue::getInfo(); + $select = \CRM_Utils_SQL_Select::from('civicrm_custom_group') + ->where('is_multiple = 1') + ->where('is_active = 1') + ->toSQL(); + $group = \CRM_Core_DAO::executeQuery($select); + while ($group->fetch()) { + $fieldName = 'Custom_' . $group->name; + $baseEntity = CoreUtil::getApiClass(CustomGroupJoinable::getEntityFromExtends($group->extends)); + $entities[$fieldName] = [ + 'name' => $fieldName, + 'title' => $group->title, + 'title_plural' => $group->title, + 'description' => ts('Custom group for %1', [1 => $baseEntity::getInfo()['title_plural']]), + 'paths' => [ + 'view' => "civicrm/contact/view/cd?reset=1&gid={$group->id}&recId=[id]&multiRecordDisplay=single", + ], + ] + $baseInfo; + if (!empty($group->icon)) { + $entities[$fieldName]['icon'] = $group->icon; + } + if (!empty($group->help_pre)) { + $entities[$fieldName]['comment'] = $this->plainTextify($group->help_pre); + } + if (!empty($group->help_post)) { + $pre = empty($entities[$fieldName]['comment']) ? '' : $entities[$fieldName]['comment'] . "\n\n"; + $entities[$fieldName]['comment'] = $pre . $this->plainTextify($group->help_post); } - $cache->set('api4.entities.custom', $entities); } return $entities; } diff --git a/civicrm/Civi/Api4/Action/ExampleData/Get.php b/civicrm/Civi/Api4/Action/ExampleData/Get.php new file mode 100644 index 0000000000000000000000000000000000000000..9f91c82221f5f13990c3815e87878162416da78d --- /dev/null +++ b/civicrm/Civi/Api4/Action/ExampleData/Get.php @@ -0,0 +1,58 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Action\ExampleData; + +use Civi\Api4\Generic\BasicGetAction; +use Civi\Api4\Generic\Result; +use Civi\Test\ExampleDataLoader; + +/** + * Get a list of example data-sets. + * + * Examples are generated by scanning `*.ex.php` files. The scanner caches + * metadata fields (`name`, `title`, `tags`, `file`) to avoid extraneous scanning, but + * substantive fields (`data`) are computed as-needed. + * + * FIXME: When we have an update for dev-docs, include a `@link` here. + */ +class Get extends BasicGetAction { + + public function _run(Result $result) { + if ($this->select !== [] && !in_array('name', $this->select)) { + $this->select[] = 'name'; + } + parent::_run($result); + } + + protected function getRecords() { + return \Civi\Test::examples()->getMetas(); + } + + protected function selectArray($values) { + $result = parent::selectArray($values); + + $heavyFields = array_intersect( + explode(',', ExampleDataLoader::HEAVY_FIELDS), + $this->select ?: [] + ); + if (!empty($heavyFields)) { + foreach ($result as &$item) { + $heavy = \Civi\Test::examples()->getFull($item['name']); + $item = array_merge($item, \CRM_Utils_Array::subset($heavy, $heavyFields)); + } + } + + return $result; + } + +} diff --git a/civicrm/Civi/Api4/Action/WorkflowMessage/GetTemplateFields.php b/civicrm/Civi/Api4/Action/WorkflowMessage/GetTemplateFields.php new file mode 100644 index 0000000000000000000000000000000000000000..bef1735e03d58a428b09047457b86ce54e85233c --- /dev/null +++ b/civicrm/Civi/Api4/Action/WorkflowMessage/GetTemplateFields.php @@ -0,0 +1,69 @@ +<?php + +namespace Civi\Api4\Action\WorkflowMessage; + +/** + * Class GetTemplateFields + * @package Civi\Api4\Action\WorkflowMessage + * + * @method $this setWorkflow(string $workflow) + * @method string getWorkflow() + * @method $this setFormat(string $workflow) + * @method string getFormat() + */ +class GetTemplateFields extends \Civi\Api4\Generic\BasicGetAction { + + /** + * @var string + * @required + */ + public $workflow; + + /** + * Controls the return format. + * - 'metadata': Return the fields as an array of metadata + * - 'example': Return the fields as an example record (a basis for passing into Render::$values). + * + * @var string + * @options metadata,example + */ + protected $format = 'metadata'; + + protected function getRecords() { + $item = \Civi\WorkflowMessage\WorkflowMessage::create($this->workflow); + /** @var \Civi\WorkflowMessage\FieldSpec[] $fields */ + $fields = $item->getFields(); + $array = []; + $genericExamples = [ + 'string[]' => ['example-string1', 'example-string2...'], + 'string' => 'example-string', + 'int[]' => [1, 2, 3], + 'int' => 123, + 'double[]' => [1.23, 4.56], + 'double' => 1.23, + 'array' => [], + ]; + + switch ($this->format) { + case 'metadata': + foreach ($fields as $name => $field) { + $array[$name] = $field->toArray(); + } + return $array; + + case 'example': + foreach ($fields as $name => $field) { + $array[$name] = NULL; + foreach (array_intersect(array_keys($genericExamples), $field->getType()) as $ex) { + $array[$name] = $genericExamples[$ex]; + } + } + ksort($array); + return [$array]; + + default: + throw new \RuntimeException("Unrecognized format"); + } + } + +} diff --git a/civicrm/Civi/Api4/Action/WorkflowMessage/Render.php b/civicrm/Civi/Api4/Action/WorkflowMessage/Render.php new file mode 100644 index 0000000000000000000000000000000000000000..86611072b9f7170ea52dea0b455096bdfe6a0d56 --- /dev/null +++ b/civicrm/Civi/Api4/Action/WorkflowMessage/Render.php @@ -0,0 +1,168 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Action\WorkflowMessage; + +use Civi\Api4\Event\ValidateValuesEvent; +use Civi\WorkflowMessage\WorkflowMessage; + +/** + * Render a message. + * + * @method $this setValues(array $rows) Set the list of records to be rendered. + * @method array getValues() + * @method $this setMessageTemplate(array|null $fragments) Set of messages to be rendered. + * @method array|null getMessageTemplate() + * @method $this setMessageTemplateId(int|null $id) Set of messages to be rendered. + * @method int|null getMessageTemplateId() + * @method $this setWorkflow(string $workflow) + * @method string getWorkflow() + * @method $this setErrorLevel(string $workflow) + * @method string getErrorLevel() + */ +class Render extends \Civi\Api4\Generic\AbstractAction { + + /** + * Abort if the validator finds any issues at this error level. + * + * @var string + * @options error,warning,info + */ + protected $errorLevel = 'error'; + + /** + * Symbolic name of the workflow step for which we need a message. + * @var string + * @required + */ + protected $workflow; + + /** + * @var array + */ + protected $values = []; + + /** + * Load and render a specific message template (by ID). + * + * @var int|null + */ + protected $messageTemplateId; + + /** + * Use a draft message template. + * + * @var array|null + * - `subject`: Message template (eg `Hello {contact.first_name}!`) + * - `text`: Message template (eg `Hello {contact.first_name}!`) + * - `html`: Message template (eg `<p>Hello {contact.first_name}!</p>`) + */ + protected $messageTemplate; + + /** + * @var \Civi\WorkflowMessage\WorkflowMessageInterface + */ + protected $_model; + + public function _run(\Civi\Api4\Generic\Result $result) { + $this->validateValues(); + + $r = \CRM_Core_BAO_MessageTemplate::renderTemplate([ + 'model' => $this->_model, + 'messageTemplate' => $this->getMessageTemplate(), + 'messageTemplateId' => $this->getMessageTemplateId(), + ]); + + $result[] = \CRM_Utils_Array::subset($r, ['subject', 'html', 'text']); + } + + /** + * The token-processor supports a range of context parameters. We enforce different security rules for each kind of input. + * + * Broadly, this distinguishes between a few values: + * - Autoloaded data (e.g. 'contactId', 'activityId'). We need to ensure that the specific records are visible and extant. + * - Inputted data (e.g. 'contact'). We merely ensure that these are type-correct. + * - Prohibited/extended options, e.g. 'smarty' + */ + protected function validateValues() { + $rows = [$this->getValues()]; + $e = new ValidateValuesEvent($this, $rows, new \CRM_Utils_LazyArray(function () use ($rows) { + return array_map( + function ($row) { + return ['old' => NULL, 'new' => $row]; + }, + $rows + ); + })); + $this->onValidateValues($e); + \Civi::dispatcher()->dispatch('civi.api4.validate', $e); + if (!empty($e->errors)) { + throw $e->toException(); + } + } + + protected function onValidateValues(ValidateValuesEvent $e) { + $errorWeightMap = \CRM_Core_Error_Log::getMap(); + $errorWeight = $errorWeightMap[$this->getErrorLevel()]; + + if (count($e->records) !== 1) { + throw new \CRM_Core_Exception("Expected exactly one record to validate"); + } + foreach ($e->records as $recordKey => $record) { + /** @var \Civi\WorkflowMessage\WorkflowMessageInterface $w */ + $w = $this->_model = WorkflowMessage::create($this->getWorkflow(), [ + 'modelProps' => $record, + ]); + $fields = $w->getFields(); + + $unknowns = array_diff(array_keys($record), array_keys($fields)); + foreach ($unknowns as $fieldName) { + $e->addError($recordKey, $fieldName, 'unknown_field', ts('Unknown field (%1). Templates may only be executed with supported fields.', [ + 1 => $fieldName, + ])); + } + + // Merge intrinsic validations + foreach ($w->validate() as $issue) { + if ($errorWeightMap[$issue['severity']] < $errorWeight) { + $e->addError($recordKey, $issue['fields'], $issue['name'], $issue['message']); + } + } + + // Add checks which don't fit in WFM::validate + foreach ($fields as $fieldName => $fieldSpec) { + $fieldValue = $record[$fieldName] ?? NULL; + if ($fieldSpec->getFkEntity() && !empty($fieldValue)) { + if (!empty($params['check_permissions']) && !\Civi\Api4\Utils\CoreUtil::checkAccessDelegated($fieldSpec->getFkEntity(), 'get', ['id' => $fieldValue], CRM_Core_Session::getLoggedInContactID() ?: 0)) { + $e->addError($recordKey, $fieldName, 'nonexistent_id', ts('Referenced record does not exist or is not visible (%1).', [ + 1 => $this->getWorkflow() . '::' . $fieldName, + ])); + } + } + } + } + } + + public function fields() { + return []; + // We don't currently get the name of the workflow. But if we do... + //$item = \Civi\WorkflowMessage\WorkflowMessage::create($this->workflow); + ///** @var \Civi\WorkflowMessage\FieldSpec[] $fields */ + //$fields = $item->getFields(); + //$array = []; + //foreach ($fields as $name => $field) { + // $array[$name] = $field->toArray(); + //} + //return $array; + } + +} diff --git a/civicrm/Civi/Api4/Address.php b/civicrm/Civi/Api4/Address.php index a0e40683d44fc01cb5ae874be24caabc25befd7a..a4ec60aeb31eefeeac3fa2cd34681d97bd8f3877 100644 --- a/civicrm/Civi/Api4/Address.php +++ b/civicrm/Civi/Api4/Address.php @@ -19,6 +19,8 @@ namespace Civi\Api4; * Creating a new address requires at minimum a contact's ID and location type ID * and other attributes (although optional) like street address, city, country etc. * + * @ui_join_filters is_primary + * * @searchable secondary * @since 5.19 * @package Civi\Api4 diff --git a/civicrm/Civi/Api4/Email.php b/civicrm/Civi/Api4/Email.php index e9d02cbdee9a90fc2a2c3c85a7ed1727a95bc044..16566d8c1e1b5cb80d34efcd7a49f7791039a2aa 100644 --- a/civicrm/Civi/Api4/Email.php +++ b/civicrm/Civi/Api4/Email.php @@ -17,6 +17,8 @@ namespace Civi\Api4; * * Creating a new email address requires at minimum a contact's ID and email * + * @ui_join_filters is_primary + * * @searchable secondary * @since 5.19 * @package Civi\Api4 diff --git a/civicrm/Civi/Api4/Entity.php b/civicrm/Civi/Api4/Entity.php index 1660d74d8cb0726e4d07ac40bf469dd74be5c7c7..c28f832d21b41110b2ebc4a3965a41de9ccde70a 100644 --- a/civicrm/Civi/Api4/Entity.php +++ b/civicrm/Civi/Api4/Entity.php @@ -112,6 +112,11 @@ class Entity extends Generic\AbstractEntity { 'data_type' => 'String', 'description' => 'Version this API entity was added', ], + [ + 'name' => 'class', + 'data_type' => 'String', + 'description' => 'PHP class name', + ], [ 'name' => 'bridge', 'data_type' => 'Array', diff --git a/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php b/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..7a77989609d40946589c5a6c0921d85178c842be --- /dev/null +++ b/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php @@ -0,0 +1,56 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\Api4\Event; + +use Civi\Core\Event\GenericHookEvent; + +/** + * civi.api4.createRequest event. + * + * This event fires whenever resolving the name of an api entity to an api class. + * + * e.g. the entity name "Contact" resolves to the class `Civi\Api4\Contact` + * and the entity "Case" resolves to `Civi\Api4\CiviCase` + */ +class CreateApi4RequestEvent extends GenericHookEvent { + + /** + * Name of the entity to matched to an api class + * + * @var string + */ + public $entityName; + + /** + * Resolved fully-namespaced class name. + * + * @var string + */ + public $className; + + /** + * Additional arguments which should be passed to the action factory function. + * + * For example, `Civi\Api4\CustomValue` factory functions require the name of the custom group. + * + * @var array + */ + public $args = []; + + /** + * Event constructor + */ + public function __construct($entityName) { + $this->entityName = $entityName; + } + +} diff --git a/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..519498efd0f89f9d609a0a556cbdc12d66a319a7 --- /dev/null +++ b/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php @@ -0,0 +1,57 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Event\Subscriber; + +use Civi\API\Events; +use Civi\Api4\Utils\CoreUtil; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Resolve class for core and custom entities + * + * This runs while getting the class name for an entity / action. + */ +class CreateApi4RequestSubscriber implements EventSubscriberInterface { + + /** + * @return array + */ + public static function getSubscribedEvents() { + return [ + 'civi.api4.createRequest' => [ + ['onApiRequestCreate', Events::W_LATE], + ], + ]; + } + + /** + * @param \Civi\Api4\Event\CreateApi4RequestEvent $event + */ + public function onApiRequestCreate(\Civi\Api4\Event\CreateApi4RequestEvent $event) { + // Multi-record custom data entities + if (strpos($event->entityName, 'Custom_') === 0) { + $groupName = substr($event->entityName, 7); + if (CoreUtil::isCustomEntity($groupName)) { + $event->className = 'Civi\Api4\CustomValue'; + $event->args = [$groupName]; + } + } + else { + // Because "Case" is a reserved php keyword + $className = 'Civi\Api4\\' . ($event->entityName === 'Case' ? 'CiviCase' : $event->entityName); + if (class_exists($className)) { + $event->className = $className; + } + } + } + +} diff --git a/civicrm/Civi/Api4/ExampleData.php b/civicrm/Civi/Api4/ExampleData.php new file mode 100644 index 0000000000000000000000000000000000000000..c53f430b1b9b4a8e86f7caa1ba98987c7cbcaf0f --- /dev/null +++ b/civicrm/Civi/Api4/ExampleData.php @@ -0,0 +1,107 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4; + +/** + * Search for example data. + * + * @searchable none + * @since 5.43 + * @package Civi\Api4 + */ +class ExampleData extends \Civi\Api4\Generic\AbstractEntity { + + /** + * @param bool $checkPermissions + * @return Generic\AbstractGetAction + */ + public static function get($checkPermissions = TRUE) { + return (new Action\ExampleData\Get(__CLASS__, __FILE__)) + ->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * @return Generic\BasicGetFieldsAction + */ + public static function getFields($checkPermissions = TRUE) { + return (new Generic\BasicGetFieldsAction(__CLASS__, __FUNCTION__, function () { + return [ + [ + 'name' => 'name', + 'title' => 'Example Name', + 'data_type' => 'String', + ], + [ + 'name' => 'title', + 'title' => 'Example Title', + 'data_type' => 'String', + ], + [ + 'name' => 'workflow', + 'title' => 'Workflow Name', + 'data_type' => 'String', + ], + [ + 'name' => 'file', + 'title' => 'File Path', + 'data_type' => 'String', + 'description' => 'If the example is loaded from a file, this is the location.', + ], + [ + 'name' => 'tags', + 'title' => 'Tags', + 'data_type' => 'Array', + 'options' => [ + 'preview' => ts('Preview: Display as an example in the "Preview" dialog'), + 'phpunit' => ts('PHPUnit: Run basic sniff tests in PHPUnit using this example'), + ], + ], + [ + 'type' => 'Extra', + 'name' => 'data', + 'title' => 'Example data', + 'data_type' => 'String', + 'serialize' => \CRM_Core_DAO::SERIALIZE_JSON, + ], + [ + 'type' => 'Extra', + 'name' => 'asserts', + 'title' => 'Test assertions', + 'data_type' => 'String', + 'serialize' => \CRM_Core_DAO::SERIALIZE_JSON, + ], + ]; + }))->setCheckPermissions($checkPermissions); + } + + /** + * @return array + */ + public static function permissions() { + return [ + // FIXME: Perhaps use 'edit message templates' or similar? + "meta" => ["access CiviCRM"], + "default" => ["administer CiviCRM"], + ]; + } + + /** + * @inheritDoc + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['primary_key'] = ['name']; + return $info; + } + +} diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index 266c6307a491f968ca5e5e8a1a3ffe6ec568a71e..735327f88fb977de795f811f03020d8407ecdef0 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -129,45 +129,40 @@ abstract class AbstractEntity { * Reflection function called by Entity::get() * * @see \Civi\Api4\Action\Entity\Get - * @return array + * @return array{name: string, title: string, description: string, title_plural: string, type: string, paths: array, class: string, primary_key: array, searchable: string, dao: string, label_field: string, icon: string} */ public static function getInfo() { - $cache = \Civi::cache('metadata'); $entityName = static::getEntityName(); - $info = $cache->get("api4.$entityName.info"); - if (!$info) { - $info = [ - 'name' => $entityName, - 'title' => static::getEntityTitle(), - 'title_plural' => static::getEntityTitle(TRUE), - 'type' => [self::stripNamespace(get_parent_class(static::class))], - 'paths' => static::getEntityPaths(), - 'class' => static::class, - 'primary_key' => ['id'], - // Entities without a @searchable annotation will default to secondary, - // which makes them visible in SearchKit but not at the top of the list. - 'searchable' => 'secondary', - ]; - // Add info for entities with a corresponding DAO - $dao = \CRM_Core_DAO_AllCoreTables::getFullName($info['name']); - if ($dao) { - $info['paths'] = $dao::getEntityPaths(); - $info['primary_key'] = $dao::$_primaryKey; - $info['icon'] = $dao::$_icon; - $info['label_field'] = $dao::$_labelField; - $info['dao'] = $dao; - } - foreach (ReflectionUtils::getTraits(static::class) as $trait) { - $info['type'][] = self::stripNamespace($trait); - } - $reflection = new \ReflectionClass(static::class); - $info = array_merge($info, ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']])); - if ($dao) { - $info['description'] = $dao::getEntityDescription() ?? $info['description'] ?? NULL; - } - unset($info['package'], $info['method']); - $cache->set("api4.$entityName.info", $info); + $info = [ + 'name' => $entityName, + 'title' => static::getEntityTitle(), + 'title_plural' => static::getEntityTitle(TRUE), + 'type' => [self::stripNamespace(get_parent_class(static::class))], + 'paths' => static::getEntityPaths(), + 'class' => static::class, + 'primary_key' => ['id'], + // Entities without a @searchable annotation will default to secondary, + // which makes them visible in SearchKit but not at the top of the list. + 'searchable' => 'secondary', + ]; + // Add info for entities with a corresponding DAO + $dao = \CRM_Core_DAO_AllCoreTables::getFullName($info['name']); + if ($dao) { + $info['paths'] = $dao::getEntityPaths(); + $info['primary_key'] = $dao::$_primaryKey; + $info['icon'] = $dao::$_icon; + $info['label_field'] = $dao::$_labelField; + $info['dao'] = $dao; + } + foreach (ReflectionUtils::getTraits(static::class) as $trait) { + $info['type'][] = self::stripNamespace($trait); + } + $reflection = new \ReflectionClass(static::class); + $info = array_merge($info, ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $info['name']])); + if ($dao) { + $info['description'] = $dao::getEntityDescription() ?? $info['description'] ?? NULL; } + unset($info['package'], $info['method']); return $info; } diff --git a/civicrm/Civi/Api4/Generic/AbstractGetAction.php b/civicrm/Civi/Api4/Generic/AbstractGetAction.php index 0d5b27739b996d127460e54d49f56057d9ba9229..5fd927468302cec43c826dce4293cf47bbccdfe3 100644 --- a/civicrm/Civi/Api4/Generic/AbstractGetAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractGetAction.php @@ -66,18 +66,32 @@ abstract class AbstractGetAction extends AbstractQueryAction { } /** - * Adds all fields matched by the * wildcard + * Adds all standard fields matched by the * wildcard + * + * Note: this function only deals with simple wildcard expressions. + * It ignores those containing special characters like dots or parentheses, + * they are handled separately in Api4SelectQuery. * * @throws \API_Exception */ protected function expandSelectClauseWildcards() { + if (!$this->select) { + $this->select = ['*']; + } + // Get expressions containing wildcards but no dots or parentheses $wildFields = array_filter($this->select, function($item) { return strpos($item, '*') !== FALSE && strpos($item, '.') === FALSE && strpos($item, '(') === FALSE && strpos($item, ' ') === FALSE; }); - foreach ($wildFields as $item) { - $pos = array_search($item, array_values($this->select)); - $matches = SelectUtil::getMatchingFields($item, array_column($this->entityFields(), 'name')); - array_splice($this->select, $pos, 1, $matches); + if ($wildFields) { + // Wildcards should not match "Extra" fields + $standardFields = array_filter(array_map(function($field) { + return $field['type'] === 'Extra' ? NULL : $field['name']; + }, $this->entityFields())); + foreach ($wildFields as $item) { + $pos = array_search($item, array_values($this->select)); + $matches = SelectUtil::getMatchingFields($item, $standardFields); + array_splice($this->select, $pos, 1, $matches); + } } $this->select = array_unique($this->select); } diff --git a/civicrm/Civi/Api4/Generic/DAOGetAction.php b/civicrm/Civi/Api4/Generic/DAOGetAction.php index f374047486b853dea3bf37222471b2999a097f0a..e8a46ce5b54dc7e006e0fa1cb58b0be22a489969 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetAction.php @@ -29,9 +29,9 @@ class DAOGetAction extends AbstractGetAction { use Traits\DAOActionTrait; /** - * Fields to return. Defaults to all non-custom fields `['*']`. + * Fields to return. Defaults to all standard (non-custom, non-extra) fields `['*']`. * - * The keyword `"custom.*"` selects all custom fields. So to select all core + custom fields, select `['*', 'custom.*']`. + * The keyword `"custom.*"` selects all custom fields. So to select all standard + custom fields, select `['*', 'custom.*']`. * * Use the dot notation to perform joins in the select clause, e.g. selecting `['*', 'contact.*']` from `Email::get()` * will select all fields for the email + all fields for the related contact. @@ -123,6 +123,22 @@ class DAOGetAction extends AbstractGetAction { } } + /** + * @param string $fieldName + * @param string $op + * @param mixed $value + * @param bool $isExpression + * @return $this + * @throws \API_Exception + */ + public function addWhere(string $fieldName, string $op, $value = NULL, bool $isExpression = FALSE) { + if (!in_array($op, CoreUtil::getOperators())) { + throw new \API_Exception('Unsupported operator'); + } + $this->where[] = [$fieldName, $op, $value, $isExpression]; + return $this; + } + /** * @return array */ diff --git a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php index f11966f2277703eebc1902e117d7add041593531..467fd6054cfad3d0827215ae55299d588044e354 100644 --- a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php @@ -149,6 +149,11 @@ trait ArrayQueryActionTrait { $pattern = '/^' . str_replace('%', '.*', preg_quote($expected, '/')) . '$/i'; return !preg_match($pattern, $value) == ($operator != 'LIKE'); + case 'REGEXP': + case 'NOT REGEXP': + $pattern = '/' . str_replace('/', '\\/', $expected) . '/'; + return !preg_match($pattern, $value) == ($operator != 'REGEXP'); + case 'IN': return in_array($value, $expected); diff --git a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php index 31c889f96537a8fc4d6c0b3335cd0a321c06f971..c032e762f5e35eb127cb3f3258950887a0d2e616 100644 --- a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php @@ -149,6 +149,7 @@ trait DAOActionTrait { } $result[] = $this->baoToArray($createResult, $item); + \CRM_Utils_API_HTMLInputCoder::singleton()->decodeRows($result); } // Use bulk `writeRecords` method if the BAO doesn't have a create or add method @@ -194,6 +195,9 @@ trait DAOActionTrait { } /** + * Converts params from flat array e.g. ['GroupName.Fieldname' => value] to the + * hierarchy expected by the BAO, nested within $params['custom']. + * * @param array $params * @param int $entityId * @@ -203,8 +207,6 @@ trait DAOActionTrait { protected function formatCustomParams(&$params, $entityId) { $customParams = []; - // $customValueID is the ID of the custom value in the custom table for this - // entity (i guess this assumes it's not a multi value entity) foreach ($params as $name => $value) { $field = $this->getCustomFieldInfo($name); if (!$field) { @@ -258,7 +260,7 @@ trait DAOActionTrait { * * @param string $fieldExpr * Field identifier with possible suffix, e.g. MyCustomGroup.MyField1:label - * @return array|NULL + * @return array{id: int, name: string, entity: string, suffix: string, html_type: string, data_type: string}|NULL */ protected function getCustomFieldInfo(string $fieldExpr) { if (strpos($fieldExpr, '.') === FALSE) { diff --git a/civicrm/Civi/Api4/IM.php b/civicrm/Civi/Api4/IM.php index f6d8045f4de86070a197fab017767687a898c42b..75977dba3d16295ef2ccc8f17ca0a9a4fd9a155f 100644 --- a/civicrm/Civi/Api4/IM.php +++ b/civicrm/Civi/Api4/IM.php @@ -13,6 +13,8 @@ namespace Civi\Api4; /** * IM entity. * + * @ui_join_filters is_primary + * * @searchable secondary * @since 5.19 * @package Civi\Api4 diff --git a/civicrm/Civi/Api4/Phone.php b/civicrm/Civi/Api4/Phone.php index 8eeedf8de5b0a17a5fcf9ecbe6e4f6c00a25bce1..067864eeb10baf5b6882f218887a9a80c92616ea 100644 --- a/civicrm/Civi/Api4/Phone.php +++ b/civicrm/Civi/Api4/Phone.php @@ -17,6 +17,8 @@ namespace Civi\Api4; * * Creating a new phone of a contact, requires at minimum a contact's ID and phone number * + * @ui_join_filters is_primary + * * @searchable secondary * @since 5.19 * @package Civi\Api4 diff --git a/civicrm/Civi/Api4/PrintLabel.php b/civicrm/Civi/Api4/PrintLabel.php new file mode 100644 index 0000000000000000000000000000000000000000..a793708538f332ab8ce3d0f39aa27eec5882acfe --- /dev/null +++ b/civicrm/Civi/Api4/PrintLabel.php @@ -0,0 +1,21 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\Api4; + +/** + * PrintLabel entity. + * + * @since 5.43 + * @package Civi\Api4 + */ +class PrintLabel extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 119abe49a90fd809f62c4568caf8ba717c6c6884..ff1590c32e7eacd57b25f783804fdf60339121d3 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -28,7 +28,8 @@ use Civi\Api4\Utils\SelectUtil; * * * '=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=", * * 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', - * * 'IS NOT NULL', or 'IS NULL', 'CONTAINS'. + * * 'IS NOT NULL', 'IS NULL', 'CONTAINS', 'IS EMPTY', 'IS NOT EMPTY', + * * 'REGEXP', 'NOT REGEXP'. */ class Api4SelectQuery { @@ -431,7 +432,7 @@ class Api4SelectQuery { /** * Validate and transform a leaf clause array to SQL. - * @param array $clause [$fieldName, $operator, $criteria] + * @param array $clause [$fieldName, $operator, $criteria, $isExpression] * @param string $type * WHERE|HAVING|ON * @param int $depth @@ -443,12 +444,13 @@ class Api4SelectQuery { $field = NULL; // Pad array for unary operators [$expr, $operator, $value] = array_pad($clause, 3, NULL); + $isExpression = $clause[3] ?? FALSE; if (!in_array($operator, CoreUtil::getOperators(), TRUE)) { throw new \API_Exception('Illegal operator'); } // For WHERE clause, expr must be the name of a field. - if ($type === 'WHERE') { + if ($type === 'WHERE' && !$isExpression) { $field = $this->getField($expr, TRUE); FormattingUtil::formatInputValue($value, $expr, $field, $operator); $fieldAlias = $this->getExpression($expr)->render($this->apiFieldSpec); @@ -491,7 +493,7 @@ class Api4SelectQuery { } $fieldAlias = '`' . $fieldAlias . '`'; } - elseif ($type === 'ON') { + elseif ($type === 'ON' || ($type === 'WHERE' && $isExpression)) { $expr = $this->getExpression($expr); $fieldName = count($expr->getFields()) === 1 ? $expr->getFields()[0] : NULL; $fieldAlias = $expr->render($this->apiFieldSpec); @@ -575,6 +577,11 @@ class Api4SelectQuery { return "($fieldAlias $isEmptyClause $fieldAlias $operator)"; } } + + if ($operator == 'REGEXP' || $operator == 'NOT REGEXP') { + return sprintf('%s %s "%s"', $fieldAlias, $operator, \CRM_Core_DAO::escapeString($value)); + } + if (is_bool($value)) { $value = (int) $value; } @@ -726,7 +733,6 @@ class Api4SelectQuery { ]; // If the first condition is a string, it's the name of a bridge entity if (!empty($join[0]) && is_string($join[0]) && \CRM_Utils_Rule::alphanumeric($join[0])) { - $this->explicitJoins[$alias]['bridge'] = $join[0]; $this->addBridgeJoin($join, $entity, $alias, $side); } else { @@ -804,6 +810,7 @@ class Api4SelectQuery { */ protected function addBridgeJoin($joinTree, $joinEntity, $alias, $side) { $bridgeEntity = array_shift($joinTree); + $this->explicitJoins[$alias]['bridge'] = $bridgeEntity; // INNER joins require unique aliases, whereas left joins will be inside a subquery and short aliases are more readable $bridgeAlias = $side === 'INNER' ? $alias . '_via_' . strtolower($bridgeEntity) : 'b'; @@ -827,6 +834,9 @@ class Api4SelectQuery { // INNER joins are done with 2 joins if ($side === 'INNER') { + // Info needed for joining custom fields extending the bridge entity + $this->explicitJoins[$alias]['bridge_table_alias'] = $bridgeAlias; + $this->explicitJoins[$alias]['bridge_id_alias'] = 'id'; $this->join('INNER', $bridgeTable, $bridgeAlias, $bridgeConditions); $this->join('INNER', $joinTable, $alias, array_merge($linkConditions, $acls, $joinConditions)); } @@ -838,6 +848,10 @@ class Api4SelectQuery { $bridgeFields[$field['column_name']] = '`' . $joinAlias . '`.`' . $field['column_name'] . '`'; } } + // Info needed for joining custom fields extending the bridge entity + $this->explicitJoins[$alias]['bridge_table_alias'] = $alias; + $this->explicitJoins[$alias]['bridge_id_alias'] = 'bridge_entity_id_key'; + $bridgeFields[] = "`$bridgeAlias`.`id` AS `bridge_entity_id_key`"; $select = implode(',', $bridgeFields); $joinConditions = array_merge($joinConditions, $bridgeConditions); $innerConditions = array_merge($linkConditions, $acls); @@ -1011,12 +1025,25 @@ class Api4SelectQuery { // During iteration this variable will refer to the current position in the tree $joinTreeNode =& $this->joinTree[$baseTableAlias]; + $useBridgeTable = FALSE; try { $joinPath = $joiner->getPath($explicitJoin['table'] ?? $this->getFrom(), $pathArray); } catch (\API_Exception $e) { - // Because the select clause silently ignores unknown fields, this function shouldn't throw exceptions - return; + if (!empty($explicitJoin['bridge'])) { + // Try looking up custom field in bridge entity instead + try { + $useBridgeTable = TRUE; + $joinPath = $joiner->getPath(CoreUtil::getTableName($explicitJoin['bridge']), $pathArray); + } + catch (\API_Exception $e) { + return; + } + } + else { + // Because the select clause silently ignores unknown fields, this function shouldn't throw exceptions + return; + } } foreach ($joinPath as $joinName => $link) { @@ -1046,6 +1073,14 @@ class Api4SelectQuery { \CRM_Core_Error::deprecatedWarning("Deprecated join alias '$deprecatedAlias' used in APIv4 get. Should be changed to '{$deprecatedAlias}_id'"); } $virtualField = $link->getSerialize(); + $baseTableAlias = $joinTreeNode['#table_alias']; + if ($useBridgeTable) { + // When joining custom fields that directly extend the bridge entity + $baseTableAlias = $explicitJoin['bridge_table_alias']; + if ($link->getBaseColumn() === 'id') { + $link->setBaseColumn($explicitJoin['bridge_id_alias']); + } + } // Cache field info for retrieval by $this->getField() foreach ($link->getEntityFields() as $fieldObject) { @@ -1057,7 +1092,7 @@ class Api4SelectQuery { // For virtual joins on serialized fields, the callback function will need the sql name of the serialized field // @see self::renderSerializedJoin() else { - $fieldArray['sql_name'] = '`' . $joinTreeNode['#table_alias'] . '`.`' . $link->getBaseColumn() . '`'; + $fieldArray['sql_name'] = '`' . $baseTableAlias . '`.`' . $link->getBaseColumn() . '`'; } // Custom fields will already have the group name prefixed $fieldName = $isCustom ? explode('.', $fieldArray['name'])[1] : $fieldArray['name']; @@ -1067,7 +1102,7 @@ class Api4SelectQuery { // Serialized joins are rendered by this::renderSerializedJoin. Don't add their tables. if (!$virtualField) { $bao = $joinEntity ? CoreUtil::getBAOFromApiName($joinEntity) : NULL; - $conditions = $link->getConditionsForJoin($joinTreeNode['#table_alias'], $tableAlias); + $conditions = $link->getConditionsForJoin($baseTableAlias, $tableAlias); if ($bao) { $conditions = array_merge($conditions, $this->getAclClause($tableAlias, $bao, $joinPath)); } @@ -1076,6 +1111,7 @@ class Api4SelectQuery { } $joinTreeNode =& $joinTreeNode[$joinName]; + $useBridgeTable = FALSE; } } diff --git a/civicrm/Civi/Api4/Query/SqlEquation.php b/civicrm/Civi/Api4/Query/SqlEquation.php new file mode 100644 index 0000000000000000000000000000000000000000..caaba24fb4a8dbc24b1063bc579a448a70df266b --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlEquation.php @@ -0,0 +1,123 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Numeric sql expression + */ +class SqlEquation extends SqlExpression { + + /** + * @var array + */ + protected $args = []; + + /** + * @var string[] + */ + public static $arithmeticOperators = [ + '+', + '-', + '*', + '/', + ]; + + /** + * @var string[] + */ + public static $comparisonOperators = [ + '<=', + '>=', + '<', + '>', + '=', + '!=', + '<=>', + 'IS NOT', + 'IS', + 'BETWEEN', + 'AND', + ]; + + protected function initialize() { + $arg = trim(substr($this->expr, strpos($this->expr, '(') + 1, -1)); + $permitted = ['SqlField', 'SqlString', 'SqlNumber', 'SqlNull']; + $operators = array_merge(self::$arithmeticOperators, self::$comparisonOperators); + while (strlen($arg)) { + $this->args = array_merge($this->args, $this->captureExpressions($arg, $permitted, 1)); + $op = $this->captureKeyword($operators, $arg); + if ($op) { + $this->args[] = $op; + } + } + } + + /** + * Render the expression for insertion into the sql query + * + * @param array $fieldList + * @return string + */ + public function render(array $fieldList): string { + $output = []; + foreach ($this->args as $arg) { + // Just an operator + if (is_string($arg)) { + $output[] = $arg; + } + // Surround fields with COALESCE to handle null values + elseif (is_a($arg, SqlField::class)) { + $output[] = 'COALESCE(' . $arg->render($fieldList) . ', 0)'; + } + else { + $output[] = $arg->render($fieldList); + } + } + return '(' . implode(' ', $output) . ')'; + } + + /** + * Returns the alias to use for SELECT AS. + * + * @return string + */ + public function getAlias(): string { + return $this->alias ?? \CRM_Utils_String::munge(trim($this->expr, ' ()'), '_', 256); + } + + /** + * Change $dataType according to operator used in equation + * + * @see \Civi\Api4\Utils\FormattingUtil::formatOutputValues + * @param string $value + * @param string $dataType + * @return string + */ + public function formatOutputValue($value, &$dataType) { + foreach (self::$comparisonOperators as $op) { + if (strpos($this->expr, " $op ")) { + $dataType = 'Boolean'; + } + } + foreach (self::$arithmeticOperators as $op) { + if (strpos($this->expr, " $op ")) { + $dataType = 'Float'; + } + } + return $value; + } + + public static function getTitle(): string { + return ts('Equation'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlExpression.php b/civicrm/Civi/Api4/Query/SqlExpression.php index 8e3d43254d8f6e3f5aea4906bfdabcaa91268dff..46a81c0f1d2105ffc407642fb13e900d671258f7 100644 --- a/civicrm/Civi/Api4/Query/SqlExpression.php +++ b/civicrm/Civi/Api4/Query/SqlExpression.php @@ -73,19 +73,22 @@ abstract class SqlExpression { * @param string $expression * @param bool $parseAlias * @param array $mustBe - * @param array $cantBe * @return SqlExpression * @throws \API_Exception */ - public static function convert(string $expression, $parseAlias = FALSE, $mustBe = [], $cantBe = ['SqlWild']) { + public static function convert(string $expression, $parseAlias = FALSE, $mustBe = []) { $as = $parseAlias ? strrpos($expression, ' AS ') : FALSE; $expr = $as ? substr($expression, 0, $as) : $expression; $alias = $as ? \CRM_Utils_String::munge(substr($expression, $as + 4), '_', 256) : NULL; $bracketPos = strpos($expr, '('); $firstChar = substr($expr, 0, 1); $lastChar = substr($expr, -1); + // Statement surrounded by brackets is an equation + if ($firstChar === '(' && $lastChar === ')') { + $className = 'SqlEquation'; + } // If there are brackets but not the first character, we have a function - if ($bracketPos && $lastChar === ')') { + elseif ($bracketPos && $lastChar === ')') { $fnName = substr($expr, 0, $bracketPos); if ($fnName !== strtoupper($fnName)) { throw new \API_Exception('Sql function must be uppercase.'); @@ -114,11 +117,6 @@ abstract class SqlExpression { throw new \API_Exception('Unable to parse sql expression: ' . $expression); } $sqlExpression = new $className($expr, $alias); - foreach ($cantBe as $cant) { - if (is_a($sqlExpression, __NAMESPACE__ . '\\' . $cant)) { - throw new \API_Exception('Illegal sql expression.'); - } - } if ($mustBe) { foreach ($mustBe as $must) { if (is_a($sqlExpression, __NAMESPACE__ . '\\' . $must)) { @@ -173,6 +171,11 @@ abstract class SqlExpression { return substr($className, strrpos($className, '\\') + 1); } + /** + * @return string + */ + abstract public static function getTitle(): string; + /** * @return string|NULL */ @@ -180,4 +183,98 @@ abstract class SqlExpression { return static::$dataType; } + /** + * Shift a keyword off the beginning of the argument string and return it. + * + * @param array $keywords + * Whitelist of keywords + * @param string $arg + * @return mixed|null + */ + protected function captureKeyword($keywords, &$arg) { + foreach ($keywords as $key) { + // Match keyword followed by a space or eol + if (strpos($arg, $key . ' ') === 0 || rtrim($arg) === $key) { + $arg = ltrim(substr($arg, strlen($key))); + return $key; + } + } + return NULL; + } + + /** + * Shifts 0 or more expressions off the argument string and returns them + * + * @param string $arg + * @param array $mustBe + * @param int $max + * @return SqlExpression[] + * @throws \API_Exception + */ + protected function captureExpressions(string &$arg, array $mustBe, int $max) { + $captured = []; + $arg = ltrim($arg); + while ($arg) { + $item = $this->captureExpression($arg); + $arg = ltrim(substr($arg, strlen($item))); + $expr = self::convert($item, FALSE, $mustBe); + $this->fields = array_merge($this->fields, $expr->getFields()); + $captured[] = $expr; + // Keep going if we have a comma indicating another expression follows + if (count($captured) < $max && substr($arg, 0, 1) === ',') { + $arg = ltrim(substr($arg, 1)); + } + else { + break; + } + } + return $captured; + } + + /** + * Scans the beginning of a string for an expression; stops when it hits delimiter + * + * @param $arg + * @return string + */ + protected function captureExpression($arg) { + $isEscaped = $quote = NULL; + $item = ''; + $quotes = ['"', "'"]; + $brackets = [ + ')' => '(', + ]; + $enclosures = array_fill_keys($brackets, 0); + foreach (str_split($arg) as $char) { + if (!$isEscaped && in_array($char, $quotes, TRUE)) { + // Open quotes - we'll ignore everything inside + if (!$quote) { + $quote = $char; + } + // Close quotes + elseif ($char === $quote) { + $quote = NULL; + } + } + if (!$quote) { + // Delineates end of expression + if (($char == ',' || $char == ' ') && !array_filter($enclosures)) { + return $item; + } + // Open brackets - we'll ignore delineators inside + if (isset($enclosures[$char])) { + $enclosures[$char]++; + } + // Close brackets + if (isset($brackets[$char]) && $enclosures[$brackets[$char]]) { + $enclosures[$brackets[$char]]--; + } + } + $item .= $char; + // We are escaping the next char if this is a backslash not preceded by an odd number of backslashes + $isEscaped = $char === '\\' && ((strlen($item) - strlen(rtrim($item, '\\'))) % 2); + } + return $item; + } + } diff --git a/civicrm/Civi/Api4/Query/SqlField.php b/civicrm/Civi/Api4/Query/SqlField.php index 6180fbf1b4ddde73f70254a2956dd5c9b8665c4e..a665f68609c7b34ada23bd8991b52b0c28337d7f 100644 --- a/civicrm/Civi/Api4/Query/SqlField.php +++ b/civicrm/Civi/Api4/Query/SqlField.php @@ -41,4 +41,8 @@ class SqlField extends SqlExpression { return $fieldList[$this->expr]['sql_name']; } + public static function getTitle(): string { + return ts('Field'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunction.php b/civicrm/Civi/Api4/Query/SqlFunction.php index 457186c2e8c2b5fc9870c932019dc5d5dc8d0495..ea09a42d5d8888ac4cc756407ab9e1c31610e8df 100644 --- a/civicrm/Civi/Api4/Query/SqlFunction.php +++ b/civicrm/Civi/Api4/Query/SqlFunction.php @@ -43,19 +43,23 @@ abstract class SqlFunction extends SqlExpression { $arg = trim(substr($this->expr, strpos($this->expr, '(') + 1, -1)); foreach ($this->getParams() as $idx => $param) { $prefix = NULL; - if ($param['prefix']) { - $prefix = $this->captureKeyword([$param['prefix']], $arg); + $name = $param['name'] ?: ($idx + 1); + // If this isn't the first param it needs to start with something; + // either the name (e.g. "ORDER BY") if it has one, or a comma separating it from the previous param. + $start = $param['name'] ?: ($idx ? ',' : NULL); + if ($start) { + $prefix = $this->captureKeyword([$start], $arg); // Supply api_default if (!$prefix && isset($param['api_default'])) { $this->args[$idx] = [ - 'prefix' => $param['api_default']['prefix'] ?? [$param['prefix']], + 'prefix' => [$start], 'expr' => array_map([parent::class, 'convert'], $param['api_default']['expr']), - 'suffix' => $param['api_default']['suffix'] ?? [], + 'suffix' => [], ]; continue; } if (!$prefix && !$param['optional']) { - throw new \API_Exception("Missing {$param['prefix']} for SQL function " . static::getName()); + throw new \API_Exception("Missing param $name for SQL function " . static::getName()); } } elseif ($param['flag_before']) { @@ -66,16 +70,22 @@ abstract class SqlFunction extends SqlExpression { 'expr' => [], 'suffix' => [], ]; - if ($param['max_expr'] && (!$param['prefix'] || $param['prefix'] === $prefix)) { - $exprs = $this->captureExpressions($arg, $param['must_be'], $param['cant_be']); - if (count($exprs) < $param['min_expr'] || count($exprs) > $param['max_expr']) { - throw new \API_Exception('Incorrect number of arguments for SQL function ' . static::getName()); + if ($param['max_expr'] && (!$param['name'] || $param['name'] === $prefix)) { + $exprs = $this->captureExpressions($arg, $param['must_be'], $param['max_expr']); + if ( + count($exprs) < $param['min_expr'] && + !(!$exprs && $param['optional']) + ) { + throw new \API_Exception("Too few arguments to param $name for SQL function " . static::getName()); } $this->args[$idx]['expr'] = $exprs; $this->args[$idx]['suffix'] = (array) $this->captureKeyword(array_keys($param['flag_after']), $arg); } } + if (trim($arg)) { + throw new \API_Exception("Too many arguments given for SQL function " . static::getName()); + } } /** @@ -93,100 +103,6 @@ abstract class SqlFunction extends SqlExpression { return $value; } - /** - * Shift a keyword off the beginning of the argument string and return it. - * - * @param array $keywords - * Whitelist of keywords - * @param string $arg - * @return mixed|null - */ - private function captureKeyword($keywords, &$arg) { - foreach ($keywords as $key) { - if (strpos($arg, $key . ' ') === 0) { - $arg = ltrim(substr($arg, strlen($key))); - return $key; - } - } - return NULL; - } - - /** - * Shifts 0 or more expressions off the argument string and returns them - * - * @param string $arg - * @param array $mustBe - * @param array $cantBe - * @return array - * @throws \API_Exception - */ - private function captureExpressions(&$arg, $mustBe, $cantBe) { - $captured = []; - $arg = ltrim($arg); - while ($arg) { - $item = $this->captureExpression($arg); - $arg = ltrim(substr($arg, strlen($item))); - $expr = SqlExpression::convert($item, FALSE, $mustBe, $cantBe); - $this->fields = array_merge($this->fields, $expr->getFields()); - $captured[] = $expr; - // Keep going if we have a comma indicating another expression follows - if (substr($arg, 0, 1) === ',') { - $arg = ltrim(substr($arg, 1)); - } - else { - break; - } - } - return $captured; - } - - /** - * Scans the beginning of a string for an expression; stops when it hits delimiter - * - * @param $arg - * @return string - */ - private function captureExpression($arg) { - $chars = str_split($arg); - $isEscaped = $quote = NULL; - $item = ''; - $quotes = ['"', "'"]; - $brackets = [ - ')' => '(', - ]; - $enclosures = array_fill_keys($brackets, 0); - foreach ($chars as $index => $char) { - if (!$isEscaped && in_array($char, $quotes, TRUE)) { - // Open quotes - we'll ignore everything inside - if (!$quote) { - $quote = $char; - } - // Close quotes - elseif ($char === $quote) { - $quote = NULL; - } - } - if (!$quote) { - // Delineates end of expression - if (($char == ',' || $char == ' ') && !array_filter($enclosures)) { - return $item; - } - // Open brackets - we'll ignore delineators inside - if (isset($enclosures[$char])) { - $enclosures[$char]++; - } - // Close brackets - if (isset($brackets[$char]) && $enclosures[$brackets[$char]]) { - $enclosures[$brackets[$char]]--; - } - } - $item .= $char; - // We are escaping the next char if this is a backslash not preceded by an odd number of backslashes - $isEscaped = $char === '\\' && ((strlen($item) - strlen(rtrim($item, '\\'))) % 2); - } - return $item; - } - /** * Render the expression for insertion into the sql query * @@ -195,9 +111,8 @@ abstract class SqlFunction extends SqlExpression { */ public function render(array $fieldList): string { $output = ''; - $params = $this->getParams(); - foreach ($this->args as $index => $arg) { - $rendered = $this->renderArg($arg, $params[$index], $fieldList); + foreach ($this->args as $arg) { + $rendered = $this->renderArg($arg, $fieldList); if (strlen($rendered)) { $output .= (strlen($output) ? ' ' : '') . $rendered; } @@ -207,11 +122,10 @@ abstract class SqlFunction extends SqlExpression { /** * @param array $arg - * @param array $param * @param array $fieldList * @return string */ - private function renderArg($arg, $param, $fieldList): string { + private function renderArg($arg, $fieldList): string { $rendered = implode(' ', $arg['prefix']); foreach ($arg['expr'] ?? [] as $idx => $expr) { if (strlen($rendered) || $idx) { @@ -250,14 +164,14 @@ abstract class SqlFunction extends SqlExpression { foreach (static::params() as $param) { // Merge in defaults to ensure each param has these properties $params[] = $param + [ - 'prefix' => NULL, + 'name' => NULL, + 'label' => ts('Select'), 'min_expr' => 1, 'max_expr' => 1, 'flag_before' => [], 'flag_after' => [], 'optional' => FALSE, - 'must_be' => [], - 'cant_be' => ['SqlWild'], + 'must_be' => ['SqlField', 'SqlFunction', 'SqlString', 'SqlNumber', 'SqlNull'], 'api_default' => NULL, ]; } @@ -284,6 +198,6 @@ abstract class SqlFunction extends SqlExpression { /** * @return string */ - abstract public static function getTitle(): string; + abstract public static function getDescription(): string; } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionABS.php b/civicrm/Civi/Api4/Query/SqlFunctionABS.php index 015906c4def6c5ce1ce3ed622af4c310f5137ce0..7e8b6f1aab26e603e57603d07ecd3c9cadd0f157 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionABS.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionABS.php @@ -31,7 +31,14 @@ class SqlFunctionABS extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Absolute'); + return ts('Absolute value'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('The positive value of a number.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionAVG.php b/civicrm/Civi/Api4/Query/SqlFunctionAVG.php index 59e6548a7309aa80e7b3b8f8160f2a99befa0084..44ff3b0720ca2c17d6f004a1f1c3b4ca68e0b719 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionAVG.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionAVG.php @@ -34,4 +34,11 @@ class SqlFunctionAVG extends SqlFunction { return ts('Average'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The mean of all values in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionBINARY.php b/civicrm/Civi/Api4/Query/SqlFunctionBINARY.php new file mode 100644 index 0000000000000000000000000000000000000000..cce4b8ea5059a7fdac14b064f9a093d367ddd2cc --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionBINARY.php @@ -0,0 +1,44 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionBINARY extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static function params(): array { + return [ + [ + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + ], + ]; + } + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Binary'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Case-sensitive string treatment.'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php b/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php index 62622be45f6fba4a5ab32dfc9edf75720a0e6b55..1616b05280d4b58fddd903277759b2f022a68445 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCOALESCE.php @@ -25,6 +25,7 @@ class SqlFunctionCOALESCE extends SqlFunction { [ 'max_expr' => 99, 'optional' => FALSE, + 'label' => ts('Value?'), ], ]; } @@ -36,4 +37,11 @@ class SqlFunctionCOALESCE extends SqlFunction { return ts('Coalesce'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The first value that is not null.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php index a1c201fec288237e01d86f0f14f165f4968722a8..fff67d74f9f23ae431c77fb3c92f8f8a8b8c6c73 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT.php @@ -26,6 +26,7 @@ class SqlFunctionCONCAT extends SqlFunction { 'max_expr' => 99, 'optional' => FALSE, 'must_be' => ['SqlField', 'SqlString'], + 'label' => ts('And'), ], ]; } @@ -34,7 +35,14 @@ class SqlFunctionCONCAT extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Combine'); + return ts('Combine if'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Joined text, only if all values are not null.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCONCAT_WS.php b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT_WS.php new file mode 100644 index 0000000000000000000000000000000000000000..92c7a2e28940582b1383b16c616215e0263b07dc --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionCONCAT_WS.php @@ -0,0 +1,53 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionCONCAT_WS extends SqlFunction { + + protected static $category = self::CATEGORY_STRING; + + protected static $dataType = 'String'; + + protected static function params(): array { + return [ + [ + 'optional' => FALSE, + 'must_be' => ['SqlString'], + 'label' => ts('Separator'), + ], + [ + 'max_expr' => 99, + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString'], + 'label' => ts('Plus'), + ], + ]; + } + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Combine text'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Every non-null value joined by a separator.'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php b/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php index c51e024856ab1730f3ca109ed40617470b3b869c..360ce7d8af0a0f9c979185521ae935a3199e5829 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCOUNT.php @@ -26,7 +26,6 @@ class SqlFunctionCOUNT extends SqlFunction { 'flag_before' => ['DISTINCT' => ts('Distinct')], 'max_expr' => 1, 'must_be' => ['SqlField', 'SqlWild'], - 'cant_be' => [], ], ]; } @@ -38,4 +37,11 @@ class SqlFunctionCOUNT extends SqlFunction { return ts('Count'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The number of items in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php index f81993b53662a407401602c881b30426283ee2cc..951e4498c533395eafa6b3dfd73df1f1b6762638 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php @@ -29,4 +29,11 @@ class SqlFunctionCURDATE extends SqlFunction { return ts('Now'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The current date.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionDATE.php b/civicrm/Civi/Api4/Query/SqlFunctionDATE.php index 05362a510349beeaebec0373b4fa4ae2dea99dfc..0fe0d136b683e40e484a934f392e59dced6aec76 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionDATE.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionDATE.php @@ -33,7 +33,14 @@ class SqlFunctionDATE extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Date Only'); + return ts('Date only'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Only the date portion of a date/time.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php b/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php index 549e59a3de2fbf1fc6dca20df86785122c44ea83..5cc4211c5dad20398c54eb8d7c557a57c53adb0f 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionGREATEST.php @@ -24,7 +24,9 @@ class SqlFunctionGREATEST extends SqlFunction { return [ [ 'max_expr' => 99, + 'min_expr' => 2, 'optional' => FALSE, + 'label' => ts('Else'), ], ]; } @@ -36,4 +38,11 @@ class SqlFunctionGREATEST extends SqlFunction { return ts('Greatest'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The largest of all provided values.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php b/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php index 939c2c75536c7a511c350248f0de2031bef7e3e6..3c90f1a3236d969ccf892c03db7cc3d5bb93aad6 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionGROUP_CONCAT.php @@ -29,14 +29,15 @@ class SqlFunctionGROUP_CONCAT extends SqlFunction { 'optional' => FALSE, ], [ - 'prefix' => 'ORDER BY', + 'name' => 'ORDER BY', + 'label' => ts('Order by'), 'max_expr' => 1, 'flag_after' => ['ASC' => ts('Ascending'), 'DESC' => ts('Descending')], 'must_be' => ['SqlField'], 'optional' => TRUE, ], [ - 'prefix' => 'SEPARATOR', + 'name' => 'SEPARATOR', 'max_expr' => 1, 'must_be' => ['SqlString'], 'optional' => TRUE, @@ -80,4 +81,11 @@ class SqlFunctionGROUP_CONCAT extends SqlFunction { return ts('List'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('All values in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionIF.php b/civicrm/Civi/Api4/Query/SqlFunctionIF.php index 1b120d4fed948881e34676cef9b11b97eb0354c3..810cfe2d70f0253894da47341d1500159ab43e7f 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionIF.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionIF.php @@ -23,9 +23,19 @@ class SqlFunctionIF extends SqlFunction { protected static function params(): array { return [ [ - 'min_expr' => 3, - 'max_expr' => 3, 'optional' => FALSE, + 'must_be' => ['SqlEquation', 'SqlField'], + 'label' => ts('If'), + ], + [ + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString', 'SqlNumber', 'SqlNull'], + 'label' => ts('Then'), + ], + [ + 'optional' => FALSE, + 'must_be' => ['SqlField', 'SqlString', 'SqlNumber', 'SqlNull'], + 'label' => ts('Else'), ], ]; } @@ -34,7 +44,14 @@ class SqlFunctionIF extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('If'); + return ts('If/Else'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('If the field is empty, the first value, otherwise the second.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php b/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php index beeaebc77d533c45ed6453bf5cf903b195d63891..17d729d430d675fbf879207006086c343ba1e2be 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionISNULL.php @@ -35,4 +35,11 @@ class SqlFunctionISNULL extends SqlFunction { return ts('Is null'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('TRUE if the value is NULL, otherwise FALSE.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php b/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php index 6317647241de2eea969ca0d1ef45ab2bfe4e6947..c45893421dcefaf86702e73d3d87662114dde250 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionLEAST.php @@ -24,7 +24,9 @@ class SqlFunctionLEAST extends SqlFunction { return [ [ 'max_expr' => 99, + 'min_expr' => 2, 'optional' => FALSE, + 'label' => ts('Else'), ], ]; } @@ -36,4 +38,11 @@ class SqlFunctionLEAST extends SqlFunction { return ts('Least'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The smallest of all provided values.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php b/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php index d1a77b6b5f58e1a79d94c78bf443d6caf1800ec1..23d535e352c4e359ae495fd96c011b6681a72553 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionLOWER.php @@ -36,4 +36,11 @@ class SqlFunctionLOWER extends SqlFunction { return ts('Lowercase'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('Lowercase version of text.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionMAX.php b/civicrm/Civi/Api4/Query/SqlFunctionMAX.php index 6e3a880bf4c25ff01b5bbaace24e6938ee045cbe..24ad68af4a58e5e932d7a2d090e0573004e7b974 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionMAX.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionMAX.php @@ -36,4 +36,11 @@ class SqlFunctionMAX extends SqlFunction { return ts('Max'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The largest value in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionMIN.php b/civicrm/Civi/Api4/Query/SqlFunctionMIN.php index 3c6a79227cd4126355fff2812c810ea01254cacd..0883ee4c8ffdbae3505452558415b3326a496b7e 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionMIN.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionMIN.php @@ -36,4 +36,11 @@ class SqlFunctionMIN extends SqlFunction { return ts('Min'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The smallest value in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php b/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php index 79e117a7fdb14e627a6b493c8ee6669da4e6b305..07e4f2df2e132a5992a8aa1ec367f6d9e619d4a9 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionNULLIF.php @@ -26,6 +26,7 @@ class SqlFunctionNULLIF extends SqlFunction { 'min_expr' => 2, 'max_expr' => 2, 'optional' => FALSE, + 'label' => ts('Compare with'), ], ]; } @@ -34,7 +35,14 @@ class SqlFunctionNULLIF extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Null if'); + return ts('Unequal'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('The first value, only if it is not equal to the second.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionRAND.php b/civicrm/Civi/Api4/Query/SqlFunctionRAND.php index 1cb0cfeeb91596438c967e3b64128634fe9baa6f..8853973eb005f43e5306570056dcecb6b8ec5d74 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionRAND.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionRAND.php @@ -19,14 +19,26 @@ class SqlFunctionRAND extends SqlFunction { protected static $category = self::CATEGORY_MATH; protected static function params(): array { - return []; + return [ + [ + 'optional' => TRUE, + 'must_be' => ['SqlNumber'], + ], + ]; } /** * @return string */ public static function getTitle(): string { - return ts('Random Number'); + return ts('Random number'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Generates a random number between 0 and 1.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php b/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php index 27c7c1b51c989bc7691cd43bf3cfa8864545bf6d..961d151e2369228e7de3c65b65e8beada497e9b1 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionREPLACE.php @@ -21,10 +21,19 @@ class SqlFunctionREPLACE extends SqlFunction { protected static function params(): array { return [ [ - 'min_expr' => 3, - 'max_expr' => 3, 'optional' => FALSE, 'must_be' => ['SqlField', 'SqlString'], + 'label' => ts('Source'), + ], + [ + 'optional' => FALSE, + 'must_be' => ['SqlString', 'SqlField'], + 'label' => ts('Find'), + ], + [ + 'optional' => FALSE, + 'must_be' => ['SqlString', 'SqlField'], + 'label' => ts('Replace'), ], ]; } @@ -33,7 +42,14 @@ class SqlFunctionREPLACE extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Replace'); + return ts('Replace text'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Substitutes one value for another in the text.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionROUND.php b/civicrm/Civi/Api4/Query/SqlFunctionROUND.php index 5a57c584b1a140ec250a1c009c624cc5b516642f..5db43b962caed088b5598a780a89ff208289b393 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionROUND.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionROUND.php @@ -23,10 +23,12 @@ class SqlFunctionROUND extends SqlFunction { [ 'optional' => FALSE, 'must_be' => ['SqlField', 'SqlNumber'], + 'label' => ts('Number'), ], [ 'optional' => TRUE, 'must_be' => ['SqlNumber'], + 'label' => ts('Decimal places'), ], ]; } @@ -38,4 +40,11 @@ class SqlFunctionROUND extends SqlFunction { return ts('Round'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('Number rounded to specified number of decimal places.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionSUM.php b/civicrm/Civi/Api4/Query/SqlFunctionSUM.php index 28522692aa013d2fc2c8e0cfe8c8241111215770..71c56611b88a0229bc02ef2603125be9b7655590 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionSUM.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionSUM.php @@ -34,4 +34,11 @@ class SqlFunctionSUM extends SqlFunction { return ts('Sum'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('The sum of all values in the grouping.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionTIME.php b/civicrm/Civi/Api4/Query/SqlFunctionTIME.php index e55b48b8671d958334eafcf8e397c86a51cc3bc8..03548773252e3c9c350c11c7350856cb2769e88e 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionTIME.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionTIME.php @@ -33,7 +33,14 @@ class SqlFunctionTIME extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Time Only'); + return ts('Time only'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('Only the time portaion of a date/time.'); } } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php b/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php index 57e3ae324365d485e83fda783972e31f3bd7a7dc..51c08af908bb4ba59003cecd1dc5979873fbf8c8 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionUPPER.php @@ -36,4 +36,11 @@ class SqlFunctionUPPER extends SqlFunction { return ts('Uppercase'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('Uppercase version of text.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlFunctionYEAR.php b/civicrm/Civi/Api4/Query/SqlFunctionYEAR.php index 81b0ae52a57d0a308abfe0d35a90512e8e507dc2..f655000c437659aa195f85e6db8bb1ec9a393a30 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionYEAR.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionYEAR.php @@ -36,4 +36,11 @@ class SqlFunctionYEAR extends SqlFunction { return ts('Year Only'); } + /** + * @return string + */ + public static function getDescription(): string { + return ts('Only the year of a date.'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlNull.php b/civicrm/Civi/Api4/Query/SqlNull.php index 046d04c749f47a34e7b93956b4a50c34690acfda..5b804ba7e91f57c9d1102c7ba7d347a32d6d3344 100644 --- a/civicrm/Civi/Api4/Query/SqlNull.php +++ b/civicrm/Civi/Api4/Query/SqlNull.php @@ -23,4 +23,8 @@ class SqlNull extends SqlExpression { return 'NULL'; } + public static function getTitle(): string { + return ts('Null'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlNumber.php b/civicrm/Civi/Api4/Query/SqlNumber.php index c3331bd95362466e8d3785a004cf644eee7967be..04e7424aa0a04267f312d0c9d0d159426c430f95 100644 --- a/civicrm/Civi/Api4/Query/SqlNumber.php +++ b/civicrm/Civi/Api4/Query/SqlNumber.php @@ -26,4 +26,8 @@ class SqlNumber extends SqlExpression { return $this->expr; } + public static function getTitle(): string { + return ts('Number'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlString.php b/civicrm/Civi/Api4/Query/SqlString.php index ae2208d6f3e9205af7694bcd5c07e67bd1fbcd51..53228498d3a16389ba17d9b53a3996a646e3a729 100644 --- a/civicrm/Civi/Api4/Query/SqlString.php +++ b/civicrm/Civi/Api4/Query/SqlString.php @@ -31,4 +31,8 @@ class SqlString extends SqlExpression { return '"' . \CRM_Core_DAO::escapeString($this->expr) . '"'; } + public static function getTitle(): string { + return ts('Text'); + } + } diff --git a/civicrm/Civi/Api4/Query/SqlWild.php b/civicrm/Civi/Api4/Query/SqlWild.php index 7799042102191771555f6a125b7e8bbfb4b895aa..f0679f58a225d6808cfe96b0c704ac87d3d6b852 100644 --- a/civicrm/Civi/Api4/Query/SqlWild.php +++ b/civicrm/Civi/Api4/Query/SqlWild.php @@ -23,4 +23,8 @@ class SqlWild extends SqlExpression { return '*'; } + public static function getTitle(): string { + return ts('Wild'); + } + } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php index e6ff17de2700fd16e6230915f49944a781028e70..632dcd3cc1786e3649091c62a1118cb3aab236b2 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php +++ b/civicrm/Civi/Api4/Service/Spec/Provider/ContactGetSpecProvider.php @@ -22,6 +22,7 @@ class ContactGetSpecProvider implements Generic\SpecProviderInterface { * @param \Civi\Api4\Service\Spec\RequestSpec $spec */ public function modifySpec(RequestSpec $spec) { + // Groups field $field = new FieldSpec('groups', 'Contact', 'Array'); $field->setLabel(ts('In Groups')) ->setTitle(ts('Groups')) @@ -33,6 +34,19 @@ class ContactGetSpecProvider implements Generic\SpecProviderInterface { ->setSuffixes(['id', 'name', 'label']) ->setOptionsCallback([__CLASS__, 'getGroupList']); $spec->addFieldSpec($field); + + // Age field + if (!$spec->getValue('contact_type') || $spec->getValue('contact_type') === 'Individual') { + $field = new FieldSpec('age_years', 'Contact', 'Integer'); + $field->setLabel(ts('Age (years)')) + ->setTitle(ts('Age (years)')) + ->setColumnName('birth_date') + ->setDescription(ts('Age of individual (in years)')) + ->setType('Extra') + ->setReadonly(TRUE) + ->setSqlRenderer([__CLASS__, 'calculateAge']); + $spec->addFieldSpec($field); + } } /** @@ -94,4 +108,13 @@ class ContactGetSpecProvider implements Generic\SpecProviderInterface { return $options; } + /** + * Generate SQL for age field + * @param array $field + * @return string + */ + public static function calculateAge(array $field) { + return "TIMESTAMPDIFF(YEAR, {$field['sql_name']}, CURDATE())"; + } + } diff --git a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php index a66b244a630c4e681b22c2e04d92ce210cb65cb1..d1686c601094d5f3736d49dc6a1c3f26dda640ea 100644 --- a/civicrm/Civi/Api4/Service/Spec/RequestSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/RequestSpec.php @@ -36,16 +36,30 @@ class RequestSpec implements \Iterator { */ protected $fields = []; + /** + * @var array + */ + protected $values = []; + /** * @param string $entity * @param string $action + * @param array $values */ - public function __construct($entity, $action) { + public function __construct($entity, $action, $values = []) { $this->entity = $entity; $this->action = $action; $this->entityTableName = CoreUtil::getTableName($entity); + // Set contact_type from id if possible + if ($entity === 'Contact' && empty($values['contact_type']) && !empty($values['id'])) { + $values['contact_type'] = \CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $values['id'], 'contact_id'); + } + $this->values = $values; } + /** + * @param FieldSpec $field + */ public function addFieldSpec(FieldSpec $field) { if (!$field->getEntity()) { $field->setEntity($this->entity); @@ -126,6 +140,21 @@ class RequestSpec implements \Iterator { return $this->entity; } + /** + * @return array + */ + public function getValues() { + return $this->values; + } + + /** + * @param string $key + * @return mixed + */ + public function getValue(string $key) { + return $this->values[$key] ?? NULL; + } + /** * @return string */ diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index 413c1f3670b8f85b323432a9517f82db1739fee9..f57054230906afc718963054284ee69eeaf273bd 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -32,6 +32,8 @@ class SpecFormatter { $field->setName($data['custom_group_id.name'] . '.' . $data['name']); } else { + // Fields belonging to custom entities are treated as normal; type = Field instead of Custom + $field->setType('Field'); $field->setTableName($data['custom_group_id.table_name']); } $field->setColumnName($data['column_name']); diff --git a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php index f4a9eacd9e3387719c786c2a80a1f3e631c5be32..51a36fc82bdccc12073c744312655b1e4a8e1277 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php @@ -40,7 +40,7 @@ class SpecGatherer { * @return \Civi\Api4\Service\Spec\RequestSpec */ public function getSpec($entity, $action, $includeCustom, $values = []) { - $specification = new RequestSpec($entity, $action); + $specification = new RequestSpec($entity, $action, $values); // Real entities if (strpos($entity, 'Custom_') !== 0) { @@ -80,17 +80,16 @@ class SpecGatherer { /** * @param string $entity * @param string $action - * @param \Civi\Api4\Service\Spec\RequestSpec $specification - * @param array $values + * @param \Civi\Api4\Service\Spec\RequestSpec $spec */ - private function addDAOFields($entity, $action, RequestSpec $specification, $values = []) { + private function addDAOFields($entity, $action, RequestSpec $spec) { $DAOFields = $this->getDAOFields($entity); foreach ($DAOFields as $DAOField) { if ($DAOField['name'] == 'id' && $action == 'create') { continue; } - if (array_key_exists('contactType', $DAOField) && !empty($values['contact_type']) && $DAOField['contactType'] != $values['contact_type']) { + if (array_key_exists('contactType', $DAOField) && $spec->getValue('contact_type') && $DAOField['contactType'] != $spec->getValue('contact_type')) { continue; } if (!empty($DAOField['component']) && @@ -105,28 +104,26 @@ class SpecGatherer { $DAOField['default'] = '1'; } $field = SpecFormatter::arrayToField($DAOField, $entity); - $specification->addFieldSpec($field); + $spec->addFieldSpec($field); } } /** * Get custom fields that extend this entity * - * @see \CRM_Core_SelectValues::customGroupExtends - * * @param string $entity - * @param \Civi\Api4\Service\Spec\RequestSpec $specification - * @param array $values + * @param \Civi\Api4\Service\Spec\RequestSpec $spec * @throws \API_Exception + * @see \CRM_Core_SelectValues::customGroupExtends */ - private function addCustomFields($entity, RequestSpec $specification, $values = []) { + private function addCustomFields($entity, RequestSpec $spec) { $customInfo = \Civi\Api4\Utils\CoreUtil::getCustomGroupExtends($entity); if (!$customInfo) { return; } // If a contact_type was passed in, exclude custom groups for other contact types - if ($entity === 'Contact' && !empty($values['contact_type'])) { - $extends = ['Contact', $values['contact_type']]; + if ($entity === 'Contact' && $spec->getValue('contact_type')) { + $extends = ['Contact', $spec->getValue('contact_type')]; } else { $extends = $customInfo['extends']; @@ -139,7 +136,7 @@ class SpecGatherer { foreach ($customFields as $fieldArray) { $field = SpecFormatter::arrayToField($fieldArray, $entity); - $specification->addFieldSpec($field); + $spec->addFieldSpec($field); } } diff --git a/civicrm/Civi/Api4/Survey.php b/civicrm/Civi/Api4/Survey.php new file mode 100644 index 0000000000000000000000000000000000000000..c4cb0d433f5e366301bcd00cf7e62d4bdfee8d8f --- /dev/null +++ b/civicrm/Civi/Api4/Survey.php @@ -0,0 +1,23 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\Api4; + +/** + * Survey entity. + * + * @see https://docs.civicrm.org/user/en/latest/survey/what-is-civisurvey/ + * @searchable secondary + * @since 5.43 + * @package Civi\Api4 + */ +class Survey extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Utils/CoreUtil.php b/civicrm/Civi/Api4/Utils/CoreUtil.php index efb11f48e3337063637e4d82b47a600af0237267..62ee8124d9c6459f0445240b0a6144d9b5ae1387 100644 --- a/civicrm/Civi/Api4/Utils/CoreUtil.php +++ b/civicrm/Civi/Api4/Utils/CoreUtil.php @@ -13,6 +13,8 @@ namespace Civi\Api4\Utils; use Civi\API\Request; +use Civi\Api4\Entity; +use Civi\Api4\Event\CreateApi4RequestEvent; use CRM_Core_DAO_AllCoreTables as AllCoreTables; class CoreUtil { @@ -28,14 +30,8 @@ class CoreUtil { if ($entityName === 'CustomValue' || strpos($entityName, 'Custom_') === 0) { return 'CRM_Core_BAO_CustomValue'; } - $dao = self::getInfoItem($entityName, 'dao'); - if (!$dao) { - return NULL; - } - $bao = str_replace("DAO", "BAO", $dao); - // Check if this entity actually has a BAO. Fall back on the DAO if not. - $file = strtr($bao, '_', '/') . '.php'; - return stream_resolve_include_path($file) ? $bao : $dao; + $dao = AllCoreTables::getFullName($entityName); + return $dao ? AllCoreTables::getBAOClassName($dao) : NULL; } /** @@ -43,13 +39,9 @@ class CoreUtil { * @return string|\Civi\Api4\Generic\AbstractEntity */ public static function getApiClass($entityName) { - if (strpos($entityName, 'Custom_') === 0) { - $groupName = substr($entityName, 7); - return self::isCustomEntity($groupName) ? 'Civi\Api4\CustomValue' : NULL; - } - // Because "Case" is a reserved php keyword - $className = 'Civi\Api4\\' . ($entityName === 'Case' ? 'CiviCase' : $entityName); - return class_exists($className) ? $className : NULL; + $e = new CreateApi4RequestEvent($entityName); + \Civi::dispatcher()->dispatch('civi.api4.createRequest', $e); + return $e->className; } /** @@ -60,8 +52,11 @@ class CoreUtil { * @return mixed */ public static function getInfoItem(string $entityName, string $keyToReturn) { - $className = self::getApiClass($entityName); - return $className ? $className::getInfo()[$keyToReturn] ?? NULL : NULL; + $info = Entity::get(FALSE) + ->addWhere('name', '=', $entityName) + ->addSelect($keyToReturn) + ->execute()->first(); + return $info ? $info[$keyToReturn] ?? NULL : NULL; } /** @@ -114,6 +109,8 @@ class CoreUtil { $operators[] = 'CONTAINS'; $operators[] = 'IS EMPTY'; $operators[] = 'IS NOT EMPTY'; + $operators[] = 'REGEXP'; + $operators[] = 'NOT REGEXP'; return $operators; } @@ -162,7 +159,7 @@ class CoreUtil { * @return bool * @throws \CRM_Core_Exception */ - private static function isCustomEntity($customGroupName) { + public static function isCustomEntity($customGroupName) { return $customGroupName && \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $customGroupName, 'is_multiple', 'name'); } diff --git a/civicrm/Civi/Api4/WorkflowMessage.php b/civicrm/Civi/Api4/WorkflowMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..5369e84df1b4bce4015171c08bf3703780d8f251 --- /dev/null +++ b/civicrm/Civi/Api4/WorkflowMessage.php @@ -0,0 +1,139 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * A WorkflowMessage describes the inputs to an automated email messages, and it + * allows you to render or preview the content fo automated email messages. + * + * For example, when a constituent donates online, CiviContribute uses the + * `contribution_online_receipt` workflow message. This expects certain inputs + * (eg `contactId` and `contributionId`) and supports certain tokens + * (eg `{contribution.total_amount}`). + * + * WorkflowMessages are related to MessageTemplates (by way of + * `WorkflowMessage.name`<=>`MessageTemplate.workflow_name`). + * The WorkflowMessage defines the _contract_ or _processing_ of the + * message, and the MessageTemplate defines the _literal prose_. The prose + * would change frequently (eg for different deployments, locales, timeframes, + * and other whims), but contract would change conservatively (eg with a + * code-update and with some attention to backward-compatibility/change-management). + * + * @searchable none + * @since 5.43 + * @package Civi\Api4 + */ +class WorkflowMessage extends Generic\AbstractEntity { + + /** + * @param bool $checkPermissions + * @return Generic\BasicGetAction + */ + public static function get($checkPermissions = TRUE) { + return (new Generic\BasicGetAction(__CLASS__, __FUNCTION__, function ($get) { + return \Civi\WorkflowMessage\WorkflowMessage::getWorkflowSpecs(); + }))->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * + * @return \Civi\Api4\Action\WorkflowMessage\Render + */ + public static function render($checkPermissions = TRUE) { + return (new Action\WorkflowMessage\Render(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * @return Generic\BasicGetFieldsAction + */ + public static function getTemplateFields($checkPermissions = TRUE) { + return (new Action\WorkflowMessage\GetTemplateFields(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * @return Generic\BasicGetFieldsAction + */ + public static function getFields($checkPermissions = TRUE) { + return (new Generic\BasicGetFieldsAction(__CLASS__, __FUNCTION__, function() { + return [ + [ + 'name' => 'name', + 'title' => 'Name', + 'data_type' => 'String', + ], + [ + 'name' => 'group', + 'title' => 'Group', + 'data_type' => 'String', + ], + [ + 'name' => 'class', + 'title' => 'Class', + 'data_type' => 'String', + ], + [ + 'name' => 'description', + 'title' => 'Description', + 'data_type' => 'String', + ], + [ + 'name' => 'support', + 'title' => 'Support Level', + 'options' => [ + 'experimental' => ts('Experimental: Message may change substantively with no special communication or facilitation.'), + 'template-only' => ts('Template Support: Changes affecting the content of the message-template will get active support/facilitation.'), + 'full' => ts('Full Support: All changes affecting message-templates or message-senders will get active support/facilitation.'), + ], + 'data_type' => 'String', + ], + ]; + }))->setCheckPermissions($checkPermissions); + } + + public static function permissions() { + return [ + 'meta' => ['access CiviCRM'], + 'default' => ['administer CiviCRM'], + 'render' => [ + // nested array = OR + [ + 'edit message templates', + 'edit user-driven message templates', + 'edit system workflow message templates', + 'render templates', + ], + ], + ]; + } + + /** + * @inheritDoc + */ + public static function getInfo() { + $info = parent::getInfo(); + $info['primary_key'] = ['name']; + return $info; + } + +} diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index c680216844c590b5c8ea76c17a3a94a93bfb6760..fd7c2773d60131c5facc8f880ba48464ae57b446 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -213,6 +213,11 @@ class Container { [] ))->setPublic(TRUE); + $container->setDefinition('format', new Definition( + '\Civi\Core\Format', + [] + ))->setPublic(TRUE); + $container->setDefinition('bundle.bootstrap3', new Definition('CRM_Core_Resources_Bundle', ['bootstrap3'])) ->setFactory('CRM_Core_Resources_Common::createBootstrap3Bundle')->setPublic(TRUE); @@ -323,16 +328,28 @@ class Container { [] ))->addTag('kernel.event_subscriber')->setPublic(TRUE); $container->setDefinition("crm_mailing_action_tokens", new Definition( - "CRM_Mailing_ActionTokens", + 'CRM_Mailing_ActionTokens', [] ))->addTag('kernel.event_subscriber')->setPublic(TRUE); - foreach (['Activity', 'Contribute', 'Event', 'Mailing', 'Member'] as $comp) { - $container->setDefinition("crm_" . strtolower($comp) . "_tokens", new Definition( + foreach (['Activity', 'Contact', 'Contribute', 'Event', 'Mailing', 'Member', 'Case'] as $comp) { + $container->setDefinition('crm_' . strtolower($comp) . '_tokens', new Definition( "CRM_{$comp}_Tokens", [] ))->addTag('kernel.event_subscriber')->setPublic(TRUE); } + $container->setDefinition('crm_participant_tokens', new Definition( + 'CRM_Event_ParticipantTokens', + [] + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); + $container->setDefinition('crm_contribution_recur_tokens', new Definition( + 'CRM_Contribute_RecurTokens', + [] + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); + $container->setDefinition('crm_domain_tokens', new Definition( + 'CRM_Core_DomainTokens', + [] + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); $dispatcherDefn = $container->getDefinition('dispatcher'); foreach (\CRM_Core_DAO_AllCoreTables::getBaoClasses() as $baoEntity => $baoClass) { diff --git a/civicrm/Civi/Core/Format.php b/civicrm/Civi/Core/Format.php new file mode 100644 index 0000000000000000000000000000000000000000..52d85865a4baebc01e1330e3d3b10a47d6490454 --- /dev/null +++ b/civicrm/Civi/Core/Format.php @@ -0,0 +1,184 @@ +<?php + +namespace Civi\Core; + +use Brick\Money\Currency; +use Brick\Money\Money; +use Brick\Math\RoundingMode; +use Civi; +use CRM_Core_Config; +use CRM_Core_I18n; +use CRM_Utils_Constant; +use NumberFormatter; +use Brick\Money\Context\AutoContext; + +/** + * Class Paths + * @package Civi\Core + * + * This class provides standardised formatting + */ +class Format { + + /** + * Get formatted money + * + * @param string $amount + * @param string|null $currency + * Currency, defaults to site currency if not provided. + * @param string|null $locale + * + * @return string + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + public function money(string $amount, ?string $currency = NULL, ?string $locale = NULL): string { + if (!$currency) { + $currency = Civi::settings()->get('defaultCurrency'); + } + if (!isset($locale)) { + $locale = CRM_Core_I18n::getLocale(); + } + $money = Money::of($amount, $currency, NULL, RoundingMode::HALF_UP); + $formatter = $this->getMoneyFormatter($currency, $locale); + return $money->formatWith($formatter); + } + + /** + * Get a formatted number. + * + * @param string|int|float|Money $amount + * Amount in a machine money format. + * @param string|null $locale + * @param array $attributes + * Additional values supported by NumberFormatter + * https://www.php.net/manual/en/class.numberformatter.php + * By default this will set it to round to 8 places and not + * add any padding. + * + * @return string + */ + public function number($amount, ?string $locale = NULL, array $attributes = [ + NumberFormatter::MIN_FRACTION_DIGITS => 0, + NumberFormatter::MAX_FRACTION_DIGITS => 8, + ]): string { + $formatter = $this->getMoneyFormatter(NULL, $locale, NumberFormatter::DECIMAL, $attributes); + return $formatter->format($amount); + } + + /** + * Get a number formatted with rounding expectations derived from the currency. + * + * @param string|float|int $amount + * @param string $currency + * @param $locale + * + * @return string + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + public function moneyNumber($amount, string $currency, $locale): string { + $formatter = $this->getMoneyFormatter($currency, $locale, NumberFormatter::DECIMAL); + $money = Money::of($amount, $currency, NULL, RoundingMode::HALF_UP); + return $money->formatWith($formatter); + } + + /** + * Get a money value with formatting but not rounding. + * + * @param string|float|int $amount + * @param string|null $currency + * @param string|null $locale + * + * @return string + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + public function moneyLong($amount, ?string $currency, ?string $locale): string { + $formatter = $this->getMoneyFormatter($currency, $locale, NumberFormatter::CURRENCY, [ + NumberFormatter::MAX_FRACTION_DIGITS => 9, + ]); + $money = Money::of($amount, $currency, new AutoContext()); + return $money->formatWith($formatter); + } + + /** + * Get a number with minimum decimal places based on the currency but no rounding. + * + * @param string|float|int $amount + * @param string|null $currency + * @param string|null $locale + * + * @return string + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + public function moneyNumberLong($amount, ?string $currency, ?string $locale): string { + $formatter = $this->getMoneyFormatter($currency, $locale, NumberFormatter::DECIMAL, [ + NumberFormatter::MAX_FRACTION_DIGITS => 9, + ]); + $money = Money::of($amount, $currency, new AutoContext()); + return $money->formatWith($formatter); + } + + /** + * Should we use the configured thousand & decimal separators. + * + * The goal is to phase this into being FALSE - but for now + * we are looking at how to manage an 'opt in' + */ + protected function isUseSeparatorSettings(): bool { + return !CRM_Utils_Constant::value('IGNORE_SEPARATOR_CONFIG'); + } + + /** + * Get the money formatter for when we are using configured thousand separators. + * + * Our intent is to phase out these settings in favour of deriving them from the locale. + * + * @param string|null $currency + * @param string|null $locale + * @param int $style + * See https://www.php.net/manual/en/class.numberformatter.php#intl.numberformatter-constants + * @param array $attributes + * See https://www.php.net/manual/en/class.numberformatter.php#intl.numberformatter-constants.unumberformatattribute + * + * @return \NumberFormatter + * + * @noinspection PhpDocMissingThrowsInspection + * @noinspection PhpUnhandledExceptionInspection + */ + public function getMoneyFormatter(?string $currency = NULL, ?string $locale = NULL, int $style = NumberFormatter::CURRENCY, array $attributes = []): NumberFormatter { + if (!$currency) { + $currency = Civi::settings()->get('defaultCurrency'); + } + $cacheKey = __CLASS__ . $currency . '_' . $locale . '_' . $style . (!empty($attributes) ? md5(json_encode($attributes)) : ''); + if (!isset(\Civi::$statics[$cacheKey])) { + $formatter = new NumberFormatter($locale, $style); + + if (!isset($attributes[NumberFormatter::MIN_FRACTION_DIGITS])) { + $attributes[NumberFormatter::MIN_FRACTION_DIGITS] = Currency::of($currency) + ->getDefaultFractionDigits(); + } + if (!isset($attributes[NumberFormatter::MAX_FRACTION_DIGITS])) { + $attributes[NumberFormatter::MAX_FRACTION_DIGITS] = Currency::of($currency) + ->getDefaultFractionDigits(); + } + + foreach ($attributes as $attribute => $value) { + $formatter->setAttribute($attribute, $value); + } + if ($locale === CRM_Core_I18n::getLocale() && $this->isUseSeparatorSettings()) { + $formatter->setSymbol(NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL, CRM_Core_Config::singleton()->monetaryThousandSeparator); + $formatter->setSymbol(NumberFormatter::MONETARY_SEPARATOR_SYMBOL, CRM_Core_Config::singleton()->monetaryDecimalPoint); + } + \Civi::$statics[$cacheKey] = $formatter; + } + return \Civi::$statics[$cacheKey]; + } + +} diff --git a/civicrm/Civi/Test.php b/civicrm/Civi/Test.php index cf9c841ab7981ccd8fdab426209df134aaf77d4e..a0d67697470284b41d3fd5fc4909198b8659d3d0 100644 --- a/civicrm/Civi/Test.php +++ b/civicrm/Civi/Test.php @@ -182,6 +182,46 @@ class Test { return self::$singletons['data']; } + /** + * @return \Civi\Test\ExampleDataLoader + */ + public static function examples(): \Civi\Test\ExampleDataLoader { + if (!isset(self::$singletons['examples'])) { + self::$singletons['examples'] = new \Civi\Test\ExampleDataLoader(); + } + return self::$singletons['examples']; + } + + /** + * Lookup the content of an example data-set. + * + * This helper is for the common case of looking up the data for a specific example. + * If you need more detailed information (eg the list of examples or other metadata), + * then use `\Civi\Test::examples(): ExampleDataLoader`. It provides more methods. + * + * @param string $name + * Symbolic name of the data-set. + * @return array + * The example data. + */ + public static function example(string $name): array { + $result = static::examples()->getFull($name); + if (!isset($result['data'])) { + throw new \CRM_Core_Exception("Failed to load example data-set: $name"); + } + return $result['data']; + } + + /** + * @return \Civi\Test\EventChecker + */ + public static function eventChecker() { + if (!isset(self::$singletons['eventChecker'])) { + self::$singletons['eventChecker'] = new \Civi\Test\EventChecker(); + } + return self::$singletons['eventChecker']; + } + /** * Prepare and execute a batch of SQL statements. * diff --git a/civicrm/Civi/Test/CiviTestListener.php b/civicrm/Civi/Test/CiviTestListener.php index 8f4c21d7a4de45833a2487ced64163f893361aec..6e3b4cdc08c9d5561d64384eef4f9f40de528516 100644 --- a/civicrm/Civi/Test/CiviTestListener.php +++ b/civicrm/Civi/Test/CiviTestListener.php @@ -65,9 +65,24 @@ else { else { $this->tx = NULL; } + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + \Civi\Test::eventChecker()->start($test); + } } public function endTest(\PHPUnit\Framework\Test $test, $time) { + $exception = NULL; + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + try { + \Civi\Test::eventChecker()->stop($test); + } + catch (\Exception $e) { + $exception = $e; + } + } + if ($test instanceof TransactionalInterface) { $this->tx->rollback()->commit(); $this->tx = NULL; @@ -81,6 +96,10 @@ else { error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } + + if ($exception) { + throw $exception; + } } /** diff --git a/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php index 42161cb12b0d90b607bb99d19b5106a75e58d49e..97c122081a8310dcb994613c03fbde7bf1917e53 100644 --- a/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php +++ b/civicrm/Civi/Test/CiviTestListenerPHPUnit7.php @@ -57,9 +57,24 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { else { $this->tx = NULL; } + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + \Civi\Test::eventChecker()->start($test); + } } public function endTest(\PHPUnit\Framework\Test $test, float $time): void { + $exception = NULL; + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + try { + \Civi\Test::eventChecker()->stop($test); + } + catch (\Exception $e) { + $exception = $e; + } + } + if ($test instanceof TransactionalInterface) { $this->tx->rollback()->commit(); $this->tx = NULL; @@ -73,6 +88,10 @@ class CiviTestListenerPHPUnit7 implements \PHPUnit\Framework\TestListener { error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } + + if ($exception) { + throw $exception; + } } /** diff --git a/civicrm/Civi/Test/EntityExample.php b/civicrm/Civi/Test/EntityExample.php new file mode 100644 index 0000000000000000000000000000000000000000..930f5972a021e1b5da876327a3f4e25fe574a76b --- /dev/null +++ b/civicrm/Civi/Test/EntityExample.php @@ -0,0 +1,43 @@ +<?php + +namespace Civi\Test; + +/** + * Helper class for defining entity examples. + * + * By convention, you should name this class relative to the target workflow, + * as in: + * + * - Entity Name: ContributionRecur + * - Example Data: Civi\Test\ExampleData\ContributionRecur\Euro5990 + * - Example Name: entity/ContributionRecur/Euro5900 + */ +abstract class EntityExample implements ExampleDataInterface { + + /** + * @var string + */ + protected $entityName; + + /** + * @var string + */ + protected $exName; + + public function __construct() { + if (!preg_match(';^(.*)[_\\\]([a-zA-Z0-9]+)[_\\\]([a-zA-Z0-9]+)$;', static::class, $m)) { + throw new \RuntimeException("Failed to parse class: " . static::class); + } + $this->entityName = $m[2]; + $this->exName = $m[3]; + } + + protected function dao(): string { + return \CRM_Core_DAO_AllCoreTables::getFullName($this->entityName); + } + + protected function bao(): string { + return \CRM_Core_DAO_AllCoreTables::getBAOClassName($this->getDAO()); + } + +} diff --git a/civicrm/Civi/Test/EventCheck.php b/civicrm/Civi/Test/EventCheck.php new file mode 100644 index 0000000000000000000000000000000000000000..6254201ed2458a7ac3f4ad2022dd379daf556497 --- /dev/null +++ b/civicrm/Civi/Test/EventCheck.php @@ -0,0 +1,81 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +use PHPUnit\Framework\Assert; + +/** + * An EventCheck is a fragment of a unit-test -- it is mixed into + * various test-scenarios and applies extra assertions. + */ +class EventCheck extends Assert { + + /** + * @var \PHPUnit\Framework\Test + */ + private $test; + + /** + * Determine whether this check should be used during the current test. + * + * @param \PHPUnit\Framework\Test|NULL $test + * + * @return bool|string + * FALSE: The check will be completely skipped. + * TRUE: The check will be enabled. However, if the events never + * execute, that is OK. Useful for general compliance-testing. + */ + public function isSupported($test) { + return TRUE; + } + + /** + * @return \PHPUnit\Framework\Test|NULL + */ + public function getTest() { + return $this->test; + } + + /** + * @param \PHPUnit\Framework\Test|NULL $test + */ + public function setTest($test): void { + $this->test = $test; + } + + /** + * Assert that a variable has a given type. + * + * @param string|string[] $types + * List of types, per `gettype()` or `get_class()` + * Ex: 'int|string|NULL' + * Ex: [`array`, `NULL`, `CRM_Core_DAO`] + * @param mixed $value + * The variable to check + * @param string|NULL $msg + * @see \CRM_Utils_Type::validatePhpType + */ + public function assertType($types, $value, ?string $msg = NULL) { + if (!\CRM_Utils_Type::validatePhpType($value, $types, FALSE)) { + $defactoType = is_object($value) ? get_class($value) : gettype($value); + $types = is_array($types) ? implode('|', $types) : $types; + $this->fail(sprintf("Expected one of (%s) but found %s\n%s", $types, $defactoType, $msg)); + } + } + + public function setUp() { + } + + public function tearDown() { + } + +} diff --git a/civicrm/Civi/Test/EventChecker.php b/civicrm/Civi/Test/EventChecker.php new file mode 100644 index 0000000000000000000000000000000000000000..1dc1e27ed0ccf83d66aa3b5a358c7632705d97a9 --- /dev/null +++ b/civicrm/Civi/Test/EventChecker.php @@ -0,0 +1,106 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +use Civi\Core\Event\EventScanner; + +class EventChecker { + + /** + * @var \Civi\Test\EventCheck[]|null + */ + private $allChecks = NULL; + + /** + * @var \Civi\Test\EventCheck[]|null + */ + private $activeChecks = NULL; + + /** + * @param \PHPUnit\Framework\Test $test + * + * @return $this + */ + public function start(\PHPUnit\Framework\Test $test) { + if ($this->activeChecks === NULL) { + $this->activeChecks = []; + foreach ($this->findAll() as $template) { + /** @var EventCheck $template */ + if ($template->isSupported($test)) { + $checker = clone $template; + $checker->setTest($test); + $this->activeChecks[] = $checker; + $checker->setUp(); + } + } + } + return $this; + } + + /** + * @return $this + */ + public function addListeners() { + $d = \Civi::dispatcher(); + foreach ($this->activeChecks ?: [] as $checker) { + /** @var EventCheck $checker */ + $d->addListenerMap($checker, EventScanner::findListeners($checker)); + // For the moment, KISS. But we may want a counter at some point - to ensure things actually run. + //foreach (EventScanner::findListeners($checker) as $event => $listeners) { + // foreach ($listeners as $listener) { + // $d->addListener($event, + // function($args...) use ($listener) { + // $count++; + // $m = $listener[1]; + // $checker->$m(...$args); + // }, + // $listener[1] ?? 0 + // ); + // } + //} + } + return $this; + } + + /** + * @return $this + */ + public function stop() { + // NOTE: In test environment, dispatcher will be removed regardless. + foreach ($this->activeChecks ?? [] as $checker) { + /** @var \Civi\Test\EventCheck $checker */ + Invasive::call([$checker, 'tearDown']); + $checker->setTest(NULL); + } + $this->activeChecks = NULL; + return $this; + } + + /** + * @return EventCheck[] + */ + protected function findAll() { + if ($this->allChecks === NULL) { + $all = []; + $testDir = \Civi::paths()->getPath('[civicrm.root]/tests/events'); + $files = \CRM_Utils_File::findFiles($testDir, '*.evch.php', TRUE); + sort($files); + foreach ($files as $file) { + $all[$file] = require $testDir . '/' . $file; + } + $this->allChecks = $all; + } + + return $this->allChecks; + } + +} diff --git a/civicrm/Civi/Test/ExampleData/Contact/Alex.ex.php b/civicrm/Civi/Test/ExampleData/Contact/Alex.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..ebb2e78296699774c10abc27dc4156fae62805c4 --- /dev/null +++ b/civicrm/Civi/Test/ExampleData/Contact/Alex.ex.php @@ -0,0 +1,85 @@ +<?php + +namespace Civi\Test\ExampleData\Contact; + +class Alex extends \Civi\Test\EntityExample { + + public function getExamples(): iterable { + yield [ + 'name' => "entity/{$this->entityName}/{$this->exName}", + ]; + } + + public function build(array &$example): void { + $example['data'] = [ + 'contact_id' => '100', + 'contact_type' => 'Individual', + 'contact_sub_type' => NULL, + 'sort_name' => 'D\u00edaz, Alex', + 'display_name' => 'Dr. Alex D\u00edaz', + 'do_not_email' => '1', + 'do_not_phone' => '1', + 'do_not_mail' => '0', + 'do_not_sms' => '0', + 'do_not_trade' => '0', + 'is_opt_out' => '0', + 'legal_identifier' => NULL, + 'external_identifier' => NULL, + 'nick_name' => NULL, + 'legal_name' => NULL, + 'image_URL' => NULL, + 'preferred_communication_method' => NULL, + 'preferred_language' => NULL, + 'preferred_mail_format' => 'Both', + 'first_name' => 'Alex', + 'middle_name' => '', + 'last_name' => 'D\u00edaz', + 'prefix_id' => '4', + 'suffix_id' => NULL, + 'formal_title' => NULL, + 'communication_style_id' => NULL, + 'job_title' => NULL, + 'gender_id' => '1', + 'birth_date' => '1994-04-21', + 'is_deceased' => '0', + 'deceased_date' => NULL, + 'household_name' => NULL, + 'organization_name' => NULL, + 'sic_code' => NULL, + 'contact_is_deleted' => '0', + 'current_employer' => NULL, + 'address_id' => NULL, + 'street_address' => NULL, + 'supplemental_address_1' => NULL, + 'supplemental_address_2' => NULL, + 'supplemental_address_3' => NULL, + 'city' => NULL, + 'postal_code_suffix' => NULL, + 'postal_code' => NULL, + 'geo_code_1' => NULL, + 'geo_code_2' => NULL, + 'state_province_id' => NULL, + 'country_id' => NULL, + 'phone_id' => '7', + 'phone_type_id' => '1', + 'phone' => '293-6934', + 'email_id' => '7', + 'email' => 'daz.alex67@testing.net', + 'on_hold' => '0', + 'im_id' => NULL, + 'provider_id' => NULL, + 'im' => NULL, + 'worldregion_id' => NULL, + 'world_region' => NULL, + 'languages' => NULL, + 'individual_prefix' => 'Dr.', + 'individual_suffix' => NULL, + 'communication_style' => NULL, + 'gender' => 'Female', + 'state_province_name' => NULL, + 'state_province' => NULL, + 'country' => NULL, + ]; + } + +} diff --git a/civicrm/Civi/Test/ExampleData/Contact/Barb.ex.php b/civicrm/Civi/Test/ExampleData/Contact/Barb.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..015b6a0e9d00cd9bd566b9b22d512b1b41b1f730 --- /dev/null +++ b/civicrm/Civi/Test/ExampleData/Contact/Barb.ex.php @@ -0,0 +1,91 @@ +<?php + +namespace Civi\Test\ExampleData\Contact; + +class Barb extends \Civi\Test\EntityExample { + + public function getExamples(): iterable { + yield [ + 'name' => "entity/{$this->entityName}/{$this->exName}", + ]; + } + + public function build(array &$example): void { + $example['data'] = [ + 'contact_id' => '100', + 'contact_type' => 'Individual', + 'contact_sub_type' => NULL, + 'sort_name' => 'Johnson, Barbara', + 'display_name' => 'Barbara Johnson', + 'do_not_email' => '1', + 'do_not_phone' => '1', + 'do_not_mail' => '0', + 'do_not_sms' => '0', + 'do_not_trade' => '0', + 'is_opt_out' => '0', + 'legal_identifier' => NULL, + 'external_identifier' => NULL, + 'nick_name' => 'Barb', + 'legal_name' => NULL, + 'image_URL' => NULL, + 'preferred_communication_method' => NULL, + 'preferred_language' => NULL, + 'preferred_mail_format' => 'Both', + 'first_name' => 'Barbara', + 'middle_name' => '', + 'last_name' => 'Johnson', + 'prefix_id' => '4', + 'suffix_id' => NULL, + 'formal_title' => NULL, + 'communication_style_id' => NULL, + 'job_title' => NULL, + 'gender_id' => '1', + 'birth_date' => '1999-05-11', + 'is_deceased' => '0', + 'deceased_date' => NULL, + 'household_name' => NULL, + 'organization_name' => NULL, + 'sic_code' => NULL, + 'contact_is_deleted' => '0', + 'current_employer' => NULL, + 'address_id' => NULL, + 'street_address' => NULL, + 'supplemental_address_1' => NULL, + 'supplemental_address_2' => NULL, + 'supplemental_address_3' => NULL, + 'city' => NULL, + 'postal_code_suffix' => NULL, + 'postal_code' => NULL, + 'geo_code_1' => NULL, + 'geo_code_2' => NULL, + 'state_province_id' => NULL, + 'country_id' => NULL, + 'phone_id' => '7', + 'phone_type_id' => '1', + 'phone' => '393-7924', + 'email_id' => '7', + 'email' => 'barb@testing.net', + 'on_hold' => '0', + 'im_id' => NULL, + 'provider_id' => NULL, + 'im' => NULL, + 'worldregion_id' => NULL, + 'world_region' => NULL, + 'languages' => NULL, + 'individual_prefix' => NULL, + 'individual_suffix' => NULL, + 'communication_style' => NULL, + 'gender' => 'Female', + 'state_province_name' => NULL, + 'state_province' => NULL, + 'country' => NULL, + 'email_greeting_id' => 1, + 'email_greeting_custom' => NULL, + 'email_greeting_display' => 'Dear Barb', + 'postal_greeting_id' => 1, + 'postal_greeting_custom' => NULL, + 'postal_greeting_display' => 'Dear Barb', + ]; + } + +} diff --git a/civicrm/Civi/Test/ExampleData/Contribution/Euro5990.ex.php b/civicrm/Civi/Test/ExampleData/Contribution/Euro5990.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..0d3237d0bee13549b03e7e7662d7d6b2ac8f918c --- /dev/null +++ b/civicrm/Civi/Test/ExampleData/Contribution/Euro5990.ex.php @@ -0,0 +1,50 @@ +<?php + +namespace Civi\Test\ExampleData\Contribution; + +class Euro5990 extends \Civi\Test\EntityExample { + + public function getExamples(): iterable { + yield [ + 'name' => "entity/{$this->entityName}/{$this->exName}/completed", + ]; + } + + public function build(array &$example): void { + $base = [ + 'id' => 50, + 'contact_id' => 100, + 'financial_type_id' => 'Member dues', + 'payment_instrument_id:label' => 'Debit Card', + 'contribution_page_id' => 2, + 'receive_date' => '2021-07-23 15:39:20', + 'revenue_recognition_date' => '2021-07-23 00:00:00', + 'thankyou_date' => '2021-07-23 15:39:20', + 'cancel_date' => '', + 'cancel_reason' => '', + 'non_deductible_amount' => 5, + 'total_amount' => 5990.99, + 'fee_amount' => 0.99, + 'net_amount' => 5990, + 'tax_amount' => 60, + 'currency' => 'EUR', + 'source' => 'Online donation', + 'amount_level' => 'premium purchased', + 'contribution_recur_id' => 50, + 'check_number' => '', + 'campaign_id:label' => 'Outreach', + 'creditnote_id' => '', + 'trxn_id' => 123, + 'invoice_id' => 'inv123', + 'is_test' => TRUE, + 'is_pay_later' => FALSE, + ]; + + $extras['completed'] = [ + 'contribution_status_id' => 1, + ]; + + $example['data'] = $base + $extras[basename($example['name'])]; + } + +} diff --git a/civicrm/Civi/Test/ExampleData/ContributionRecur/Euro5990.ex.php b/civicrm/Civi/Test/ExampleData/ContributionRecur/Euro5990.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..e55cf2f187cd16ee24fb22fb30fa1514e8a8050c --- /dev/null +++ b/civicrm/Civi/Test/ExampleData/ContributionRecur/Euro5990.ex.php @@ -0,0 +1,56 @@ +<?php + +namespace Civi\Test\ExampleData\ContributionRecur; + +class Euro5990 extends \Civi\Test\EntityExample { + + public function getExamples(): iterable { + yield [ + 'name' => "entity/{$this->entityName}/{$this->exName}/pending", + ]; + yield [ + 'name' => "entity/{$this->entityName}/{$this->exName}/cancelled", + ]; + } + + public function build(array &$example): void { + $base = [ + 'id' => 50, + 'contact_id' => 100, + 'is_email_receipt' => 1, + 'start_date' => '2021-07-23 15:39:20', + 'end_date' => '2021-07-26 18:07:20', + 'amount' => 5990.99, + 'currency' => 'EUR', + 'frequency_unit' => 'year', + 'frequency_interval' => 2, + 'installments' => 24, + 'payment_instrument_id:label' => 'Debit Card', + 'financial_type_id:label' => 'Member dues', + 'processor_id' => 'abc_xyz', + 'payment_processor_id' => 2, + 'trxn_id' => 123, + 'invoice_id' => 'inv123', + 'sequential' => 1, + 'failure_retry_date' => '2020-01-03', + 'auto_renew' => 1, + 'cycle_day' => '15', + 'is_test' => TRUE, + 'payment_token_id' => 4, + ]; + + $extras['pending'] = [ + 'status_id' => 2, + 'cancel_date' => NULL, + 'cancel_reason' => NULL, + ]; + $extras['cancelled'] = [ + 'status_id' => 3, + 'cancel_date' => '2021-08-19 09:12:45', + 'cancel_reason' => 'Because', + ]; + + $example['data'] = $base + $extras[basename($example['name'])]; + } + +} diff --git a/civicrm/Civi/Test/ExampleDataInterface.php b/civicrm/Civi/Test/ExampleDataInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..1389b05cdd3dee24e8649ae1be1b3e2f293f98a1 --- /dev/null +++ b/civicrm/Civi/Test/ExampleDataInterface.php @@ -0,0 +1,32 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +interface ExampleDataInterface { + + /** + * Get list of examples (summary-info only). + * + * This data should be static and amenable to caching. + */ + public function getExamples(): iterable; + + /** + * Fill-in full details of the example. + * + * @param array $example + * We start with summary-info for this example (name, title, tags). + * We may expand upon the example record, filling in dynamic(ish) properties like $example['data']. + */ + public function build(array &$example): void; + +} diff --git a/civicrm/Civi/Test/ExampleDataLoader.php b/civicrm/Civi/Test/ExampleDataLoader.php new file mode 100644 index 0000000000000000000000000000000000000000..e26cb4198b0fa1097ed3e5da80c6322e7233290d --- /dev/null +++ b/civicrm/Civi/Test/ExampleDataLoader.php @@ -0,0 +1,150 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +class ExampleDataLoader { + + /** + * These are "heavy" properties which are not cached. i.e. + * - They are generated by `$ex->build($example);` + * - They are not generated by '$ex->getExamples();' + * - They are returned by `$this->getFull()` + * - They are not returned by `$this->getMeta()`. + */ + const HEAVY_FIELDS = 'data,asserts'; + + /** + * @var array|null + */ + private $metas; + + /** + * Get a list of all examples, including basic metadata (name, title, workflow). + * + * @return array + * Ex: ['my_example' => ['title' => ..., 'workflow' => ..., 'tags' => ...]] + * @throws \ReflectionException + */ + public function getMetas(): array { + if ($this->metas === NULL) { + // $cache = new \CRM_Utils_Cache_NoCache([]); + $cache = \CRM_Utils_Constant::value('CIVICRM_TEST') ? new \CRM_Utils_Cache_NoCache([]) : \Civi::cache('long'); + $cacheKey = \CRM_Utils_String::munge(__CLASS__); + $this->metas = $cache->get($cacheKey); + if ($this->metas === NULL) { + $this->metas = $this->findMetas(); + $cache->set($cacheKey, $this->metas); + } + } + return $this->metas; + } + + public function getMeta(string $name): ?array { + $all = $this->getMetas(); + return $all[$name] ?? NULL; + } + + /** + * @param string $name + * + * @return array|null + */ + public function getFull(string $name): ?array { + $example = $this->getMeta($name); + if ($example === NULL) { + return NULL; + } + + $obj = $this->createObj($example['file'], $example['class']); + $obj->build($example); + return $example; + } + + /** + * Get a list of all examples, including basic metadata (name, title, workflow). + * + * @return array + * Ex: ['my_example' => ['title' => ..., 'workflow' => ..., 'tags' => ...]] + * @throws \ReflectionException + */ + protected function findMetas(): array { + $classes = array_merge( + // This scope of search is decidedly narrow - it should probably be expanded. + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/'), 'Civi/Test/ExampleData', '\\'), + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/'), 'CRM/*/WorkflowMessage', '_'), + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/'), 'Civi/*/WorkflowMessage', '\\'), + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/'), 'Civi/WorkflowMessage', '\\'), + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/tests/phpunit/'), 'CRM/*/WorkflowMessage', '_'), + $this->scanExampleClasses(\Civi::paths()->getPath('[civicrm.root]/tests/phpunit/'), 'Civi/*/WorkflowMessage', '\\') + ); + + $all = []; + foreach ($classes as $file => $class) { + $obj = $this->createObj($file, $class); + $offset = 0; + foreach ($obj->getExamples() as $example) { + $example['file'] = $file; + $example['class'] = $class; + if (!isset($example['name'])) { + $example['name'] = $example['class'] . '#' . $offset; + } + $all[$example['name']] = $example; + $offset++; + } + } + + return $all; + } + + /** + * @param $classRoot + * Ex: Civi root dir. + * @param $classDir + * Folder to search (within the parent). + * @param $classDelim + * Namespace separator, eg underscore or backslash. + * @return array + * Array(string $includeFile => string $className). + */ + private function scanExampleClasses($classRoot, $classDir, $classDelim): array { + $civiRoot = \Civi::paths()->getPath('[civicrm.root]/'); + $classRoot = \CRM_Utils_File::addTrailingSlash($classRoot, '/'); + // Prefer include-paths relative to civiRoot - eg make tests/phpunit/* loadable at runtime. + $includeRoot = \CRM_Utils_File::isChildPath($civiRoot, $classRoot) ? $civiRoot : $classRoot; + + $r = []; + $exDirs = (array) glob($classRoot . $classDir); + foreach ($exDirs as $exDir) { + foreach (\CRM_Utils_File::findFiles($exDir, '*.ex.php') as $file) { + $file = str_replace(DIRECTORY_SEPARATOR, '/', $file); + $includeFile = \CRM_Utils_File::relativize($file, $includeRoot); + $classFile = \CRM_Utils_File::relativize($file, $classRoot); + $class = str_replace('/', $classDelim, preg_replace('/\.ex\.php$/', '', + $classFile)); + $r[$includeFile] = $class; + } + } + return $r; + } + + private function createObj(?string $file, ?string $class): ExampleDataInterface { + if ($file) { + include_once $file; + } + if (!class_exists($class)) { + throw new \CRM_Core_Exception("Failed to read example (class '{$class}' in file '{$file}')"); + } + + return new $class(); + } + +} diff --git a/civicrm/Civi/Test/HttpTestTrait.php b/civicrm/Civi/Test/HttpTestTrait.php index 80be44515d66060296fc4be5df8b6ce1466c59bb..18f1dad11569fd190d3b43defe95330c0c93e423 100644 --- a/civicrm/Civi/Test/HttpTestTrait.php +++ b/civicrm/Civi/Test/HttpTestTrait.php @@ -34,11 +34,20 @@ trait HttpTestTrait { /** * Create an HTTP client suitable for simulating AJAX requests. * + * The client may include some mix of these middlewares: + * + * @see \CRM_Utils_GuzzleMiddleware::authx() + * @see \CRM_Utils_GuzzleMiddleware::url() + * @see \CRM_Utils_GuzzleMiddleware::curlLog() + * @see Middleware::history() + * @see Middleware::log() + * * @param array $options * @return \GuzzleHttp\Client */ protected function createGuzzle($options = []) { $handler = HandlerStack::create(); + $handler->unshift(\CRM_Utils_GuzzleMiddleware::authx(), 'civi_authx'); $handler->unshift(\CRM_Utils_GuzzleMiddleware::url(), 'civi_url'); $handler->push(Middleware::history($this->httpHistory), 'history'); diff --git a/civicrm/Civi/Test/Legacy/CiviTestListener.php b/civicrm/Civi/Test/Legacy/CiviTestListener.php index 4a71a74504df902c38bd42c4482556690ad4f23d..93fb4ac8fb830a28d480d66171bffad9e37f8576 100644 --- a/civicrm/Civi/Test/Legacy/CiviTestListener.php +++ b/civicrm/Civi/Test/Legacy/CiviTestListener.php @@ -55,9 +55,24 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { else { $this->tx = NULL; } + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + \Civi\Test::eventChecker()->start($test); + } } public function endTest(\PHPUnit_Framework_Test $test, $time) { + $exception = NULL; + + if ($this->isCiviTest($test) || $test instanceof \CiviUnitTestCase) { + try { + \Civi\Test::eventChecker()->stop($test); + } + catch (\Exception $e) { + $exception = $e; + } + } + if ($test instanceof \Civi\Test\TransactionalInterface) { $this->tx->rollback()->commit(); $this->tx = NULL; @@ -71,6 +86,10 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener { error_reporting(E_ALL & ~E_NOTICE); $this->errorScope = NULL; } + + if ($exception) { + throw $exception; + } } /** diff --git a/civicrm/Civi/Test/WorkflowMessageTestTrait.php b/civicrm/Civi/Test/WorkflowMessageTestTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..1c4bd7780510556d71c9536135606786a744cac6 --- /dev/null +++ b/civicrm/Civi/Test/WorkflowMessageTestTrait.php @@ -0,0 +1,82 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Test; + +use Civi\WorkflowMessage\WorkflowMessage; + +trait WorkflowMessageTestTrait { + + abstract public function getWorkflowClass(): string; + + public function getWorkflowName(): string { + $class = $this->getWorkflowClass(); + return $class::WORKFLOW; + } + + /** + * @return \Civi\Api4\Generic\AbstractGetAction + * @throws \API_Exception + */ + protected function findExamples(): \Civi\Api4\Generic\AbstractGetAction { + return \Civi\Api4\ExampleData::get(0) + ->setSelect(['name', 'title', 'tags', 'data', 'asserts']) + ->addWhere('name', 'LIKE', 'workflow/' . $this->getWorkflowName() . '/%') + ->addWhere('tags', 'CONTAINS', 'phpunit'); + } + + /** + * @param array $exampleProps + * @param string $exampleName + * @throws \Civi\WorkflowMessage\Exception\WorkflowMessageException + */ + protected function assertConstructorEquivalence(array $exampleProps, $exampleName = ''): void { + $class = $this->getWorkflowClass(); + $instances = []; + $instances["factory_$exampleName"] = WorkflowMessage::create($this->getWorkflowName(), $exampleProps); + $instances["class_$exampleName"] = new $class($exampleProps); + + /** @var \Civi\WorkflowMessage\WorkflowMessageInterface $refInstance */ + /** @var \Civi\WorkflowMessage\WorkflowMessageInterface $cmpInstance */ + + $refName = $refInstance = NULL; + $comparisons = 0; + foreach ($instances as $cmpName => $cmpInstance) { + if ($refName === NULL) { + $refName = $cmpName; + $refInstance = $cmpInstance; + continue; + } + + $this->assertSameWorkflowMessage($refInstance, $cmpInstance, "Compare $refName vs $cmpName: "); + $comparisons++; + } + $this->assertEquals(1, $comparisons); + } + + /** + * @param \Civi\WorkflowMessage\WorkflowMessageInterface $refInstance + * @param \Civi\WorkflowMessage\WorkflowMessageInterface $cmpInstance + * @param string|null $prefix + */ + protected function assertSameWorkflowMessage(\Civi\WorkflowMessage\WorkflowMessageInterface $refInstance, \Civi\WorkflowMessage\WorkflowMessageInterface $cmpInstance, ?string $prefix = NULL): void { + if ($prefix === NULL) { + $prefix = sprintf('[%s] ', $this->getWorkflowName()); + } + $this->assertEquals($refInstance->export('tplParams'), $cmpInstance->export('tplParams'), "{$prefix}Should have same export(tplParams)"); + $this->assertEquals($refInstance->export('tokenContext'), $cmpInstance->export('tokenContext'), "{$prefix}should have same export(tokenContext)"); + $this->assertEquals($refInstance->export('envelope'), $cmpInstance->export('envelope'), "{$prefix}Should have same export(envelope)"); + $refExportAll = WorkflowMessage::exportAll($refInstance); + $cmpExportAll = WorkflowMessage::exportAll($cmpInstance); + $this->assertEquals($refExportAll, $cmpExportAll, "{$prefix}Should have same exportAll()"); + } + +} diff --git a/civicrm/Civi/Token/TokenCompatSubscriber.php b/civicrm/Civi/Token/TokenCompatSubscriber.php index 9d745c14890829a1d62df951846604f9d4542a7e..6274d8f29c399e72ee6d9bfe17ee78b0559f8c1e 100644 --- a/civicrm/Civi/Token/TokenCompatSubscriber.php +++ b/civicrm/Civi/Token/TokenCompatSubscriber.php @@ -3,31 +3,24 @@ namespace Civi\Token; use Civi\Token\Event\TokenRenderEvent; use Civi\Token\Event\TokenValueEvent; +use Money\Money; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Class TokenCompatSubscriber * @package Civi\Token * - * This class provides a compatibility layer for using CRM_Utils_Token - * helpers within TokenProcessor. - * - * THIS IS NOT A GOOD EXAMPLE TO EMULATE. The class exists to two - * bridge two different designs. CRM_Utils_Token has some - * undesirable elements (like iterative token substitution). - * However, if you're refactor CRM_Utils_Token or improve the - * bridge, then it makes sense to update this class. + * This class handles the smarty processing of tokens. */ class TokenCompatSubscriber implements EventSubscriberInterface { /** * @inheritDoc */ - public static function getSubscribedEvents() { + public static function getSubscribedEvents(): array { return [ 'civi.token.eval' => [ ['setupSmartyAliases', 1000], - ['onEvaluate'], ], 'civi.token.render' => 'onRender', ]; @@ -56,111 +49,31 @@ class TokenCompatSubscriber implements EventSubscriberInterface { $proc->addMessage('TokenCompatSubscriber.aliases', $fakeMessage, 'text/plain'); } - /** - * Load token data. - * - * @param \Civi\Token\Event\TokenValueEvent $e - * @throws TokenException - */ - public function onEvaluate(TokenValueEvent $e) { - // For reasons unknown, replaceHookTokens used to require a pre-computed list of - // hook *categories* (aka entities aka namespaces). We cache - // this in the TokenProcessor's context but can likely remove it now. - - $e->getTokenProcessor()->context['hookTokenCategories'] = \CRM_Utils_Token::getTokenCategories(); - - $messageTokens = $e->getTokenProcessor()->getMessageTokens(); - $returnProperties = array_fill_keys($messageTokens['contact'] ?? [], 1); - $returnProperties = array_merge(\CRM_Contact_BAO_Query::defaultReturnProperties(), $returnProperties); - - foreach ($e->getRows() as $row) { - if (empty($row->context['contactId'])) { - continue; - } - - unset($swapLocale); - $swapLocale = empty($row->context['locale']) ? NULL : \CRM_Utils_AutoClean::swapLocale($row->context['locale']); - - /** @var int $contactId */ - $contactId = $row->context['contactId']; - if (empty($row->context['contact'])) { - $params = [ - ['contact_id', '=', $contactId, 0, 0], - ]; - [$contact] = \CRM_Contact_BAO_Query::apiQuery($params, $returnProperties ?? NULL); - //CRM-4524 - $contact = reset($contact); - // Test cover for greeting in CRM_Core_BAO_ActionScheduleTest::testMailer - $contact['email_greeting'] = $contact['email_greeting_display'] ?? ''; - $contact['postal_greeting'] = $contact['postal_greeting_display'] ?? ''; - $contact['addressee'] = $contact['address_display'] ?? ''; - if (!$contact || is_a($contact, 'CRM_Core_Error')) { - // FIXME: Need to differentiate errors which kill the batch vs the individual row. - \Civi::log()->debug('Failed to generate token data. Invalid contact ID: ' . $row->context['contactId']); - continue; - } - - //update value of custom field token - if (!empty($messageTokens['contact'])) { - foreach ($messageTokens['contact'] as $token) { - if (\CRM_Core_BAO_CustomField::getKeyID($token)) { - $contact[$token] = \CRM_Core_BAO_CustomField::displayValue($contact[$token], \CRM_Core_BAO_CustomField::getKeyID($token)); - } - } - } - } - else { - $contact = $row->context['contact']; - } - - if (!empty($row->context['tmpTokenParams'])) { - // merge activity tokens with contact array - // this is pretty weird. - $contact = array_merge($contact, $row->context['tmpTokenParams']); - } - - $contactArray = [$contactId => $contact]; - \CRM_Utils_Hook::tokenValues($contactArray, - [$contactId], - empty($row->context['mailingJobId']) ? NULL : $row->context['mailingJobId'], - $messageTokens, - $row->context['controller'] - ); - - // merge the custom tokens in the $contact array - if (!empty($contactArray[$contactId])) { - $contact = array_merge($contact, $contactArray[$contactId]); - } - $row->context('contact', $contact); - } - } - /** * Apply the various CRM_Utils_Token helpers. * * @param \Civi\Token\Event\TokenRenderEvent $e */ - public function onRender(TokenRenderEvent $e) { - $isHtml = ($e->message['format'] == 'text/html'); + public function onRender(TokenRenderEvent $e): void { $useSmarty = !empty($e->context['smarty']); + $e->string = $e->getTokenProcessor()->visitTokens($e->string, function() { + // For historical consistency, we filter out unrecognized tokens. + return ''; + }); - $domain = \CRM_Core_BAO_Domain::getDomain(); - $e->string = \CRM_Utils_Token::replaceDomainTokens($e->string, $domain, $isHtml, $e->message['tokens'], $useSmarty); - - if (!empty($e->context['contact'])) { - \CRM_Utils_Token::replaceGreetingTokens($e->string, $e->context['contact'], $e->context['contact']['contact_id'], NULL, $useSmarty); - $e->string = \CRM_Utils_Token::replaceContactTokens($e->string, $e->context['contact'], $isHtml, $e->message['tokens'], TRUE, $useSmarty); - - // FIXME: This may depend on $contact being merged with hook values. - $e->string = \CRM_Utils_Token::replaceHookTokens($e->string, $e->context['contact'], $e->context['hookTokenCategories'], $isHtml, $useSmarty); - } + // This removes the pattern used in greetings of having bits of text that + // depend on the tokens around them - ie '{first_name}{ }{last_name} + // has an extra construct '{ }' which will resolve as a space if the + // tokens on either side are resolved to 'something' + $e->string = preg_replace('/\\\\|\{(\s*)?\}/', ' ', $e->string); if ($useSmarty) { $smartyVars = []; foreach ($e->context['smartyTokenAlias'] ?? [] as $smartyName => $tokenName) { - // Note: $e->row->tokens resolves event-based tokens (eg CRM_*_Tokens). But if the target token relies on the - // above bits (replaceGreetingTokens=>replaceContactTokens=>replaceHookTokens) then this lookup isn't sufficient. - $smartyVars[$smartyName] = \CRM_Utils_Array::pathGet($e->row->tokens, explode('.', $tokenName)); + $smartyVars[$smartyName] = \CRM_Utils_Array::pathGet($e->row->tokens, explode('.', $tokenName), $e->context['locale'] ?? NULL); + if ($smartyVars[$smartyName] instanceof \Brick\Money\Money) { + $smartyVars[$smartyName] = \Civi::format()->money($smartyVars[$smartyName]->getAmount(), $smartyVars[$smartyName]->getCurrency()); + } } \CRM_Core_Smarty::singleton()->pushScope($smartyVars); try { diff --git a/civicrm/Civi/Token/TokenProcessor.php b/civicrm/Civi/Token/TokenProcessor.php index 61438d20921af6cc84acfdda807888bbab2f04e9..0451b2ae531ea55e71abb5b8623bd357e97d5a37 100644 --- a/civicrm/Civi/Token/TokenProcessor.php +++ b/civicrm/Civi/Token/TokenProcessor.php @@ -1,6 +1,7 @@ <?php namespace Civi\Token; +use Brick\Money\Money; use Civi\Token\Event\TokenRegisterEvent; use Civi\Token\Event\TokenRenderEvent; use Civi\Token\Event\TokenValueEvent; @@ -138,10 +139,14 @@ class TokenProcessor { * @return TokenProcessor */ public function addMessage($name, $value, $format) { + $tokens = []; + $this->visitTokens($value ?: '', function (?string $fullToken, ?string $entity, ?string $field, ?array $modifier) use (&$tokens) { + $tokens[$entity][] = $field; + }); $this->messages[$name] = [ 'string' => $value, 'format' => $format, - 'tokens' => \CRM_Utils_Token::getTokens($value), + 'tokens' => $tokens, ]; return $this; } @@ -360,30 +365,138 @@ class TokenProcessor { $row->fill($message['format']); $useSmarty = !empty($row->context['smarty']); - /** - *@FIXME preg_callback. - */ $tokens = $this->rowValues[$row->tokenRow][$message['format']]; - $flatTokens = []; - \CRM_Utils_Array::flatten($tokens, $flatTokens, '', '.'); - $filteredTokens = []; - foreach ($flatTokens as $k => $v) { - $filteredTokens['{' . $k . '}'] = ($useSmarty ? \CRM_Utils_Token::tokenEscapeSmarty($v) : $v); - } + $getToken = function(?string $fullToken, ?string $entity, ?string $field, ?array $modifier) use ($tokens, $useSmarty, $row) { + if (isset($tokens[$entity][$field])) { + $v = $tokens[$entity][$field]; + $v = $this->filterTokenValue($v, $modifier, $row); + if ($useSmarty) { + $v = \CRM_Utils_Token::tokenEscapeSmarty($v); + } + return $v; + } + return $fullToken; + }; $event = new TokenRenderEvent($this); $event->message = $message; $event->context = $row->context; $event->row = $row; - $event->string = strtr($message['string'], $filteredTokens); + $event->string = $this->visitTokens($message['string'] ?? '', $getToken); $this->dispatcher->dispatch('civi.token.render', $event); return $event->string; } + /** + * Examine a token string and filter each token expression. + * + * @internal + * This function is only intended for use within civicrm-core. The name/location/callback-signature may change. + * @param string $expression + * Ex: 'Hello {foo.bar} and {whiz.bang|filter:"arg"}!' + * @param callable $callback + * A function which visits (and substitutes) each token. + * function(?string $fullToken, ?string $entity, ?string $field, ?array $modifier) + * @return string + */ + public function visitTokens(string $expression, callable $callback): string { + // Regex examples: '{foo.bar}', '{foo.bar|whiz}', '{foo.bar|whiz:"bang"}', '{foo.bar|whiz:"bang":"bang"}' + // Regex counter-examples: '{foobar}', '{foo bar}', '{$foo.bar}', '{$foo.bar|whiz}', '{foo.bar|whiz{bang}}' + // Key observations: Civi tokens MUST have a `.` and MUST NOT have a `$`. Civi filters MUST NOT have `{}`s or `$`s. + + static $fullRegex = NULL; + if ($fullRegex === NULL) { + // The regex is a bit complicated, we so break it down into fragments. + // Consider the example '{foo.bar|whiz:"bang":"bang"}'. Each fragment matches the following: + + $tokenRegex = '([\w]+)\.([\w:\.]+)'; /* MATCHES: 'foo.bar' */ + $filterArgRegex = ':[\w": %\-_()\[\]\+/#@!,\.\?]*'; /* MATCHES: ':"bang":"bang"' */ + // Key rule of filterArgRegex is to prohibit '{}'s because they may parse ambiguously. So you *might* relax it to: + // $filterArgRegex = ':[^{}\n]*'; /* MATCHES: ':"bang":"bang"' */ + $filterNameRegex = "\w+"; /* MATCHES: 'whiz' */ + $filterRegex = "\|($filterNameRegex(?:$filterArgRegex)?)"; /* MATCHES: '|whiz:"bang":"bang"' */ + $fullRegex = ";\{$tokenRegex(?:$filterRegex)?\};"; + } + return preg_replace_callback($fullRegex, function($m) use ($callback) { + $filterParts = NULL; + if (isset($m[3])) { + $filterParts = []; + $enqueue = function($m) use (&$filterParts) { + $filterParts[] = $m[1]; + return ''; + }; + $unmatched = preg_replace_callback_array([ + '/^(\w+)/' => $enqueue, + '/:"([^"]+)"/' => $enqueue, + ], $m[3]); + if ($unmatched) { + throw new \CRM_Core_Exception('Malformed token parameters (' . $m[0] . ')'); + } + } + return $callback($m[0] ?? NULL, $m[1] ?? NULL, $m[2] ?? NULL, $filterParts); + }, $expression); + } + + /** + * Given a token value, run it through any filters. + * + * @param mixed $value + * Raw token value (e.g. from `$row->tokens['foo']['bar']`). + * @param array|null $filter + * @param TokenRow $row + * The current target/row. + * @return string + * @throws \CRM_Core_Exception + */ + private function filterTokenValue($value, ?array $filter, TokenRow $row) { + // KISS demonstration. This should change... e.g. provide a filter-registry or reuse Smarty's registry... + + if ($value instanceof \DateTime && $filter === NULL) { + $filter = ['crmDate']; + if ($value->format('His') === '000000') { + // if time is 'midnight' default to just date. + $filter[1] = 'Full'; + } + } + + if ($value instanceof Money && $filter === NULL) { + $filter = ['crmMoney']; + } + + switch ($filter[0] ?? NULL) { + case NULL: + return $value; + + case 'upper': + return mb_strtoupper($value); + + case 'lower': + return mb_strtolower($value); + + case 'crmMoney': + if ($value instanceof Money) { + return \Civi::format()->money($value->getAmount(), $value->getCurrency()); + } + + case 'crmDate': + if ($value instanceof \DateTime) { + // @todo cludgey. + require_once 'CRM/Core/Smarty/plugins/modifier.crmDate.php'; + return \smarty_modifier_crmDate($value->format('Y-m-d H:i:s'), $filter[1] ?? NULL); + } + + default: + throw new \CRM_Core_Exception("Invalid token filter: $filter"); + } + } + } class TokenRowIterator extends \IteratorIterator { + /** + * @var \Civi\Token\TokenProcessor + */ protected $tokenProcessor; /** diff --git a/civicrm/Civi/Token/TokenRow.php b/civicrm/Civi/Token/TokenRow.php index fb1fda5c218276f353b03e45501fd29ac6d691ea..11be3a3ba1ffdd6eda8b5752de93490a21f070e3 100644 --- a/civicrm/Civi/Token/TokenRow.php +++ b/civicrm/Civi/Token/TokenRow.php @@ -1,8 +1,11 @@ <?php namespace Civi\Token; +use Brick\Money\Money; + /** * Class TokenRow + * * @package Civi\Token * * A TokenRow is a helper/stub providing simplified access to the TokenProcessor. @@ -174,8 +177,8 @@ class TokenRow { * @return TokenRow */ public function customToken($entity, $customFieldID, $entityID) { - $customFieldName = "custom_" . $customFieldID; - $record = civicrm_api3($entity, "getSingle", [ + $customFieldName = 'custom_' . $customFieldID; + $record = civicrm_api3($entity, 'getSingle', [ 'return' => $customFieldName, 'id' => $entityID, ]); @@ -183,10 +186,10 @@ class TokenRow { // format the raw custom field value into proper display value if (isset($fieldValue)) { - $fieldValue = \CRM_Core_BAO_CustomField::displayValue($fieldValue, $customFieldID); + $fieldValue = (string) \CRM_Core_BAO_CustomField::displayValue($fieldValue, $customFieldID); } - return $this->tokens($entity, $customFieldName, $fieldValue); + return $this->format('text/html')->tokens($entity, $customFieldName, $fieldValue); } /** @@ -272,7 +275,7 @@ class TokenRow { $htmlTokens[$entity][$field] = \CRM_Utils_String::purifyHTML($value); } else { - $htmlTokens[$entity][$field] = htmlentities($value); + $htmlTokens[$entity][$field] = is_object($value) ? $value : htmlentities($value); } } } @@ -283,15 +286,18 @@ class TokenRow { // HTML => Plain. foreach ($htmlTokens as $entity => $values) { foreach ($values as $field => $value) { + if (!$value instanceof \DateTime && !$value instanceof Money) { + $value = html_entity_decode(strip_tags($value)); + } if (!isset($textTokens[$entity][$field])) { - $textTokens[$entity][$field] = html_entity_decode(strip_tags($value)); + $textTokens[$entity][$field] = $value; } } } break; default: - throw new \RuntimeException("Invalid format"); + throw new \RuntimeException('Invalid format'); } return $this; diff --git a/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage.php b/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage.php index 862c3a8d42cff258231c6191c49859ff4bd107a2..05ba1cc7eeabcc03cac3443add7785dba55e4532 100644 --- a/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage.php +++ b/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage.php @@ -15,6 +15,7 @@ namespace Civi\WorkflowMessage; use Civi\Schema\Traits\MagicGetterSetterTrait; use Civi\WorkflowMessage\Traits\AddressingTrait; use Civi\WorkflowMessage\Traits\FinalHelperTrait; +use Civi\WorkflowMessage\Traits\LocalizationTrait; use Civi\WorkflowMessage\Traits\ReflectiveWorkflowTrait; /** @@ -24,6 +25,10 @@ use Civi\WorkflowMessage\Traits\ReflectiveWorkflowTrait; * @method int|null getContactId() * @method $this setContact(array|null $contact) * @method array|null getContact() + * + * @support template-only + * GenericWorkflowMessage should aim for "full" support, but it's prudent to keep + * it flexible for the first few months. Consider updating to "full" after Dec 2021. */ class GenericWorkflowMessage implements WorkflowMessageInterface { @@ -40,6 +45,9 @@ class GenericWorkflowMessage implements WorkflowMessageInterface { // Implement setTo(), setReplyTo(), etc use AddressingTrait; + // Implement setLocale(), etc + use LocalizationTrait; + /** * WorkflowMessage constructor. * diff --git a/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage/Alex.ex.php b/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage/Alex.ex.php new file mode 100644 index 0000000000000000000000000000000000000000..be869b0c9511533364bc1bb9721dbec970dbf972 --- /dev/null +++ b/civicrm/Civi/WorkflowMessage/GenericWorkflowMessage/Alex.ex.php @@ -0,0 +1,28 @@ +<?php + +namespace Civi\WorkflowMessage\GenericWorkflowMessage; + +class Alex extends \Civi\WorkflowMessage\WorkflowMessageExample { + + /** + * @inheritDoc + */ + public function getExamples(): iterable { + yield [ + 'name' => "workflow/{$this->wfName}/{$this->exName}", + 'tags' => [], + ]; + } + + /** + * @inheritDoc + */ + public function build(array &$example): void { + $example['data'] = [ + 'modelProps' => [ + 'contact' => \Civi\Test::example('entity/Contact/Alex'), + ], + ]; + } + +} diff --git a/civicrm/Civi/WorkflowMessage/Traits/LocalizationTrait.php b/civicrm/Civi/WorkflowMessage/Traits/LocalizationTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..51aa90503f8277648e84a79780b16b5d60f190cb --- /dev/null +++ b/civicrm/Civi/WorkflowMessage/Traits/LocalizationTrait.php @@ -0,0 +1,50 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\WorkflowMessage\Traits; + +trait LocalizationTrait { + + /** + * @var string|null + * @scope tokenContext + */ + protected $locale; + + /** + * @return string + */ + public function getLocale(): ?string { + return $this->locale; + } + + /** + * @param string|null $locale + * @return $this + */ + public function setLocale(?string $locale) { + $this->locale = $locale; + return $this; + } + + protected function validateExtra_localization(&$errors) { + $allLangs = \CRM_Core_I18n::languages(); + if ($this->locale !== NULL && !isset($allLangs[$this->locale])) { + $errors[] = [ + 'severity' => 'error', + 'fields' => ['locale'], + 'name' => 'badLocale', + 'message' => ts('The given locale is not valid (%1)', [json_encode($this->locale)]), + ]; + } + } + +} diff --git a/civicrm/Civi/WorkflowMessage/Traits/ReflectiveWorkflowTrait.php b/civicrm/Civi/WorkflowMessage/Traits/ReflectiveWorkflowTrait.php index a19958eb8f11c0bf297c3aa7ce459d004f11771c..f10fe04113e9c6192fa182cf2af0164ac850b5f6 100644 --- a/civicrm/Civi/WorkflowMessage/Traits/ReflectiveWorkflowTrait.php +++ b/civicrm/Civi/WorkflowMessage/Traits/ReflectiveWorkflowTrait.php @@ -250,7 +250,7 @@ trait ReflectiveWorkflowTrait { */ protected function exportExtraEnvelope(array &$export): void { if ($wfName = \CRM_Utils_Constant::value(static::CLASS . '::WORKFLOW')) { - $export['valueName'] = $wfName; + $export['workflow'] = $wfName; } if ($wfGroup = \CRM_Utils_Constant::value(static::CLASS . '::GROUP')) { $export['groupName'] = $wfGroup; @@ -292,8 +292,8 @@ trait ReflectiveWorkflowTrait { */ protected function importExtraEnvelope(array &$values): void { if ($wfName = \CRM_Utils_Constant::value(static::CLASS . '::WORKFLOW')) { - if (isset($values['valueName']) && $wfName === $values['valueName']) { - unset($values['valueName']); + if (isset($values['workflow']) && $wfName === $values['workflow']) { + unset($values['workflow']); } } if ($wfGroup = \CRM_Utils_Constant::value(static::CLASS . '::GROUP')) { diff --git a/civicrm/Civi/WorkflowMessage/WorkflowMessage.php b/civicrm/Civi/WorkflowMessage/WorkflowMessage.php index 3647286ef558ca6daca98b37e2d56bbf250d3d0f..7ecf283bdbe50a8bbaa6b5ab827a9ff17263cfb4 100644 --- a/civicrm/Civi/WorkflowMessage/WorkflowMessage.php +++ b/civicrm/Civi/WorkflowMessage/WorkflowMessage.php @@ -12,6 +12,7 @@ namespace Civi\WorkflowMessage; +use Civi\Api4\Utils\ReflectionUtils; use Civi\WorkflowMessage\Exception\WorkflowMessageException; /** @@ -65,7 +66,7 @@ class WorkflowMessage { public static function create(string $wfName, array $imports = []) { $classMap = static::getWorkflowNameClassMap(); $class = $classMap[$wfName] ?? 'Civi\WorkflowMessage\GenericWorkflowMessage'; - $imports['envelope']['valueName'] = $wfName; + $imports['envelope']['workflow'] = $wfName; $model = new $class(); static::importAll($model, $imports); return $model; @@ -95,13 +96,6 @@ class WorkflowMessage { unset($params['model']); } - \CRM_Utils_Array::pathMove($params, ['contactId'], ['tokenContext', 'contactId']); - - // Core#644 - handle Email ID passed as "From". - if (isset($params['from'])) { - $params['from'] = \CRM_Utils_Mail::formatFromAddress($params['from']); - } - if (isset($params['tplParams'])) { $model->import('tplParams', $params['tplParams']); unset($params['tplParams']); @@ -170,4 +164,38 @@ class WorkflowMessage { return $map; } + /** + * Get general description of available workflow-messages. + * + * @return array + * Array(string $workflowName => string $className). + * Ex: ["case_activity" => ["name" => "case_activity", "group" => "msg_workflow_case"] + * @internal + */ + public static function getWorkflowSpecs() { + $compute = function() { + $keys = ['name', 'group', 'class', 'description', 'comment', 'support']; + $list = []; + foreach (self::getWorkflowNameClassMap() as $name => $class) { + $specs = [ + 'name' => $name, + 'group' => \CRM_Utils_Constant::value($class . '::GROUP'), + 'class' => $class, + ]; + $list[$name] = \CRM_Utils_Array::subset( + array_merge(ReflectionUtils::getCodeDocs(new \ReflectionClass($class)), $specs), + $keys); + } + return $list; + }; + + $cache = \Civi::cache('long'); + $cacheKey = 'WorkflowMessage-' . __FUNCTION__; + $list = $cache->get($cacheKey); + if ($list === NULL) { + $cache->set($cacheKey, $list = $compute()); + } + return $list; + } + } diff --git a/civicrm/Civi/WorkflowMessage/WorkflowMessageExample.php b/civicrm/Civi/WorkflowMessage/WorkflowMessageExample.php new file mode 100644 index 0000000000000000000000000000000000000000..40aead12b4a110427a2faef4004f21bb20965643 --- /dev/null +++ b/civicrm/Civi/WorkflowMessage/WorkflowMessageExample.php @@ -0,0 +1,86 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\WorkflowMessage; + +use Civi\Test\ExampleDataInterface; + +/** + * Helper class for defining WorkflowMessage example-data. + * + * By convention, you should name this class relative to the target workflow, as in: + * - Workflow Name: case_activity + * - Workflow Class: CRM_Case_WorkflowMessage_CaseActivity + * - Example Data: CRM_Case_WorkflowMessage_CaseActivity_Foo + * - Example Name: workflow/case_activity/foo + */ +abstract class WorkflowMessageExample implements ExampleDataInterface { + + /** + * Name of the workflow for which we are providing example data. + * + * @var string + * Ex: 'CRM_Case_WorkflowMessage_CaseActivity' + */ + protected $wfClass; + + /** + * Name of the workflow for which we are providing example data. + * + * @var string|null + * Ex: 'case_activity' + */ + protected $wfName; + + /** + * Name for this example specifically. + * + * @var string + */ + protected $exName; + + /** + * WorkflowMessageExample constructor. + */ + public function __construct() { + if (!preg_match(';^(.*)[_\\\]([a-zA-Z0-9]+)$;', static::class, $m)) { + throw new \RuntimeException("Failed to parse class: " . static::class); + } + $this->wfClass = $m[1]; + $this->wfName = array_search($m[1], \Civi\WorkflowMessage\WorkflowMessage::getWorkflowNameClassMap()); + $this->exName = $m[2]; + } + + /** + * Get an example, merge/extend it with more data, and return the extended + * variant. + * + * @param array $base + * Baseline data to build upon. + * @param array $overrides + * Additional data to recursively add. + * + * @return array + * The result of merging the original example with the $overrides. + */ + public function extend($base, $overrides = []) { + \CRM_Utils_Array::extend($base, $overrides); + return $base; + } + + protected function toArray(\Civi\WorkflowMessage\WorkflowMessageInterface $wfMsg) { + return [ + 'workflow' => $this->wfName, + 'modelProps' => $wfMsg->export('modelProps'), + ]; + } + +} diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 2bdaa72b11c4f34fea2577e1a0c7a69cee390211..0d5404a8f4a189d17863de8968a8b1ce071a8f8f 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -456,8 +456,8 @@ children: _.transform(CRM.vars.api4.functions, function(result, fn) { result.push({ id: fn.name + '() AS ' + fn.name.toLowerCase(), - text: fn.name + '()', - description: fn.name + '(' + describeSqlFn(fn.params) + ')' + description: fn.description, + text: fn.name + '(' + describeSqlFn(fn.params) + ')' }); }) }; @@ -607,16 +607,19 @@ var desc = ' '; _.each(params, function(param) { desc += ' '; - if (param.prefix) { - desc += _.filter(param.prefix).join('|') + ' '; + if (param.name) { + desc += param.name + ' '; } - if (param.expr === 1) { + if (!_.isEmpty(param.flag_before)) { + desc += '[' + _.filter(param.name ? [param.name] : _.keys(param.flag_before)).join('|') + '] '; + } + if (param.max_expr === 1) { desc += 'expr '; - } else if (param.expr > 1) { + } else if (param.max_expr > 1) { desc += 'expr, ... '; } - if (param.suffix) { - desc += ' ' + _.filter(param.suffix).join('|') + ' '; + if (!_.isEmpty(param.flag_after)) { + desc += ' [' + _.filter(param.flag_after).join('|') + '] '; } }); return desc.replace(/[ ]+/g, ' '); diff --git a/civicrm/ang/crmMailing/Templates.js b/civicrm/ang/crmMailing/Templates.js index 0c2b93dc2663f360533c6a532fb8149a97e059ae..301b565f23e0709f02a6215d951fd2702a66ce6c 100644 --- a/civicrm/ang/crmMailing/Templates.js +++ b/civicrm/ang/crmMailing/Templates.js @@ -72,8 +72,8 @@ } rcpAjaxState.page_i = page_num - rcpAjaxState.page_n; - var filterParams = { is_active: 1, workflow_id: { "IS NULL": 1 } }; - + var filterParams = { is_active: 1, workflow_name: { "IS NULL": 1 } }; + var params = { input: input, page_num: rcpAjaxState.page_i, diff --git a/civicrm/ang/crmMonaco.js b/civicrm/ang/crmMonaco.js index 3d6ff667f4c0f81d43cfad3ca013d9c2911778e7..6a451b0a637aefb5e0ba8ff590ef67386cc69f1e 100644 --- a/civicrm/ang/crmMonaco.js +++ b/civicrm/ang/crmMonaco.js @@ -65,6 +65,12 @@ // FIXME: else: retry? }; + if ($attr.ngDisabled) { + $scope.$watch($parse($attr.ngDisabled), function(disabled){ + editor.updateOptions({readOnly: disabled}); + }); + } + // FIXME: This makes vertical scrolling much better, but horizontal is still weird. var origOverflow; function bodyScrollSuspend() { diff --git a/civicrm/ang/crmStatusPage.js b/civicrm/ang/crmStatusPage.js index 9693485b66cd16c6045615d4868030c7a08572a1..4be75df5c8bde52ed29fda83d5dd89877a9efd32 100644 --- a/civicrm/ang/crmStatusPage.js +++ b/civicrm/ang/crmStatusPage.js @@ -9,7 +9,7 @@ resolve: { statusData: function(crmApi) { - return crmApi('System', 'check', {sequential: 1}); + return crmApi('System', 'check', {sequential: 1, options: {limit: 0}}); } } }); diff --git a/civicrm/ang/crmStatusPage/StatusPageCtrl.js b/civicrm/ang/crmStatusPage/StatusPageCtrl.js index 530d7ffdbe96ec974d6ebda604cd9a3a67daca88..0fd79df29f4b3b6c4f8f47061fe90dd647739fd8 100644 --- a/civicrm/ang/crmStatusPage/StatusPageCtrl.js +++ b/civicrm/ang/crmStatusPage/StatusPageCtrl.js @@ -10,7 +10,7 @@ // Refresh the list. Optionally execute api calls first. function refresh(apiCalls, title) { title = title || 'Untitled operation'; - apiCalls = (apiCalls || []).concat([['System', 'check', {sequential: 1}]]); + apiCalls = (apiCalls || []).concat([['System', 'check', {sequential: 1, options: {limit: 0}}]]); $('#crm-status-list').block(); crmApi(apiCalls, true) .then(function(results) { diff --git a/civicrm/ang/crmUi.js b/civicrm/ang/crmUi.js index 16ef03f0ba84fe85a478872a635b9d1e4b47efb6..944630d4dbf8eb7a6c6b11b4b9508734243671ec 100644 --- a/civicrm/ang/crmUi.js +++ b/civicrm/ang/crmUi.js @@ -945,7 +945,8 @@ else { $(element).prepend('<span class="icon ui-icon-' + attrs.crmIcon + '"></span> '); } - if ($(element).is('button')) { + // Add crm-* class to non-bootstrap buttons + if ($(element).is('button:not(.btn)')) { $(element).addClass('crm-button'); } } diff --git a/civicrm/api/v3/System/ini-whitelist.txt b/civicrm/api/v3/System/ini-whitelist.txt index ab674b93fdde4bb22095ebab0e08d812137bc6a1..4e6dbabfd0dd25b919b398d80b295050096b4521 100644 --- a/civicrm/api/v3/System/ini-whitelist.txt +++ b/civicrm/api/v3/System/ini-whitelist.txt @@ -180,7 +180,6 @@ register_long_arrays report_memleaks report_zend_debug request_order -safe_mode # Omit: safe_mode_allowed_env_vars # Omit: safe_mode_exec_dir safe_mode_gid diff --git a/civicrm/api/v3/examples/Mailing/GetTokens.ex.php b/civicrm/api/v3/examples/Mailing/GetTokens.ex.php index bc343a42370cd871275f684aeece211d374cd38f..986fd86e61b47139ba5b4874d882e811ef7aa5c4 100644 --- a/civicrm/api/v3/examples/Mailing/GetTokens.ex.php +++ b/civicrm/api/v3/examples/Mailing/GetTokens.ex.php @@ -84,8 +84,8 @@ function mailing_gettokens_expectedresult() { '{contact.first_name}' => 'First Name', '{contact.middle_name}' => 'Middle Name', '{contact.last_name}' => 'Last Name', - '{contact.individual_prefix}' => 'Individual Prefix', - '{contact.individual_suffix}' => 'Individual Suffix', + '{contact.prefix_id:label}' => 'Individual Prefix', + '{contact.suffix_id:label}' => 'Individual Suffix', '{contact.formal_title}' => 'Formal Title', '{contact.communication_style}' => 'Communication Style', '{contact.email_greeting_id}' => 'Email Greeting ID', diff --git a/civicrm/api/v3/examples/MessageTemplate/Get.ex.php b/civicrm/api/v3/examples/MessageTemplate/Get.ex.php index 985ecbba48eb00eff9f798ed4c15eb079d2b3480..9874c57f2e77ea178612b1e295879ff87ab273c4 100644 --- a/civicrm/api/v3/examples/MessageTemplate/Get.ex.php +++ b/civicrm/api/v3/examples/MessageTemplate/Get.ex.php @@ -11,7 +11,7 @@ function message_template_get_example() { 'msg_subject' => 'msg_subject_472', 'msg_text' => 'msg_text_472', 'msg_html' => 'msg_html_472', - 'workflow_id' => 472, + 'workflow_name' => 'contribution_online_invoice', 'is_default' => '1', 'is_reserved' => 1, ]; diff --git a/civicrm/api/v3/examples/Setting/GetFields.ex.php b/civicrm/api/v3/examples/Setting/GetFields.ex.php index b906e47d3f0808e91d15095a99554c613a5e5dd8..2c128b70d8676268d5426f02a1cdaec4336dd709 100644 --- a/civicrm/api/v3/examples/Setting/GetFields.ex.php +++ b/civicrm/api/v3/examples/Setting/GetFields.ex.php @@ -479,7 +479,7 @@ function setting_getfields_expectedresult() { 'name' => 'display_name_format', 'type' => 'String', 'html_type' => 'textarea', - 'default' => '{contact.individual_prefix}{ }{contact.first_name}{ }{contact.last_name}{ }{contact.individual_suffix}', + 'default' => '{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.last_name}{ }{contact.suffix_id:label}', 'add' => '4.1', 'title' => 'Individual Display Name Format', 'is_domain' => 1, diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index 3a940ac389b801fa7bcc89930d8a58640f6b9d10..94159385132100cb5be5668baa9310a62c5cf475 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -1876,6 +1876,7 @@ function _civicrm_api3_generic_replace_base_params($params) { unset($baseParams['values']); unset($baseParams['sequential']); unset($baseParams['options']); + $baseParams['options']['limit'] = 0; return $baseParams; } @@ -2303,11 +2304,8 @@ function _civicrm_api3_api_match_pseudoconstant(&$fieldValue, $entity, $fieldNam $options = CRM_Utils_Array::value('values', $options, []); } - // If passed a value-separated string, explode to an array, then re-implode after matching values. - $implode = FALSE; if (is_string($fieldValue) && strpos($fieldValue, CRM_Core_DAO::VALUE_SEPARATOR) !== FALSE) { $fieldValue = CRM_Utils_Array::explodePadded($fieldValue); - $implode = TRUE; } // If passed multiple options, validate each. if (is_array($fieldValue)) { @@ -2316,12 +2314,6 @@ function _civicrm_api3_api_match_pseudoconstant(&$fieldValue, $entity, $fieldNam _civicrm_api3_api_match_pseudoconstant_value($value, $options, $fieldName, CRM_Utils_Array::value('api.required', $fieldInfo)); } } - // TODO: unwrap the call to implodePadded from the conditional and do it always - // need to verify that this is safe and doesn't break anything though. - // Better yet would be to leave it as an array and ensure that every dao/bao can handle array input - if ($implode) { - CRM_Utils_Array::implodePadded($fieldValue); - } } else { _civicrm_api3_api_match_pseudoconstant_value($fieldValue, $options, $fieldName, CRM_Utils_Array::value('api.required', $fieldInfo)); diff --git a/civicrm/bin/ContributionProcessor.php b/civicrm/bin/ContributionProcessor.php index a6c7bee51d019b71bfd2f7d83fd9ee79a607771d..3de786f487fe97e674f219b8f7958a22ddfeee18 100644 --- a/civicrm/bin/ContributionProcessor.php +++ b/civicrm/bin/ContributionProcessor.php @@ -545,10 +545,7 @@ CRM_Core_Error::debug_log_message('ContributionProcessor.php'); $lock = Civi::lockManager()->acquire('worker.contribute.CiviContributeProcessor'); if ($lock->isAcquired()) { - // try to unset any time limits - if (!ini_get('safe_mode')) { - set_time_limit(0); - } + set_time_limit(0); CiviContributeProcessor::process(); } diff --git a/civicrm/bin/regen.sh b/civicrm/bin/regen.sh index d78890c7d82f74da19f904fc9bf7e75848a967a9..d50c444a232c3405b65e9c34e0232de361150958 100755 --- a/civicrm/bin/regen.sh +++ b/civicrm/bin/regen.sh @@ -47,7 +47,7 @@ php GenerateData.php ## Prune local data $MYSQLCMD -e "DROP TABLE IF EXISTS civicrm_install_canary; DELETE FROM civicrm_cache; DELETE FROM civicrm_setting;" -$MYSQLCMD -e "DELETE FROM civicrm_extension WHERE full_name NOT IN ('sequentialcreditnotes', 'eventcart', 'greenwich', 'search', 'flexmailer', 'financialacls', 'contributioncancelactions', 'recaptcha', 'ckeditor4', 'legacycustomsearches');" +$MYSQLCMD -e "DELETE FROM civicrm_extension WHERE full_name NOT IN ('sequentialcreditnotes', 'eventcart', 'greenwich', 'search', 'org.civicrm.flexmailer', 'financialacls', 'contributioncancelactions', 'recaptcha', 'ckeditor4', 'legacycustomsearches');" TABLENAMES=$( echo "show tables like 'civicrm_%'" | $MYSQLCMD | grep ^civicrm_ | xargs ) cd $CIVISOURCEDIR/sql diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 4c8e36bb77b6684e625e74f425a04fd26ee4f97c..72e0051097bf62198703b15cebc6ff023309c4bd 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.42.1', + return array( 'version' => '5.43.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php b/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php index 00ef13985cad612060cf5539a9327fd57e0e601d..46f4d3279d2380b9f54c4644b3807dac49a208f8 100644 --- a/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php +++ b/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php @@ -116,6 +116,7 @@ class LoadAdminData extends \Civi\Api4\Generic\AbstractAction { if (!isset($info['blocks'][$blockTag])) { // Load full contents of block used on the form, then recurse into it $embeddedForm = Afform::get($this->checkPermissions) + ->addSelect('*', 'directive_name') ->setFormatWhitespace(TRUE) ->setLayoutFormat('shallow') ->addWhere('directive_name', '=', $blockTag) @@ -215,6 +216,7 @@ class LoadAdminData extends \Civi\Api4\Generic\AbstractAction { */ private function loadForm($name) { return Afform::get($this->checkPermissions) + ->addSelect('*', 'directive_name') ->setFormatWhitespace(TRUE) ->setLayoutFormat('shallow') ->addWhere('name', '=', $name) @@ -273,9 +275,12 @@ class LoadAdminData extends \Civi\Api4\Generic\AbstractAction { foreach ($apiParams['select'] ?? [] as $select) { if (strstr($select, ' AS ')) { $expr = SqlExpression::convert($select, TRUE); - $field = $expr->getFields() ? $selectQuery->getField($expr->getFields()[0]) : NULL; - $joinName = explode('.', $expr->getFields()[0] ?? '')[0]; - $label = $expr::getTitle() . ': ' . (isset($joinMap[$joinName]) ? $joinMap[$joinName] . ' ' : '') . $field['title']; + $label = $expr::getTitle(); + foreach ($expr->getFields() as $num => $fieldName) { + $field = $selectQuery->getField($fieldName); + $joinName = explode('.', $fieldName)[0]; + $label .= ($num ? ', ' : ': ') . (isset($joinMap[$joinName]) ? $joinMap[$joinName] . ' ' : '') . $field['title']; + } $calcFields[] = [ '#tag' => 'af-field', 'name' => $expr->getAlias(), diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html index 3a61badce1c88bca9db94c74a45b1a90e255a5ac..a40a04e3888935d2de4821d78ba4b4b658869fd3 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html @@ -34,7 +34,7 @@ </div> </div> - <table> + <table class="table table-striped"> <thead> <tr> <th title="{{:: ts('Click to sort') }}" ng-click="$ctrl.sortBy('title')"> @@ -62,19 +62,20 @@ </thead> <tbody> <tr ng-repeat="afform in $ctrl.afforms[$ctrl.tab] | filter:$ctrl.searchAfformList | orderBy:$ctrl.sortField:$ctrl.sortDir"> - <td>{{ afform.title }}</td> + <td>{{:: afform.title }}</td> <td> - <code>{{ afform.name }}</code> + <code>{{:: afform.name }}</code> </td> <td> - <a ng-if="afform.server_route" ng-href="{{:: crmUrl(afform.server_route, null, afform.is_public ? 'front' : 'back') }}" target="_blank"> - <code>{{ afform.server_route }}</code> + <a ng-if=":: afform.server_route" ng-href="{{:: crmUrl(afform.server_route, null, afform.is_public ? 'front' : 'back') }}" target="_blank"> + <i class="crm-i fa-external-link"></i> + {{:: afform.server_route }} </a> </td> - <td>{{ afform.placement.join(', ') }}</td> + <td>{{:: afform.placement.join(', ') }}</td> <td class="text-right"> - <a ng-if="afform.type !== 'system'" href="#/edit/{{ afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Edit') }}</a> - <a ng-if="afform.type !== 'system'" href="#/clone/{{ afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Clone') }}</a> + <a ng-if="afform.type !== 'system'" href="#/edit/{{:: afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Edit') }}</a> + <a ng-if="afform.type !== 'system'" href="#/clone/{{:: afform.name }}" class="btn btn-xs btn-primary">{{:: ts('Clone') }}</a> <a href ng-if="afform.has_local" class="btn btn-xs btn-danger" crm-confirm="{type: afform.has_base ? 'revert' : 'delete', obj: afform}" on-yes="$ctrl.revert(afform)"> {{ afform.has_base ? ts('Revert') : ts('Delete') }} </a> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.html b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.html index 72e4ea3b7b26e85e19a5a918b2917c84672f8b5e..78c1199455f4abb5d7c079197d0101731b3e346f 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.html @@ -1,4 +1,5 @@ <div id="bootstrap-theme"> + <h1 crm-page-title>{{ ts('Form Builder: %1', {1: editor.afform.title || ts('Untitled')}) }}</h1> <div id="afGuiEditor" class="crm-flex-box"> <div id="afGuiEditor-palette" class="crm-flex-3" ng-include="'~/afGuiEditor/afGuiEditorPalette.html'"></div> <div id="afGuiEditor-canvas" class="crm-flex-5" ng-include="'~/afGuiEditor/afGuiEditorCanvas.html'"></div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js index ed1a98f73ad0716eaac7dec855ddce9aea39d0f4..14937f6540dd921c133cf5675e6ed249df05dc60 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js @@ -86,7 +86,7 @@ "#tag": "af-field", name: (prefix ? prefix + '.' : '') + field.name }; - if (field.input_type === 'Select') { + if (field.input_type === 'Select' || field.input_type === 'ChainSelect') { tag.defn = {input_attrs: {multiple: true}}; } else if (field.input_type === 'Date') { tag.defn = {input_type: 'Select', search_range: true}; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js index 2cc5e04a7d843e8c62a48f7f663902e544b51e36..f740d3d3f6b9ec903ee02581064b1c515322aeec 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js @@ -76,7 +76,7 @@ this.canBeMultiple = function() { return this.isSearch() && !_.includes(['Date', 'Timestamp'], ctrl.getDefn().data_type) && - _.includes(['Select', 'EntityRef'], $scope.getProp('input_type')); + _.includes(['Select', 'EntityRef', 'ChainSelect'], $scope.getProp('input_type')); }; this.getRangeElements = function(type) { diff --git a/civicrm/ext/afform/admin/info.xml b/civicrm/ext/afform/admin/info.xml index 65a80c06eb67abf39e44510c1d594b8c494c758e..f80148bb32f284f49b2ca61139fd2edd778a18d9 100644 --- a/civicrm/ext/afform/admin/info.xml +++ b/civicrm/ext/afform/admin/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>beta</develStage> <compatibility> <ver>5.23</ver> diff --git a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php index fca28b8694e64061d16fb2fb11237abffc72ec2c..ca20b3ac78f55ea0ab1ddd8b130fe375f071e43e 100644 --- a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php +++ b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php @@ -104,7 +104,7 @@ class AfformMetadataInjector { $isSearchRange = !empty($fieldDefn['search_range']) && \CRM_Utils_JS::decode($fieldDefn['search_range']); // Default placeholder for select inputs - if ($inputType === 'Select') { + if ($inputType === 'Select' || $inputType === 'ChainSelect') { $fieldInfo['input_attrs']['placeholder'] = E::ts('Select'); } elseif ($inputType === 'EntityRef') { @@ -172,11 +172,16 @@ class AfformMetadataInjector { $params['values'] = ['contact_type' => $entityName]; $entityName = 'Contact'; } - $fields = civicrm_api4($entityName, 'getFields', $params); - $field = $originalField = $fields->first(); + foreach (civicrm_api4($entityName, 'getFields', $params) as $field) { + // In the highly unlikely event of 2 fields returned, prefer the exact match + if ($field['name'] === $fieldName) { + break; + } + } // If this is an implicit join, get new field from fk entity if ($field['name'] !== $fieldName && $field['fk_entity']) { $params['where'] = [['name', '=', substr($fieldName, 1 + strrpos($fieldName, '.'))]]; + $originalField = $field; $field = civicrm_api4($field['fk_entity'], 'getFields', $params)->first(); if ($field) { $field['label'] = $originalField['label'] . ' ' . $field['label']; diff --git a/civicrm/ext/afform/core/Civi/Afform/AngularDependencyMapper.php b/civicrm/ext/afform/core/Civi/Afform/AngularDependencyMapper.php index a893cae4991d19ba62e6a29a55a734f2d081ceac..ad5012e521ab3e9e4e69de146171495a04c3f489 100644 --- a/civicrm/ext/afform/core/Civi/Afform/AngularDependencyMapper.php +++ b/civicrm/ext/afform/core/Civi/Afform/AngularDependencyMapper.php @@ -49,6 +49,10 @@ class AngularDependencyMapper { $jFile = $scanner->findFilePath($formName, 'aff.json'); $hFile = $scanner->findFilePath($formName, 'aff.html'); + if (!$hFile) { + \Civi::log()->warning("Missing html file for Afform: '$jFile'"); + continue; + } $jStat = stat($jFile); $hStat = stat($hFile); diff --git a/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php b/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php index 1277cf66db21bb4edfc4413e959b3a925b2b83af..1788763d3c2cbdad594e76ce4ed6da25fd9d0ad4 100644 --- a/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php +++ b/civicrm/ext/afform/core/Civi/Afform/Event/AfformSubmitEvent.php @@ -107,6 +107,33 @@ class AfformSubmitEvent extends AfformBaseEvent { return $this; } + /** + * Get the id of a saved record + * @param int $index + * @return mixed + */ + public function getEntityId(int $index = 0) { + $idField = CoreUtil::getIdFieldName($this->entityName); + return $this->entityIds[$this->entityName][$index][$idField] ?? NULL; + } + + /** + * Get records to be saved + * @return array + */ + public function getRecords(): array { + return $this->records; + } + + /** + * @param array $records + * @return $this + */ + public function setRecords(array $records) { + $this->records = $records; + return $this; + } + /** * @param int $index * @param string $joinEntity diff --git a/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php b/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php index 82b78fb189802d45eddb256c15071f23917eede1..3feade32dc6dc1958b1f5f282f640e5a28a839b2 100644 --- a/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php +++ b/civicrm/ext/afform/core/Civi/Afform/FormDataModel.php @@ -16,7 +16,7 @@ class FormDataModel { protected $defaults = ['security' => 'RBAC', 'actions' => ['create' => TRUE, 'update' => TRUE]]; /** - * @var array + * @var array[] * Ex: $entities['spouse']['type'] = 'Contact'; */ protected $entities; @@ -26,6 +26,11 @@ class FormDataModel { */ protected $blocks = []; + /** + * @var array[] + */ + protected $searchDisplays = []; + /** * @var array * Ex: $secureApi4s['spouse'] = function($entity, $action, $params){...}; @@ -124,14 +129,19 @@ class FormDataModel { * @param array $nodes * @param string $entity * @param string $join + * @param string $searchDisplay */ - protected function parseFields($nodes, $entity = NULL, $join = NULL) { + protected function parseFields($nodes, $entity = NULL, $join = NULL, $searchDisplay = NULL) { foreach ($nodes as $node) { if (!is_array($node) || !isset($node['#tag'])) { continue; } - elseif (!empty($node['af-fieldset']) && !empty($node['#children'])) { - $this->parseFields($node['#children'], $node['af-fieldset'], $join); + elseif (isset($node['af-fieldset']) && !empty($node['#children'])) { + $searchDisplay = $node['af-fieldset'] ? NULL : $this->findSearchDisplay($node); + $this->parseFields($node['#children'], $node['af-fieldset'], $join, $searchDisplay); + } + elseif ($searchDisplay && $node['#tag'] === 'af-field') { + $this->searchDisplays[$searchDisplay]['fields'][$node['name']] = AHQ::getProps($node); } elseif ($entity && $node['#tag'] === 'af-field') { if ($join) { @@ -146,7 +156,7 @@ class FormDataModel { $this->parseFields($node['#children'] ?? [], $entity, $node['af-join']); } elseif (!empty($node['#children'])) { - $this->parseFields($node['#children'], $entity, $join); + $this->parseFields($node['#children'], $entity, $join, $searchDisplay); } // Recurse into embedded blocks if (isset($this->blocks[$node['#tag']])) { @@ -154,12 +164,26 @@ class FormDataModel { $this->blocks[$node['#tag']] = Afform::get()->setCheckPermissions(FALSE)->setSelect(['name', 'layout'])->addWhere('name', '=', $this->blocks[$node['#tag']]['name'])->execute()->first(); } if (!empty($this->blocks[$node['#tag']]['layout'])) { - $this->parseFields($this->blocks[$node['#tag']]['layout'], $entity, $join); + $this->parseFields($this->blocks[$node['#tag']]['layout'], $entity, $join, $searchDisplay); } } } } + /** + * Finds a search display within a fieldset + * + * @param array $node + */ + public function findSearchDisplay($node) { + foreach (\Civi\Search\Display::getDisplayTypes(['name']) as $displayType) { + foreach (AHQ::getTags($node, $displayType['name']) as $display) { + $this->searchDisplays[$display['display-name']]['searchName'] = $display['search-name']; + return $display['display-name']; + } + } + } + /** * @return array[] * Ex: $entities['spouse']['type'] = 'Contact'; @@ -169,10 +193,17 @@ class FormDataModel { } /** - * @return array + * @return array{type: string, fields: array, joins: array, security: string, actions: array} */ public function getEntity($entityName) { return $this->entities[$entityName] ?? NULL; } + /** + * @return array{fields: array, searchName: string} + */ + public function getSearchDisplay($displayName) { + return $this->searchDisplays[$displayName] ?? NULL; + } + } diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php index 6a9ae6e68183edefdbc73a241f9392fd3b1eeabb..cd5ed834242ad48abd2885f97974aa53ef24a586 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php @@ -17,8 +17,9 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { public function getRecords() { /** @var \CRM_Afform_AfformScanner $scanner */ $scanner = \Civi::service('afform_scanner'); - $getComputed = $this->_isFieldSelected('has_local') || $this->_isFieldSelected('has_base'); + $getComputed = $this->_isFieldSelected('has_local', 'has_base'); $getLayout = $this->_isFieldSelected('layout'); + $getSearchDisplays = $this->_isFieldSelected('search_displays'); $values = []; // This helps optimize lookups by file/module/directive name @@ -64,10 +65,13 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { if ($getComputed) { $scanner->addComputedFields($values[$name]); } - if ($getLayout) { + if ($getLayout || $getSearchDisplays) { // Autogenerated layouts will already be in values but can be overridden; scanner takes priority $values[$name]['layout'] = $scanner->getLayout($name) ?? $values[$name]['layout'] ?? ''; } + if ($getSearchDisplays) { + $values[$name]['search_displays'] = $this->getSearchDisplays($values[$name]['layout']); + } } if ($getLayout && $this->layoutFormat !== 'html') { @@ -158,4 +162,24 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { return $values; } + /** + * Find search display tags in afform markup + * + * @param string $html + * @return string[] + */ + private function getSearchDisplays(string $html) { + $tags = $searchDisplays = []; + preg_match_all('/<\\s*crm-search-display[^>]+>/', $html, $tags); + foreach ($tags[0] ?? [] as $tag) { + $searchName = $displayName = []; + preg_match('/search-name\\s*=\\s*[\'"]([^\'"]+)[\'"]/', $tag, $searchName); + preg_match('/display-name\\s*=\\s*[\'"]([^\'"]+)[\'"]/', $tag, $displayName); + if (!empty($searchName[1]) && !empty($displayName[1])) { + $searchDisplays[] = $searchName[1] . '.' . $displayName[1]; + } + } + return $searchDisplays; + } + } diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/GetOptions.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/GetOptions.php new file mode 100644 index 0000000000000000000000000000000000000000..a9726940726bfc946200601f66bf3c6103f68d9e --- /dev/null +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/GetOptions.php @@ -0,0 +1,98 @@ +<?php + +namespace Civi\Api4\Action\Afform; + +use Civi\Api4\SavedSearch; +use Civi\Api4\Utils\FormattingUtil; + +/** + * Loads option values for a form field + * + * @method $this setFieldName(string $fieldName) + * @method $this setModelName(string $modelName) + * @method $this setJoinEntity(string $joinEntity) + * @method $this setValues(array $values) + * @method string getFieldName() + * @method string getModelName() + * @method string getJoinEntity() + * @method array getValues() + * @package Civi\Api4\Action\Afform + */ +class GetOptions extends AbstractProcessor { + + /** + * @var string + * @required + */ + protected $modelName; + + /** + * @var string + * @required + */ + protected $fieldName; + + /** + * @var string + */ + protected $joinEntity; + + /** + * @var array + */ + protected $values; + + /** + * @return array + * @throws \API_Exception + */ + protected function processForm() { + $formEntity = $this->_formDataModel->getEntity($this->modelName); + $searchDisplay = $this->_formDataModel->getSearchDisplay($this->modelName); + $fieldName = $this->fieldName; + + // For data-entry forms + if ($formEntity) { + $entity = $this->joinEntity ?: $formEntity['type']; + if ($this->joinEntity && !isset($formEntity['joins'][$this->joinEntity]['fields'][$this->fieldName])) { + throw new \API_Exception('Cannot get options for field not present on form'); + } + elseif (!$this->joinEntity && !isset($formEntity['fields'][$this->fieldName])) { + throw new \API_Exception('Cannot get options for field not present on form'); + } + } + // For search forms, get entity from savedSearch api params + elseif ($searchDisplay) { + if (!isset($searchDisplay['fields'][$this->fieldName])) { + throw new \API_Exception('Cannot get options for field not present on form'); + } + $savedSearch = SavedSearch::get(FALSE) + ->addWhere('name', '=', $searchDisplay['searchName']) + ->addSelect('api_entity', 'api_params') + ->execute()->single(); + // If field is not prefixed with a join, it's from the main entity + $entity = $savedSearch['api__entity']; + // Check to see if field belongs to a join + foreach ($savedSearch['api_params']['join'] ?? [] as $join) { + [$joinEntity, $joinAlias] = array_pad(explode(' AS ', $join[0]), 2, ''); + if (strpos($fieldName, $joinAlias . '.') === 0) { + $entity = $joinEntity; + $fieldName = substr($fieldName, strlen($joinAlias) + 1); + } + } + } + + return civicrm_api4($entity, 'getFields', [ + 'checkPermissions' => FALSE, + 'where' => [['name', '=', $fieldName]], + 'select' => ['options'], + 'loadOptions' => ['id', 'label'], + 'values' => FormattingUtil::filterByPrefix($this->values, $this->fieldName, $fieldName), + ], 0)['options'] ?: []; + } + + protected function loadEntities() { + // Do nothing; this action doesn't need entity data + } + +} diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/SubmitFile.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/SubmitFile.php index bd463b02c26a2c77a244fb3806155aa57aebbb8b..5d1f9753193ab97cde0b9ce315c30b7ca5d88c95 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/SubmitFile.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/SubmitFile.php @@ -12,10 +12,16 @@ use Civi\Api4\Utils\CoreUtil; * * @method $this setToken(string $token) * @method $this setFieldName(string $fieldName) - * @method $this setEntityName(string $entityName) + * @method $this setModelName(string $modelName) * @method $this setJoinEntity(string $joinEntity) * @method $this setEntityIndex(int $entityIndex) * @method $this setJoinIndex(int $joinIndex) + * @method string getToken() + * @method string getFieldName() + * @method string getModelName() + * @method string getJoinEntity() + * @method int getEntityIndex() + * @method int getJoinIndex() * @package Civi\Api4\Action\Afform */ class SubmitFile extends AbstractProcessor { @@ -31,7 +37,7 @@ class SubmitFile extends AbstractProcessor { * @var string * @required */ - protected $entityName; + protected $modelName; /** * @var string @@ -58,15 +64,15 @@ class SubmitFile extends AbstractProcessor { if (empty($_FILES['file'])) { throw new \API_Exception('File upload required'); } - $afformEntity = $this->_formDataModel->getEntity($this->entityName); + $afformEntity = $this->_formDataModel->getEntity($this->modelName); $apiEntity = $this->joinEntity ?: $afformEntity['type']; $entityIndex = (int) $this->entityIndex; $joinIndex = (int) $this->joinIndex; if ($this->joinEntity) { - $entityId = $this->_entityIds[$this->entityName][$entityIndex]['joins'][$this->joinEntity][$joinIndex] ?? NULL; + $entityId = $this->_entityIds[$this->modelName][$entityIndex]['joins'][$this->joinEntity][$joinIndex] ?? NULL; } else { - $entityId = $this->_entityIds[$this->entityName][$entityIndex]['id'] ?? NULL; + $entityId = $this->_entityIds[$this->modelName][$entityIndex]['id'] ?? NULL; } if (!$entityId) { diff --git a/civicrm/ext/afform/core/Civi/Api4/Afform.php b/civicrm/ext/afform/core/Civi/Api4/Afform.php index ec76fd3df2f29c2059483c2e9e844b32a879b163..4e5f0c977f7085456137bbaa68c99f138b3f013d 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Afform.php +++ b/civicrm/ext/afform/core/Civi/Api4/Afform.php @@ -93,6 +93,15 @@ class Afform extends Generic\AbstractEntity { ->setCheckPermissions($checkPermissions); } + /** + * @param bool $checkPermissions + * @return Action\Afform\GetOptions + */ + public static function getOptions($checkPermissions = TRUE) { + return (new Action\Afform\GetOptions('Afform', __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + /** * @param bool $checkPermissions * @return Generic\BasicBatchAction @@ -201,22 +210,33 @@ class Afform extends Generic\AbstractEntity { if ($self->getAction() === 'get') { $fields[] = [ 'name' => 'module_name', + 'type' => 'Extra', 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'directive_name', + 'type' => 'Extra', 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'has_local', + 'type' => 'Extra', 'data_type' => 'Boolean', 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'has_base', + 'type' => 'Extra', 'data_type' => 'Boolean', 'readonly' => TRUE, ]; + $fields[] = [ + 'name' => 'search_displays', + 'type' => 'Extra', + 'data_type' => 'Array', + 'readonly' => TRUE, + 'description' => 'Embedded search displays, formatted like ["search-name.display-name"]', + ]; } return $fields; @@ -232,6 +252,7 @@ class Afform extends Generic\AbstractEntity { "default" => ["administer CiviCRM"], // These all check form-level permissions 'get' => [], + 'getOptions' => [], 'prefill' => [], 'submit' => [], 'submitFile' => [], diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index 4822b15d23e1972ccb4fdd1d7075150f67b13654..2ecf7c854dc33b98ee908b12508392ddfd486ff0 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -492,7 +492,9 @@ function _afform_angular_module_name($fileBaseName, $format = 'camel') { */ function afform_civicrm_alterApiRoutePermissions(&$permissions, $entity, $action) { if ($entity == 'Afform') { - if ($action == 'prefill' || $action == 'submit' || $action == 'submitFile') { + // These actions should be accessible to anonymous users; permissions are checked internally + $allowedActions = ['prefill', 'submit', 'submitFile', 'getOptions']; + if (in_array($action, $allowedActions, TRUE)) { $permissions = CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION; } } @@ -519,6 +521,22 @@ function afform_civicrm_preProcess($formName, &$form) { } } +/** + * Implements hook_civicrm_pre(). + */ +function afform_civicrm_pre($op, $entity, $id, &$params) { + // When deleting a searchDisplay, also delete any Afforms the display is embedded within + if ($entity === 'SearchDisplay' && $op === 'delete') { + $display = \Civi\Api4\SearchDisplay::get(FALSE) + ->addSelect('saved_search_id.name', 'name') + ->addWhere('id', '=', $id) + ->execute()->first(); + \Civi\Api4\Afform::revert(FALSE) + ->addWhere('search_displays', 'CONTAINS', $display['saved_search_id.name'] . ".{$display['name']}") + ->execute(); + } +} + // Wordpress only: Register callback for rendering shortcodes if (function_exists('add_filter')) { add_filter('civicrm_shortcode_get_markup', 'afform_shortcode_content', 10, 4); diff --git a/civicrm/ext/afform/core/ang/af/afField.component.js b/civicrm/ext/afform/core/ang/af/afField.component.js index 22ba460deb6193f3887ba00cc71996f5e78da996..aa83eac8fbae9dced69200437e697e5dc774f4c0 100644 --- a/civicrm/ext/afform/core/ang/af/afField.component.js +++ b/civicrm/ext/afform/core/ang/af/afField.component.js @@ -12,10 +12,14 @@ fieldName: '@name', defn: '=' }, - controller: function($scope, $element, crmApi4, $timeout) { + controller: function($scope, $element, crmApi4, $timeout, $location) { var ts = $scope.ts = CRM.ts('org.civicrm.afform'), ctrl = this, + // Prefix used for SearchKit explicit joins + namePrefix = '', boolOptions = [{id: true, label: ts('Yes')}, {id: false, label: ts('No')}], + // Used to store chain select options loaded on-the-fly + chainSelectOptions = null, // Only used for is_primary radio button noOptions = [{id: true, label: ''}]; @@ -29,6 +33,9 @@ $element.addClass('af-field-type-' + _.kebabCase(ctrl.defn.input_type)); + if (this.defn.name !== this.fieldName) { + namePrefix = this.fieldName.substr(0, this.fieldName.length - this.defn.name.length); + } if (ctrl.defn.search_range) { // Initialize value as object unless using relative date select @@ -69,32 +76,88 @@ // ChainSelect - watch control field & reload options as needed if (ctrl.defn.input_type === 'ChainSelect') { - $scope.$watch('dataProvider.getFieldData()[defn.input_attrs.control_field]', function(val) { - if (val) { + var controlField = namePrefix + ctrl.defn.input_attrs.control_field; + $scope.$watch('dataProvider.getFieldData()["' + controlField + '"]', function(val) { + // After switching option list, remove invalid options + function validateValue() { + var options = $scope.getOptions(), + value = $scope.dataProvider.getFieldData()[ctrl.fieldName]; + if (_.isArray(value)) { + _.remove(value, function(item) { + return !_.find(options, function(option) {return option.id == item;}); + }); + } else if (value && !_.find(options, function(option) {return option.id == value;})) { + $scope.dataProvider.getFieldData()[ctrl.fieldName] = ''; + } + } + if (val && (typeof val === 'number' || val.length)) { + $('input[crm-ui-select]', $element).addClass('loading').prop('disabled', true); var params = { - where: [['name', '=', ctrl.fieldName]], - select: ['options'], - loadOptions: ['id', 'label'], - values: {} + name: ctrl.afFieldset.getFormName(), + modelName: ctrl.afFieldset.getName(), + fieldName: ctrl.fieldName, + joinEntity: ctrl.afJoin ? ctrl.afJoin.entity : null, + values: $scope.dataProvider.getFieldData() }; - params.values[ctrl.defn.input_attrs.control_field] = val; - crmApi4($scope.dataProvider.getEntityType(), 'getFields', params, 0) + crmApi4('Afform', 'getOptions', params) .then(function(data) { - ctrl.defn.options = data.options; + $('input[crm-ui-select]', $element).removeClass('loading').prop('disabled', !data.length); + chainSelectOptions = data; + validateValue(); }); + } else { + chainSelectOptions = null; + validateValue(); } - }); + }, true); } - // Set default value - if (ctrl.defn.afform_default) { - // Wait for parent controllers to initialize - $timeout(function() { - $scope.dataProvider.getFieldData()[ctrl.fieldName] = ctrl.defn.afform_default; - }); + // Wait for parent controllers to initialize + $timeout(function() { + // Unique field name = entity_name index . join . field_name + var entityName = ctrl.afFieldset.getName(), + joinEntity = ctrl.afJoin ? ctrl.afJoin.entity : null, + uniquePrefix = '', + urlArgs = $location.search(); + if (entityName) { + var index = ctrl.getEntityIndex(); + uniquePrefix = entityName + (index ? index + 1 : '') + (joinEntity ? '.' + joinEntity : '') + '.'; + } + // Set default value from url with uniquePrefix + fieldName + if (urlArgs && urlArgs[uniquePrefix + ctrl.fieldName]) { + setValue(urlArgs[uniquePrefix + ctrl.fieldName]); + } + // Set default value from url with fieldName only + else if (urlArgs && urlArgs[ctrl.fieldName]) { + $scope.dataProvider.getFieldData()[ctrl.fieldName] = urlArgs[ctrl.fieldName]; + } + // Set default value based on field defn + else if (ctrl.defn.afform_default) { + setValue(ctrl.defn.afform_default); + } + }); + }; + + // Set default value; ensure data type matches input type + function setValue(value) { + if (ctrl.defn.input_type === 'Number' && ctrl.defn.search_range) { + if (!_.isPlainObject(value)) { + value = { + '>=': +(('' + value).split('-')[0] || 0), + '<=': +(('' + value).split('-')[1] || 0), + }; + } + } else if (ctrl.defn.input_type === 'Number') { + value = +value; + } else if (ctrl.defn.search_range && !_.isPlainObject(value)) { + value = { + '>=': ('' + value).split('-')[0], + '<=': ('' + value).split('-')[1] || '', + }; } - }; + $scope.dataProvider.getFieldData()[ctrl.fieldName] = value; + } // Get the repeat index of the entity fieldset (not the join) ctrl.getEntityIndex = function() { @@ -109,7 +172,7 @@ // Params for the Afform.submitFile API when uploading a file field ctrl.getFileUploadParams = function() { return { - entityName: ctrl.afFieldset.modelName, + modelName: ctrl.afFieldset.getName(), fieldName: ctrl.fieldName, joinEntity: ctrl.afJoin ? ctrl.afJoin.entity : null, entityIndex: ctrl.getEntityIndex(), @@ -118,7 +181,7 @@ }; $scope.getOptions = function () { - return ctrl.defn.options || (ctrl.fieldName === 'is_primary' && ctrl.defn.input_type === 'Radio' ? noOptions : boolOptions); + return chainSelectOptions || ctrl.defn.options || (ctrl.fieldName === 'is_primary' && ctrl.defn.input_type === 'Radio' ? noOptions : boolOptions); }; $scope.select2Options = function() { diff --git a/civicrm/ext/afform/core/ang/af/afFieldset.directive.js b/civicrm/ext/afform/core/ang/af/afFieldset.directive.js index 273651fe648cd06fcd5c047378832245da982967..384fad9b90f07c37c30f2db1ad9af9d414e8e236 100644 --- a/civicrm/ext/afform/core/ang/af/afFieldset.directive.js +++ b/civicrm/ext/afform/core/ang/af/afFieldset.directive.js @@ -11,15 +11,18 @@ var self = ctrls[0]; self.afFormCtrl = ctrls[1]; }, - controller: function($scope) { + controller: function($scope, $element) { var ctrl = this, localData = []; this.getData = function() { return ctrl.afFormCtrl ? ctrl.afFormCtrl.getData(ctrl.modelName) : localData; }; + // Get name of afform entity or search display this.getName = function() { - return this.modelName; + return this.modelName || + // If there is no Afform entity, get the name of embedded search display + $element.find('[search-name][display-name]').attr('display-name'); }; this.getEntityType = function() { return this.afFormCtrl.getEntity(this.modelName).type; @@ -32,7 +35,7 @@ return data[0].fields; }; this.getFormName = function() { - return ctrl.afFormCtrl ? ctrl.afFormCtrl.getMeta().name : $scope.meta.name; + return ctrl.afFormCtrl ? ctrl.afFormCtrl.getFormMeta().name : $scope.meta.name; }; } }; diff --git a/civicrm/ext/afform/core/info.xml b/civicrm/ext/afform/core/info.xml index 26304df6de9155cdcce579a33c440f95cbb04024..82de9f23c02ff3ce69d5a91a3bca5bc8a819b8dd 100644 --- a/civicrm/ext/afform/core/info.xml +++ b/civicrm/ext/afform/core/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>beta</develStage> <compatibility> <ver>5.23</ver> diff --git a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php new file mode 100644 index 0000000000000000000000000000000000000000..b8d0f9d8b08310035bcefa4a22d59a914eff522a --- /dev/null +++ b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/AfformGetTest.php @@ -0,0 +1,74 @@ +<?php +namespace Civi\Afform; + +use Civi\Api4\Afform; +use Civi\Test\HeadlessInterface; +use Civi\Test\TransactionalInterface; + +/** + * @group headless + */ +class AfformGetTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface { + + private $formName = 'abc_123_test'; + + public function setUpHeadless() { + return \Civi\Test::headless()->installMe(__DIR__)->apply(); + } + + public function tearDown(): void { + Afform::revert(FALSE)->addWhere('name', '=', $this->formName)->execute(); + parent::tearDown(); + } + + public function testGetReturnFields() { + Afform::create() + ->addValue('name', $this->formName) + ->addValue('title', 'Test Form') + ->execute(); + + // Omitting select should return regular fields but not extra fields + $result = Afform::get() + ->addWhere('name', '=', $this->formName) + ->execute()->single(); + $this->assertEquals($this->formName, $result['name']); + $this->assertArrayNotHasKey('directive_name', $result); + $this->assertArrayNotHasKey('has_base', $result); + + // Select * should also return regular fields only + $result = Afform::get() + ->addSelect('*') + ->addWhere('name', '=', $this->formName) + ->execute()->single(); + $this->assertEquals($this->formName, $result['name']); + $this->assertArrayNotHasKey('module_name', $result); + $this->assertArrayNotHasKey('has_local', $result); + + // Selecting * and has_base should return core and that one extra field + $result = Afform::get() + ->addSelect('*', 'has_base') + ->addWhere('name', '=', $this->formName) + ->execute()->single(); + $this->assertEquals($this->formName, $result['name']); + $this->assertFalse($result['has_base']); + $this->assertArrayNotHasKey('has_local', $result); + } + + public function testGetSearchDisplays() { + Afform::create() + ->addValue('name', $this->formName) + ->addValue('title', 'Test Form') + ->addValue('layout', '<div><crm-search-display-grid search-name="foo" display-name="foo-bar" /></div>< crm-search-display-table search-name=\'foo\' display-name = \'bar-food\' >') + ->setLayoutFormat('html') + ->execute(); + + $result = Afform::get() + ->addSelect('name', 'search_displays') + ->addWhere('name', '=', $this->formName) + ->addWhere('search_displays', 'CONTAINS', 'foo.foo-bar') + ->execute()->single(); + + $this->assertEquals(['foo.foo-bar', 'foo.bar-food'], $result['search_displays']); + } + +} diff --git a/civicrm/ext/afform/html/info.xml b/civicrm/ext/afform/html/info.xml index 717d3f3fdc8f18583103e59a6e9cf585b562b8e0..16f0c5d8f37647e05b0855cb6e30e4a50455d26b 100644 --- a/civicrm/ext/afform/html/info.xml +++ b/civicrm/ext/afform/html/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.23</ver> diff --git a/civicrm/ext/afform/mock/info.xml b/civicrm/ext/afform/mock/info.xml index c8944777f5c9bb2a5ba5185788aa0fe3f9f7faab..78389d0e6fc1c33183fc19f5da3c3e502cdd3ba0 100644 --- a/civicrm/ext/afform/mock/info.xml +++ b/civicrm/ext/afform/mock/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php index 7e0b2f6f4631228dbcf81e9e3d365218f0e6bad8..35d1c2a159d6e1713ca48da4d01738be7647dcf7 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformContactUsageTest.php @@ -15,6 +15,9 @@ class api_v4_AfformContactUsageTest extends api_v4_AfformUsageTestCase { <fieldset af-fieldset="me"> <af-field name="first_name" /> <af-field name="last_name" /> + <div af-join="Address" min="1" af-repeat="Add"> + <afblock-contact-address></afblock-contact-address> + </div> </fieldset> </af-form> EOHTML; @@ -87,6 +90,33 @@ EOHTML; $this->assertEquals('Lasty', $contact['last_name']); } + public function testChainSelect(): void { + $this->useValues([ + 'layout' => self::$layouts['aboutMe'], + 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, + ]); + + // Get states for USA + $result = Civi\Api4\Afform::getOptions() + ->setName($this->formName) + ->setModelName('me') + ->setFieldName('state_province_id') + ->setJoinEntity('Address') + ->setValues(['country_id' => CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Country', 'United States', 'id', 'name')]) + ->execute(); + $this->assertEquals('Alabama', $result[0]['label']); + + // Get states for UK + $result = Civi\Api4\Afform::getOptions() + ->setName($this->formName) + ->setModelName('me') + ->setFieldName('state_province_id') + ->setJoinEntity('Address') + ->setValues(['country_id' => CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Country', 'United Kingdom', 'id', 'name')]) + ->execute(); + $this->assertEquals('Aberdeen City', $result[0]['label']); + } + public function testCheckEntityReferenceFieldsReplacement(): void { $this->useValues([ 'layout' => self::$layouts['registerSite'], diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php index 3ece0fb88deed85ffec8ec21ca5a9c9b179069c0..e1e848a208d8d8f9f93f352bd17d2f97a8bb1573 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformCustomFieldUsageTest.php @@ -50,6 +50,7 @@ EOHTML; // Creating a custom group should automatically create an afform block $block = \Civi\Api4\Afform::get() ->addWhere('name', '=', 'afblockCustom_MyThings') + ->addSelect('layout', 'directive_name') ->setLayoutFormat('shallow') ->setFormatWhitespace(TRUE) ->execute()->single(); diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformFileUploadTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformFileUploadTest.php index c8bfb3040d6e8aa2b54e6bf66bf72ed1ce70ea1f..fa706c1cb3428d3228728bceb17a67833a354ed6 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformFileUploadTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformFileUploadTest.php @@ -110,7 +110,7 @@ EOHTML; Civi\Api4\Afform::submitFile() ->setName($this->formName) ->setToken($submission['token']) - ->setEntityName('Individual1') + ->setModelName('Individual1') ->setFieldName('MyInfo.single_file_field') ->setEntityIndex($entityIndex) ->execute(); @@ -120,7 +120,7 @@ EOHTML; Civi\Api4\Afform::submitFile() ->setName($this->formName) ->setToken($submission['token']) - ->setEntityName('Individual1') + ->setModelName('Individual1') ->setFieldName('my_file') ->setEntityIndex($entityIndex) ->setJoinEntity('Custom_MyFiles') diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php index 3d57c90bb0c1c6e51bce222fcad32182f5ea077d..ffb62766f81c29d801d5b2399e500813372b7d32 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php @@ -53,7 +53,9 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { Civi\Api4\Afform::revert()->addWhere('name', '=', $formName)->execute(); $message = 'The initial Afform.get should return default data'; - $result = Civi\Api4\Afform::get()->addWhere('name', '=', $formName)->execute(); + $result = Civi\Api4\Afform::get() + ->addSelect('*', 'has_base', 'has_local') + ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); $this->assertEquals($get($originalMetadata, 'description'), $get($result[0], 'description'), $message); @@ -75,7 +77,9 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $this->assertEquals('The temporary description', $result[0]['description'], $message); $message = 'After updating, the Afform.get API should return blended data'; - $result = Civi\Api4\Afform::get()->addWhere('name', '=', $formName)->execute(); + $result = Civi\Api4\Afform::get() + ->addSelect('*', 'has_base', 'has_local') + ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); $this->assertEquals('The temporary description', $get($result[0], 'description'), $message); @@ -88,7 +92,9 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { Civi\Api4\Afform::revert()->addWhere('name', '=', $formName)->execute(); $message = 'After reverting, the final Afform.get should return default data'; - $result = Civi\Api4\Afform::get()->addWhere('name', '=', $formName)->execute(); + $result = Civi\Api4\Afform::get() + ->addSelect('*', 'has_base', 'has_local') + ->addWhere('name', '=', $formName)->execute(); $this->assertEquals($formName, $result[0]['name'], $message); $this->assertEquals($get($originalMetadata, 'title'), $get($result[0], 'title'), $message); $this->assertEquals($get($originalMetadata, 'description'), $get($result[0], 'description'), $message); diff --git a/civicrm/ext/authx/README.md b/civicrm/ext/authx/README.md index f0515b8a3eca4db2a4868fc676af1ee1e2c59eb1..d5404a88bfa50c059e18cd9974d1a30cb7a8c127 100644 --- a/civicrm/ext/authx/README.md +++ b/civicrm/ext/authx/README.md @@ -124,3 +124,6 @@ $ cv ev 'Civi::settings()->set("authx_header_cred", ["pass","jwt"]);' $ curl 'https://demouser:demopass@example.org/civicrm/authx/id' {"contact_id":203,"user_id":"2"} ``` + +The "AuthX: Authenticate to services with password" CiviCRM permission must +also be granted for the role associated to the user. diff --git a/civicrm/ext/authx/info.xml b/civicrm/ext/authx/info.xml index 88f9cd98693759867fd9dbf26c7bb595c30dd158..02b8cfb1f1548e1a5406987250cd5dc9beaf1f76 100644 --- a/civicrm/ext/authx/info.xml +++ b/civicrm/ext/authx/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-02-11</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>alpha</develStage> <compatibility> <ver>5.0</ver> diff --git a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php index d2e2ea5f61a274eeeeae95eedb3f8786c443327b..e7792914f41681b2bd970d9957796d114ad9127e 100644 --- a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php +++ b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php @@ -423,6 +423,46 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf $this->assertEquals($actualSteps, $planSteps); } + /** + * Civi's test suite includes middleware that will add JWT tokens to outgoing requests. + * + * This test tries a few permutations with different principals ("demo", "Lebowski"), + * different identifier fields (authx_user, authx_contact_id), and different + * flows (param/header/xheader). + * + * @throws \CiviCRM_API3_Exception + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function testJwtMiddleware() { + // HTTP GET with a specific user. Choose flow automatically. + $response = $this->createGuzzle()->get('civicrm/authx/id', [ + 'authx_user' => $GLOBALS['_CV']['DEMO_USER'], + ]); + $this->assertMyContact($this->getDemoCID(), $this->getDemoUID(), 'jwt', 'param', $response); + + // HTTP GET with a specific contact. Choose flow automatically. + $response = $this->createGuzzle()->get('civicrm/authx/id', [ + 'authx_contact_id' => $this->getDemoCID(), + ]); + $this->assertMyContact($this->getDemoCID(), $this->getDemoUID(), 'jwt', 'param', $response); + + // HTTP POST with a specific contact. Per-client default. + $response = $this->createGuzzle([ + 'authx_contact_id' => $this->getLebowskiCID(), + ])->post('civicrm/authx/id'); + $this->assertMyContact($this->getLebowskiCID(), NULL, 'jwt', 'param', $response); + + // Using explicit flow options... + foreach (['param', 'xheader', 'header'] as $flowType) { + \Civi::settings()->set("authx_{$flowType}_cred", ['jwt']); + $response = $this->createGuzzle()->get('civicrm/authx/id', [ + 'authx_contact_id' => $this->getDemoCID(), + 'authx_flow' => $flowType, + ]); + $this->assertMyContact($this->getDemoCID(), $this->getDemoUID(), 'jwt', $flowType, $response); + } + } + /** * Filter a request, applying the given authentication options * diff --git a/civicrm/ext/ckeditor4/info.xml b/civicrm/ext/ckeditor4/info.xml index a86695d96f2d0c76bb0343715180000eca50cb0e..2bd2c602aa95f12baf7067d9d9b541055ba0e2ba 100644 --- a/civicrm/ext/ckeditor4/info.xml +++ b/civicrm/ext/ckeditor4/info.xml @@ -1,8 +1,8 @@ <?xml version="1.0"?> <extension key="ckeditor4" type="module"> <file>ckeditor4</file> - <name>CKEditor</name> - <description>CiviCRM CKEditor Plugin.</description> + <name>CKEditor4</name> + <description>CiviCRM CKEditor4 Plugin.</description> <license>AGPL-3.0</license> <maintainer> <author>Seamus Lee</author> @@ -15,12 +15,12 @@ <url desc="Licensing">https://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-05-23</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <compatibility> <ver>5.39</ver> </compatibility> - <comments>This takes the original CKEditor and shifts it into its own core extension</comments> + <comments>This is the version of CKEditor that originally shipped with CiviCRM core</comments> <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> diff --git a/civicrm/ext/contributioncancelactions/info.xml b/civicrm/ext/contributioncancelactions/info.xml index ed653efbe195c82b351249bdeee82c7299cf1e80..351d99f1e3575369a066cfa748d3cdb2c1f2a97e 100644 --- a/civicrm/ext/contributioncancelactions/info.xml +++ b/civicrm/ext/contributioncancelactions/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-12</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <compatibility> <ver>5.32</ver> diff --git a/civicrm/ext/eventcart/info.xml b/civicrm/ext/eventcart/info.xml index 017bd49e38e310f2f061f8e30b335076f596c949..55a0ddb655c06874186855cea973e86f89f53799 100644 --- a/civicrm/ext/eventcart/info.xml +++ b/civicrm/ext/eventcart/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-03</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/eventcart/templates/CRM/Event/Cart/Form/Checkout/Payment.tpl b/civicrm/ext/eventcart/templates/CRM/Event/Cart/Form/Checkout/Payment.tpl index fba3a4770c458c7940cd951d5c9ed82ff07f5650..60d841abc3faee32dd033c9f24b35067bcb00182 100644 --- a/civicrm/ext/eventcart/templates/CRM/Event/Cart/Form/Checkout/Payment.tpl +++ b/civicrm/ext/eventcart/templates/CRM/Event/Cart/Form/Checkout/Payment.tpl @@ -94,7 +94,7 @@ </tfoot> </table> {if $payment_required == true} - {if $form.is_pay_later.label} + {if !empty($form.is_pay_later.label)} <div class="crm-section {$form.is_pay_later.name}-section"> <div class="label">{$form.is_pay_later.label}</div> <div class="content">{$form.is_pay_later.html} @@ -117,14 +117,14 @@ {/if} <script type="text/javascript"> -{if $form.is_pay_later.name} +{if !empty($form.is_pay_later.name)} var pay_later_sel = "input#{$form.is_pay_later.name}"; {/if} {literal} CRM.$(function($) { function refresh() { - {/literal}{if $form.is_pay_later.name}{literal} + {/literal}{if !empty($form.is_pay_later.name)}{literal} var is_pay_later = $(pay_later_sel).prop("checked"); {/literal}{else} var is_pay_later = false; @@ -133,7 +133,7 @@ CRM.$(function($) { $(".pay-later-instructions").toggle(is_pay_later); $("div.billingNameInfo-section .description").html(is_pay_later ? "Enter the billing address at which you can be invoiced." : "Enter the name as shown on your credit or debit card, and the billing address for this card."); } - {/literal}{if $form.is_pay_later.name}{literal} + {/literal}{if !empty($form.is_pay_later.name)}{literal} $(pay_later_sel).change(function() { refresh(); }); diff --git a/civicrm/ext/ewaysingle/info.xml b/civicrm/ext/ewaysingle/info.xml index 3ff8160659f3abddb73666e814a8df21dd33ee2f..ea6bd038ab8fecaa3f0c5cbf612825bc1053f604 100644 --- a/civicrm/ext/ewaysingle/info.xml +++ b/civicrm/ext/ewaysingle/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-07</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/financialacls/info.xml b/civicrm/ext/financialacls/info.xml index 97bb65c5592dcdbd42bb4ec30836b93681ab41f2..dfba585dac86963c43b3837cf78ccb3d2385ddb0 100644 --- a/civicrm/ext/financialacls/info.xml +++ b/civicrm/ext/financialacls/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-27</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <compatibility> <ver>5.30</ver> diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml index 9a67d26c19a5a6c035930a5e26239b5f65e0df34..ff0c21b5368c79581e510e4599f6436d990aefca 100644 --- a/civicrm/ext/flexmailer/info.xml +++ b/civicrm/ext/flexmailer/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-05</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <comments> FlexMailer is an email delivery engine which replaces the internal guts diff --git a/civicrm/ext/flexmailer/src/API/MailingPreview.php b/civicrm/ext/flexmailer/src/API/MailingPreview.php index cdd11ac4281afafa71827b73b80c30983610d5a3..e585eda77ab703a6792b6837679a4fa729d84a16 100644 --- a/civicrm/ext/flexmailer/src/API/MailingPreview.php +++ b/civicrm/ext/flexmailer/src/API/MailingPreview.php @@ -41,11 +41,23 @@ class MailingPreview { $contactID = \CRM_Utils_Array::value('contact_id', $params, \CRM_Core_Session::singleton()->get('userID')); - $job = new \CRM_Mailing_BAO_MailingJob(); + $job = new class extends \CRM_Mailing_BAO_MailingJob { + + public function insert() { + throw new \RuntimeException('MailingJob is just a preview. It cannot be saved.'); + } + + public function update($dataObject = FALSE) { + throw new \RuntimeException('MailingJob is just a preview. It cannot be saved.'); + } + + public function save($hook = TRUE) { + throw new \RuntimeException('MailingJob is just a preview. It cannot be saved.'); + } + + }; $job->mailing_id = $mailing->id ?: NULL; - $job->is_test = 1; $job->status = 'Complete'; - // $job->save(); $flexMailer = new FlexMailer(array( 'is_preview' => TRUE, diff --git a/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php index adca06ed7e25b0d69d4bac2e46654dd3e26b4f1a..9dd3759b37b2cde401410d541d65bd00115f6861 100644 --- a/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php +++ b/civicrm/ext/flexmailer/src/ClickTracker/HtmlClickTracker.php @@ -51,9 +51,9 @@ class HtmlClickTracker implements ClickTrackerInterface { // Find anything like href="..." or href='...' inside a tag. $tmp = preg_replace_callback( - ';(\<a[^>]*href *= *")([^">]+)(");i', $callback, $html); + ';(\<a[^>]*href *= *")([^">]+)(");iu', $callback, $html); return preg_replace_callback( - ';(\<a[^>]*href *= *\')([^\'>]+)(\');i', $callback, $tmp); + ';(\<a[^>]*href *= *\')([^\'>]+)(\');iu', $callback, $tmp); } // /** diff --git a/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php b/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php index 31cdd90c2c735ca20ac135c760b91607bfeb6997..63a14a0955e03dfdca05cbb25e9fa1f6caca0404 100644 --- a/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php +++ b/civicrm/ext/flexmailer/src/ClickTracker/TextClickTracker.php @@ -37,7 +37,7 @@ class TextClickTracker implements ClickTrackerInterface { }; // Find any HTTP(S) URLs in the text. // return preg_replace_callback('/\b(?:(?:https?):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $callback, $tex - return preg_replace_callback('/\b(?:(?:https?):\/\/)[-A-Z0-9+&@#\/%=~_|$?!:,.{}\[\];]*[A-Z0-9+&@#\/%=~_|${}\[\];]/i', + return preg_replace_callback('/\b(?:(?:https?):\/\/)[\w+&@#\/%=~_|$?!:,.{}\[\];]*[\w+&@#\/%=~_|${}\[\];]/iu', $callback, $text); } diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php index 91a7af91e272994f493824bf378f6d92d783ed84..5ba9c960e8810a77ffe467ea4f941c2170998db0 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php @@ -29,15 +29,15 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn // Mock the getTrackerURL call; we don't need to test creating a row in a table. // If you want this to work without runkit, then either (a) make the dummy rows or (b) switch this to a hook/event that is runtime-configurable. require_once 'CRM/Mailing/BAO/TrackableURL.php'; - runkit7_method_rename('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL', 'orig_getBasicTrackerURL'); - runkit7_method_add('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL', '$a, $b, $c', 'return \'http://example.com/extern?u=1&qid=1\';', RUNKIT7_ACC_STATIC | RUNKIT7_ACC_PRIVATE); + \runkit7_method_rename('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL', 'orig_getBasicTrackerURL'); + \runkit7_method_add('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL', '$a, $b, $c', 'return \'http://example.com/extern?u=1&qid=1\';', RUNKIT7_ACC_STATIC | RUNKIT7_ACC_PRIVATE); parent::setUp(); } public function tearDown(): void { // Reset the class. - runkit7_method_remove('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL'); - runkit7_method_rename('\CRM_Mailing_BAO_TrackableURL', 'orig_getBasicTrackerURL', 'getBasicTrackerURL'); + \runkit7_method_remove('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL'); + \runkit7_method_rename('\CRM_Mailing_BAO_TrackableURL', 'orig_getBasicTrackerURL', 'getBasicTrackerURL'); parent::tearDown(); } @@ -137,4 +137,18 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn $this->assertEquals('See this: https://example.com/{some.path}', $result); } + public function testLinkWithUnicode(): void { + $filter = new TextClickTracker(); + $msg = 'See this: https://civiÅ„crm.org'; + $result = $filter->filterContent($msg, 1, 1); + $this->assertEquals('See this: http://example.com/extern?u=1&qid=1', $result); + } + + public function testHtmlLinkWithUnicode(): void { + $filter = new HtmlClickTracker(); + $msg = '<p><a href="https://civiÅ„crm.org">See This</a></p>'; + $result = $filter->filterContent($msg, 1, 1); + $this->assertEquals('<p><a href="http://example.com/extern?u=1&qid=1" rel=\'nofollow\'>See This</a></p>', $result); + } + } diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php index aad8443ce470cf5b5d90743559ad7eab838c18e3..a12ddad7c576343fab827e57f87ed055626c85b6 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php @@ -83,7 +83,7 @@ class MailingPreviewTest extends \CiviUnitTestCase { $this->assertMaxIds($maxIDs); $previewResult = $result['values'][$result['id']]['api.Mailing.preview']; - $this->assertEquals("[CiviMail Draft] Hello $displayName", + $this->assertEquals("Hello $displayName", $previewResult['values']['subject']); $this->assertStringContainsString("This is $displayName", $previewResult['values']['body_text']); @@ -112,7 +112,7 @@ class MailingPreviewTest extends \CiviUnitTestCase { $previewResult = $this->callAPISuccess('mailing', 'preview', $params); $this->assertMaxIds($maxIDs); - $this->assertEquals("[CiviMail Draft] Hello $displayName", + $this->assertEquals("Hello $displayName", $previewResult['values']['subject']); $this->assertStringContainsString("This is $displayName", $previewResult['values']['body_text']); diff --git a/civicrm/ext/greenwich/info.xml b/civicrm/ext/greenwich/info.xml index d43da6e67209c97ae227b63dfd978faebeb88a75..5b14a03fd4ab2231b19c7e66770e1e441158f33c 100644 --- a/civicrm/ext/greenwich/info.xml +++ b/civicrm/ext/greenwich/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-07-21</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ActivitySearch.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ActivitySearch.php index 3cc5e6d4e7cf9f63e8922e3811ad0ec6e7845ad0..7c403fd0c1a6ef089cfab08ba0675a7e0d6f9835 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ActivitySearch.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ActivitySearch.php @@ -390,18 +390,6 @@ ORDER BY contact_a.sort_name'; return $this->_columns; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @return null */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Base.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Base.php index 6550170deb77ce295fb58a75ea2a7b0b5b003e6f..6c275cdc07305fc6dc0e55934ce69213f19e1062 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Base.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Base.php @@ -22,6 +22,12 @@ class CRM_Contact_Form_Search_Custom_Base { protected $_stateID; + /** + * The title of this form + * @var string + */ + protected $_title = NULL; + /** * Class constructor. * @@ -228,17 +234,17 @@ class CRM_Contact_Form_Search_Custom_Base { } /** - * Set the title. + * Setter function for title. * * @param string $title + * The title of the form. */ public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); + if (empty($title)) { + $title = ts('Search'); } + $this->_title = $title; + CRM_Utils_System::setTitle($title); } /** diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContribSYBNT.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContribSYBNT.php index de292bb76ab8db355466a41af16f7efb24f0bed1..cbd887c39fcaff96984be93fece2adfefa75e109 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContribSYBNT.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContribSYBNT.php @@ -365,18 +365,6 @@ AND c.receive_date < {$this->start_date_1} return NULL; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @param string $tableAlias */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContributionAggregate.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContributionAggregate.php index 0b0698c5a9618bf4654327a5e076d64abc53f225..2e640827baae63a559b8ed3577e4b57694e22707 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContributionAggregate.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ContributionAggregate.php @@ -320,18 +320,6 @@ civicrm_contact AS contact_a {$this->_aclFrom} return $this->_columns; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @return null */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/DateAdded.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/DateAdded.php index 8fca291f52b2822e877caebc0dd4c3d06a682d20..2e4877bac7a91eebebc58522de8f025a5e20695b 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/DateAdded.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/DateAdded.php @@ -361,18 +361,6 @@ class CRM_Contact_Form_Search_Custom_DateAdded extends CRM_Contact_Form_Search_C return 'CRM/Contact/Form/Search/Custom.tpl'; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @return mixed */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/EventAggregate.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/EventAggregate.php index 29e76dbeaab4cf446171f3d8734b53c4299539ea..af1bd242387b048dd331b84f51968c00382e3dc1 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/EventAggregate.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/EventAggregate.php @@ -335,18 +335,6 @@ class CRM_Contact_Form_Search_Custom_EventAggregate extends CRM_Contact_Form_Sea return $this->_columns; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @param string $tableAlias */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/FullText.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/FullText.php index 12b793fa2fd81741459df170551d7505a3397991..dcc3ea12f1769cd4b5c8e834b130e19c9fcde2ec 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/FullText.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/FullText.php @@ -519,15 +519,6 @@ FROM {$this->_tableName} contact_a public function alterRow(&$row) { } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - } - /** * @param int|array $limit * @return string diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Group.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Group.php index 1cc949d4f9e9b10657c51441f800d30e7f23fdee..7eabd91dadcd8757d7e2aaa5e2870ff1fd8f0987 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Group.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Group.php @@ -652,20 +652,6 @@ WHERE gcc.group_id = {$ssGroup->id} return 'CRM/Contact/Form/Search/Custom.tpl'; } - /** - * Set title on search. - * - * @param string $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * Build ACL clause. * diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/PriceSet.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/PriceSet.php index 74e5aa006ebb9d4f39f12cf71a98c3bf3593161e..49b5b32e9544dc91cb135c3db1cb791d6b38c07e 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/PriceSet.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/PriceSet.php @@ -333,12 +333,10 @@ INNER JOIN {$this->_tableName} tempTable ON ( tempTable.contact_id = contact_a.i * @param $title */ public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Export Price Set Info for an Event')); + if (empty($title)) { + $title = ts('Export Price Set Info for an Event'); } + parent::setTitle($title); } /** diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Proximity.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Proximity.php index 8d211aafcf7b5087a8fdcc6eb588d86c8baa5cbc..11533db374e747421e69d37284c8b8375817bebf 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Proximity.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Proximity.php @@ -270,18 +270,6 @@ class CRM_Contact_Form_Search_Custom_Proximity extends CRM_Contact_Form_Search_C public function alterRow(&$row) { } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * Validate form input. * diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/RandomSegment.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/RandomSegment.php index b09d151fce841d67af35cca6a8e01b5e72252558..db5110b049181512cb23dcaa18a08ea028601f9e 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/RandomSegment.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/RandomSegment.php @@ -332,18 +332,6 @@ class CRM_Contact_Form_Search_Custom_RandomSegment extends CRM_Contact_Form_Sear return 'CRM/Contact/Form/Search/Custom.tpl'; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @return mixed */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Sample.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Sample.php index 8ea2b519a9f6018337f2a07c165d61b64988644f..70bc6b8f19a6c49c460e99ca9766a6bbd36bd28b 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Sample.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/Sample.php @@ -206,18 +206,6 @@ LEFT JOIN civicrm_state_province state_province ON state_province.id = address.s $row['sort_name'] .= ' ( altered )'; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @param string $tableAlias */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/TagContributions.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/TagContributions.php index 7b1cd6a65d5f37574e7d774e0feea2c6dad9611d..a0995d50ad7207a17b857cba8fcec2b30d7eb370 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/TagContributions.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/TagContributions.php @@ -236,18 +236,6 @@ WHERE $where return $this->_columns; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @return null */ diff --git a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ZipCodeRange.php b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ZipCodeRange.php index 98887e8f2e4cc573b8b3b3c768d4df66afc21714..77dec63eab1a0de57a1c12e1f7ba27c32594fb22 100644 --- a/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ZipCodeRange.php +++ b/civicrm/ext/legacycustomsearches/CRM/Contact/Form/Search/Custom/ZipCodeRange.php @@ -188,18 +188,6 @@ LEFT JOIN civicrm_email email ON ( email.contact_id = contact_a.id AND return 'CRM/Contact/Form/Search/Custom.tpl'; } - /** - * @param $title - */ - public function setTitle($title) { - if ($title) { - CRM_Utils_System::setTitle($title); - } - else { - CRM_Utils_System::setTitle(ts('Search')); - } - } - /** * @param string $tableAlias */ diff --git a/civicrm/ext/legacycustomsearches/info.xml b/civicrm/ext/legacycustomsearches/info.xml index 50de83be3009b8bae512a67ee735701ec2fe1c3e..26317d3d7c1736bf0cec4591080c57acfa576e5e 100644 --- a/civicrm/ext/legacycustomsearches/info.xml +++ b/civicrm/ext/legacycustomsearches/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-07-25</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <tags> <tag>mgmt:hidden</tag> diff --git a/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl b/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl index 1fba20c4293473a2bb98aeeed5e7c8072254310c..3326b6fbfd2f4fd5325a15138337c008a2dc2476 100644 --- a/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl +++ b/civicrm/ext/legacycustomsearches/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl @@ -29,7 +29,7 @@ <div class="clear"></div> </div> - {if $form.contact_type} + {if !empty($form.contact_type)} <div class="crm-section contact_type-section"> <div class="label"> {$form.contact_type.label} @@ -41,7 +41,7 @@ </div> {/if} - {if $form.group} + {if !empty($form.group)} <div class="crm-section group_selection-section"> <div class="label"> {$form.group.label} @@ -53,7 +53,7 @@ </div> {/if} - {if $form.tag} + {if !empty($form.tag)} <div class="crm-section tag-section"> <div class="label"> {$form.tag.label} diff --git a/civicrm/ext/message_admin/CRM/MessageAdmin/Page/MsgtplBasePage.php b/civicrm/ext/message_admin/CRM/MessageAdmin/Page/MsgtplBasePage.php new file mode 100644 index 0000000000000000000000000000000000000000..32a72afe5bb3ef889c2282c8e5867085a7e45448 --- /dev/null +++ b/civicrm/ext/message_admin/CRM/MessageAdmin/Page/MsgtplBasePage.php @@ -0,0 +1,34 @@ +<?php +use CRM_MessageAdmin_ExtensionUtil as E; + +class CRM_MessageAdmin_Page_MsgtplBasePage extends CRM_Core_Page { + + public function run() { + // Did we get an old school URL? Translate to preferred format. + $child = CRM_Utils_Request::retrieve('selectedChild', 'String'); + switch ($child) { + case 'user': + case 'workflow': + $url = CRM_Utils_System::url('civicrm/admin/messageTemplates/', NULL, TRUE, '/' . $child, FALSE); + CRM_Utils_System::redirect($url); + break; + } + + CRM_Utils_System::setTitle(ts('Message Templates')); + + $breadCrumb = [ + 'title' => E::ts('Message Templates'), + 'url' => CRM_Utils_System::url('civicrm/admin/messageTemplates', NULL, FALSE, '/user'), + ]; + CRM_Utils_System::appendBreadCrumb([$breadCrumb]); + + /** @var \Civi\Angular\AngularLoader $loader */ + $loader = \Civi::service('angularjs.loader'); + $loader->addModules(['crmMsgadm']); + $loader->useApp(array( + 'defaultRoute' => '/user', + )); + parent::run(); + } + +} diff --git a/civicrm/ext/message_admin/CRM/MessageAdmin/Settings.php b/civicrm/ext/message_admin/CRM/MessageAdmin/Settings.php new file mode 100644 index 0000000000000000000000000000000000000000..68b5780e497d74bf0a85a003af725fdc2a283d52 --- /dev/null +++ b/civicrm/ext/message_admin/CRM/MessageAdmin/Settings.php @@ -0,0 +1,18 @@ +<?php + +class CRM_MessageAdmin_Settings { + + public static function getAll() { + $allLangs = \Civi\Api4\OptionValue::get() + ->addWhere('option_group_id:name', '=', 'languages') + ->addWhere('is_active', '=', TRUE) + ->addSelect('name', 'label') + ->addOrderBy('label') + ->execute(); + return [ + 'allLanguages' => array_combine($allLangs->column('name'), $allLangs->column('label')), + 'uiLanguages' => CRM_Core_I18n::uiLanguages(), + ]; + } + +} diff --git a/civicrm/ext/message_admin/LICENSE.txt b/civicrm/ext/message_admin/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..55e0b3cb41303b0d9c3ff1c631092243f63f1fcc --- /dev/null +++ b/civicrm/ext/message_admin/LICENSE.txt @@ -0,0 +1,667 @@ +Package: message_admin +Copyright (C) 2021, Tim Otten <totten@civicrm.org> +Licensed under the GNU Affero Public License 3.0 (below). + +------------------------------------------------------------------------------- + + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +<http://www.gnu.org/licenses/>. diff --git a/civicrm/ext/message_admin/README.md b/civicrm/ext/message_admin/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1a7652d84bab75c11c8544200677c444f49ee458 --- /dev/null +++ b/civicrm/ext/message_admin/README.md @@ -0,0 +1,44 @@ +# message_admin + + + +(*FIXME: In one or two paragraphs, describe what the extension does and why one would download it. *) + +The extension is licensed under [AGPL-3.0](LICENSE.txt). + +## Requirements + +* PHP v7.2+ +* CiviCRM (*FIXME: Version number*) + +## Installation (Web UI) + +Learn more about installing CiviCRM extensions in the [CiviCRM Sysadmin Guide](https://docs.civicrm.org/sysadmin/en/latest/customize/extensions/). + +## Installation (CLI, Zip) + +Sysadmins and developers may download the `.zip` file for this extension and +install it with the command-line tool [cv](https://github.com/civicrm/cv). + +```bash +cd <extension-dir> +cv dl message_admin@https://github.com/FIXME/message_admin/archive/master.zip +``` + +## Installation (CLI, Git) + +Sysadmins and developers may clone the [Git](https://en.wikipedia.org/wiki/Git) repo for this extension and +install it with the command-line tool [cv](https://github.com/civicrm/cv). + +```bash +git clone https://github.com/FIXME/message_admin.git +cv en message_admin +``` + +## Getting Started + +(* FIXME: Where would a new user navigate to get started? What changes would they see? *) + +## Known Issues + +(* FIXME *) diff --git a/civicrm/ext/message_admin/ang/crmDialog.ang.php b/civicrm/ext/message_admin/ang/crmDialog.ang.php new file mode 100644 index 0000000000000000000000000000000000000000..fec3ee341468d764b09bc53dcced3c897fbcc794 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmDialog.ang.php @@ -0,0 +1,16 @@ +<?php +// This file declares an Angular module which can be autoloaded +// in CiviCRM. See also: +// \https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules/n +return [ + 'js' => [ + 'ang/crmDialog.js', + ], + 'requires' => [ + //'crmUi', + //'crmUtil', + 'dialogService', + ], + 'settings' => [], + 'basePages' => [], +]; diff --git a/civicrm/ext/message_admin/ang/crmDialog.js b/civicrm/ext/message_admin/ang/crmDialog.js new file mode 100644 index 0000000000000000000000000000000000000000..f5a33f97d3d0396890eb24cb7a067bc60def7c26 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmDialog.js @@ -0,0 +1,83 @@ +(function(angular, $, _) { + "use strict"; + + angular.module('crmDialog', CRM.angRequires('crmDialog')); + + // Ex: <div crm-dialog="myDialogName"> ... <button ng-click="$dialog.cancel()">Cancel</button> ... </div> + // Ex: <div crm-dialog="myDialogName"> ... <button ng-click="$dialog.close(outputData)">Close</button> ... </div> + // Ex: <div crm-dialog="myDialogName"> ... <crm-dialog-button text="'Close'" on-click="$dialog.close()" /> ... </div> + angular.module('crmDialog').directive('crmDialog', function(dialogService) { + return { + restrict: 'A', + controllerAs: '$dialog', + controller: function($scope, $parse, $timeout) { + var $dialog = this; + $dialog.buttons = []; + + $dialog.close = function (result) { + dialogService.close($dialog.name, result); + }; + + $dialog.cancel = function (result) { + dialogService.cancel($dialog.name); + }; + + $dialog.loadButtons = function() { + var buttons = []; + angular.forEach($dialog.buttons, function (crmDialogButton) { + var button = _.pick(crmDialogButton, ['id', 'icons', 'text']); + button.click = function () { + crmDialogButton.onClick(); + }; + buttons.push(button); + }); + dialogService.setButtons($dialog.name, buttons); + $dialog.toggleButtons(); + }; + + $dialog.toggleButtons = function() { + angular.forEach($dialog.buttons, function (crmDialogButton) { + $('#' + crmDialogButton.id).prop('disabled', crmDialogButton.disabled); + }); + }; + + $timeout(function(){ + $dialog.loadButtons(); + $('.ui-dialog:last input:not([disabled]):not([type="submit"]):first').focus(); + }); + + }, + link: function(scope, element, attrs, controller) { + controller.name = attrs.crmDialog; + scope[attrs.crmDialog] = controller; + } + }; + }); + + var idNum = 1; + + // Ex: <crm-dialog-button text="ts('Do it')" icons="{primary: 'fa-foo'}" on-click="doIt()" /> + angular.module('crmDialog').component('crmDialogButton', { + bindings: { + disabled: '<', + icons: '<', + text: '<', + onClick: '&' + }, + require: { + crmDialog: '?^^crmDialog' + }, + controller: function($scope, $element, dialogService, $timeout) { + var ts = $scope.ts = CRM.ts('crmDialog'), $ctrl = this; + $ctrl.$onInit = function() { + $ctrl.crmDialog.buttons.push(this); + }; + $ctrl.id = 'crmDialogButton_' + (idNum++); + + $scope.$watch('$ctrl.disabled', function(){ + $ctrl.crmDialog.toggleButtons(); + }); + } + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmDialog.md b/civicrm/ext/message_admin/ang/crmDialog.md new file mode 100644 index 0000000000000000000000000000000000000000..4cfd54fdb5c3c81ead4854a4092f6886c3a8897b --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmDialog.md @@ -0,0 +1,24 @@ +The `crmDialog` is a helper for working with the `dialogService`. In particular, it allows you to define then +dialog widgets as part of the markup. + +To open a dialog: + +```js +dialogService.open('someDialog', '~/Path/To/Some.html', model, options) + .then(function(result){ + console.log('received output from dialog', result); + }); +``` + +```html +<!-- FILE: Path/To/Some.html --> +<div id="bootstrap-theme" crm-dialog="someDialog"> + <form name="someForm"> + + <input type="text" ng-model="model.foo"/> + + <crm-dialog-button text="ts('Create')" icons="{primary: 'fa-plus'}" on-click="someDialog.close(model)" disabled="!someForm.$valid" /> + <crm-dialog-button text="ts('Cancel')" icons="{primary: 'fa-times'}" on-click="someDialog.cancel()" /> + </form> +</div> +``` \ No newline at end of file diff --git a/civicrm/ext/message_admin/ang/crmMsgadm.ang.php b/civicrm/ext/message_admin/ang/crmMsgadm.ang.php new file mode 100644 index 0000000000000000000000000000000000000000..22bcbe64fe47d99981b0a47126ede86c64a53b6e --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm.ang.php @@ -0,0 +1,42 @@ +<?php +// This file declares an Angular module which can be autoloaded +// in CiviCRM. See also: +// \https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules/n +return [ + 'js' => [ + 'ang/crmMsgadm.js', + 'ang/crmMsgadm/*.js', + 'ang/crmMsgadm/*/*.js', + ], + 'css' => [ + 'ang/crmMsgadm.css', + ], + 'partials' => [ + 'ang/crmMsgadm', + ], + 'bundles' => [ + 'bootstrap3', + ], + 'requires' => [ + 'crmRouteBinder', + 'crmUi', + 'crmUtil', + 'crmDialog', + 'crmMailing', + 'crmMonaco', + 'jsonFormatter', + 'ngRoute', + 'ngSanitize', + 'api4', + 'ui.bootstrap', + ], + 'settings' => [], + 'basePages' => [], + 'permissions' => [ + 'edit message templates', + 'edit user-driven message templates', + 'edit system workflow message templates', + 'access CiviMail', + ], + 'settingsFactory' => ['CRM_MessageAdmin_Settings', 'getAll'], +]; diff --git a/civicrm/ext/message_admin/ang/crmMsgadm.css b/civicrm/ext/message_admin/ang/crmMsgadm.css new file mode 100644 index 0000000000000000000000000000000000000000..db9eddc58cf3fba62c27dda81965f81a3ba15b5f --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm.css @@ -0,0 +1,3 @@ +.ui-dialog.crm-msgadm-dialog .ui-dialog-titlebar { + display:none; +} diff --git a/civicrm/ext/message_admin/ang/crmMsgadm.js b/civicrm/ext/message_admin/ang/crmMsgadm.js new file mode 100644 index 0000000000000000000000000000000000000000..19b5ec35e989dbe673f529057c79e3f733f97b2d --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm.js @@ -0,0 +1,4 @@ +(function(angular, $, _) { + // Declare a list of dependencies. + angular.module('crmMsgadm', CRM.angRequires('crmMsgadm')); +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/AddTranslation.html b/civicrm/ext/message_admin/ang/crmMsgadm/AddTranslation.html new file mode 100644 index 0000000000000000000000000000000000000000..2f63a66c5ce5ecd6c8894888d8a801deb7c8831a --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/AddTranslation.html @@ -0,0 +1,43 @@ +<div id="bootstrap-theme" crm-dialog="addTranslationDlg" ng-controller="MsgtpluiGenericCtrl"> + + <form name="addTranslationForm"> + <div class="form-group"> + <label>{{:: ts('Message Template')}}</label> + <input class="form-control" ng-model="model.msgtpl.msg_title" disabled> + </div> + + <label>{{:: ts('Locale')}} <span class="crm-marker">*</span></label> + + <div class="radio" ng-repeat="lang in model.langs | orderBy:['label']"> + <label ng-if="lang.is_encouraged" ng-class="{disabled: !lang.is_allowed}"> + <input type="radio" ng-model="model.selected" ng-value="lang.name" name="lang" ng-disabled="!lang.is_allowed"/> + {{:: lang.label}} + <span ng-if="!lang.is_allowed"><em>({{:: ts('existing')}})</em></span> + </label> + </div> + + <div class="radio" ng-if="!!model.langs"> + <label> + <input type="radio" ng-model="model.selected" value="other" name="lang" ng-disabled="!model.langs"/> + + <select + class="form-control" + style="min-width: 200px" + crm-ui-select="{dropdownAutoWidth : true, allowClear: true, placeholder: ts('Other')}" + name="selectedOther" + ng-model="model.selectedOther" + ng-change="model.selected='other'"> + <option value=""></option> + <option ng-repeat="item in model.langs | orderBy:'label'" value="{{item.name}}" ng-disabled="!item.is_allowed">{{item.label}}</option> + </select> + + </label> + </div> + + <span ng-model="placeholder" crm-ui-validate="!(model.selected === 'other' && model.selectedOther === '')"></span> + + <crm-dialog-button text="ts('Add')" icons="{primary: 'fa-plus'}" on-click="addTranslationDlg.close()" disabled="!addTranslationForm.$valid" /> + <crm-dialog-button text="ts('Cancel')" icons="{primary: 'fa-times'}" on-click="addTranslationDlg.cancel()" /> + </form> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Edit.html b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.html new file mode 100644 index 0000000000000000000000000000000000000000..5b3a2dfd27c9182572c8fc02b45dfdd147f84b34 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.html @@ -0,0 +1,97 @@ +<div id="bootstrap-theme"> + + <div crm-ui-debug="$ctrl"></div> + + <ng-form name="edit_form"> + + <div class="form-group"> + <label for="msgtpl_title"> + {{:: ts('Message Title') }} <span class="crm-marker">*</span> + </label> + <input ng-model="$ctrl.records.main.msg_title" class="form-control" id="msgtpl_title" required title="{{:: ts('Required') }}" ng-disabled="!!$ctrl.records.main.workflow_name" /> + <p class="help-block">{{:: ts('Descriptive title of the message - used for template selection') }}</p> + </div> + + <div class="form-group" ng-if="$ctrl.lang"> + <label for="msgtpl_language"> + {{:: ts('Locale') }} <span class="crm-marker">*</span> + </label> + <input ng-model="$ctrl.locales[$ctrl.lang]" class="form-control" id="msgtpl_language" required title="{{:: ts('Required') }}" ng-disabled="true" /> + <!-- TODO: Pretty name --> + </div> + + <a name="crm-msgadm-tabs"></a> + <div class="panel panel-default"> + <div class="panel-heading" role="navigation"> + <ul class="nav nav-pills"> + <li role="presentation" class="navitem" ng-class="{active: $ctrl.tab == 'main'}" ng-if="!$ctrl.lang"> + <a crm-icon="fa-file-text" class="nav-link" ng-click="$ctrl.tab = 'main'"> + {{:: ts('Current') }} + </a> + </li> + <li role="presentation" class="navitem" ng-class="{active: $ctrl.tab == 'txActive'}" ng-if="!!$ctrl.lang"> + <a crm-icon="fa-file-text" class="nav-link" ng-click="$ctrl.tab = 'txActive'"> + {{:: ts('Current') }} + </a> + </li> + <li role="presentation" class="navitem" ng-class="{active: $ctrl.tab == 'txDraft'}" ng-if="$ctrl.hasDraft()"> + <a crm-icon="fa-file-text-o" class="nav-link" ng-click="$ctrl.tab = 'txDraft'"> + {{:: ts('Draft') }} + </a> + </li> + <li role="presentation" class="navitem" ng-class="{active: $ctrl.tab == 'original'}"> + <a crm-icon="fa-file-text-o" class="nav-link" ng-click="$ctrl.tab = 'original'"> + {{:: ts('Original') }} + </a> + </li> + <li role="presentation" class="navitem pull-right" ng-show="$ctrl.tab.match('txActive|original') && !$ctrl.hasDraft() && $ctrl.allowDraft()"> + <a crm-icon="fa-plus" class="nav-link text-success" ng-click="$ctrl.createDraft($ctrl.records[$ctrl.tab])"> + {{:: ts('Create draft') }} + </a> + </li> + <li role="presentation" class="navitem pull-right" ng-show="$ctrl.tab.match('txActive|original') && $ctrl.hasDraft() && $ctrl.allowDraft()"> + <a crm-icon="fa-plus" class="nav-link text-warning" crm-confirm="{title: ts('Create draft?'), message: ts('There is already an existing draft. Click "Continue" to overwrite it with a new, clean draft.')}" on-yes="$ctrl.createDraft($ctrl.records[$ctrl.tab])"> + {{:: ts('Create draft') }} + </a> + </li> + <li role="presentation" class="navitem pull-right" ng-show="$ctrl.tab === 'txDraft'"> + <a crm-icon="fa-trash" class="nav-link text-danger" crm-confirm="{type: 'delete', obj: {}, title: ts('Abandon draft?'), message: ts('Are you sure you want to abandon this draft?')}" on-yes="$ctrl.deleteDraft()"> + {{:: ts('Abandon draft') }} + </a> + </li> + <li role="presentation" class="navitem pull-right" ng-show="$ctrl.tab === 'txDraft'"> + <a crm-icon="fa-rocket" class="nav-link text-success" crm-confirm="{title: ts('Activate draft?'), message: ts('Are you sure you want to activate this draft?')}" on-yes="$ctrl.activateDraft()"> + {{:: ts('Activate draft') }} + </a> + </li> + </ul> + </div> + <div class="panel-body" ng-hide="$ctrl.loading"> + <crm-msgadm-edit-content msgtpl="$ctrl.records[$ctrl.tab]" token-list="$ctrl.tokenList" disabled="$ctrl.tab==='original'"></crm-msgadm-edit-content> + </div> + </div> + + <div class="btn-group pull-right"> + <button type="button" class="btn btn-primary" ng-click="$ctrl.save()"> + <i class="crm-i fa-check"></i> + {{:: ts('Save') }} + </button> + <button type="button" class="btn btn-primary" ng-click="$ctrl.save().then($ctrl.cancel)"> + <i class="crm-i fa-check-circle"></i> + {{:: ts('Save and Done') }} + </button> + <button type="button" class="btn btn-primary" ng-click="$ctrl.cancel()"> + <i class="crm-i fa-times"></i> + {{:: ts('Cancel') }} + </button> + <button type="button" class="btn btn-danger" crm-confirm="{type: 'delete', obj: {}, title: ts('Delete translation?'), message: ts('Are you sure want to delete this translation (%1)? This will remove any current and draft versions.', {1: $ctrl.lang})}" on-yes="$ctrl.delete()" ng-if="!!$ctrl.lang"> + <i class="crm-i fa-trash"></i> + {{:: ts('Delete') }} + </button> + </div> + + <div class="clearfix"></div> + + </ng-form> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js new file mode 100644 index 0000000000000000000000000000000000000000..d6f955271d5727c50ed0e458ae1f869ad99fc8ce --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Edit.js @@ -0,0 +1,319 @@ +(function(angular, $, _) { + + var TRANSLATED = ['msg_subject', 'msg_html', 'msg_text']; + + /** + * Create an APIv4 request to replace a series of translations. + * + * @param id + * The ID of the translated entity. + * @param lang + * The language of the translation ('fr_CA', 'en_GB'). + * @param status + * The status of the translation ('active', 'draft'). + * @param values + * Key-value pairs. ({msg_title: 'Cheerio'}) + * @returns [] + * An API call which replaces the translations ([entity,action,params]). + */ + function reqReplaceTranslations(id, lang, status, values) { + if (!values._exists) { + return reqDeleteTranslations(id, lang, status); + } + var records = []; + angular.forEach(TRANSLATED, function(key) { + records.push({"entity_field":key, "string":values[key]}); + }); + return ['Translation', 'replace', { + records: records, + where: [ + ["entity_table", "=", "civicrm_msg_template"], + ["entity_id", "=", id], + ["language", "=", lang], + ["status_id:name", "=", status] + ] + }]; + } + + function reqDeleteTranslations(id, lang, status) { + return ['Translation', 'delete', { + where: [ + ["entity_table", "=", "civicrm_msg_template"], + ["entity_id", "=", id], + ["language", "=", lang], + ["status_id:name", "=", status] + ] + }]; + } + + /** + * Create an APIv4 request to read a series of translations. + * + * @param lang + * The language of the translation ('fr_CA', 'en_GB'). + * @param status + * The status of the translation ('active', 'draft'). + * @returns [] + * An API call which replaces the translations ([entity,action,params]). + */ + function reqChainTranslations(lang, status) { + return ["Translation", "get", { + "select": ['id', 'entity_field', 'string'], + "where": [ + ['entity_table', '=', 'civicrm_msg_template'], + ['entity_id', '=', '$id'], + ['language', '=', lang], + ['status_id:name', '=', status] + ] + }]; + } + + function respMergeTranslations(prefetch) { + angular.forEach(prefetch, function(results, queryName) { + var forceExists = (queryName === 'txActive'); + angular.forEach(results, function(result) { + if (result.translations) { + angular.forEach(result.translations, function(tx) { + result[tx.entity_field] = tx.string; + }); + result._exists = forceExists || (result.translations.length > 0); + } + }); + }); + return prefetch; + } + + function pickFirsts(prefetch) { + return _.reduce(prefetch, function(all, record, key){ + all[key] = record[0] || undefined; + return all; + }, {}); + } + + function copyTranslations(src, dest) { + dest._exists = false; // Starting assumption - prove otherwise in a moment. + TRANSLATED.forEach(function(fld) { + if (src[fld] !== undefined) { + dest._exists = true; + dest[fld] = src[fld]; + } + else { + delete dest[fld]; + } + }); + } + + angular.module('crmMsgadm').config(function($routeProvider) { + $routeProvider.when('/edit', { + controller: 'MsgtpluiEdit', + controllerAs: '$ctrl', + templateUrl: '~/crmMsgadm/Edit.html', + + // If you need to look up data when opening the page, list it out + // under "resolve". + resolve: { + prefetch: function(crmApi4, crmStatus, $location) { + var args = $location.search(); + var requests = {}; + + requests.main = ['MessageTemplate', 'get', { + where: [['id', '=', args.id]], + }]; + + requests.original = ['MessageTemplate', 'get', { + join: [["MessageTemplate AS other", "INNER", null, ["workflow_name", "=", "other.workflow_name"]]], + where: [["other.id", "=", args.id], ["is_reserved", "=", true]], + limit: 25 + }]; + + if (args.lang) { + requests.txActive = ['MessageTemplate', 'get', { + select: TRANSLATED, + where: [['id', '=', args.id]], + chain: {translations: reqChainTranslations(args.lang, 'active')} + }]; + + requests.txDraft = ['MessageTemplate', 'get', { + select: TRANSLATED, + where: [['id', '=', args.id]], + chain: {translations: reqChainTranslations(args.lang, 'draft')} + }]; + } + + return crmStatus({start: ts('Loading...'), success: ''}, crmApi4(requests).then(respMergeTranslations).then(pickFirsts)); + }, + tokenList: function () { + return CRM.crmMailing.mailTokens; + } + } + }); + } + ); + + angular.module('crmMsgadm').controller('MsgtpluiEdit', function($q, $scope, crmApi4, crmBlocker, crmStatus, crmUiAlert, crmUiHelp, $location, prefetch, tokenList, $rootScope, dialogService) { + var block = $scope.block = crmBlocker(); + var ts = $scope.ts = CRM.ts('crmMsgadm'); + var hs = $scope.hs = crmUiHelp({file: 'CRM/MessageAdmin/Edit'}); // See: templates/CRM/MessageAdmin/Edit.hlp + var $ctrl = this; + var args = $location.search(); + + $ctrl.locales = CRM.crmMsgadm.allLanguages; + $ctrl.records = prefetch; + $ctrl.tokenList = tokenList; + if (args.lang) { + $ctrl.lang = args.lang; + $ctrl.tab = (args.status === 'draft' && $ctrl.records.txDraft && $ctrl.records.txDraft._exists) ? 'txDraft' : 'txActive'; + } + else { + $ctrl.lang = null; + $ctrl.tab = 'main'; + } + + var revisionTypes = [ + {name: 'original', label: ts('Original')}, + {name: 'main', label: ts('Standard')}, + {name: 'txActive', label: ts('%1 - Current translation', {1: $ctrl.locales[$ctrl.lang] || $ctrl.lang})}, + {name: 'txDraft', label: ts('%1 - Draft translation', {1: $ctrl.locales[$ctrl.lang] || $ctrl.lang})} + ]; + + function doSave() { + var requests = {}; + if ($ctrl.lang) { + requests.txActive = reqReplaceTranslations($ctrl.records.main.id, $ctrl.lang, 'active', $ctrl.records.txActive); + requests.txDraft = reqReplaceTranslations($ctrl.records.main.id, $ctrl.lang, 'draft', $ctrl.records.txDraft); + } + else { + requests.main = ['MessageTemplate', 'update', { + where: [['id', '=', $ctrl.records.main.id]], + values: $ctrl.records.main + }]; + } + return crmApi4(requests); + } + + $ctrl.switchTab = function switchTab(tgt) { + $ctrl.tab = tgt; + // Experimenting with action buttons in the tab-bar. This makes the scroll unnecessary. + // $('html, body').animate({scrollTop: $("a[name=crm-msgadm-tabs]").offset().top - $('#civicrm-menu').height()}, 200); + }; + $ctrl.allowDraft = function allowDraft() { + return !!$ctrl.lang; + }; + $ctrl.hasDraft = function hasDraft() { + return $ctrl.allowDraft() && $ctrl.records.txDraft && $ctrl.records.txDraft._exists; + }; + $ctrl.hasRevType = function hasRevType(name) { + switch (name) { + case 'txDraft': return $ctrl.hasDraft(); + case 'txActive': return !!$ctrl.lang; + case 'original': return !!$ctrl.records.original; + case 'main': return !$ctrl.lang; // !!$ctrl.records.main; + } + }; + $ctrl.createDraft = function createDraft(src) { + copyTranslations(src, $ctrl.records.txDraft); + $ctrl.switchTab('txDraft'); + crmStatus({start: ts('Saving...'), success: ts('Created draft.')}, doSave()); + }; + $ctrl.deleteDraft = function deleteDraft() { + copyTranslations({}, $ctrl.records.txDraft); + $ctrl.switchTab('txActive'); + crmStatus({start: ts('Saving...'), success: ts('Abandoned draft.')}, doSave()); + }; + $ctrl.activateDraft = function activateDraft() { + copyTranslations($ctrl.records.txDraft, $ctrl.records.txActive); + copyTranslations({}, $ctrl.records.txDraft); + $ctrl.switchTab('txActive'); + crmStatus({start: ts('Saving...'), success: ts('Activated draft.')}, doSave()); + }; + $ctrl.save = function save() { + return block(crmStatus({start: ts('Saving...'), success: ts('Saved')}, doSave())); + }; + $ctrl.cancel = function() { + window.location = '#/workflow'; + }; + $ctrl.delete = function() { + var requests = {}; + if ($ctrl.lang) { + requests.txActive = reqDeleteTranslations($ctrl.records.main.id, $ctrl.lang, 'active'); + requests.txDraft = reqDeleteTranslations($ctrl.records.main.id, $ctrl.lang, 'draft'); + } + else { + requests.main = ['MessageTemplate', 'delete', {where: [['id', '=', $ctrl.records.main.id]]}]; + } + return block(crmStatus({start: ts('Deleting...'), success: ts('Deleted')}, crmApi4(requests))) + .then($ctrl.cancel); + }; + + // Ex: $rootScope.$emit('previewMsgTpl', {revisionName: 'txDraft', formatName: 'msg_text'}) + function onPreview(event, args) { + var defaults = { + formatName: 'msg_html', + formats: [ + {id: 0, name: 'msg_html', label: ts('HTML')}, + {id: 1, name: 'msg_text', label: ts('Text')} + ], + revisionName: $ctrl.tab, + revisions: _.reduce(revisionTypes, function(acc, revType){ + if ($ctrl.hasRevType(revType.name)) { + acc.push(angular.extend({id: acc.length, rec: $ctrl.records[revType.name]}, revType)); + } + return acc; + }, []), + filterData: function(data) { + data.modelProps.locale = $ctrl.lang; + return data; + }, + title: $ctrl.lang ? ts('Preview - %1', {1: $ctrl.locales[$ctrl.lang] || $ctrl.lang}) : ts('Preview') + }; + + crmApi4({ + examples: ['ExampleData', 'get', { + // FIXME: workflow name + where: [["tags", "CONTAINS", "preview"], ["name", "LIKE", "workflow/" + $ctrl.records.main.workflow_name + "/%"]], + select: ['name', 'title', 'data'] + }], + adhoc: ['WorkflowMessage', 'getTemplateFields', { + workflow: $ctrl.records.main.workflow_name, + format: 'example' + }] + }).then(function(resp) { + console.log('resp',resp); + if ((!resp.examples || resp.examples.length === 0) && resp.adhoc) { + // In the future, if Preview dialog allows editing adhoc examples, then we can show the dialog. But for now, it won't work without explicit examples. + crmUiAlert({ + title: ts('Preview unavailable'), + text: ts('Generating a preview for this message requires example data. Please talk to a developer about adding example data for "%1".', {1: $ctrl.records.main.workflow_name}), + type: 'error' + }); + return; + } + defaults.exampleName = resp.examples.length > 0 ? (resp.examples)[0].name : null; + var i = 0; + angular.forEach(resp.examples, function(ex) { + ex.id = i++; + }); + defaults.examples = resp.examples; + + var model = angular.extend({}, defaults, args); + var options = CRM.utils.adjustDialogDefaults({ + dialogClass: 'crm-msgadm-dialog', + autoOpen: false, + height: '90%', + width: '90%' + }); + return dialogService.open('previewMsgDlg', '~/crmMsgadm/Preview.html', model, options) + // Nothing to do but hide warnings. The field was edited live. + .then(function(){}, function(){}); + }, function(failure) { + // handle failure + }); + + } + var unreg = $rootScope.$on('previewMsgTpl', onPreview); + $scope.$on('$destroy', function (){ + unreg(); + }); + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.html b/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.html new file mode 100644 index 0000000000000000000000000000000000000000..ae08fe0cc66e8d1079be6cfe53d2d35c2de10b64 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.html @@ -0,0 +1,96 @@ +<div crm-ui-debug="options"></div> + +<ng-form name="contentForm" crm-ui-id-scope ng-init="accordions={msg_subject: true, msg_html: true, msg_text: false}"> + + <div class="panel panel-default"> + <div class="panel-heading"> + <a href ng-click="accordions.msg_subject = !accordions.msg_subject"> + <i class="crm-i fa-caret-{{ accordions.msg_subject ? 'down' : 'right' }}"></i> + {{:: ts('Subject') }} + </a> + <input class="form-control pull-right crm-action-menu fa-code" + tabindex="-1" + style="z-index:1" + crm-ui-select="{placeholder: ts('Token'), data: $ctrl.tokenList, width: '12em', dropdownAutoWidth: true}" + on-crm-ui-select="$broadcast('insert:msg_subject', selection)" + ng-show="accordions.msg_subject && !$ctrl.isDisabled()" + /> + <div class="clearfix"></div> + </div> + <div class="panel-body" uib-collapse="!accordions.msg_subject"> + <div ng-model="$ctrl.msgtpl.msg_subject" + crm-monaco="$ctrl.monacoOptions({language: 'smarty', crmHeightPct: 0.15})" + crm-monaco-insert-rx="insert:msg_subject" + ng-disabled="$ctrl.isDisabled()" + ></div> + <p class="help-block">{{::ts('The email subject is a single line. However, template codes may use multiple lines.')}}</p> + </div> + </div> + + <div class="panel panel-default"> + <div class="panel-heading"> + <a href ng-click="accordions.msg_html = !accordions.msg_html"> + <i class="crm-i fa-caret-{{ accordions.msg_html ? 'down' : 'right' }}"></i> + {{:: ts('HTML Content') }} + </a> + <div class="btn-group btn-group-xs pull-right" role="toolbar" aria-label="{{::ts('HTML Content: Toolbar')}}" ng-show="accordions.msg_html"> + <button type="button" class="btn btn-secondary" title="{{::ts('Open large editor')}}" ng-click="$ctrl.openFull(ts('HTML Content'), 'msg_html', {language: 'html'})"> + <i class="crm-i fa-expand"></i> + </button> + <button type="button" class="btn btn-secondary" title="{{::ts('Open preview')}}" ng-click="$ctrl.openPreview({formatName: 'msg_html'})"> + <i class="crm-i fa-eye"></i> + </button> + </div> + <input class="form-control pull-right crm-action-menu fa-code" + tabindex="-1" + style="z-index:1" + crm-ui-select="{placeholder: ts('Token'), data: $ctrl.tokenList, width: '12em', dropdownAutoWidth: true}" + on-crm-ui-select="$broadcast('insert:msg_html', selection)" + ng-show="accordions.msg_html && !$ctrl.isDisabled()" + /> + <div class="clearfix"></div> + </div> + <div class="panel-body" uib-collapse="!accordions.msg_html"> + <div ng-model="$ctrl.msgtpl.msg_html" + crm-monaco="$ctrl.monacoOptions({language: 'html', crmHeightPct: 0.5})" + crm-monaco-insert-rx="insert:msg_html" + ng-disabled="$ctrl.isDisabled()" + ></div> + </div> + </div> + + <div class="panel panel-default"> + <div class="panel-heading"> + <a href ng-click="accordions.msg_text = !accordions.msg_text"> + <i class="crm-i fa-caret-{{ accordions.msg_text ? 'down' : 'right' }}"></i> + {{:: ts('Text Content') }} + </a> + <div class="btn-group btn-group-xs pull-right" role="toolbar" aria-label="{{::ts('Text Content: Toolbar')}}" ng-show="accordions.msg_text"> + <button type="button" class="btn btn-secondary" title="{{ ::ts('Open large editor') }}" ng-click="$ctrl.openFull(ts('Text Content'), 'msg_text', {language: 'smarty'})"> + <i class="crm-i fa-expand"></i> + </button> + <button type="button" class="btn btn-secondary" title="{{ ::ts('Open preview') }}" ng-click="$ctrl.openPreview({formatName: 'msg_text'})"> + <i class="crm-i fa-eye"></i> + </button> + </div> + + <input class="form-control pull-right crm-action-menu fa-code" + tabindex="-1" + style="z-index:1" + crm-ui-select="{placeholder: ts('Token'), data: $ctrl.tokenList, width: '12em', dropdownAutoWidth: true}" + on-crm-ui-select="$broadcast('insert:msg_text', selection)" + ng-show="accordions.msg_text && !$ctrl.isDisabled()" + /> + <div class="clearfix"></div> + </div> + <div class="panel-body" uib-collapse="!accordions.msg_text"> + <div ng-model="$ctrl.msgtpl.msg_text" + crm-monaco="$ctrl.monacoOptions({language: 'smarty', crmHeightPct: 0.5})" + crm-monaco-insert-rx="insert:msg_text" + ng-disabled="$ctrl.isDisabled()" + ></div> + </div> + </div> + + +</ng-form> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.js b/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.js new file mode 100644 index 0000000000000000000000000000000000000000..3c429a321e5d5d85dc22a23bd0c525a96bc7620a --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/EditContent.js @@ -0,0 +1,56 @@ +(function (angular, $, _) { + angular.module('crmMsgadm').component('crmMsgadmEditContent', { + bindings: { + onPreview: '&', + tokenList: '<', + disabled: '<', + msgtpl: '=' + }, + templateUrl: '~/crmMsgadm/EditContent.html', + controller: function ($scope, $element, crmStatus, crmUiAlert, dialogService, $rootScope) { + var ts = $scope.ts = CRM.ts('crmMsgadm'); + var $ctrl = this; + + $ctrl.isDisabled = function() { + return $ctrl.disabled; + }; + + $ctrl.monacoOptions = function (opts) { + return angular.extend({}, { + wordWrap: 'wordWrapColumn', + wordWrapColumn: 100, + wordWrapMinified: false, + wrappingIndent: 'indent' + }, opts); + }; + + $ctrl.openFull = function(title, fld, monacoOptions) { + var model = { + title: title, + monacoOptions: $ctrl.monacoOptions(angular.extend({crmHeightPct: 0.80}, monacoOptions)), + openPreview: function(options) { + return $ctrl.openPreview(options); + }, + record: $ctrl.msgtpl, + field: fld, + tokenList: $ctrl.tokenList + }; + var options = CRM.utils.adjustDialogDefaults({ + // show: {effect: 'slideDown'}, + dialogClass: 'crm-msgadm-dialog', + autoOpen: false, + height: '90%', + width: '90%' + }); + return dialogService.open('expandedEditDlg', '~/crmMsgadm/ExpandedEdit.html', model, options) + // Nothing to do but hide warnings. The field was edited live. + .then(function(){}, function(){}); + }; + + $ctrl.openPreview = function(options) { + $rootScope.$emit('previewMsgTpl', options); + }; + + } + }); +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/ExpandedEdit.html b/civicrm/ext/message_admin/ang/crmMsgadm/ExpandedEdit.html new file mode 100644 index 0000000000000000000000000000000000000000..2202a305f58878982e18d10cbe1ea8d5aa2efdcb --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/ExpandedEdit.html @@ -0,0 +1,42 @@ +<div id="bootstrap-theme" crm-dialog="expandedEditDlg" ng-controller="MsgtpluiGenericCtrl"> + + <form name="expandedEditForm"> + + <nav class="navbar navbar-default"> + <div class="container-fluid"> + <div class="navbar-header"> + <div class="navbar-brand"> + {{::model.title}} + </div> + </div> + <div class="navbar-form navbar-right"> + <div class="form-group"> + <button type="button" class="btn btn-default" ng-click="model.openPreview({formatName: model.field})"> + <i class="crm-i fa-eye"></i> + {{ ::ts('Preview') }} + </button> + + <input class="form-control crm-action-menu fa-code" + tabindex="-1" + style="z-index:1" + crm-ui-select="{placeholder: ts('Token'), data: model.tokenList, width: '12em', dropdownAutoWidth: true}" + on-crm-ui-select="$broadcast('insert:expanded', selection)" + /> + + <button type="button" class="btn btn-default" ng-click="expandedEditDlg.close()"> + <i class="crm-i fa-times"></i> + {{ ::ts('Close') }} + </button> + + </div> + </div> + </div> + </nav> + + <div ng-model="model.record[model.field]" + crm-monaco="model.monacoOptions" + crm-monaco-insert-rx="insert:expanded" + ></div> + </form> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/GenericCtrl.js b/civicrm/ext/message_admin/ang/crmMsgadm/GenericCtrl.js new file mode 100644 index 0000000000000000000000000000000000000000..f68e763cd3afac7773c5d73b7f652c3888bec5bf --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/GenericCtrl.js @@ -0,0 +1,8 @@ +(function(angular, $, _) { + + angular.module('crmMsgadm').controller('MsgtpluiGenericCtrl', function($scope, crmUiHelp) { + var ts = $scope.ts = CRM.ts('crmMsgadm'); + var hs = $scope.hs = crmUiHelp({file: 'CRM/MessageAdmin/crmMsgadm'}); // See: templates/CRM/MessageAdmin/crmMsgadm.hlp + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/InspectExample.html b/civicrm/ext/message_admin/ang/crmMsgadm/InspectExample.html new file mode 100644 index 0000000000000000000000000000000000000000..c7a8a3fe56a2d90b4debf6a47e838ff4350349b8 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/InspectExample.html @@ -0,0 +1,24 @@ +<div id="bootstrap-theme" crm-dialog="inspectExampleDlg"> + + <nav class="navbar navbar-default"> + <div class="container-fluid"> + <div class="navbar-header"> + <div class="navbar-brand"> + {{::model.title}} + </div> + </div> + <div class="navbar-form navbar-right"> + <div class="form-group"> + <button crm-icon="fa-refresh" type="button" class="btn btn-default" ng-click="model.refresh()"></button> + <button crm-icon="fa-times" type="button" class="btn btn-default" ng-click="inspectExampleDlg.close()"> + {{::ts('Close')}} + </button> + </div> + </div> + </div> + </nav> + + + <json-formatter json="model.data" open="1"></json-formatter> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/ListCtrl.js b/civicrm/ext/message_admin/ang/crmMsgadm/ListCtrl.js new file mode 100644 index 0000000000000000000000000000000000000000..f2c77dfd422e0b31e0a1fbf26e09e7046769d835 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/ListCtrl.js @@ -0,0 +1,130 @@ +(function(angular, $, _) { + + /** + * Convert keys with literal dots to Javascript subtrees. + * + * @param rec + * Ex: {'foo.bar.whiz:bang': 123} + * @returns {{}} + * Ex: {foo_bar_whiz_bang: 123} + */ + function simpleKeys(rec) { + var newRec = {}; + angular.forEach(rec, function(value, key) { + newRec[key.replaceAll('.','_').replaceAll(':', '_')] = value; + }); + return newRec; + } + + angular.module('crmMsgadm').controller('MsgtpluiListCtrl', function($scope, $route, crmApi4, crmStatus, crmUiAlert, crmUiHelp, prefetch, $location, dialogService) { + var ts = $scope.ts = CRM.ts('crmMsgadm'); + var hs = $scope.hs = crmUiHelp({file: 'CRM/MessageAdmin/User'}); // See: templates/CRM/MessageAdmin/User.hlp + $scope.crmUrl = CRM.url; + $scope.crmUiAlert = crmUiAlert; + $scope.location = $location; + $scope.checkPerm = CRM.checkPerm; + $scope.help = CRM.help; + + $scope.$bindToRoute({ + param: 'f', + expr: 'filters', + default: {text: ''} + }); + + var $ctrl = this; + $ctrl.records = _.map( + [].concat(prefetch.records, _.map(prefetch.translations || [], simpleKeys)), + function(r) { + r._is_translation = (r.tx_language !== undefined); + return r; + } + ); + + function findTranslations(record) { + return _.reduce($ctrl.records, function(existing, rec){ + if (rec._is_translation && record.id === rec.id) { + existing[rec.tx_language] = record; + } + return existing; + }, {}); + } + + function findActiveLangs() { + return _.reduce($ctrl.records, function(langs, rec){ + if (rec._is_translation) { + langs[rec.tx_language] = true; + } + return langs; + }, {}); + } + + /** + * + * @param record + * @param variant - One of null 'legacy', 'current', 'draft'. (If null, then 'current'.) + * @returns {string} + */ + $ctrl.editUrl = function(record, variant) { + if (variant === 'legacy') { + return CRM.url('civicrm/admin/messageTemplates/add', {action: 'update', id: record.id, reset: 1}); + } + var url = '#/edit?id=' + encodeURIComponent(record.id); + if (record.tx_language) { + url = url + '&lang=' + encodeURIComponent(record.tx_language); + } + if (variant === 'draft') { + url = url + '&status=draft'; + } + return url; + }; + + $ctrl.addTranslation = function(record) { + var existing = findTranslations(record), activeLangs = findActiveLangs(); + var langs = []; + angular.forEach(CRM.crmMsgadm.allLanguages, function (label, value) { + langs.push({ + name: value, + label: label, + is_allowed: !existing[value], + is_encouraged: !!(activeLangs[value] || CRM.crmMsgadm.uiLanguages[value]) + }); + }); + var model = { + msgtpl: record, + selected: (_.head(_.filter(langs, {is_allowed: true, is_encouraged: true}))||{}).name, + selectedOther: '', + langs: langs + }; + var options = CRM.utils.adjustDialogDefaults({ + autoOpen: false, + height: '50%', + width: '50%', + title: ts('Add Translation') + }); + return dialogService.open('addTranslationDlg', '~/crmMsgadm/AddTranslation.html', model, options) + .then(function(){ + var selection = (model.selected === 'other') ? model.selectedOther : model.selected; + window.location = $ctrl.editUrl({id: record.id, tx_language: selection}); + }); + }; + + $ctrl.delete = function (record) { + var q = crmApi4('MessageTemplate', 'delete', {where: [['id', '=', record.id]]}).then(function(){ + $route.reload(); + }); + return crmStatus({start: ts('Deleting...'), success: ts('Deleted')}, q); + }; + + $ctrl.toggle = function (record) { + var wasActive = !!record.is_active; + var q = crmApi4('MessageTemplate', 'update', {where: [['id', '=', record.id]], values: {is_active: !wasActive}}) + .then(function(resp){ + record.is_active = !wasActive; + }); + return wasActive ? crmStatus({start: ts('Disabling...'), success: ts('Disabled')}, q) + : crmStatus({start: ts('Enabling...'), success: ts('Enabled')}, q); + }; + + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/ListNav.html b/civicrm/ext/message_admin/ang/crmMsgadm/ListNav.html new file mode 100644 index 0000000000000000000000000000000000000000..b7f50332af5b2a7854b3f7d7cfab44d65bc42e35 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/ListNav.html @@ -0,0 +1,28 @@ +<nav class="bg-info"> + <ul class="nav nav-tabs"> + <li role="presentation" + ng-class="{active: location.path() === '/user'}" + ng-if="checkPerm('edit message templates') || checkPerm('edit user-driven message templates')"> + <a ng-href="#/user">{{:: ts('User-Driven Messages') }}</a> + </li> + <li role="presentation" + ng-class="{active: location.path() === '/workflow'}" + ng-if="checkPerm('edit message templates') || checkPerm('edit system workflow message templates')"> + <a ng-href="#/workflow">{{:: ts('System Workflow Messages' )}}</a> + </li> + </ul> +</nav> + +<div class="help"> + + <div ng-if="location.path() === '/user'"> + <span ng-bind-html="ts('Message templates allow you to easily create similar emails or letters on a recurring basis. Messages used for membership renewal reminders, as well as event and activity related reminders should be created via <a href=\'%1\'>Schedule Reminders</a>.', {1: crmUrl('civicrm/admin/scheduleReminders', 'reset=1')})"></span> + <span ng-if="checkPerm('access CiviMail')" ng-bind-html="ts('You can also use message templates for CiviMail (bulk email) content. However, subscribe, unsubscribe and opt-out messages are configured at <a href=\'%1\'>Administer > CiviMail > Headers, Footers and Automated Messages</a>.', {1: crmUrl('civicrm/admin/component', 'reset=1')})"></span> + <a crm-ui-help="hs({title:ts('User-Driven Messages'), id:'id-intro', file:'CRM/Admin/Page/MessageTemplates'})"></a> + </div> + <div ng-if="location.path() === '/workflow'"> + {{ts('System workflow message templates are used to generate the emails sent to constituents and administrators for contribution receipts, event confirmations and many other workflows. You can customize the style and wording of these messages here.')}} + <a crm-ui-help="hs({title:ts('System Workflow Messages'), id:'id-system-workflow', file:'CRM/Admin/Page/MessageTemplates'})"></a> + </div> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html new file mode 100644 index 0000000000000000000000000000000000000000..1c15b012420e8ca51c9e12c9ef9e7068035b6d90 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.html @@ -0,0 +1,99 @@ +<div id="bootstrap-theme" crm-dialog="previewMsgDlg" ng-controller="MsgtpluiPreviewCtrl as $ctrl"> + + <div crm-ui-debug="$ctrl"></div> + + <form name="previewMsgForm"> + + <nav class="navbar navbar-default"> + <div class="container-fluid"> + <div class="navbar-header"> + <div class="navbar-brand"> + {{::model.title}} + </div> + </div> + <div class="navbar-form navbar-right"> + <div class="form-group"> + <button crm-icon="fa-times" type="button" class="btn btn-default" ng-click="previewMsgDlg.close()"> + {{::ts('Close')}} + </button> + </div> + </div> + </div> + </nav> + + <div class="well-sm"> + <div class="form-horizontal"> + <div class="form-group"> + <label class="control-label col-sm-2">{{::ts('Revision')}}</label> + <div class="input-group col-sm-9"> + <select class="form-control" ng-options="item.id as item.label for item in model.revisions" ng-model="$ctrl.revisionId"></select> + <div class="input-group-btn"> + <button class="btn btn-default" ng-disabled="model.revisions.length <= 1" ng-click="$ctrl.cycle('revisionId', 'revisions', -1)" title="{{::ts('Previous revision')}}">«</button> + <button class="btn btn-default" ng-disabled="model.revisions.length <= 1" ng-click="$ctrl.cycle('revisionId', 'revisions', +1)" title="{{::ts('Next revision')}}">»</button> + </div> + </div> + </div> + + <div class="form-group"> + <label class="control-label col-sm-2">{{::ts('Example')}}</label> + <div class="input-group col-sm-9"> + <select class="form-control" ng-options="item.id as item.title for item in model.examples" ng-model="$ctrl.exampleId"></select> + <div class="input-group-btn"> + <!-- <button class="btn btn-default" ng-click="$ctrl.toggleAdhoc()" crm-icon="fa-pencil"></button> --> + <button class="btn btn-default" ng-disabled="model.examples.length <= 1" ng-click="$ctrl.inspectExample()" title="{{::ts('Inspect example data')}}"><i class="crm-i fa-file-code-o"></i></button> + <button class="btn btn-default" ng-disabled="model.examples.length <= 1" ng-click="$ctrl.cycle('exampleId', 'examples', -1)" title="{{::ts('Previous example')}}">«</button> + <button class="btn btn-default" ng-disabled="model.examples.length <= 1" ng-click="$ctrl.cycle('exampleId', 'examples', +1)" title="{{::ts('Next example')}}">»</button> + </div> + </div> + </div> + + <!-- + <div class="form-group" ng-if="$ctrl.isAdhocExample"> + <label class="control-label col-sm-2"></label> + <div class="input-group col-sm-9"> + <p><em>{{ts('Changes to this example are temporary.')}}</em></p> + <div ng-model="$ctrl.adhocExampleJson" + crm-monaco="$ctrl.monacoOptions({language: 'javascript', crmHeightPct: 0.15})" + ></div> + </div> + </div> + --> + + <div class="form-group"> + <label class="control-label col-sm-2">{{::ts('Format')}}</label> + <div class="input-group col-sm-9"> + <select class="form-control" ng-options="item.id as item.label for item in model.formats" ng-model="$ctrl.formatId"></select> + <div class="input-group-btn"> + <button class="btn btn-default" ng-disabled="model.formats.length <= 1" ng-click="$ctrl.cycle('formatId', 'formats', -1)" title="{{::ts('Previous format')}}">«</button> + <button class="btn btn-default" ng-disabled="model.formats.length <= 1" ng-click="$ctrl.cycle('formatId', 'formats', +1)" title="{{::ts('Next format')}}">»</button> + </div> + </div> + </div> + + <hr/> + + <div class="form-group text-center" ng-if="!!$ctrl.preview.loading"> + {{::ts('Loading...')}} + </div> + + <div class="form-group" ng-if="!$ctrl.preview.loading"> + <label class="control-label col-sm-2">{{::ts('Subject')}}</label> + <p class="col-sm-9">{{$ctrl.preview.subject}}</p> + </div> + + <div class="form-group" ng-if="!$ctrl.preview.loading && model.formats[$ctrl.formatId].name === 'msg_text'"> + <pre class="col-sm-12">{{$ctrl.preview.text}}</pre> + </div> + + <div class="form-group" ng-if="!$ctrl.preview.loading && model.formats[$ctrl.formatId].name === 'msg_html'"> + <div class="jumbotron well col-sm-12"> + <iframe crm-ui-iframe="$ctrl.preview.html"></iframe> + </div> + </div> + + </div> + + </div> + </form> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Preview.js b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.js new file mode 100644 index 0000000000000000000000000000000000000000..82b994c27d1e1fbe63eeec576c85cd64b52686da --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Preview.js @@ -0,0 +1,108 @@ +(function(angular, $, _) { + + angular.module('crmMsgadm').controller('MsgtpluiPreviewCtrl', function($scope, crmUiHelp, crmStatus, crmApi4, crmUiAlert, $timeout, $q, dialogService) { + var ts = $scope.ts = CRM.ts('crmMsgadm'); + var hs = $scope.hs = crmUiHelp({file: 'CRM/MessageAdmin/crmMsgadm'}); // See: templates/CRM/MessageAdmin/crmMsgadm.hlp + + var $ctrl = this, model = $scope.model; + + $ctrl.exampleId = parseInt(_.findKey(model.examples, {name: model.exampleName})); + $ctrl.revisionId = parseInt(_.findKey(model.revisions, {name: model.revisionName})); + $ctrl.formatId = parseInt(_.findKey(model.formats, {name: model.formatName})); + $ctrl.cycle = function(idFld, listFld, delta){ + $ctrl[idFld] = ($ctrl[idFld] + delta + model[listFld].length) % model[listFld].length; + }; + + $ctrl.adhocExample = {}; + $ctrl.isAdhocExample = false; + $ctrl.toggleAdhoc = function(value){ + $ctrl.isAdhocExample = !$ctrl.isAdhocExample; + $ctrl.adhocExampleJson = angular.toJson(model.examples[$ctrl.exampleId], 2); + }; + + $ctrl.inspectExample = function() { + var dlgModel = { + title: '', + data: {} + }; + var dlgOptions = CRM.utils.adjustDialogDefaults({ + dialogClass: 'crm-msgadm-dialog', + autoOpen: false, + height: '80%', + width: '80%' + }); + + dlgModel.refresh = function(){ + return crmApi4('ExampleData', 'get', { + where: [["name", "=", model.examples[$ctrl.exampleId].name]], + select: ['name', 'file', 'title', 'data'] + }).then(function(response){ + dlgModel.title = ts('Example: %1', {1: response[0].title || response[0].name}); + dlgModel.data = response[0]; + if (model.filterData && dlgModel.data.data) { + dlgModel.data['data(filtered)'] = model.filterData(angular.copy(dlgModel.data.data)); + } + }); + }; + + dlgModel.refresh().then(function(){ + return dialogService.open('inspectExampleDlg', '~/crmMsgadm/InspectExample.html', dlgModel, dlgOptions) + // Nothing to do but hide warnings. + .then(forceUpdate, forceUpdate); + }); + }; + + function requestAdhocExample() { + try { + return $q.resolve(JSON.parse($ctrl.adhocExampleJson.data)); + } + catch (err) { + return $q.reject(ts('Malformed JSON example')); + } + } + + function requestStoredExample() { + return crmApi4('ExampleData', 'get', { + where: [["name", "=", model.examples[$ctrl.exampleId].name]], + select: ['data'] + }).then(function(response) { + return response[0].data; + }); + } + + var lastId = null; + var update = function update() { + var id = $ctrl.revisionId + ':' + $ctrl.exampleId; + if (lastId === id) return; + lastId = id; + + // $ctrl.preview = model.revisions[$ctrl.revisionId].rec; + $ctrl.preview = {loading: true}; + var rendering = $ctrl.isAdhocExample ? requestAdhocExample() : requestStoredExample(); + rendering.then(function(exampleData) { + var filteredData = model.filterData ? model.filterData(exampleData) : exampleData; + return crmApi4('WorkflowMessage', 'render', { + workflow: filteredData.workflow, + values: filteredData.modelProps, + messageTemplate: model.revisions[$ctrl.revisionId].rec + }); + }).then(function(response) { + $ctrl.preview = response[0]; + }, function(failure) { + $ctrl.preview = {}; + crmUiAlert({title: ts('Render failed'), text: failure.error_message, type: 'error'}); + }); + return crmStatus({start: ts('Rendering...'), success: ''}, rendering); + }; + function forceUpdate() { + lastId = null; + return update(); + } + + $scope.$watch('$ctrl.revisionId', update); + $scope.$watch('$ctrl.formatId', update); + $scope.$watch('$ctrl.exampleId', update); + update(); + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/User.html b/civicrm/ext/message_admin/ang/crmMsgadm/User.html new file mode 100644 index 0000000000000000000000000000000000000000..91c4a40a64cfdbf746c96ca03726769f8df65058 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/User.html @@ -0,0 +1,40 @@ +<div id="bootstrap-theme"> + <div crm-ui-debug="$ctrl"></div> + + <div ng-include="'~/crmMsgadm/ListNav.html'"></div> + + <div class="form-inline"> + <label for="msgtpl-filter-text">{{:: ts('Filter') }}</label> + <input class="form-control" type="search" id="msgtpl-filter-text" ng-model="filters.text"> + + <a class="btn btn-primary pull-right" ng-href="{{crmUrl('civicrm/admin/messageTemplates/add', 'action=add&reset=1')}}"> + <i class="crm-i fa-plus"></i> + {{:: ts('Add Message Template') }} + </a> + </div> + + <table class="table table-striped"> + <thead> + <tr> + <th>{{:: ts('Title') }}</th> + <th>{{:: ts('Subject') }}</th> + <th>{{:: ts('Enabled?') }}</th> + <th></th> + </tr> + </thead> + <tbody> + <tr ng-repeat="record in $ctrl.records | filter:filters.text"> + <td>{{record.msg_title}}</td> + <td>{{record.msg_subject}}</td> + <td>{{record.is_active ? ts('Yes') : ts('No')}}</td> + <td class="text-right"> + <a class="btn btn-xs btn-default" ng-href="{{$ctrl.editUrl(record, 'legacy')}}">{{:: ts('Edit') }}</a> + <a class="btn btn-xs btn-default" ng-click="$ctrl.toggle(record)" ng-if="!!record.is_active">{{:: ts('Disable') }}</a> + <a class="btn btn-xs btn-default" ng-click="$ctrl.toggle(record)" ng-if="!record.is_active">{{:: ts('Enable') }}</a> + <a class="btn btn-xs btn-danger" crm-confirm="{type: 'delete', obj: record}" on-yes="$ctrl.delete(record)">{{:: ts('Delete') }}</a> + </td> + </tr> + </tbody> + </table> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/User.js b/civicrm/ext/message_admin/ang/crmMsgadm/User.js new file mode 100644 index 0000000000000000000000000000000000000000..be8bef4ea8aec003c72ff85f26563f7ed237615c --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/User.js @@ -0,0 +1,25 @@ +(function(angular, $, _) { + + // Display a list of user-driven message-templates. + angular.module('crmMsgadm').config(function($routeProvider) { + $routeProvider.when('/user', { + reloadOnSearch: false, + controller: 'MsgtpluiListCtrl', + controllerAs: '$ctrl', + templateUrl: '~/crmMsgadm/User.html', + resolve: { + prefetch: function(crmApi4, crmStatus) { + var q = crmApi4({ + records: ['MessageTemplate', 'get', { + select: ["id", "msg_title", "msg_subject", "is_active"], + where: [["workflow_name", "IS EMPTY"], ["is_reserved", "=", "0"]] + }] + }); + return crmStatus({start: ts('Loading...'), success: ''}, q); + } + } + }); + } + ); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.html b/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.html new file mode 100644 index 0000000000000000000000000000000000000000..9260e14f43d9afcb0053aba4379ba69496ddab70 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.html @@ -0,0 +1,28 @@ +<div id="bootstrap-theme"> + <div crm-ui-debug="$ctrl"></div> + + <div ng-include="'~/crmMsgadm/ListNav.html'"></div> + + <div class="form-inline"> + <label for="msgtpl-filter-text">{{:: ts('Filter') }}</label> + <input class="form-control" type="search" id="msgtpl-filter-text" ng-model="filters.text"> + </div> + + <table class="table table-striped"> + <thead> + <tr> + <th>{{:: ts('Title') }}</th> + <th></th> + </tr> + </thead> + <tbody> + <tr ng-repeat="record in $ctrl.records | filter:filters.text | orderBy:['msg_title','_is_translation','tx_language_label']"> + <td>{{record.msg_title}}</td> + <td class="text-right"> + <a class="btn btn-xs btn-default" ng-href="{{$ctrl.editUrl(record)}}">{{:: ts('Edit') }}</a> + </td> + </tr> + </tbody> + </table> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.js b/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.js new file mode 100644 index 0000000000000000000000000000000000000000..833b544227bf6e3afbc79aee76140e705565d4d1 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/Workflow.js @@ -0,0 +1,41 @@ +(function(angular, $, _) { + + // Display a list of system-workflow message-templates. + angular.module('crmMsgadm').config(function($routeProvider) { + $routeProvider.when('/workflow', { + reloadOnSearch: false, + controller: 'MsgtpluiListCtrl', + controllerAs: '$ctrl', + templateUrl: function() { + // The original drafts had a mode where the "Translate" button was conditioned on some kind of language-opt-in. + // However, uiLanguages isn't giving that signal anymore, and that opt-in isn't strictly needed since htis + // is currently packaged as an opt-in extension. Maybe we should just remove `~/crmMsgadm/Workflow.html` in a few months. + // But for the moment, keep it around it in case we have to pivot. + + // var supportsTranslation = CRM.crmMsgadm.uiLanguages && _.size(CRM.crmMsgadm.uiLanguages) > 1; + // return supportsTranslation ? '~/crmMsgadm/WorkflowTranslated.html' : '~/crmMsgadm/Workflow.html'; + return '~/crmMsgadm/WorkflowTranslated.html'; + }, + resolve: { + prefetch: function(crmApi4, crmStatus) { + var q = crmApi4({ + records: ['MessageTemplate', 'get', { + select: ["id", "msg_title", "is_default", "is_active"], + where: [["workflow_name", "IS NOT EMPTY"], ["is_reserved", "=", "0"]] + }], + translations: ['MessageTemplate', 'get', { + select: ["id", "msg_title", "is_default", "is_active", "tx.language:label", "tx.language"], + join: [["Translation AS tx", "INNER", null, ["tx.entity_table", "=", "'civicrm_msg_template'"], ["tx.entity_id", "=", "id"]]], + where: [["workflow_name", "IS NOT EMPTY"], ["is_reserved", "=", "0"]], + groupBy: ["id", "tx.language"], + chain: {"tx.statuses":["Translation", "get", {"select":["status_id:name"], "where":[["entity_table", "=", "civicrm_msg_template"], ["entity_id", "=", "$id"], ["language", "=", "$tx.language"]], "groupBy":["status_id"]}, "status_id:name"]} + }] + }); + return crmStatus({start: ts('Loading...'), success: ''}, q); + } + }, + }); + } + ); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/message_admin/ang/crmMsgadm/WorkflowTranslated.html b/civicrm/ext/message_admin/ang/crmMsgadm/WorkflowTranslated.html new file mode 100644 index 0000000000000000000000000000000000000000..4a51e0ed3d24f15d20f884721ef226e95e9cd975 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadm/WorkflowTranslated.html @@ -0,0 +1,50 @@ +<div id="bootstrap-theme"> + <div crm-ui-debug="$ctrl"></div> + + <div ng-include="'~/crmMsgadm/ListNav.html'"></div> + + <div class="form-inline"> + <label for="msgtpl-filter-text">{{:: ts('Filter') }}</label> + <input class="form-control" type="search" id="msgtpl-filter-text" ng-model="filters.text"> + </div> + + <table class="table table-striped"> + <thead> + <tr> + <th>{{:: ts('Title') }}</th> + <th>{{:: ts('Locale') }}</th> + <th></th> + <th></th> + <th></th> + </tr> + </thead> + <tbody> + <tr ng-repeat="record in $ctrl.records | filter:filters.text | orderBy:['msg_title','_is_translation','tx_language_label']"> + <td>{{record.msg_title}}</td> + <td>{{record.tx_language_label || ts('Standard')}}</td> + <td> + <span ng-if="!record.tx_language || !!record.tx_statuses.active"> + <a class="text-success" crm-icon="fa-file-text" title="{{ts('Edit current revision, "%1", "%2"', {1: record.msg_title, 2: record.tx_language_label || ts('Standard')})}}" ng-href="{{$ctrl.editUrl(record)}}">{{:: ts('Current') }}</a> + </span> + <span ng-if="!(!record.tx_language || !!record.tx_statuses.active)"> + <span class="text-danger" crm-icon="fa-file-text" title="{{ts('No current revision, "%1", "%2"', {1: record.msg_title, 2: record.tx_language_label || ts('Standard')})}}">{{:: ts('Current') }}</span> + </span> + </td> + <td> + <span ng-if="!!record.tx_statuses.draft"> + <a class="text-warning" crm-icon="fa-file-text-o" title="{{ts('Edit draft revision, "%1", "%2"', {1: record.msg_title, 2: record.tx_language_label || ts('Standard')})}}" ng-href="{{$ctrl.editUrl(record, 'draft')}}">{{:: ts('Draft') }}</a> + </span> + <span ng-if="!record.tx_statuses.draft"> + <span class="text-muted" crm-icon="fa-file-text-o" title="{{ts('No draft revision, "%1", "%2"', {1: record.msg_title, 2: record.tx_language_label || ts('Standard')})}}">{{:: ts('Draft') }}</span> + </span> + </td> + <td> + <span ng-if="!record.tx_language"> + <a href crm-icon="fa-plus" ng-click="$ctrl.addTranslation(record)" title="{{ts('Add translation, "%1"', {1: record.msg_title})}}">{{:: ts('Translate') }}</a> + </span> + </td> + </tr> + </tbody> + </table> + +</div> diff --git a/civicrm/ext/message_admin/ang/crmMsgadmMonaco.aff.html b/civicrm/ext/message_admin/ang/crmMsgadmMonaco.aff.html new file mode 100644 index 0000000000000000000000000000000000000000..3a521b16fad6f42d72c019a1d9376159dfcd3481 --- /dev/null +++ b/civicrm/ext/message_admin/ang/crmMsgadmMonaco.aff.html @@ -0,0 +1,9 @@ +<!-- (1) Encapsulate some common options. (2) Work-around issues with propagating updates to 'readOnly'/'disabled' property. --> +<div ng-if="options.disabled" + crm-monaco="{crmHeightPct: options.crmHeightPct, language: options.language, wordWrap: 'wordWrapColumn', wordWrapColumn: 100, wordWrapMinified: false, wrappingIndent: 'indent', readOnly: true}" + ng-model="options.record[options.field]"> +</div> +<div ng-if="!options.disabled" + crm-monaco="{crmHeightPct: options.crmHeightPct, language: options.language, wordWrap: 'wordWrapColumn', wordWrapColumn: 100, wordWrapMinified: false, wrappingIndent: 'indent'}" + ng-model="options.record[options.field]"> +</div> diff --git a/civicrm/ext/message_admin/backlog.md b/civicrm/ext/message_admin/backlog.md new file mode 100644 index 0000000000000000000000000000000000000000..5d9f132ce62b1f5ca28d411358eed65896fd9d0f --- /dev/null +++ b/civicrm/ext/message_admin/backlog.md @@ -0,0 +1,83 @@ += past = +[x] display situation where there is no 'draft' +[x] add buttons to create, activate, and destroy drafts +[x] implement button to add translation +[x] make ctrl/$ctrl more consistent +[n] token insert - subject +[x] always use monaco for subject +[x] make toolbar more consistent +[x] token insert - monaco +[x] full screen edit +[x] more button/toolbar cleanup +[x] preview ui (skeleton) +[x] fork-off: APIv4 metadata for array inputs (#2665) +[x] (big chunk outside this list) +[x] move traits under 'Traits/' +[x] example loading +[x] - scanner +[x] - api +[x] update FluentGetterSetter for use in AbstractAction +[x] Reflective::validate() method +[x] - delegate to validateExtra() +[x] - check @required +[x] - check types (maybe) + +[x] test class for msgwf +[x] - test trait; new class +[x] - extract data file +[x] - move test +[~] - rework equivalence assertions +[~] - add rendering assertions for stock template +[x] wfmsgexample api test + +[x] render api +[x] render ui-api (hookup) +[~] api - get example fields; json +[~] render - edit example, +[x] default/autogen example? or maybe hide preview? + +[x] MR for devdocs msgtpl +[x] split exploratory pr +[x] token list api - finish agreeing contract https://lab.civicrm.org/dev/core/-/issues/2788 + +[x] wf msg apis - review process +[x] - rework as ExampleData API +[x] - Type=>Array +[x] - NFC: Some more docblocks, +[x] - move CaseAct into `tests/` + +[x] contribution recur wf msg +[x] msgtplui - allow other/non-UI languages (or maybe override/different setting) +[x] msgtplui - better failure when no example-data available +[x] date and money formatting - design +[x] date and money formatting - impl + += near = + +[ ] submit msgtplui as hidden ext +[ ] generate wf boilerplate + += mid = + +[ ] token list api +[ ] try to reproduce/debug issue crashiness after browsing multiple msgtpl txs +[ ] sendTemplate() / renderTemplate(): Override loading to make use of the translations + += far = + +[ ] merge devdocs MR +[ ] presentation + +[ ] docs for ExampleData +[ ] switch User Templates to angular editor +[ ] - add "Message Source" +[ ] - add "PDF Layout" +[ ] bootstrap token picker - or fix btn-group/select2 interaction + += wishlist = + +[ ] token list api - add more metadata+filters (eg support visibility/verbosity/audience, grouping/section) +[ ] better syntax highlighting and autocomplete for smarty +[ ] diff button +[ ] indicate unsaved changes +[ ] api explorer, workflow-field, other-fields diff --git a/civicrm/ext/message_admin/images/screenshot.png b/civicrm/ext/message_admin/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6765b696fa03249ac2cd605d5f0e4aa000ad6dad Binary files /dev/null and b/civicrm/ext/message_admin/images/screenshot.png differ diff --git a/civicrm/ext/message_admin/info.xml b/civicrm/ext/message_admin/info.xml new file mode 100644 index 0000000000000000000000000000000000000000..4f05213f31211b4c6f8830c6c3cc766777e85ee0 --- /dev/null +++ b/civicrm/ext/message_admin/info.xml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<extension key="message_admin" type="module"> + <file>message_admin</file> + <name>Message Administration</name> + <description>Rich interface for browsing, editing, previewing, and translating message templates</description> + <license>AGPL-3.0</license> + <maintainer> + <author>CiviCRM</author> + <email>info@civicrm.org</email> + </maintainer> + <urls> + <url desc="Main Extension Page">http://civicrm.org</url> + <url desc="Documentation">http://civicrm.org</url> + <url desc="Support">http://civicrm.org</url> + <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> + </urls> + <releaseDate>2021-06-12</releaseDate> + <version>5.43.0</version> + <tags> + <tag>mgmt:hidden</tag> + </tags> + <develStage>alpha</develStage> + <compatibility> + <ver>5.43</ver> + </compatibility> + <requires> + <ext>org.civicrm.afform</ext> + </requires> + <comments/> + <classloader> + <psr4 prefix="Civi\" path="Civi"/> + </classloader> + <civix> + <namespace>CRM/MessageAdmin</namespace> + </civix> +</extension> diff --git a/civicrm/ext/message_admin/message_admin.civix.php b/civicrm/ext/message_admin/message_admin.civix.php new file mode 100644 index 0000000000000000000000000000000000000000..d030462a2f4e1769dcd7bd8dfd45d6a34400de9c --- /dev/null +++ b/civicrm/ext/message_admin/message_admin.civix.php @@ -0,0 +1,453 @@ +<?php + +// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file + +/** + * The ExtensionUtil class provides small stubs for accessing resources of this + * extension. + */ +class CRM_MessageAdmin_ExtensionUtil { + const SHORT_NAME = 'message_admin'; + const LONG_NAME = 'message_admin'; + const CLASS_PREFIX = 'CRM_MessageAdmin'; + + /** + * Translate a string using the extension's domain. + * + * If the extension doesn't have a specific translation + * for the string, fallback to the default translations. + * + * @param string $text + * Canonical message text (generally en_US). + * @param array $params + * @return string + * Translated text. + * @see ts + */ + public static function ts($text, $params = []) { + if (!array_key_exists('domain', $params)) { + $params['domain'] = [self::LONG_NAME, NULL]; + } + return ts($text, $params); + } + + /** + * Get the URL of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: 'http://example.org/sites/default/ext/org.example.foo'. + * Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function url($file = NULL) { + if ($file === NULL) { + return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/'); + } + return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); + } + + /** + * Get the path of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function path($file = NULL) { + // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + /** + * Get the name of a class within this extension. + * + * @param string $suffix + * Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'. + * @return string + * Ex: 'CRM_Foo_Page_HelloWorld'. + */ + public static function findClass($suffix) { + return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix); + } + +} + +use CRM_MessageAdmin_ExtensionUtil as E; + +/** + * (Delegated) Implements hook_civicrm_config(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config + */ +function _message_admin_civix_civicrm_config(&$config = NULL) { + static $configured = FALSE; + if ($configured) { + return; + } + $configured = TRUE; + + $template =& CRM_Core_Smarty::singleton(); + + $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; + $extDir = $extRoot . 'templates'; + + if (is_array($template->template_dir)) { + array_unshift($template->template_dir, $extDir); + } + else { + $template->template_dir = [$extDir, $template->template_dir]; + } + + $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); + set_include_path($include_path); +} + +/** + * (Delegated) Implements hook_civicrm_xmlMenu(). + * + * @param $files array(string) + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu + */ +function _message_admin_civix_civicrm_xmlMenu(&$files) { + foreach (_message_admin_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { + $files[] = $file; + } +} + +/** + * Implements hook_civicrm_install(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install + */ +function _message_admin_civix_civicrm_install() { + _message_admin_civix_civicrm_config(); + if ($upgrader = _message_admin_civix_upgrader()) { + $upgrader->onInstall(); + } +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ +function _message_admin_civix_civicrm_postInstall() { + _message_admin_civix_civicrm_config(); + if ($upgrader = _message_admin_civix_upgrader()) { + if (is_callable([$upgrader, 'onPostInstall'])) { + $upgrader->onPostInstall(); + } + } +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall + */ +function _message_admin_civix_civicrm_uninstall() { + _message_admin_civix_civicrm_config(); + if ($upgrader = _message_admin_civix_upgrader()) { + $upgrader->onUninstall(); + } +} + +/** + * (Delegated) Implements hook_civicrm_enable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable + */ +function _message_admin_civix_civicrm_enable() { + _message_admin_civix_civicrm_config(); + if ($upgrader = _message_admin_civix_upgrader()) { + if (is_callable([$upgrader, 'onEnable'])) { + $upgrader->onEnable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_disable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable + * @return mixed + */ +function _message_admin_civix_civicrm_disable() { + _message_admin_civix_civicrm_config(); + if ($upgrader = _message_admin_civix_upgrader()) { + if (is_callable([$upgrader, 'onDisable'])) { + $upgrader->onDisable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_upgrade(). + * + * @param $op string, the type of operation being performed; 'check' or 'enqueue' + * @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks + * + * @return mixed + * based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending) + * for 'enqueue', returns void + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade + */ +function _message_admin_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + if ($upgrader = _message_admin_civix_upgrader()) { + return $upgrader->onUpgrade($op, $queue); + } +} + +/** + * @return CRM_MessageAdmin_Upgrader + */ +function _message_admin_civix_upgrader() { + if (!file_exists(__DIR__ . '/CRM/MessageAdmin/Upgrader.php')) { + return NULL; + } + else { + return CRM_MessageAdmin_Upgrader_Base::instance(); + } +} + +/** + * Search directory tree for files which match a glob pattern. + * + * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. + * Note: Delegate to CRM_Utils_File::findFiles(), this function kept only + * for backward compatibility of extension code that uses it. + * + * @param string $dir base dir + * @param string $pattern , glob pattern, eg "*.txt" + * + * @return array + */ +function _message_admin_civix_find_files($dir, $pattern) { + return CRM_Utils_File::findFiles($dir, $pattern); +} + +/** + * (Delegated) Implements hook_civicrm_managed(). + * + * Find any *.mgd.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed + */ +function _message_admin_civix_civicrm_managed(&$entities) { + $mgdFiles = _message_admin_civix_find_files(__DIR__, '*.mgd.php'); + sort($mgdFiles); + foreach ($mgdFiles as $file) { + $es = include $file; + foreach ($es as $e) { + if (empty($e['module'])) { + $e['module'] = E::LONG_NAME; + } + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } + $entities[] = $e; + } + } +} + +/** + * (Delegated) Implements hook_civicrm_caseTypes(). + * + * Find any and return any files matching "xml/case/*.xml" + * + * Note: This hook only runs in CiviCRM 4.4+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes + */ +function _message_admin_civix_civicrm_caseTypes(&$caseTypes) { + if (!is_dir(__DIR__ . '/xml/case')) { + return; + } + + foreach (_message_admin_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { + $name = preg_replace('/\.xml$/', '', basename($file)); + if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { + $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); + throw new CRM_Core_Exception($errorMessage); + } + $caseTypes[$name] = [ + 'module' => E::LONG_NAME, + 'name' => $name, + 'file' => $file, + ]; + } +} + +/** + * (Delegated) Implements hook_civicrm_angularModules(). + * + * Find any and return any files matching "ang/*.ang.php" + * + * Note: This hook only runs in CiviCRM 4.5+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules + */ +function _message_admin_civix_civicrm_angularModules(&$angularModules) { + if (!is_dir(__DIR__ . '/ang')) { + return; + } + + $files = _message_admin_civix_glob(__DIR__ . '/ang/*.ang.php'); + foreach ($files as $file) { + $name = preg_replace(':\.ang\.php$:', '', basename($file)); + $module = include $file; + if (empty($module['ext'])) { + $module['ext'] = E::LONG_NAME; + } + $angularModules[$name] = $module; + } +} + +/** + * (Delegated) Implements hook_civicrm_themes(). + * + * Find any and return any files matching "*.theme.php" + */ +function _message_admin_civix_civicrm_themes(&$themes) { + $files = _message_admin_civix_glob(__DIR__ . '/*.theme.php'); + foreach ($files as $file) { + $themeMeta = include $file; + if (empty($themeMeta['name'])) { + $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); + } + if (empty($themeMeta['ext'])) { + $themeMeta['ext'] = E::LONG_NAME; + } + $themes[$themeMeta['name']] = $themeMeta; + } +} + +/** + * Glob wrapper which is guaranteed to return an array. + * + * The documentation for glob() says, "On some systems it is impossible to + * distinguish between empty match and an error." Anecdotally, the return + * result for an empty match is sometimes array() and sometimes FALSE. + * This wrapper provides consistency. + * + * @link http://php.net/glob + * @param string $pattern + * + * @return array + */ +function _message_admin_civix_glob($pattern) { + $result = glob($pattern); + return is_array($result) ? $result : []; +} + +/** + * Inserts a navigation menu item at a given place in the hierarchy. + * + * @param array $menu - menu hierarchy + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) + * + * @return bool + */ +function _message_admin_civix_insert_navigation_menu(&$menu, $path, $item) { + // If we are done going down the path, insert menu + if (empty($path)) { + $menu[] = [ + 'attributes' => array_merge([ + 'label' => CRM_Utils_Array::value('name', $item), + 'active' => 1, + ], $item), + ]; + return TRUE; + } + else { + // Find an recurse into the next level down + $found = FALSE; + $path = explode('/', $path); + $first = array_shift($path); + foreach ($menu as $key => &$entry) { + if ($entry['attributes']['name'] == $first) { + if (!isset($entry['child'])) { + $entry['child'] = []; + } + $found = _message_admin_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item); + } + } + return $found; + } +} + +/** + * (Delegated) Implements hook_civicrm_navigationMenu(). + */ +function _message_admin_civix_navigationMenu(&$nodes) { + if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) { + _message_admin_civix_fixNavigationMenu($nodes); + } +} + +/** + * Given a navigation menu, generate navIDs for any items which are + * missing them. + */ +function _message_admin_civix_fixNavigationMenu(&$nodes) { + $maxNavID = 1; + array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) { + if ($key === 'navID') { + $maxNavID = max($maxNavID, $item); + } + }); + _message_admin_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL); +} + +function _message_admin_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { + $origKeys = array_keys($nodes); + foreach ($origKeys as $origKey) { + if (!isset($nodes[$origKey]['attributes']['parentID']) && $parentID !== NULL) { + $nodes[$origKey]['attributes']['parentID'] = $parentID; + } + // If no navID, then assign navID and fix key. + if (!isset($nodes[$origKey]['attributes']['navID'])) { + $newKey = ++$maxNavID; + $nodes[$origKey]['attributes']['navID'] = $newKey; + $nodes[$newKey] = $nodes[$origKey]; + unset($nodes[$origKey]); + $origKey = $newKey; + } + if (isset($nodes[$origKey]['child']) && is_array($nodes[$origKey]['child'])) { + _message_admin_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_alterSettingsFolders(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders + */ +function _message_admin_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; + if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { + $metaDataFolders[] = $settingsDir; + } +} + +/** + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes + */ +function _message_admin_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, []); +} diff --git a/civicrm/ext/message_admin/message_admin.php b/civicrm/ext/message_admin/message_admin.php new file mode 100644 index 0000000000000000000000000000000000000000..851e1fac483d4e0b6c95c41e8be46cbb91efa262 --- /dev/null +++ b/civicrm/ext/message_admin/message_admin.php @@ -0,0 +1,182 @@ +<?php + +require_once 'message_admin.civix.php'; +// phpcs:disable +use CRM_MessageAdmin_ExtensionUtil as E; +// phpcs:enable + +/** + * Implements hook_civicrm_config(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/ + */ +function message_admin_civicrm_config(&$config) { + _message_admin_civix_civicrm_config($config); +} + +/** + * Implements hook_civicrm_xmlMenu(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu + */ +function message_admin_civicrm_xmlMenu(&$files) { + _message_admin_civix_civicrm_xmlMenu($files); +} + +/** + * Implements hook_civicrm_install(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install + */ +function message_admin_civicrm_install() { + _message_admin_civix_civicrm_install(); +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ +function message_admin_civicrm_postInstall() { + _message_admin_civix_civicrm_postInstall(); +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall + */ +function message_admin_civicrm_uninstall() { + _message_admin_civix_civicrm_uninstall(); +} + +/** + * Implements hook_civicrm_enable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable + */ +function message_admin_civicrm_enable() { + _message_admin_civix_civicrm_enable(); +} + +/** + * Implements hook_civicrm_disable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable + */ +function message_admin_civicrm_disable() { + _message_admin_civix_civicrm_disable(); +} + +/** + * Implements hook_civicrm_upgrade(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade + */ +function message_admin_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + return _message_admin_civix_civicrm_upgrade($op, $queue); +} + +/** + * Implements hook_civicrm_managed(). + * + * Generate a list of entities to create/deactivate/delete when this module + * is installed, disabled, uninstalled. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed + */ +function message_admin_civicrm_managed(&$entities) { + _message_admin_civix_civicrm_managed($entities); +} + +/** + * Implements hook_civicrm_caseTypes(). + * + * Generate a list of case-types. + * + * Note: This hook only runs in CiviCRM 4.4+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes + */ +function message_admin_civicrm_caseTypes(&$caseTypes) { + _message_admin_civix_civicrm_caseTypes($caseTypes); +} + +/** + * Implements hook_civicrm_angularModules(). + * + * Generate a list of Angular modules. + * + * Note: This hook only runs in CiviCRM 4.5+. It may + * use features only available in v4.6+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules + */ +function message_admin_civicrm_angularModules(&$angularModules) { + _message_admin_civix_civicrm_angularModules($angularModules); +} + +/** + * Implements hook_civicrm_alterSettingsFolders(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders + */ +function message_admin_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + _message_admin_civix_civicrm_alterSettingsFolders($metaDataFolders); +} + +/** + * Implements hook_civicrm_entityTypes(). + * + * Declare entity types provided by this module. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes + */ +function message_admin_civicrm_entityTypes(&$entityTypes) { + _message_admin_civix_civicrm_entityTypes($entityTypes); +} + +/** + * Implements hook_civicrm_themes(). + */ +function message_admin_civicrm_themes(&$themes) { + _message_admin_civix_civicrm_themes($themes); +} + +// --- Functions below this ship commented out. Uncomment as required. --- + +/** + * Implements hook_civicrm_preProcess(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_preProcess + */ +//function message_admin_civicrm_preProcess($formName, &$form) { +// +//} + +/** + * Implements hook_civicrm_navigationMenu(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu + */ +//function message_admin_civicrm_navigationMenu(&$menu) { +// _message_admin_civix_insert_navigation_menu($menu, 'Mailings', array( +// 'label' => E::ts('New subliminal message'), +// 'name' => 'mailing_subliminal_message', +// 'url' => 'civicrm/mailing/subliminal', +// 'permission' => 'access CiviMail', +// 'operator' => 'OR', +// 'separator' => 0, +// )); +// _message_admin_civix_navigationMenu($menu); +//} + +/** + * Mark these fields as translateable. + * @see CRM_Utils_Hook::translateFields + */ +function message_admin_civicrm_translateFields(&$fields) { + $fields['civicrm_msg_template']['msg_subject'] = TRUE; + $fields['civicrm_msg_template']['msg_text'] = TRUE; + $fields['civicrm_msg_template']['msg_html'] = TRUE; +} diff --git a/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Edit.hlp b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Edit.hlp new file mode 100644 index 0000000000000000000000000000000000000000..ddea10c3e31721c43e05bb2cabdf7a9ca1c4d1c7 --- /dev/null +++ b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Edit.hlp @@ -0,0 +1,3 @@ +{htxt id="full_name"} +{ts}The contact name should be divided in two parts, the first name and last name.{/ts} +{/htxt} diff --git a/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Page/MsgtplBasePage.tpl b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Page/MsgtplBasePage.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0a3b96aa8c9ce4e9b4b6f71376436d19d5220e21 --- /dev/null +++ b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Page/MsgtplBasePage.tpl @@ -0,0 +1,2 @@ +{* Placeholder *} + diff --git a/civicrm/ext/message_admin/templates/CRM/MessageAdmin/User.hlp b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/User.hlp new file mode 100644 index 0000000000000000000000000000000000000000..ddea10c3e31721c43e05bb2cabdf7a9ca1c4d1c7 --- /dev/null +++ b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/User.hlp @@ -0,0 +1,3 @@ +{htxt id="full_name"} +{ts}The contact name should be divided in two parts, the first name and last name.{/ts} +{/htxt} diff --git a/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Workflow.hlp b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Workflow.hlp new file mode 100644 index 0000000000000000000000000000000000000000..ddea10c3e31721c43e05bb2cabdf7a9ca1c4d1c7 --- /dev/null +++ b/civicrm/ext/message_admin/templates/CRM/MessageAdmin/Workflow.hlp @@ -0,0 +1,3 @@ +{htxt id="full_name"} +{ts}The contact name should be divided in two parts, the first name and last name.{/ts} +{/htxt} diff --git a/civicrm/ext/message_admin/xml/Menu/message_admin.xml b/civicrm/ext/message_admin/xml/Menu/message_admin.xml new file mode 100644 index 0000000000000000000000000000000000000000..19a87a5a501e6c0e00a64a5f67b5f5e1d65b75fa --- /dev/null +++ b/civicrm/ext/message_admin/xml/Menu/message_admin.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<menu> + <item> + <path>civicrm/admin/messageTemplates</path> + <page_callback>CRM_MessageAdmin_Page_MsgtplBasePage</page_callback> + <title>MsgtplBasePage</title> + <access_arguments>access CiviCRM</access_arguments> + </item> +</menu> diff --git a/civicrm/ext/oauth-client/Civi/Api4/OAuthProvider.php b/civicrm/ext/oauth-client/Civi/Api4/OAuthProvider.php index fc556d51923cee391cf0ccd21857fa5e971b8e45..726248815f59284dff6e9dd5edc5c69f5ed6c6aa 100644 --- a/civicrm/ext/oauth-client/Civi/Api4/OAuthProvider.php +++ b/civicrm/ext/oauth-client/Civi/Api4/OAuthProvider.php @@ -59,6 +59,9 @@ class OAuthProvider extends Generic\AbstractEntity { [ 'name' => 'options', ], + [ + 'name' => 'contactTemplate', + ], ]; }); return $action->setCheckPermissions($checkPermissions); diff --git a/civicrm/ext/oauth-client/info.xml b/civicrm/ext/oauth-client/info.xml index 1fbd3d4f60a7970832e668ab43daf3c244ce6b1e..f6c9354ed3ee2fdb53bd209b42c21a28d140345d 100644 --- a/civicrm/ext/oauth-client/info.xml +++ b/civicrm/ext/oauth-client/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-23</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <compatibility> <ver>5.38</ver> diff --git a/civicrm/ext/payflowpro/info.xml b/civicrm/ext/payflowpro/info.xml index ea769b7c50df14c0e8de74eca84d2e2679ad52de..c29c81db22612476b117db02cbcd277e6d03df06 100644 --- a/civicrm/ext/payflowpro/info.xml +++ b/civicrm/ext/payflowpro/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-13</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>stable</develStage> <compatibility> <ver>5.0</ver> diff --git a/civicrm/ext/payflowpro/tests/phpunit/bootstrap.php b/civicrm/ext/payflowpro/tests/phpunit/bootstrap.php index a5b49253c819c5ab65947070e7ee67d0cac48ea1..5133778c819133e6d0a8d558055d5aa1a48b1ec3 100644 --- a/civicrm/ext/payflowpro/tests/phpunit/bootstrap.php +++ b/civicrm/ext/payflowpro/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml index cac65d4a3be0923451c04c330a928b5aa7c89d5a..fb037476fef3436ef9048f651687dee41ba859bf 100644 --- a/civicrm/ext/recaptcha/info.xml +++ b/civicrm/ext/recaptcha/info.xml @@ -13,7 +13,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-03</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php index 0e025f27df2481e3226893e63c55f5464fc9413e..75269cefddfcc9ab8d810af2648c8791632dd07f 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php @@ -41,6 +41,14 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { */ protected $filters = []; + /** + * Integer used as a seed when ordering by RAND(). + * This keeps the order stable enough to use a pager with random sorting. + * + * @var int + */ + protected $seed; + /** * Name of Afform, if this display is embedded (used for permissioning) * @var string @@ -121,20 +129,43 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $select[$expr->getAlias()] = $item; } $formatted = []; - foreach ($result as $data) { + foreach ($result as $index => $data) { $row = []; foreach ($select as $key => $item) { - $raw = $data[$key] ?? NULL; - $row[$key] = [ - 'raw' => $raw, - 'view' => $this->formatViewValue($item['dataType'], $raw), - ]; + $row[$key] = $this->getValue($key, $data, $item['dataType'], $index); } $formatted[] = $row; } return $formatted; } + /** + * @param $key + * @param $data + * @param $dataType + * @param $index + * @return array + */ + private function getValue($key, $data, $dataType, $index) { + // Get value from api result unless this is a pseudo-field which gets a calculated value + switch ($key) { + case 'result_row_num': + $raw = $index + 1 + ($this->savedSearch['api_params']['offset'] ?? 0); + break; + + case 'user_contact_id': + $raw = \CRM_Core_Session::getLoggedInContactID(); + break; + + default: + $raw = $data[$key] ?? NULL; + } + return [ + 'raw' => $raw, + 'view' => $this->formatViewValue($dataType, $raw), + ]; + } + /** * Returns field definition for a given field or NULL if not found * @param $fieldName @@ -186,17 +217,19 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { * Applies supplied filters to the where clause */ protected function applyFilters() { + // Allow all filters that are included in SELECT clause or are fields on the Afform. + $allowedFilters = array_merge($this->getSelectAliases(), $this->getAfformFilters()); + // Ignore empty strings $filters = array_filter($this->filters, [$this, 'hasValue']); if (!$filters) { return; } - // Process all filters that are included in SELECT clause or are allowed by the Afform. - $allowedFilters = array_merge($this->getSelectAliases(), $this->getAfformFilters()); - foreach ($filters as $fieldName => $value) { - if (in_array($fieldName, $allowedFilters, TRUE)) { - $this->applyFilter($fieldName, $value); + foreach ($filters as $key => $value) { + $fieldNames = explode(',', $key); + if (in_array($key, $allowedFilters, TRUE) || !array_diff($fieldNames, $allowedFilters)) { + $this->applyFilter($fieldNames, $value); } } } @@ -221,13 +254,16 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { } /** - * @param string $fieldName + * @param array $fieldNames + * If multiple field names are given they will be combined in an OR clause * @param mixed $value */ - private function applyFilter(string $fieldName, $value) { + private function applyFilter(array $fieldNames, $value) { // Global setting determines if % wildcard should be added to both sides (default) or only the end of a search string $prefixWithWildcard = \Civi::settings()->get('includeWildCardInName'); + // Based on the first field, decide which clause to add this condition to + $fieldName = $fieldNames[0]; $field = $this->getField($fieldName); // If field is not found it must be an aggregated column & belongs in the HAVING clause. if (!$field) { @@ -248,44 +284,57 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $clause =& $this->savedSearch['api_params']['where']; } - $dataType = $field['data_type'] ?? NULL; - - // Array is either associative `OP => VAL` or sequential `IN (...)` - if (is_array($value)) { - $value = array_filter($value, [$this, 'hasValue']); - // If array does not contain operators as keys, assume array of values - if (array_diff_key($value, array_flip(CoreUtil::getOperators()))) { - // Use IN for regular fields - if (empty($field['serialize'])) { - $clause[] = [$fieldName, 'IN', $value]; + $filterClauses = []; + + foreach ($fieldNames as $fieldName) { + $field = $this->getField($fieldName); + $dataType = $field['data_type'] ?? NULL; + // Array is either associative `OP => VAL` or sequential `IN (...)` + if (is_array($value)) { + $value = array_filter($value, [$this, 'hasValue']); + // If array does not contain operators as keys, assume array of values + if (array_diff_key($value, array_flip(CoreUtil::getOperators()))) { + // Use IN for regular fields + if (empty($field['serialize'])) { + $filterClauses[] = [$fieldName, 'IN', $value]; + } + // Use an OR group of CONTAINS for array fields + else { + $orGroup = []; + foreach ($value as $val) { + $orGroup[] = [$fieldName, 'CONTAINS', $val]; + } + $filterClauses[] = ['OR', $orGroup]; + } } - // Use an OR group of CONTAINS for array fields + // Operator => Value array else { - $orGroup = []; - foreach ($value as $val) { - $orGroup[] = [$fieldName, 'CONTAINS', $val]; + $andGroup = []; + foreach ($value as $operator => $val) { + $andGroup[] = [$fieldName, $operator, $val]; } - $clause[] = ['OR', $orGroup]; + $filterClauses[] = ['AND', $andGroup]; } } - // Operator => Value array + elseif (!empty($field['serialize'])) { + $filterClauses[] = [$fieldName, 'CONTAINS', $value]; + } + elseif (!empty($field['options']) || in_array($dataType, ['Integer', 'Boolean', 'Date', 'Timestamp'])) { + $filterClauses[] = [$fieldName, '=', $value]; + } + elseif ($prefixWithWildcard) { + $filterClauses[] = [$fieldName, 'CONTAINS', $value]; + } else { - foreach ($value as $operator => $val) { - $clause[] = [$fieldName, $operator, $val]; - } + $filterClauses[] = [$fieldName, 'LIKE', $value . '%']; } } - elseif (!empty($field['serialize'])) { - $clause[] = [$fieldName, 'CONTAINS', $value]; - } - elseif (!empty($field['options']) || in_array($dataType, ['Integer', 'Boolean', 'Date', 'Timestamp'])) { - $clause[] = [$fieldName, '=', $value]; - } - elseif ($prefixWithWildcard) { - $clause[] = [$fieldName, 'CONTAINS', $value]; + // Single field + if (count($filterClauses) === 1) { + $clause[] = $filterClauses[0]; } else { - $clause[] = [$fieldName, 'LIKE', $value . '%']; + $clause[] = ['OR', $filterClauses]; } } @@ -308,6 +357,10 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $orderBy = []; foreach ($currentSort ?: $defaultSort as $item) { + // Apply seed to random sorting + if ($item[0] === 'RAND()' && isset($this->seed)) { + $item[0] = 'RAND(' . $this->seed . ')'; + } $orderBy[$item[0]] = $item[1]; } return $orderBy; @@ -347,9 +400,36 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { preg_match_all('/\\[([^]]+)\\]/', $possibleTokens, $tokens); // Only add fields not already in SELECT clause $additions = array_diff(array_merge($additions, $tokens[1]), $existing); + // Tokens for aggregated columns start with 'GROUP_CONCAT_' + foreach ($additions as $index => $alias) { + if (strpos($alias, 'GROUP_CONCAT_') === 0) { + $additions[$index] = 'GROUP_CONCAT(' . $this->getJoinFromAlias(explode('_', $alias, 3)[2]) . ') AS ' . $alias; + } + } $apiParams['select'] = array_unique(array_merge($apiParams['select'], $additions)); } + /** + * Given an alias like Contact_Email_01_location_type_id + * this will return Contact_Email_01.location_type_id + * @param string $alias + * @return string + */ + protected function getJoinFromAlias(string $alias) { + $result = ''; + foreach ($this->savedSearch['api_params']['join'] ?? [] as $join) { + $joinName = explode(' AS ', $join[0])[1]; + if (strpos($alias, $joinName) === 0) { + $parsed = $joinName . '.' . substr($alias, strlen($joinName) + 1); + // Ensure we are using the longest match + if (strlen($parsed) > strlen($result)) { + $result = $parsed; + } + } + } + return $result; + } + /** * Checks if a filter contains a non-empty value * @@ -384,11 +464,17 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { $filterAttr = $afform['searchDisplay']['filters'] ?? NULL; if ($filterAttr && is_string($filterAttr) && $filterAttr[0] === '{') { foreach (\CRM_Utils_JS::decode($filterAttr) as $filterKey => $filterVal) { - $filterKeys[] = $filterKey; // Automatically apply filters from the markup if they have a value - // (if it's a javascript variable it will have come back from decode() as NULL and we'll ignore it). - if ($this->hasValue($filterVal)) { - $this->applyFilter($filterKey, $filterVal); + if ($filterVal !== NULL) { + unset($this->filters[$filterKey]); + if ($this->hasValue($filterVal)) { + $this->applyFilter(explode(',', $filterKey), $filterVal); + } + } + // If it's a javascript variable it will have come back from decode() as NULL; + // whitelist it to allow it to be passed to this api from javascript. + else { + $filterKeys[] = $filterKey; } } } @@ -423,4 +509,33 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { return $this->_afform; } + /** + * Extra calculated fields provided by SearchKit + * @return array[] + */ + public static function getPseudoFields(): array { + return [ + [ + 'name' => 'result_row_num', + 'fieldName' => 'result_row_num', + 'title' => ts('Row Number'), + 'label' => ts('Row Number'), + 'description' => ts('Index of each row, starting from 1 on the first page'), + 'type' => 'Pseudo', + 'data_type' => 'Integer', + 'readonly' => TRUE, + ], + [ + 'name' => 'user_contact_id', + 'fieldName' => 'result_row_num', + 'title' => ts('Current User ID'), + 'label' => ts('Current User ID'), + 'description' => ts('Contact ID of the current user if logged in'), + 'type' => 'Pseudo', + 'data_type' => 'Integer', + 'readonly' => TRUE, + ], + ]; + } + } diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Download.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Download.php index 3371bfdc05835557f9ac41f3a30307e0e0ef320f..0d48360306c84b004f6e6fd104e8a230b4789462 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Download.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/Download.php @@ -7,19 +7,24 @@ use League\Csv\Writer; /** * Download the results of a SearchDisplay as a spreadsheet. * - * Note: unlike other APIs this action directly outputs a file. + * Note: unlike other APIs this action will directly output a file + * if 'format' is set to anything other than 'array'. * * @package Civi\Api4\Action\SearchDisplay */ class Download extends AbstractRunAction { /** - * Requested file format + * Requested file format. + * + * 'array' will return a normal api result, with table headers as the first row. + * 'csv', etc. will directly output a file to the browser. + * * @var string * @required - * @options csv + * @options array,csv */ - protected $format; + protected $format = 'array'; /** * @param \Civi\Api4\Generic\Result $result @@ -60,6 +65,17 @@ class Download extends AbstractRunAction { $fileName = \CRM_Utils_File::makeFilenameWithUnicode($this->display['label']) . '.' . $this->format; switch ($this->format) { + case 'array': + $result[] = $columns; + foreach ($rows as $data) { + $row = []; + foreach ($columns as $col) { + $row[] = $this->formatColumnValue($col, $data); + } + $result[] = $row; + } + return; + case 'csv': $this->outputCSV($rows, $columns, $fileName); break; diff --git a/civicrm/ext/search_kit/Civi/Search/Admin.php b/civicrm/ext/search_kit/Civi/Search/Admin.php index 963b02c44dc7a6c65a7aadec38277fb54a982e0d..1e05fa1a57174896e05a59609c703aa2070766dc 100644 --- a/civicrm/ext/search_kit/Civi/Search/Admin.php +++ b/civicrm/ext/search_kit/Civi/Search/Admin.php @@ -11,6 +11,10 @@ namespace Civi\Search; +use Civi\Api4\Action\SearchDisplay\AbstractRunAction; +use Civi\Api4\Query\SqlEquation; +use Civi\Api4\Query\SqlFunction; +use Civi\Api4\Tag; use CRM_Search_ExtensionUtil as E; /** @@ -28,13 +32,18 @@ class Admin { return [ 'schema' => self::addImplicitFKFields($schema), 'joins' => self::getJoins($schema), + 'pseudoFields' => AbstractRunAction::getPseudoFields(), 'operators' => \CRM_Utils_Array::makeNonAssociative(self::getOperators()), - 'functions' => \CRM_Api4_Page_Api4Explorer::getSqlFunctions(), + 'functions' => self::getSqlFunctions(), 'displayTypes' => Display::getDisplayTypes(['id', 'name', 'label', 'description', 'icon']), 'styles' => \CRM_Utils_Array::makeNonAssociative(self::getStyles()), 'defaultPagerSize' => \Civi::settings()->get('default_pager_size'), 'afformEnabled' => $extensions->isActiveModule('afform'), 'afformAdminEnabled' => $extensions->isActiveModule('afform_admin'), + 'tags' => Tag::get() + ->addSelect('id', 'name', 'color', 'is_selectable', 'description') + ->addWhere('used_for', 'CONTAINS', 'civicrm_saved_search') + ->execute(), ]; } @@ -53,7 +62,9 @@ class Admin { 'IN' => E::ts('Is One Of'), 'NOT IN' => E::ts('Not One Of'), 'LIKE' => E::ts('Is Like'), + 'REGEXP' => E::ts('Matches Regexp'), 'NOT LIKE' => E::ts('Not Like'), + 'NOT REGEXP' => E::ts('Not Regexp'), 'BETWEEN' => E::ts('Is Between'), 'NOT BETWEEN' => E::ts('Not Between'), 'IS EMPTY' => E::ts('Is Empty'), @@ -109,6 +120,13 @@ class Admin { ]); foreach ($getFields as $field) { $field['fieldName'] = $field['name']; + // Hack for RelationshipCache to make Relationship fields editable + if ($entity['name'] === 'RelationshipCache') { + $entity['primary_key'] = ['relationship_id']; + if (in_array($field['name'], ['is_active', 'start_date', 'end_date'])) { + $field['readonly'] = FALSE; + } + } $entity['fields'][] = $field; } $params = $entity['get'][0]; @@ -339,13 +357,20 @@ class Admin { foreach ($entities as $entity) { foreach ($entity['ui_join_filters'] ?? [] as $fieldName) { $field = civicrm_api4($entity['name'], 'getFields', [ - 'select' => ['options'], + 'select' => ['options', 'data_type'], 'where' => [['name', '=', $fieldName]], 'loadOptions' => ['name'], ])->first(); - $value = isset($field['options'][0]) ? json_encode($field['options'][0]['name']) : ''; + $value = ''; + if ($field['data_type'] === 'Boolean') { + $value = TRUE; + } + elseif (isset($field['options'][0])) { + $fieldName .= ':name'; + $value = json_encode($field['options'][0]['name']); + } $conditions[] = [ - $alias . '.' . $fieldName . ($value ? ':name' : ''), + $alias . '.' . $fieldName, '=', $value, ]; @@ -354,4 +379,41 @@ class Admin { return $conditions; } + private static function getSqlFunctions() { + $functions = \CRM_Api4_Page_Api4Explorer::getSqlFunctions(); + // Add faux function "e" for SqlEquations + $functions[] = [ + 'name' => 'e', + 'title' => ts('Arithmetic'), + 'description' => ts('Add, subtract, multiply, divide'), + 'category' => SqlFunction::CATEGORY_MATH, + 'dataType' => 'Number', + 'params' => [ + [ + 'label' => ts('Value'), + 'min_expr' => 1, + 'max_expr' => 1, + 'must_be' => ['SqlField', 'SqlNumber'], + ], + [ + 'label' => ts('Value'), + 'min_expr' => 1, + 'max_expr' => 99, + 'flag_before' => array_combine(SqlEquation::$arithmeticOperators, SqlEquation::$arithmeticOperators), + 'must_be' => ['SqlField', 'SqlNumber'], + ], + ], + ]; + // Filter out empty param properties (simplifies the javascript which treats empty arrays/objects as != null) + foreach ($functions as &$function) { + foreach ($function['params'] as $i => $param) { + $function['params'][$i] = array_filter($param); + } + } + usort($functions, function($a, $b) { + return $a['title'] <=> $b['title']; + }); + return $functions; + } + } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js index 265d5708ac7544f2b05077d1443aec4ce91c6a9f..ee6bb116f5a10fc7cafb8d5c36e4b3e3520910ae 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js @@ -29,7 +29,12 @@ savedSearch: function($route, crmApi4) { var params = $route.current.params; return crmApi4('SavedSearch', 'get', { + select: ['*', 'GROUP_CONCAT(DISTINCT entity_tag.tag_id) AS tag_id'], where: [['id', '=', params.id]], + join: [ + ['EntityTag AS entity_tag', 'LEFT', ['entity_tag.entity_table', '=', '"civicrm_saved_search"'], ['id', '=', 'entity_tag.entity_id']], + ], + groupBy: ['id'], chain: { groups: ['Group', 'get', {select: ['id', 'title', 'description', 'visibility', 'group_type', 'custom.*'], where: [['saved_search_id', '=', '$id']]}], displays: ['SearchDisplay', 'get', {where: [['saved_search_id', '=', '$id']]}] @@ -45,7 +50,7 @@ searchEntity = $routeParams.entity; $scope.$ctrl = this; this.savedSearch = { - api_entity: searchEntity, + api_entity: searchEntity }; // Changing entity will refresh the angular page $scope.$watch('$ctrl.savedSearch.api_entity', function(newEntity, oldEntity) { @@ -62,7 +67,7 @@ $scope.$ctrl = this; }) - .factory('searchMeta', function($q) { + .factory('searchMeta', function($q, formatForSelect2) { function getEntity(entityName) { if (entityName) { return _.find(CRM.crmSearchAdmin.schema, {name: entityName}); @@ -132,58 +137,158 @@ if (!field && join && join.bridge) { field = _.find(getEntity(join.bridge).fields, {name: name}); } + // Might be a pseudoField + if (!field) { + field = _.cloneDeep(_.find(CRM.crmSearchAdmin.pseudoFields, {name: name})); + } if (field) { field.baseEntity = entityName; return {field: field, join: join}; } } + function parseFnArgs(info, expr) { + var fnName = expr.split('(')[0], + argString = expr.substr(fnName.length + 1, expr.length - fnName.length - 2); + info.fn = _.find(CRM.crmSearchAdmin.functions, {name: fnName || 'e'}); + + function getKeyword(whitelist) { + var keyword; + _.each(whitelist, function(flag) { + if (argString.indexOf(flag) === 0) { + keyword = flag; + argString = _.trim(argString.substr(flag.length)); + return false; + } + }); + return keyword; + } + + function getExpr() { + var expr; + if (argString.indexOf('"') === 0) { + // Match double-quoted string + expr = argString.match(/"([^"\\]|\\.)*"/)[0]; + } else if (argString.indexOf("'") === 0) { + // Match single-quoted string + expr = argString.match(/'([^'\\]|\\.)*'/)[0]; + } else { + // Match anything else + expr = argString.match(/[^ ,]+/)[0]; + } + if (expr) { + argString = _.trim(argString.substr(expr.length)); + return parseArg(expr); + } + } + + _.each(info.fn.params, function(param, index) { + var exprCount = 0, + expr, flagBefore; + argString = _.trim(argString); + if (!argString.length || (param.name && !getKeyword(param.name))) { + return false; + } + if (param.max_expr) { + while (++exprCount <= param.max_expr && argString.length) { + flagBefore = getKeyword(_.keys(param.flag_before || {})); + expr = getExpr(); + if (expr) { + expr.param = param.name || index; + expr.flag_before = flagBefore; + info.args.push(expr); + } + // Only continue if an expression was found and followed by a comma + if (!expr) { + break; + } + getKeyword([',']); + } + if (expr && !_.isEmpty(expr.flag_after)) { + _.last(info.args).flag_after = getKeyword(_.keys(param.flag_after)); + } + } + }); + } + // @param {String} arg + function parseArg(arg) { + arg = _.trim(arg); + if (arg && !isNaN(arg)) { + return { + type: 'number', + value: +arg + }; + } else if (_.includes(['"', "'"], arg.substr(0, 1))) { + return { + type: 'string', + value: arg.substr(1, arg.length - 2) + }; + } else if (arg) { + var fieldAndJoin = getFieldAndJoin(arg, searchEntity); + if (fieldAndJoin) { + var split = arg.split(':'), + prefixPos = split[0].lastIndexOf(fieldAndJoin.field.name); + return { + type: 'field', + value: arg, + path: split[0], + field: fieldAndJoin.field, + join: fieldAndJoin.join, + prefix: prefixPos > 0 ? split[0].substring(0, prefixPos) : '', + suffix: !split[1] ? '' : ':' + split[1] + }; + } + } + } function parseExpr(expr) { if (!expr) { return; } var splitAs = expr.split(' AS '), - info = {fn: null, modifier: '', field: {}, alias: _.last(splitAs)}, - fieldName = splitAs[0], - bracketPos = splitAs[0].indexOf('('); + info = {fn: null, args: [], alias: _.last(splitAs)}, + bracketPos = expr.indexOf('('); if (bracketPos >= 0) { - var parsed = splitAs[0].substr(bracketPos).match(/[ ]?([A-Z]+[ ]+)?([\w.:]+)/); - fieldName = parsed[2]; - info.fn = _.find(CRM.crmSearchAdmin.functions, {name: expr.substring(0, bracketPos)}); - info.modifier = _.trim(parsed[1]); - } - var fieldAndJoin = getFieldAndJoin(fieldName, searchEntity); - if (fieldAndJoin) { - var split = fieldName.split(':'), - prefixPos = split[0].lastIndexOf(fieldAndJoin.field.name); - info.path = split[0]; - info.prefix = prefixPos > 0 ? info.path.substring(0, prefixPos) : ''; - info.suffix = !split[1] ? '' : ':' + split[1]; - info.field = fieldAndJoin.field; - info.join = fieldAndJoin.join; + parseFnArgs(info, splitAs[0]); + } else { + var arg = parseArg(splitAs[0]); + if (arg) { + arg.param = 0; + info.args.push(arg); + } } return info; } function getDefaultLabel(col) { var info = parseExpr(col), - label = info.field.label; + label = ''; if (info.fn) { - label = '(' + info.fn.title + ') ' + label; - } - if (info.join) { - label = info.join.label + ': ' + label; + label = '(' + info.fn.title + ')'; } + _.each(info.args, function(arg) { + if (arg.join) { + label += (label ? ' ' : '') + arg.join.label + ':'; + } + if (arg.field) { + label += (label ? ' ' : '') + arg.field.label; + } else { + label += (label ? ' ' : '') + arg.value; + } + }); return label; } function fieldToColumn(fieldExpr, defaults) { var info = parseExpr(fieldExpr), + field = (_.findWhere(info.args, {type: 'field'}) || {}).field || {}, values = _.merge({ type: 'field', key: info.alias, - dataType: (info.fn && info.fn.dataType) || (info.field && info.field.data_type) + dataType: (info.fn && info.fn.dataType) || field.data_type }, defaults); if (defaults.label === true) { values.label = getDefaultLabel(fieldExpr); } + if (defaults.sortable) { + values.sortable = field.type && field.type !== 'Pseudo'; + } return values; } return { @@ -224,12 +329,25 @@ }, // Returns name of explicit or implicit join, for links getJoinEntity: function(info) { - if (info.field.fk_entity || info.field.name !== info.field.fieldName) { - return info.prefix + (info.field.fk_entity ? info.field.name : info.field.name.substr(0, info.field.name.lastIndexOf('.'))); - } else if (info.prefix) { - return info.prefix.replace('.', ''); + var arg = _.findWhere(info.args, {type: 'field'}) || {}, + field = arg.field || {}; + if (field.fk_entity || field.name !== field.fieldName) { + return arg.prefix + (field.fk_entity ? field.name : field.name.substr(0, field.name.lastIndexOf('.'))); + } else if (arg.prefix) { + return arg.prefix.replace('.', ''); } return ''; + }, + getPrimaryAndSecondaryEntitySelect: function() { + var primaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'primary'}), + secondaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'secondary'}), + select = formatForSelect2(primaryEntities, 'name', 'title_plural', ['description', 'icon']); + select.push({ + text: ts('More...'), + description: ts('Other less-commonly searched entities'), + children: formatForSelect2(secondaryEntities, 'name', 'title_plural', ['description', 'icon']) + }); + return select; } }; }) diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose.html index 64b1694b268f8821245b2ea1f0a327bd81f0a91c..6437a92b5782c63aa050f2db07e8ec6d20b69a01 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/compose.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/compose.html @@ -35,17 +35,6 @@ crm-ui-select="{placeholder: ts('Group By'), data: fieldsForGroupBy, dropdownCss: {width: '300px'}}" on-crm-ui-select="$ctrl.addParam('groupBy', selection)" > </div> - <fieldset id="crm-search-build-functions"> - <legend ng-click="controls.showFunctions = !controls.showFunctions"> - <i class="crm-i fa-caret-{{ !controls.showFunctions ? 'right' : 'down' }}"></i> - {{:: ts('Field Transformations') }} - </legend> - <div ng-if="!!controls.showFunctions"> - <fieldset ng-repeat="col in $ctrl.savedSearch.api_params.select"> - <crm-search-function expr="$ctrl.savedSearch.api_params.select[$index]"></crm-search-function> - </fieldset> - </div> - </fieldset> </fieldset> </div> <div class="crm-search-criteria-column"> @@ -57,3 +46,15 @@ </fieldset> </div> </div> +<fieldset id="crm-search-build-functions"> + <legend ng-click="controls.showFunctions = !controls.showFunctions"> + <i class="crm-i fa-caret-{{ !controls.showFunctions ? 'right' : 'down' }}"></i> + {{:: ts('Field Transformations') }} + </legend> + <div ng-if="!!controls.showFunctions"> + <!-- Must use track by $index with an array of primitives, and manually refresh this loop when indexes change --> + <fieldset ng-repeat="col in $ctrl.savedSearch.api_params.select track by $index" ng-if="!$ctrl.isPseudoField(col)"> + <crm-search-function expr="$ctrl.savedSearch.api_params.select[$index]"></crm-search-function> + </fieldset> + </div> +</fieldset> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index 822f2556eedb979dc48c16cbb50727d06636073a..64868513b759421c33d3f70822d3bc7740815342 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -6,13 +6,15 @@ savedSearch: '<' }, templateUrl: '~/crmSearchAdmin/crmSearchAdmin.html', - controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { + controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this, + afformLoad, fieldsForJoinGetters = {}; this.DEFAULT_AGGREGATE_FN = 'GROUP_CONCAT'; - + this.afformEnabled = CRM.crmSearchAdmin.afformEnabled; + this.afformAdminEnabled = CRM.crmSearchAdmin.afformAdminEnabled; this.displayTypes = _.indexBy(CRM.crmSearchAdmin.displayTypes, 'id'); $scope.controls = {tab: 'compose', joinType: 'LEFT'}; @@ -32,6 +34,7 @@ this.savedSearch.displays = this.savedSearch.displays || []; this.savedSearch.groups = this.savedSearch.groups || []; + this.savedSearch.tag_id = this.savedSearch.tag_id || []; this.groupExists = !!this.savedSearch.groups.length; if (!this.savedSearch.id) { @@ -48,14 +51,7 @@ }); } - var primaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'primary'}), - secondaryEntities = _.filter(CRM.crmSearchAdmin.schema, {searchable: 'secondary'}); - $scope.mainEntitySelect = formatForSelect2(primaryEntities, 'name', 'title_plural', ['description', 'icon']); - $scope.mainEntitySelect.push({ - text: ts('More...'), - description: ts('Other less-commonly searched entities'), - children: formatForSelect2(secondaryEntities, 'name', 'title_plural', ['description', 'icon']) - }); + $scope.mainEntitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); $scope.$watchCollection('$ctrl.savedSearch.api_params.select', onChangeSelect); @@ -79,6 +75,7 @@ }); loadFieldOptions(); + loadAfforms(); }; function onChangeAnything() { @@ -106,6 +103,17 @@ apiCalls.deleteDisplays = ['SearchDisplay', 'delete', {where: [['saved_search_id', '=', params.id]]}]; } delete params.displays; + if (params.tag_id && params.tag_id.length) { + chain.tag_id = ['EntityTag', 'replace', { + where: [['entity_id', '=', '$id'], ['entity_table', '=', 'civicrm_saved_search']], + records: _.transform(params.tag_id, function(records, id) {records.push({tag_id: id});}) + }]; + } else if (params.id) { + chain.tag_id = ['EntityTag', 'delete', { + where: [['entity_id', '=', '$id'], ['entity_table', '=', 'civicrm_saved_search']] + }]; + } + delete params.tag_id; apiCalls.saved = ['SavedSearch', 'save', {records: [params], chain: chain}, 0]; crmApi4(apiCalls).then(function(results) { // After saving a new search, redirect to the edit url @@ -146,6 +154,16 @@ } else if (!display.trashed) { $scope.selectTab('display_' + index); } + if (display.trashed && afformLoad) { + afformLoad.then(function() { + if (ctrl.afforms[display.name]) { + var msg = ctrl.afforms[display.name].length === 1 ? + ts('Form "%1" will be deleted if the embedded display "%2" is deleted.', {1: ctrl.afforms[display.name][0].title, 2: display.label}) : + ts('%1 forms will be deleted if the embedded display "%2" is deleted.', {1: ctrl.afforms[display.name].length, 2: display.label}); + CRM.alert(msg, ts('Display embedded'), 'alert'); + } + }); + } } else { $scope.selectTab('compose'); ctrl.savedSearch.displays.splice(index, 1); @@ -292,11 +310,11 @@ function reconcileAggregateColumns() { _.each(ctrl.savedSearch.api_params.select, function(col, pos) { var info = searchMeta.parseExpr(col), - fieldExpr = info.path + info.suffix; + fieldExpr = (_.findWhere(info.args, {type: 'field'}) || {}).value; if (ctrl.canAggregate(col)) { // Ensure all non-grouped columns are aggregated if using GROUP BY if (!info.fn || info.fn.category !== 'aggregate') { - ctrl.savedSearch.api_params.select[pos] = ctrl.DEFAULT_AGGREGATE_FN + '(DISTINCT ' + fieldExpr + ') AS ' + ctrl.DEFAULT_AGGREGATE_FN + '_DISTINCT_' + fieldExpr.replace(/[.:]/g, '_'); + ctrl.savedSearch.api_params.select[pos] = ctrl.DEFAULT_AGGREGATE_FN + '(DISTINCT ' + fieldExpr + ') AS ' + ctrl.DEFAULT_AGGREGATE_FN + '_' + fieldExpr.replace(/[.:]/g, '_'); } } else { // Remove aggregate functions when no grouping @@ -378,9 +396,17 @@ // Deletes an item from an array param this.clearParam = function(name, idx) { + if (name === 'select') { + // Function selectors use `ng-repeat` with `track by $index` so must be refreshed when splicing the array + ctrl.hideFuncitons(); + } ctrl.savedSearch.api_params[name].splice(idx, 1); }; + this.hideFuncitons = function() { + $scope.controls.showFunctions = false; + }; + function onChangeSelect(newSelect, oldSelect) { // When removing a column from SELECT, also remove from ORDER BY & HAVING _.each(_.difference(oldSelect, newSelect), function(col) { @@ -400,14 +426,18 @@ if (!ctrl.savedSearch.api_params.groupBy.length) { return false; } - var info = searchMeta.parseExpr(col); + var arg = _.findWhere(searchMeta.parseExpr(col).args, {type: 'field'}) || {}; + // If the column is not a database field, no + if (!arg.field || !arg.field.entity || arg.field.type !== 'Field') { + return false; + } // If the column is used for a groupBy, no - if (ctrl.savedSearch.api_params.groupBy.indexOf(info.path) > -1) { + if (ctrl.savedSearch.api_params.groupBy.indexOf(arg.path) > -1) { return false; } // If the entity this column belongs to is being grouped by primary key, then also no - var idField = searchMeta.getEntity(info.field.entity).primary_key[0]; - return ctrl.savedSearch.api_params.groupBy.indexOf(info.prefix + idField) < 0; + var idField = searchMeta.getEntity(arg.field.entity).primary_key[0]; + return ctrl.savedSearch.api_params.groupBy.indexOf(arg.prefix + idField) < 0; }; $scope.fieldsForGroupBy = function() { @@ -418,9 +448,10 @@ }; function getFieldsForJoin(joinEntity) { - return {results: ctrl.getAllFields(':name', ['Field', 'Custom'], null, joinEntity)}; + return {results: ctrl.getAllFields(':name', ['Field'], null, joinEntity)}; } + // @return {function} $scope.fieldsForJoin = function(joinEntity) { if (!fieldsForJoinGetters[joinEntity]) { fieldsForJoinGetters[joinEntity] = _.wrap(joinEntity, getFieldsForJoin); @@ -448,34 +479,37 @@ this.getAllFields = function(suffix, allowedTypes, disabledIf, topJoin) { disabledIf = disabledIf || _.noop; - function formatFields(entityName, join) { + + function formatEntityFields(entityName, join) { var prefix = join ? join.alias + '.' : '', result = []; - function addFields(fields) { - _.each(fields, function(field) { - var item = { - id: prefix + field.name + (field.options ? suffix : ''), - text: field.label, - description: field.description - }; - if (disabledIf(item.id)) { - item.disabled = true; - } - if (!allowedTypes || _.includes(allowedTypes, field.type)) { - result.push(item); - } - }); - } - // Add extra searchable fields from bridge entity if (join && join.bridge) { - addFields(_.filter(searchMeta.getEntity(join.bridge).fields, function(field) { - return (field.name !== 'id' && field.name !== 'entity_id' && field.name !== 'entity_table' && !field.fk_entity && !_.includes(field.name, '.')); - })); + formatFields(_.filter(searchMeta.getEntity(join.bridge).fields, function(field) { + return (field.name !== 'id' && field.name !== 'entity_id' && field.name !== 'entity_table' && !field.fk_entity); + }), result, prefix); } - addFields(searchMeta.getEntity(entityName).fields); + formatFields(searchMeta.getEntity(entityName).fields, result, prefix); + return result; + } + + function formatFields(fields, result, prefix) { + prefix = typeof prefix === 'undefined' ? '' : prefix; + _.each(fields, function(field) { + var item = { + id: prefix + field.name + (field.options ? suffix : ''), + text: field.label, + description: field.description + }; + if (disabledIf(item.id)) { + item.disabled = true; + } + if (!allowedTypes || _.includes(allowedTypes, field.type)) { + result.push(item); + } + }); return result; } @@ -490,7 +524,7 @@ text: joinInfo.label, description: joinInfo.description, icon: joinEntity.icon, - children: formatFields(joinEntity.name, joinInfo) + children: formatEntityFields(joinEntity.name, joinInfo) }); } @@ -503,8 +537,18 @@ result.push({ text: mainEntity.title_plural, icon: mainEntity.icon, - children: formatFields(ctrl.savedSearch.api_entity) + children: formatEntityFields(ctrl.savedSearch.api_entity) }); + + // Include SearchKit's pseudo-fields if specifically requested + if (allowedTypes && _.includes(allowedTypes, 'Pseudo')) { + result.push({ + text: ts('Extra'), + icon: 'fa-gear', + children: formatFields(CRM.crmSearchAdmin.pseudoFields, []) + }); + } + _.each(joinEntities, addJoin); return result; }; @@ -516,7 +560,7 @@ var item = { id: info.alias, text: ctrl.getFieldLabel(name), - description: info.field && info.field.description + description: info.fn ? info.fn.description : info.args[0].field && info.args[0].field.description }; if (disabledIf(item.id)) { item.disabled = true; @@ -525,6 +569,10 @@ }); }; + this.isPseudoField = function(name) { + return _.findIndex(CRM.crmSearchAdmin.pseudoFields, {name: name}) >= 0; + }; + /** * Fetch pseudoconstants for main entity + joined entities * @@ -615,12 +663,16 @@ var join = searchMeta.getJoin(joinClause[0]), joinEntity = searchMeta.getEntity(join.entity), primaryKey = joinEntity.primary_key[0], + // Links for aggregate columns get aggregated using GROUP_CONCAT isAggregate = ctrl.canAggregate(join.alias + '.' + primaryKey), + joinPrefix = (isAggregate ? ctrl.DEFAULT_AGGREGATE_FN + '_' : '') + join.alias + '.', bridgeEntity = _.isString(joinClause[2]) ? searchMeta.getEntity(joinClause[2]) : null; _.each(joinEntity.paths, function(path) { var link = _.cloneDeep(path); - link.isAggregate = isAggregate; - link.path = link.path.replace(/\[/g, '[' + join.alias + '.'); + link.path = link.path.replace(/\[/g, '[' + joinPrefix); + if (isAggregate) { + link.path = link.path.replace(/[.:]/g, '_'); + } link.join = join.alias; addTitle(link, join.label); links.push(link); @@ -636,10 +688,10 @@ // Links to implicit joins _.each(ctrl.savedSearch.api_params.select, function(fieldName) { if (!_.includes(fieldName, ' AS ')) { - var info = searchMeta.parseExpr(fieldName); - if (info.field && !info.suffix && !info.fn && (info.field.fk_entity || info.field.name !== info.field.fieldName)) { + var info = searchMeta.parseExpr(fieldName).args[0]; + if (info.field && !info.suffix && !info.fn && info.field.type === 'Field' && (info.field.fk_entity || info.field.name !== info.field.fieldName)) { var idFieldName = info.field.fk_entity ? fieldName : fieldName.substr(0, fieldName.lastIndexOf('.')), - idField = searchMeta.parseExpr(idFieldName).field; + idField = searchMeta.parseExpr(idFieldName).args[0].field; if (!ctrl.canAggregate(idFieldName)) { var joinEntity = searchMeta.getEntity(idField.fk_entity), label = (idField.join ? idField.join.label + ': ' : '') + (idField.input_attrs && idField.input_attrs.label || idField.label); @@ -657,6 +709,39 @@ return _.uniq(links, 'path'); }; + function loadAfforms() { + if (ctrl.afformEnabled && ctrl.savedSearch.id) { + var findDisplays = _.transform(ctrl.savedSearch.displays, function(findDisplays, display) { + if (display.id && display.name) { + findDisplays.push(['search_displays', 'CONTAINS', ctrl.savedSearch.name + '.' + display.name]); + } + }, []); + if (findDisplays.length) { + afformLoad = crmApi4('Afform', 'get', { + select: ['name', 'title', 'search_displays'], + where: [['OR', findDisplays]] + }).then(function(afforms) { + ctrl.afforms = {}; + _.each(afforms, function(afform) { + _.each(_.uniq(afform.search_displays), function(searchNameDisplayName) { + var displayName = searchNameDisplayName.split('.')[1]; + ctrl.afforms[displayName] = ctrl.afforms[displayName] || []; + ctrl.afforms[displayName].push({ + title: afform.title, + link: ctrl.afformAdminEnabled ? CRM.url('civicrm/admin/afform#/edit/' + afform.name) : '', + }); + }); + }); + }); + } + } + } + + // Creating an Afform opens a new tab, so when switching back to this tab, re-check for Afforms + $(window).on('focus', _.debounce(function() { + $scope.$apply(loadAfforms); + }, 10000, {leading: true, trailing: false})); + } }); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html index a4867088092fad252131a8a39801278246813440..ca6c2a2c4b5e8fb66df627abf75a5ef7396390ef 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.html @@ -14,7 +14,7 @@ <form> <div class="crm-flex-box"> <div class="nav-stacked"> - <input id="crm-saved-search-label" class="form-control" ng-model="$ctrl.savedSearch.label" type="text" required placeholder="{{ ts('Untitled Search') }}" /> + <input id="crm-saved-search-label" class="form-control" ng-model="$ctrl.savedSearch.label" type="text" required placeholder="{{:: ts('Untitled Search') }}" /> </div> <div class="crm-flex-4 form-inline"> <label for="crm-search-main-entity">{{:: ts('Search for') }}</label> @@ -22,9 +22,9 @@ <div class="btn-group btn-group-md pull-right"> <button type="button" class="btn" ng-class="{'btn-primary': status === 'unsaved', 'btn-warning': status === 'saving', 'btn-success': status === 'saved'}" ng-disabled="status !== 'unsaved'" ng-click="$ctrl.save()"> <i class="crm-i" ng-class="{'fa-check': status !== 'saving', 'fa-spin fa-spinner': status === 'saving'}"></i> - <span ng-if="status === 'saved'">{{ ts('Saved') }}</span> - <span ng-if="status === 'unsaved'">{{ ts('Save') }}</span> - <span ng-if="status === 'saving'">{{ ts('Saving...') }}</span> + <span ng-if="status === 'saved'">{{:: ts('Saved') }}</span> + <span ng-if="status === 'unsaved'">{{:: ts('Save') }}</span> + <span ng-if="status === 'saving'">{{:: ts('Saving...') }}</span> </button> </div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js index a8e6ebe14f4ea6c4887dbde98c2d34f442333b16..22219d66720db11cbdc25e25d1af2b053ded533d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js @@ -34,8 +34,10 @@ }, controller: function($scope, $timeout, searchMeta) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), - ctrl = this; + ctrl = this, + afforms; + this.afformPath = CRM.url('civicrm/admin/afform'); this.isSuperAdmin = CRM.checkPerm('all CiviCRM permissions and ACLs'); this.aclBypassHelp = ts('Only users with "all CiviCRM permissions and ACLs" can disable permission checks.'); @@ -158,19 +160,28 @@ } var info = searchMeta.parseExpr(col.key), + arg = _.findWhere(info.args, {type: 'field'}) || {}, value = col.key.split(':')[0]; + if (!arg.field || info.fn) { + delete col.editable; + return; + } // If field is an implicit join, use the original fk field - if (info.field.name !== info.field.fieldName) { + if (arg.field.name !== arg.field.fieldName) { value = value.substr(0, value.lastIndexOf('.')); info = searchMeta.parseExpr(value); + arg = info.args[0]; } col.editable = { - entity: info.field.baseEntity, - options: !!info.field.options, - serialize: !!info.field.serialize, - fk_entity: info.field.fk_entity, - id: info.prefix + 'id', - name: info.field.name, + // Hack to support editing relationships + entity: arg.field.entity.replace('RelationshipCache', 'Relationship'), + input_type: arg.field.input_type, + data_type: arg.field.data_type, + options: !!arg.field.options, + serialize: !!arg.field.serialize, + fk_entity: arg.field.fk_entity, + id: arg.prefix + searchMeta.getEntity(arg.field.entity).primary_key[0], + name: arg.field.name, value: value }; }; @@ -178,7 +189,24 @@ this.isEditable = function(col) { var expr = ctrl.getExprFromSelect(col.key), info = searchMeta.parseExpr(expr); - return !col.image && !col.rewrite && !col.link && !info.fn && info.field && !info.field.readonly; + return !col.image && !col.rewrite && !col.link && !info.fn && info.args[0] && info.args[0].field && !info.args[0].field.readonly; + }; + + // Checks if a column contains a sortable value + // Must be a real sql expression (not a pseudo-field like `result_row_num`) + this.canBeSortable = function(col) { + var expr = ctrl.getExprFromSelect(col.key), + info = searchMeta.parseExpr(expr), + arg = (info && info.args && _.findWhere(info.args, {type: 'field'})) || {}; + return arg.field && arg.field.type !== 'Pseudo'; + }; + + // Aggregate functions (COUNT, AVG, MAX) cannot display as links, except for GROUP_CONCAT + // which gets special treatment in APIv4 to convert it to an array. + this.canBeLink = function(col) { + var expr = ctrl.getExprFromSelect(col.key), + info = searchMeta.parseExpr(expr); + return !info.fn || info.fn.category !== 'aggregate' || info.fn.name === 'GROUP_CONCAT'; }; this.toggleLink = function(column) { @@ -292,6 +320,16 @@ } }; + // @return {Array} + this.getAfforms = function() { + if (ctrl.display.name && ctrl.crmSearchAdmin.afforms) { + if (!afforms || (ctrl.crmSearchAdmin.afforms[ctrl.display.name] && afforms !== ctrl.crmSearchAdmin.afforms[ctrl.display.name])) { + afforms = ctrl.crmSearchAdmin.afforms[ctrl.display.name] || []; + } + } + return afforms; + }; + $scope.$watch('$ctrl.display.settings', function() { ctrl.stale = true; }, true); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html index 6393bf24b9740803f25a4a830b67d214d5faccce..17110c51dc486453b1b8f80aed0c0e6fe4668443 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.html @@ -14,6 +14,32 @@ <i class="crm-i fa-unlock"></i> {{:: ts('Anyone who can view this display will be able to see all results, regardless of their permission level.') }} </div> + <div class="btn-group pull-right" ng-if="$ctrl.crmSearchAdmin.afformEnabled && $ctrl.display.name"> + <button type="button" ng-click="$ctrl.openAfformMenu = true;" class="btn dropdown-toggle btn-primary-outline" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <i class="crm-i fa-list-alt"></i> + {{ $ctrl.getAfforms() ? ($ctrl.getAfforms().length === 1 ? ts('1 Form') : ts('%1 Forms', {1: $ctrl.getAfforms().length})) : ts('Forms...') }} + <span class="caret"></span> + </button> + <ul class="dropdown-menu" ng-if=":: $ctrl.openAfformMenu"> + <li ng-if=":: $ctrl.crmSearchAdmin.afformAdminEnabled"> + <a target="_blank" href="{{:: $ctrl.afformPath + '#/create/search/' + $ctrl.crmSearchAdmin.savedSearch.name + '.' + $ctrl.display.name }}"> + <i class="fa fa-plus"></i> {{:: ts('Create form for this display') }} + </a> + </li> + <li class="divider" role="separator" ng-if=":: $ctrl.crmSearchAdmin.afformAdminEnabled"></li> + <li ng-if="!$ctrl.getAfforms()" class="disabled"> + <a href> + <i class="crm-i fa-spinner fa-spin"></i> + </a> + </li> + <li ng-repeat="afform in $ctrl.getAfforms()" title="{{:: $ctrl.crmSearchAdmin.afformAdminEnabled ? ts('Edit form') : '' }}"> + <a target="_blank" ng-href="{{:: afform.link }}"> + <i class="crm-i {{:: $ctrl.crmSearchAdmin.afformAdminEnabled ? 'fa-pencil-square-o' : 'fa-list-alt' }}"></i> + {{:: afform.title }} + </a> + </li> + </ul> + </div> </div> </fieldset> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html index a3a1cf737e2330c39eec10a222918a03a877ced8..248ef07b4671084478d1c3250a4a07367c8ed707 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplaySort.html @@ -2,8 +2,8 @@ <label for="crm-search-display-sort-{{$index}}">{{ $index ? ts('Also by') : ts('Sort by') }}</label> <input id="crm-search-display-sort-{{$index}}" class="form-control huge" ng-model="sort[0]" crm-ui-select="{data: $ctrl.parent.fieldsForSort}" /> <select class="form-control" ng-model="sort[1]" ng-show="sort[0] !== 'RAND()'"> - <option value="ASC">{{ ts('Ascending') }}</option> - <option value="DESC">{{ ts('Descending') }}</option> + <option value="ASC">{{:: ts('Ascending') }}</option> + <option value="DESC">{{:: ts('Descending') }}</option> </select> <a href class="crm-hover-button" title="{{:: ts('Clear') }}" ng-click="$ctrl.display.settings.sort.splice($index, 1)"><i class="crm-i fa-times" aria-hidden="true"></i></a> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html index 8fcdfbb73ed529e22bed28d4eaeab5e599a29c6a..cd5b1f1f91c80b08415362bfc132b0fb4a0066fc 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html @@ -1,10 +1,10 @@ <div class="crm-flex-1 input-group" > <input type="text" class="form-control" ng-if="!$ctrl.getLink($ctrl.link.path)" ng-model="$ctrl.link.path" ng-model-options="{updateOn: 'blur'}" ng-change="$ctrl.onChange({before: 'civicrm/', after: $ctrl.link.path})"> <div class="input-group-btn" style="{{ $ctrl.getLink($ctrl.link.path) ? '' : 'width:27px' }}"> - <button type="button" class="btn btn-default-outline dropdown-toggle" style="min-width: 200px; text-align: left;" ng-if="$ctrl.getLink($ctrl.link.path)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <button type="button" class="btn btn-sm btn-secondary-outline dropdown-toggle" style="min-width: 200px; text-align: left;" ng-if="$ctrl.getLink($ctrl.link.path)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> {{ $ctrl.getLink($ctrl.link.path).title }} </button> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <button type="button" class="btn btn-sm btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="caret"></span> </button> <ul class="dropdown-menu {{ $ctrl.getLink($ctrl.link.path) ? '' : 'dropdown-menu-right' }}" style="min-width: 223px;"> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.component.js new file mode 100644 index 0000000000000000000000000000000000000000..0527d1a1c45873e9d0d81c839443f16aab938a1f --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.component.js @@ -0,0 +1,84 @@ +(function(angular, $, _) { + "use strict"; + + angular.module('crmSearchAdmin').component('crmSearchAdminTags', { + bindings: { + tagIds: '<', + savedSearchId: '<' + }, + templateUrl: '~/crmSearchAdmin/crmSearchAdminTags.html', + controller: function ($scope, $element, crmApi4, crmStatus) { + var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), + ctrl = this; + this.allTags = CRM.crmSearchAdmin.tags; + + function reset() { + ctrl.menuOpen = false; + ctrl.search = ''; + } + + this.$onInit = function() { + ctrl.tagIds = ctrl.tagIds || []; + reset(); + $element.on('hidden.bs.dropdown', function() { + $scope.$apply(reset); + }); + }; + + this.openMenu = function() { + ctrl.menuOpen = true; + ctrl.color = getRandomColor(); + }; + + this.getTag = function(id) { + return _.findWhere(ctrl.allTags, {id: id}); + }; + + this.hasTag = function(tag) { + return _.includes(ctrl.tagIds, tag.id); + }; + + this.getStyle = function(id) { + var tag = ctrl.getTag(id); + if (tag && tag.color) { + return 'background-color: ' + tag.color + '; color: ' + CRM.utils.colorContrast(tag.color); + } + return ''; + }; + + this.toggleTag = function(tag) { + if (ctrl.hasTag(tag)) { + _.remove(ctrl.tagIds, function(id) {return id === tag.id;}); + if (ctrl.savedSearchId) { + crmStatus({}, crmApi4('EntityTag', 'delete', { + where: [['entity_id', '=', ctrl.savedSearchId], ['tag_id', '=', tag.id], ['entity_table', '=', 'civicrm_saved_search']] + })); + } + } else { + ctrl.tagIds.push(tag.id); + if (ctrl.savedSearchId) { + crmStatus({}, crmApi4('EntityTag', 'create', { + values: {entity_id: ctrl.savedSearchId, tag_id: tag.id, entity_table: 'civicrm_saved_search'} + })); + } + } + }; + + this.makeTag = function(name) { + crmApi4('Tag', 'create', { + values: {name: name, color: ctrl.color, is_selectable: true, used_for: ['civicrm_saved_search']} + }, 0).then(function(tag) { + ctrl.allTags.push(tag); + ctrl.toggleTag(tag); + }); + }; + + // TODO: Use https://github.com/davidmerfield/randomColor + function getRandomColor() { + return '#' + Math.floor(Math.random()*16777215).toString(16); + } + + } + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.html new file mode 100644 index 0000000000000000000000000000000000000000..31711443dc46e993d6f5682e7a3b2cfe2ea25415 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTags.html @@ -0,0 +1,29 @@ +<button type="button" class="btn btn-secondary-outline dropdown-toggle" ng-click="$ctrl.openMenu()" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <i class="crm-i fa-tag"></i> + <span class="crm-search-admin-tags-btn-label">{{:: ts('Tags') }}</span> + <span class="caret"></span> +</button> +<ul class="dropdown-menu" ng-if="$ctrl.menuOpen"> + <li> + <div class="form-inline" ng-click="$event.stopPropagation()"> + <input type="search" placeholder="{{:: ts('Add tag...') }}" ng-model="$ctrl.search"> + </div> + </li> + <li ng-if="$ctrl.search.length > 1"> + <div class="form-inline"> + <label ng-click="$ctrl.makeTag($ctrl.search)">{{:: ts('Create Tag') }}</label> + <input type="color" ng-model="$ctrl.color"> + <a href ng-click="$ctrl.makeTag($ctrl.search)">{{ $ctrl.search }}</a> + </div> + </li> + <li ng-repeat="tag in $ctrl.allTags | filter:{name: $ctrl.search, is_selectable: true}"> + <a href ng-click="$ctrl.toggleTag(tag)"> + <i class="crm-i fa-check" style="visibility: {{ $ctrl.hasTag(tag) ? 'visible' : 'hidden' }}"></i> + <span class="crm-search-admin-tag-color" style="background-color: {{:: tag.color }}"></span> + {{:: tag.name }} + </a> + </li> +</ul> +<span class="badge" ng-repeat="id in $ctrl.tagIds" style="{{:: $ctrl.getStyle(id) }}"> + {{:: $ctrl.getTag(id).name }} +</span> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js index f364ebf66df1a2722716366819cd65a6c827e7e7..b1f69ba2f2e13e92bc3d26a2db4ccbb51c3e855d 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js @@ -27,7 +27,7 @@ }; this.getTokens = function() { - var allFields = ctrl.admin.getAllFields(ctrl.suffix || '', ['Field', 'Custom', 'Extra']); + var allFields = ctrl.admin.getAllFields(ctrl.suffix || '', ['Field', 'Custom', 'Extra', 'Pseudo']); _.eachRight(ctrl.admin.savedSearch.api_params.select, function(fieldName) { allFields.unshift({ id: fieldName, diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js index c2b21354ebf1732a595b9263c442743c8271ad3c..25b3e0a0a265a4d70fb7f7b07e39beafc2ff962e 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchClause.component.js @@ -63,14 +63,14 @@ this.getField = function(expr) { if (!meta[expr]) { - meta[expr] = searchMeta.parseExpr(expr); + meta[expr] = searchMeta.parseExpr(expr).args[0]; } return meta[expr].field; }; this.getOptionKey = function(expr) { if (!meta[expr]) { - meta[expr] = searchMeta.parseExpr(expr); + meta[expr] = _.findWhere(searchMeta.parseExpr(expr).args, {type: 'field'}); } return meta[expr].suffix ? meta[expr].suffix.slice(1) : 'id'; }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js index 7ea57ecd4b75d552c90c03eec57feeda04a9dd09..3fda35afe004bb38c7ad97ce04bf855633d03943 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.component.js @@ -21,77 +21,149 @@ string: ts('Text') }; - $scope.$watch('$ctrl.expr', function(expr) { - var fieldInfo = searchMeta.parseExpr(expr); - ctrl.path = fieldInfo.path + fieldInfo.suffix; - ctrl.field = [fieldInfo.field]; - ctrl.fn = !fieldInfo.fn ? '' : fieldInfo.fn.name; - ctrl.modifier = fieldInfo.modifier || null; + this.exprTypes = { + SqlField: {label: ts('Field'), type: 'field'}, + SqlString: {label: ts('Text'), type: 'string'}, + SqlNumber: {label: ts('Number'), type: 'number'}, + }; + + this.$onInit = function() { + var info = searchMeta.parseExpr(ctrl.expr); + ctrl.fieldArg = _.findWhere(info.args, {type: 'field'}); + ctrl.args = info.args; + ctrl.fn = info.fn; + ctrl.fnName = !info.fn ? '' : info.fn.name; initFunction(); - }); + }; + + this.addArg = function(exprType) { + var param = ctrl.getParam(ctrl.args.length); + ctrl.args.push({ + type: ctrl.exprTypes[exprType].type, + flag_before: _.keys(param.flag_before)[0], + value: exprType === 'SqlNumber' ? 0 : '' + }); + }; function initFunction() { - ctrl.fnInfo = _.find(CRM.crmSearchAdmin.functions, {name: ctrl.fn}); - if (ctrl.fnInfo && ctrl.fnInfo.params[0] && !_.isEmpty(ctrl.fnInfo.params[0].flag_before)) { - ctrl.modifierName = _.keys(ctrl.fnInfo.params[0].flag_before)[0]; - ctrl.modifierLabel = ctrl.fnInfo.params[0].flag_before[ctrl.modifierName]; - } - else { - ctrl.modifierName = null; - ctrl.modifier = null; + if (!ctrl.fn) { + return; } + // Push args to reach the minimum + _.each(ctrl.fn.params, function(param, index) { + while ( + (ctrl.args.length - index < param.min_expr) && + // TODO: Handle named params like "ORDER BY" + !param.name && + (!param.optional || param.must_be.length === 1) + ) { + ctrl.addArg(param.must_be[0]); + } + }); } + this.getParam = function(index) { + return ctrl.fn.params[index] || _.last(ctrl.fn.params); + }; + + this.canAddArg = function() { + if (!ctrl.fn) { + return false; + } + var param = ctrl.getParam(ctrl.args.length), + index = ctrl.fn.params.indexOf(param); + // TODO: Handle named params like "ORDER BY" + if (param.name) { + return false; + } + return ctrl.args.length - index < param.max_expr; + }; + // On-demand options for dropdown function selector this.getFunctions = function() { var allowedTypes = [], functions = []; - if (ctrl.expr && ctrl.field) { + if (ctrl.expr && ctrl.fieldArg) { if (ctrl.crmSearchAdmin.canAggregate(ctrl.expr)) { allowedTypes.push('aggregate'); } else { allowedTypes.push('comparison', 'string'); - if (_.includes(['Integer', 'Float', 'Date', 'Timestamp'], ctrl.field[0].data_type)) { + if (_.includes(['Integer', 'Float', 'Date', 'Timestamp', 'Money'], ctrl.fieldArg.field.data_type)) { allowedTypes.push('math'); } - if (_.includes(['Date', 'Timestamp'], ctrl.field[0].data_type)) { + if (_.includes(['Date', 'Timestamp'], ctrl.fieldArg.field.data_type)) { allowedTypes.push('date'); } } _.each(allowedTypes, function(type) { var allowedFunctions = _.filter(CRM.crmSearchAdmin.functions, function(fn) { - return fn.category === type && - fn.params.length && - // For now, only support functions that take a single field - fn.params[0].min_expr === 1 && - fn.params[0].max_expr === 1 && - !_.includes(fn.params[0].cant_be, 'SqlField') && - (!fn.params[0].must_be.length || _.includes(fn.params[0].must_be, 'SqlField')); + return fn.category === type && fn.params.length; }); functions.push({ text: allTypes[type], - children: formatForSelect2(allowedFunctions, 'name', 'title') + children: formatForSelect2(allowedFunctions, 'name', 'title', ['description']) }); }); } return {results: functions}; }; + this.getFields = function() { + return { + results: ctrl.crmSearchAdmin.getAllFields(':label', ['Field', 'Custom', 'Extra']) + }; + }; + this.selectFunction = function() { + ctrl.fn = _.find(CRM.crmSearchAdmin.functions, {name: ctrl.fnName}); + delete ctrl.fieldArg.flag_before; + ctrl.args = [ctrl.fieldArg]; + if (ctrl.fn) { + var exprType, pos = 0, + uiDefaults = ctrl.fn.params[0].ui_defaults || []; + // Add non-field args to the beginning if needed + while (uiDefaults[pos] && uiDefaults[pos].type && uiDefaults[pos].type !== 'SqlField') { + exprType = uiDefaults[pos].type; + ctrl.args.splice(pos, 0, { + type: ctrl.exprTypes[exprType].type, + value: exprType === 'SqlNumber' ? 0 : '' + }); + ++pos; + } + initFunction(); + } ctrl.writeExpr(); }; - this.toggleModifier = function() { - ctrl.modifier = ctrl.modifier ? null : ctrl. modifierName; + this.changeArg = function(index) { + var val = ctrl.args[index].value; + // Delete empty value + if (index && !val && ctrl.args.length > ctrl.fn.params[0].min_expr) { + ctrl.args.splice(index, 1); + } ctrl.writeExpr(); }; // Make a sql-friendly alias for this expression function makeAlias() { - return (ctrl.fn + '_' + (ctrl.modifier ? ctrl.modifier + '_' : '') + ctrl.path).replace(/[.:]/g, '_'); + var args = _.pluck(_.filter(_.filter(ctrl.args, 'value'), {type: 'field'}), 'value'); + return (ctrl.fnName + '_' + args.join('_')).replace(/[.:]/g, '_'); } this.writeExpr = function() { - ctrl.expr = ctrl.fn ? (ctrl.fn + '(' + (ctrl.modifier ? ctrl.modifier + ' ' : '') + ctrl.path + ') AS ' + makeAlias()) : ctrl.path; + if (ctrl.fnName) { + var args = _.transform(ctrl.args, function(args, arg, index) { + if (arg.value) { + var prefix = arg.flag_before ? (index ? ' ' : '') + arg.flag_before + ' ' : (index ? ', ' : ''); + args.push(prefix + (arg.type === 'string' ? JSON.stringify(arg.value) : arg.value)); + } + }); + // Replace fake function "e" + ctrl.expr = (ctrl.fnName === 'e' ? '' : ctrl.fnName) + '('; + ctrl.expr += args.join(''); + ctrl.expr += ') AS ' + makeAlias(); + } else { + ctrl.expr = ctrl.args[0].value; + } }; } }); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.html index 258433196acae54d5bce51e20ab26ed211c43222..0b4e742de5a1afa6f3afcd65d028930f2f446158 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchFunction.html @@ -1,8 +1,30 @@ <div class="form-inline"> - <label>{{ $ctrl.field[0].label }}:</label> - <input class="form-control" style="width: 15em;" ng-model="$ctrl.fn" crm-ui-select="{data: $ctrl.getFunctions, placeholder: ts('Select')}" ng-change="$ctrl.selectFunction()"> - <label ng-if="$ctrl.modifierName"> - <input type="checkbox" ng-checked="!!$ctrl.modifier" ng-click="$ctrl.toggleModifier()"> - {{ $ctrl.modifierLabel }} + <input class="form-control" style="width: 15em;" ng-model="$ctrl.fnName" crm-ui-select="{data: $ctrl.getFunctions, placeholder: ts('Function')}" ng-change="$ctrl.selectFunction()"> + <label>{{ $ctrl.fieldArg.field.label }}</label> + <label ng-repeat="(val, label) in $ctrl.fn.params[0].flag_before"> + <input type="checkbox" ng-checked="$ctrl.fieldArg.flag_before === val" ng-click="$ctrl.fieldArg.flag_before = ($ctrl.fieldArg.flag_before === val ? null : val); $ctrl.writeExpr();" > + {{ label }} </label> + <div class="form-group" ng-repeat="arg in $ctrl.args" ng-if="arg !== $ctrl.fieldArg"> + <select class="form-control" ng-if="$index && $ctrl.getParam($index).flag_before" ng-model="arg.flag_before" ng-change="$ctrl.writeExpr();"> + <option ng-repeat="(val, label) in $ctrl.getParam($index).flag_before" value="{{ val }}"> + {{ label }} + </option> + </select> + <span ng-switch="arg.type"> + <input ng-switch-when="number" class="form-control" type="number" ng-model="arg.value" placeholder="{{ $ctrl.getParam($index).label }}" ng-change="$ctrl.changeArg($index)" ng-model-options="{updateOn: 'blur'}"> + <input ng-switch-when="string" class="form-control" ng-model="arg.value" placeholder="{{ $ctrl.getParam($index).label }}" ng-change="$ctrl.changeArg($index)" ng-trim="false" ng-model-options="{updateOn: 'blur'}"> + <input ng-switch-default class="form-control" ng-model="arg.value" crm-ui-select="{data: $ctrl.getFields, placeholder: $ctrl.getParam($index).label}" ng-change="$ctrl.changeArg($index)"> + </span> + </div> + <div class="btn-group" ng-if="$ctrl.canAddArg()"> + <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <i class="crm-i fa-plus"></i> <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li ng-repeat="(name, type) in $ctrl.exprTypes" ng-show="$ctrl.getParam($ctrl.args.length).must_be.indexOf(name) >= 0"> + <a href ng-click="$ctrl.addArg(name)">{{ type.label }}</a> + </li> + </ul> + </div> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html index ddc03836572f7093edb5fb6c0328f2b95a9ca72f..801c3d310830eec7a3759e8715339dfcf406ebbd 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/colType/field.html @@ -1,4 +1,4 @@ -<div class="form-inline crm-search-admin-flex-row"> +<div class="form-inline crm-search-admin-flex-row" ng-if=":: $ctrl.parent.canBeLink(col)"> <label title="{{:: ts('Display as clickable link') }}" > <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" > {{:: ts('Link') }} @@ -35,7 +35,7 @@ </div> </div> <div class="form-inline crm-search-admin-flex-row"> - <label title="{{ ts('Change the contents of this field, or combine multiple field values.') }}"> + <label title="{{:: ts('Change the contents of this field, or combine multiple field values.') }}"> <input type="checkbox" ng-checked="col.rewrite" ng-click="$ctrl.parent.toggleRewrite(col)" > {{:: ts('Rewrite') }} </label> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchButtonConfig.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchButtonConfig.html index 64c67b8deeb5a8fdf9d61f050295b7f82f8761bd..790c3cdaafbc5bf99374cbd28777e09a811e4d00 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchButtonConfig.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/common/searchButtonConfig.html @@ -1,10 +1,10 @@ <div class="input-group"> <div class="input-group-btn" title="{{:: ts('Should the search be run immediately, or wait for the user to click a button?') }}"> - <button type="button" class="btn btn-outline-default" ng-click="$ctrl.display.settings.button = null" ng-class="{active: !$ctrl.display.settings.button}"> + <button type="button" class="btn btn-secondary-outline btn-sm" ng-click="$ctrl.display.settings.button = null" ng-class="{active: !$ctrl.display.settings.button}"> <i class="crm-i fa-{{ $ctrl.display.settings.button ? '' : 'check-' }}circle-o"></i> {{:: ts('Auto-Run') }} </button> - <button type="button" class="btn btn-outline-default" ng-click="$ctrl.display.settings.button = ts('Search')" ng-class="{active: $ctrl.display.settings.button}"> + <button type="button" class="btn btn-secondary-outline btn-sm" ng-click="$ctrl.display.settings.button = ts('Search')" ng-class="{active: $ctrl.display.settings.button}"> <i class="crm-i fa-{{ !$ctrl.display.settings.button ? '' : 'check-' }}circle-o"></i> {{:: ts('Search Button') }} </button> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.html index 2da44b5580765a2e667be89ffb918bcfab7e79b2..f08c98c633768d4b01082a2e7cebd69e8c7f30f6 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayGrid.html @@ -20,7 +20,7 @@ <div class="crm-search-admin-edit-columns" ng-model="$ctrl.display.settings.columns" ui-sortable="$ctrl.parent.sortableOptions"> <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> - <div class="form-inline" title="{{ ts('Should this item display on its own line or inline with other items?') }}"> + <div class="form-inline" title="{{:: ts('Should this item display on its own line or inline with other items?') }}"> <label><input type="checkbox" ng-model="col.break"> {{:: ts('New Line') }}</label> <button type="button" class="btn-xs pull-right" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> <i class="crm-i fa-ban"></i> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html index 5d733db80b5bc3679c608639fda76f4154d3fa4e..3561df20b9236b0db70f6c8d4dee97854be1ce93 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayList.html @@ -24,7 +24,7 @@ <div class="crm-search-admin-edit-columns" ng-model="$ctrl.display.settings.columns" ui-sortable="$ctrl.parent.sortableOptions"> <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> - <div class="form-inline" title="{{ ts('Should this item display on its own line or inline with other items?') }}"> + <div class="form-inline" title="{{:: ts('Should this item display on its own line or inline with other items?') }}"> <label><input type="checkbox" ng-model="col.break"> {{:: ts('New Line') }}</label> <button type="button" class="btn-xs pull-right" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> <i class="crm-i fa-ban"></i> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js index 23b7c4daeb6151335edb822f4298a378a1985b57..c4df08c5c5da9a454188e24b53e17f184472ad1f 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js @@ -15,14 +15,35 @@ var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), ctrl = this; + this.tableClasses = [ + {name: 'table', label: ts('Row Borders')}, + {name: 'table-bordered', label: ts('Column Borders')}, + {name: 'table-striped', label: ts('Even/Odd Stripes')} + ]; + + // Check if array conatains item + this.includes = _.includes; + + // Add or remove an item from an array + this.toggle = function(collection, item) { + if (_.includes(collection, item)) { + _.pull(collection, item); + } else { + collection.push(item); + } + }; + this.$onInit = function () { if (!ctrl.display.settings) { ctrl.display.settings = { limit: CRM.crmSearchAdmin.defaultPagerSize, + classes: ['table'], pager: {} }; } - ctrl.parent.initColumns({label: true}); + // Displays created prior to 5.43 may not have this property + ctrl.display.settings.classes = ctrl.display.settings.classes || []; + ctrl.parent.initColumns({label: true, sortable: true}); }; } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html index c2961ecf2579d52487315a54afc2eba280f12344..b3234eadaa155b9e4f4f36781e145aa2baa0688c 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html @@ -9,6 +9,15 @@ </div> <div class="form-group" ng-include="'~/crmSearchAdmin/displays/common/searchButtonConfig.html'"></div> </div> + <div class="form-inline"> + <label>{{:: ts('Table Style') }}</label> + <div class="checkbox-inline form-control" ng-repeat="style in $ctrl.tableClasses"> + <label> + <input type="checkbox" ng-checked="$ctrl.includes($ctrl.display.settings.classes, style.name)" ng-click="$ctrl.toggle($ctrl.display.settings.classes, style.name)"> + <span>{{:: style.label }}</span> + </label> + </div> + </div> <search-admin-pager-config display="$ctrl.display"></search-admin-pager-config> </fieldset> <fieldset class="crm-search-admin-edit-columns-wrapper"> @@ -34,6 +43,12 @@ <option value="text-right">{{:: ts('Right') }}</option> </select> </div> + <div class="form-inline" ng-if=":: $ctrl.parent.canBeSortable(col)"> + <label title="{{:: ts('Allow user to click on header to sort table by this column') }}"> + <input type="checkbox" ng-checked="col.sortable !== false" ng-click="col.sortable = col.sortable === false" > + {{:: ts('Sortable Header') }} + </label> + </div> <div ng-include="'~/crmSearchAdmin/displays/colType/' + col.type + '.html'"></div> </fieldset> </div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html index db196e39307ad379b827d01a282e5846672f0462..66a8e5cb083e5ff5f4e511529cdfd6acaf50c5c8 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/group.html @@ -3,7 +3,7 @@ </div> <div class="form-inline"> - <label for="crm-search-admin-group-title">{{ ts('Group Title') }} <span class="crm-marker">*</span></label> + <label for="crm-search-admin-group-title">{{:: ts('Group Title') }} <span class="crm-marker">*</span></label> <input id="crm-search-admin-group-title" class="form-control" placeholder="{{:: ts('Untitled') }}" ng-model="$ctrl.savedSearch.groups[0].title" ng-disabled="!smartGroupColumns.length" ng-required="smartGroupColumns.length"> <label for="api-save-search-select-column">{{:: ts('Contact Column') }}</label> <input id="api-save-search-select-column" ng-model="$ctrl.savedSearch.api_params.select[0]" class="form-control huge" crm-ui-select="{data: smartGroupColumns}"/> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.component.js index 71f09c22ea1ba168695ba7c39b296219204d06d4..f00dc3a831cc69286a061dd1a97c5cbb2d3c148c 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.component.js @@ -18,8 +18,9 @@ // Output user-facing name/label fields as a link, if possible function getViewLink(fieldExpr, links) { var info = searchMeta.parseExpr(fieldExpr), - entity = searchMeta.getEntity(info.field.entity); - if (!info.fn && entity && info.field.fieldName === entity.label_field) { + firstField = _.findWhere(info.args, {type: 'field'}), + entity = firstField && searchMeta.getEntity(firstField.field.entity); + if (entity && firstField.field.fieldName === entity.label_field) { var joinEntity = searchMeta.getJoinEntity(info); return _.find(links, {join: joinEntity, action: 'view'}); } @@ -34,9 +35,10 @@ limit: CRM.crmSearchAdmin.defaultPagerSize, pager: {show_count: true, expose_limit: true}, actions: true, + classes: ['table', 'table-striped'], button: ts('Search'), columns: _.transform(ctrl.search.api_params.select, function(columns, fieldExpr) { - var column = {label: true}, + var column = {label: true, sortable: true}, link = getViewLink(fieldExpr, links); if (link) { column.title = link.title; @@ -106,11 +108,13 @@ if (!ui.item.sortable.dropindex && ctrl.crmSearchAdmin.groupExists) { ui.item.sortable.cancel(); } + // Function selectors use `ng-repeat` with `track by $index` so must be refreshed when rearranging the array + ctrl.crmSearchAdmin.hideFuncitons(); } }; $scope.fieldsForSelect = function() { - return {results: ctrl.crmSearchAdmin.getAllFields(':label', ['Field', 'Custom', 'Extra'], function(key) { + return {results: ctrl.crmSearchAdmin.getAllFields(':label', ['Field', 'Custom', 'Extra', 'Pseudo'], function(key) { return _.contains(ctrl.search.api_params.select, key); }) }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html index 101d101949331dcb8f1d0aed1f6df0e21db50391..f8c04f2f6cfe6b088e520acb98736067ed604653 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.html @@ -4,22 +4,22 @@ <div class="btn-group" ng-include="'~/crmSearchDisplay/SearchButton.html'"></div> <crm-search-tasks entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" search="$ctrl.search" display="$ctrl.display" display-controller="$ctrl" refresh="$ctrl.refreshAfterTask()"></crm-search-tasks> </div> - <table> + <table class="{{:: $ctrl.settings.classes.join(' ') }}"> <thead> <tr ng-model="$ctrl.search.api_params.select" ui-sortable="sortableColumnOptions"> <th class="crm-search-result-select" ng-if=":: $ctrl.settings.actions"> <input type="checkbox" ng-disabled="$ctrl.loading || !$ctrl.results.length" ng-checked="$ctrl.allRowsSelected" ng-click="$ctrl.selectAllRows()" > </th> <th ng-repeat="item in $ctrl.search.api_params.select" ng-click="$ctrl.setSort($ctrl.settings.columns[$index], $event)" title="{{$index || !$ctrl.crmSearchAdmin.groupExists ? ts('Drag to reorder columns, click to sort results (shift-click to sort by multiple).') : ts('Column reserved for smart group.')}}"> - <i class="crm-i {{ $ctrl.getSort($ctrl.settings.columns[$index]) }}"></i> + <i ng-if=":: $ctrl.isSortable($ctrl.settings.columns[$index])" class="crm-i {{ $ctrl.getSort($ctrl.settings.columns[$index]) }}"></i> <span ng-class="{'crm-draggable': $index || !$ctrl.crmSearchAdmin.groupExists}">{{ $ctrl.settings.columns[$index].label }}</span> <span ng-switch="$index || !$ctrl.crmSearchAdmin.groupExists ? 'sortable' : 'locked'"> <i ng-switch-when="locked" class="crm-i fa-lock" aria-hidden="true"></i> <a href ng-switch-default class="crm-hover-button" title="{{:: ts('Clear') }}" ng-click="removeColumn($index); $event.stopPropagation();"><i class="crm-i fa-times" aria-hidden="true"></i></a> </span> </th> - <th class="form-inline"> - <input class="form-control crm-action-menu fa-plus" + <th class="form-inline text-right"> + <input class="form-control crm-action-menu fa-plus collapsible-optgroups" crm-ui-select="::{data: fieldsForSelect, placeholder: ts('Add'), width: '80px', containerCss: {minWidth: '80px'}, dropdownCss: {width: '300px'}}" on-crm-ui-select="addColumn(selection)" > </th> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/afforms.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/afforms.html index 12f6a403870b5ad29f11c5fe65bc949660232bce..856b6d10d1e0ffaa37dec6a1f6a7ba5b8993f91f 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/afforms.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/afforms.html @@ -16,9 +16,9 @@ <em ng-if="$ctrl.afforms && !$ctrl.afforms[row.name.raw]">{{:: ts('None Found') }}</em> </a> </li> - <li ng-if="$ctrl.afforms" ng-repeat="afform in $ctrl.afforms[row.name.raw]" title="{{:: ts('Edit form') }}"> - <a target="_blank" href="{{:: $ctrl.afformPath + '#/edit/' + afform.name }}"> - <i class="crm-i fa-pencil-square-o"></i> + <li ng-if="$ctrl.afforms" ng-repeat="afform in $ctrl.afforms[row.name.raw]" title="{{:: $ctrl.afformAdminEnabled ? ts('Edit form') : '' }}"> + <a target="_blank" ng-href="{{:: afform.link }}"> + <i class="crm-i {{:: $ctrl.afformAdminEnabled ? 'fa-pencil-square-o' : 'fa-list-alt' }}"></i> {{:: afform.title }} </a> </li> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html index ee5eff3621229d02b77885e034bdd2a000c719f0..1f86009c68a98a20d82e88c4dd05397eeaf0bfb8 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/buttons.html @@ -4,6 +4,6 @@ <a class="btn btn-xs btn-default" href="#/create/{{:: row.api_entity.raw + '?params=' + $ctrl.encode(row.api_params.raw) }}"> {{:: ts('Clone') }} </a> -<a href class="btn btn-xs btn-danger" crm-confirm="{type: 'delete', obj: row}" on-yes="$ctrl.deleteSearch(row)"> +<a href class="btn btn-xs btn-danger" ng-click="$ctrl.confirmDelete(row)"> {{:: ts('Delete') }} </a> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js index 038ec00c2e84162d327a36fe266eb9f06233a9e8..b689022133799778e4733e675a1f090bb0499663 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js @@ -4,15 +4,17 @@ // Specialized searchDisplay, only used by Admins angular.module('crmSearchAdmin').component('crmSearchAdminSearchListing', { templateUrl: '~/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html', - controller: function($scope, crmApi4, crmStatus, searchMeta, searchDisplayBaseTrait, searchDisplaySortableTrait) { + controller: function($scope, $q, crmApi4, crmStatus, searchMeta, searchDisplayBaseTrait, searchDisplaySortableTrait, formatForSelect2) { var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), // Mix in traits to this controller - ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplaySortableTrait); + ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplaySortableTrait), + afformLoad; this.searchDisplayPath = CRM.url('civicrm/search'); this.afformPath = CRM.url('civicrm/admin/afform'); this.afformEnabled = CRM.crmSearchAdmin.afformEnabled; this.afformAdminEnabled = CRM.crmSearchAdmin.afformAdminEnabled; + this.entitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); this.apiEntity = 'SavedSearch'; this.search = { @@ -26,15 +28,26 @@ 'api_entity', 'api_entity:label', 'api_params', + // These two need to be in the select clause so they are allowed as filters + 'created_id.display_name', + 'modified_id.display_name', 'created_date', 'modified_date', + 'DATE(created_date) AS date_created', + 'DATE(modified_date) AS date_modified', 'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name', 'GROUP_CONCAT(display.label ORDER BY display.id) AS display_label', 'GROUP_CONCAT(display.type:icon ORDER BY display.id) AS display_icon', 'GROUP_CONCAT(display.acl_bypass ORDER BY display.id) AS display_acl_bypass', + 'tags', // Not a selectable field but this hacks around the requirement that filters be in the select clause + 'GROUP_CONCAT(DISTINCT entity_tag.tag_id) AS tag_id', 'GROUP_CONCAT(DISTINCT group.title) AS groups' ], - join: [['SearchDisplay AS display'], ['Group AS group']], + join: [ + ['SearchDisplay AS display', 'LEFT', ['id', '=', 'display.saved_search_id']], + ['Group AS group', 'LEFT', ['id', '=', 'group.saved_search_id']], + ['EntityTag AS entity_tag', 'LEFT', ['entity_tag.entity_table', '=', '"civicrm_saved_search"'], ['id', '=', 'entity_tag.entity_id']], + ], where: [['api_entity', 'IS NOT NULL']], groupBy: ['id'] } @@ -60,6 +73,40 @@ return encodeURI(angular.toJson(params)); }; + this.confirmDelete = function(search) { + function getConfirmationMsg() { + var msg = '<h4>' + _.escape(ts('Permanently delete this saved search?')) + '</h4>' + + '<ul>'; + if (search.display_label.view && search.display_label.view.length === 1) { + msg += '<li>' + _.escape(ts('Includes 1 display which will also be deleted.')) + '</li>'; + } else if (search.display_label.view && search.display_label.view.length > 1) { + msg += '<li>' + _.escape(ts('Includes %1 displays which will also be deleted.', {1: search.display_label.view.length})) + '</li>'; + } + _.each(search.groups.view, function(smartGroup) { + msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Smart group "%1" will also be deleted.', {1: smartGroup})) + '</li>'; + }); + if (search.afform_count) { + _.each(ctrl.afforms[search.name.raw], function(afform) { + msg += '<li class="crm-error"><i class="crm-i fa-exclamation-triangle"></i> ' + _.escape(ts('Form "%1" will also be deleted because it contains an embedded display from this search.', {1: afform.title})) + '</li>'; + }); + } + return msg + '</ul>'; + } + + var dialog = CRM.confirm({ + title: ts('Delete %1', {1: search.label.view}), + message: getConfirmationMsg(), + }).on('crmConfirm:yes', function() { + $scope.$apply(function() { + ctrl.deleteSearch(search); + }); + }).block(); + + ctrl.loadAfforms().then(function() { + dialog.html(getConfirmationMsg()).unblock(); + }); + }; + this.deleteSearch = function(search) { crmStatus({start: ts('Deleting...'), success: ts('Search Deleted')}, crmApi4('SavedSearch', 'delete', {where: [['id', '=', search.id.raw]]}).then(function() { @@ -69,6 +116,14 @@ ); }; + this.getTags = function() { + return {results: formatForSelect2(CRM.crmSearchAdmin.tags, 'id', 'name', ['color', 'description'])}; + }; + + this.getEntities = function() { + return {results: formatForSelect2(CRM.crmSearchAdmin.tags, 'id', 'name', ['color', 'description'])}; + }; + function buildDisplaySettings() { ctrl.display = { type: 'table', @@ -76,6 +131,7 @@ limit: CRM.crmSearchAdmin.defaultPagerSize, pager: {show_count: true, expose_limit: true}, actions: false, + classes: ['table', 'table-striped'], sort: [['modified_date', 'DESC']], columns: [ searchMeta.fieldToColumn('label', { @@ -86,6 +142,11 @@ searchMeta.fieldToColumn('api_entity:label', { label: ts('For'), }), + { + type: 'include', + label: ts('Tags'), + path: '~/crmSearchAdmin/searchListing/tags.html' + }, { type: 'include', label: ts('Displays'), @@ -96,13 +157,13 @@ }), searchMeta.fieldToColumn('created_date', { label: ts('Created'), - dataType: 'Date', - rewrite: ts('%1 by %2', {1: '[created_date]', 2: '[created_id.display_name]'}) + title: '[created_date]', + rewrite: ts('%1 by %2', {1: '[date_created]', 2: '[created_id.display_name]'}) }), searchMeta.fieldToColumn('modified_date', { label: ts('Last Modified'), - dataType: 'Date', - rewrite: ts('%1 by %2', {1: '[modified_date]', 2: '[modified_id.display_name]'}) + title: '[modified_date]', + rewrite: ts('%1 by %2', {1: '[date_modified]', 2: '[modified_id.display_name]'}) }), { type: 'include', @@ -113,7 +174,7 @@ } }; if (ctrl.afformEnabled) { - ctrl.display.settings.columns.splice(3, 0, { + ctrl.display.settings.columns.splice(4, 0, { type: 'include', label: ts('Forms'), path: '~/crmSearchAdmin/searchListing/afforms.html' @@ -122,31 +183,38 @@ ctrl.settings = ctrl.display.settings; } + // @return {Promise} this.loadAfforms = function() { - if (ctrl.afforms || ctrl.afforms === null) { - return; + if (!ctrl.afformEnabled && !afformLoad) { + var deferred = $q.defer(); + afformLoad = deferred.promise; + deferred.resolve([]); + } + if (afformLoad) { + return afformLoad; } ctrl.afforms = null; - crmApi4('Afform', 'get', { - select: ['layout', 'name', 'title', 'server_route'], - where: [['type', '=', 'search']], - layoutFormat: 'html' + afformLoad = crmApi4('Afform', 'get', { + select: ['search_displays', 'name', 'title', 'server_route'], + where: [['type', '=', 'search'], ['search_displays', 'IS NOT EMPTY']] }).then(function(afforms) { ctrl.afforms = {}; _.each(afforms, function(afform) { - var searchName = afform.layout.match(/<crm-search-display-[^>]+search-name[ ]*=[ ]*['"]([^"']+)/); - if (searchName) { - ctrl.afforms[searchName[1]] = ctrl.afforms[searchName[1]] || []; - ctrl.afforms[searchName[1]].push({ + _.each(_.uniq(afform.search_displays), function(searchNameDisplayName) { + var searchName = searchNameDisplayName.split('.')[0]; + ctrl.afforms[searchName] = ctrl.afforms[searchName] || []; + ctrl.afforms[searchName].push({ title: afform.title, name: afform.name, + link: ctrl.afformAdminEnabled ? CRM.url('civicrm/admin/afform#/edit/' + afform.name) : '', // FIXME: This is the view url, currently not exposed to the UI, as BS3 doesn't support submenus. url: afform.server_route ? CRM.url(afform.server_route) : null }); - } + }); }); updateAfformCounts(); }); + return afformLoad; }; function updateAfformCounts() { diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html index b2e0db8b3f10cfab495c96ddf6227eb830d9c654..473f38b89e40f020a8d10bde942c34b85cd7abff 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.html @@ -1,8 +1,10 @@ <div id="bootstrap-theme" class="crm-search"> <h1 crm-page-title>{{:: ts('Saved Searches') }}</h1> <div class="form-inline"> - <label for="search-list-filter">{{:: ts('Filter') }}</label> - <input class="form-control" type="search" id="search-list-filter" ng-model="$ctrl.filters.label" placeholder=""> + <input class="form-control" type="search" ng-model="$ctrl.filters.label" placeholder="{{:: ts('Filter by label...') }}"> + <input class="form-control" type="search" ng-model="$ctrl.filters['created_id.display_name,modified_id.display_name']" placeholder="{{:: ts('Filter by author...') }}"> + <input class="form-control collapsible-optgroups" ng-model="$ctrl.filters.api_entity" ng-list crm-ui-select="{multiple: true, data: $ctrl.entitySelect, placeholder: ts('Filter by entity...')}"> + <input class="form-control" ng-model="$ctrl.filters.tags" ng-list crm-ui-select="{multiple: true, data: $ctrl.getTags, placeholder: ts('Filter by tags...')}"> <a class="btn btn-primary pull-right" href="#/create/Contact/"> <i class="crm-i fa-plus"></i> {{:: ts('New Search') }} diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/tags.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/tags.html new file mode 100644 index 0000000000000000000000000000000000000000..3be6368a6043090c337c24e1ccf57817bdb61fba --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/tags.html @@ -0,0 +1 @@ +<crm-search-admin-tags tag-ids="row.tag_id.raw" saved-search-id="row.id.raw" class="btn-group btn-group-xs"></crm-search-admin-tags> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html index c5cf94aeb06011cbbb3bcc10dfacc83a2f4de4c7..22841b6d04b99944ce4f09109ba0be8280028bbb 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/tabs.html @@ -1,7 +1,10 @@ +<li> + <crm-search-admin-tags tag-ids="$ctrl.savedSearch.tag_id" class="btn-group btn-group-sm"></crm-search-admin-tags> +</li> <li role="presentation" ng-class="{active: controls.tab === 'compose'}"> <a href ng-click="selectTab('compose')"> <i class="crm-i fa-gears"></i> - {{ ts('Compose Search') }} + {{:: ts('Compose Search') }} </a> </li> <li role="presentation" ng-class="{active: controls.tab === 'group'}" ng-if="$ctrl.savedSearch.groups.length" title="{{ !$ctrl.groupExists ? ts('Group will be deleted.') : '' }}"> @@ -23,7 +26,7 @@ </button> </li> <li role="presentation"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="crm-i fa-plus"></i> {{:: ts('Add...') }} <span class="caret"></span> </button> <ul class="dropdown-menu"> @@ -33,7 +36,7 @@ {{:: ts('Smart Group') }} </a> </li> - <li class="dropdown-header">{{ ts('Display') }}</li> + <li class="dropdown-header">{{:: ts('Display') }}</li> <li ng-repeat="type in ::$ctrl.displayTypes"> <a href ng-click="$ctrl.addDisplay(type.id)"> <i class="crm-i {{:: type.icon }}"></i> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js index b6b6957562d0b7d92a5763a70bde087296baa8c8..55cb13b943c70deb5f9acb715a5d6d4e847844d4 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js @@ -23,7 +23,8 @@ initialValue = _.cloneDeep(this.row[col.editable.value].raw); this.field = { - data_type: col.dataType, + data_type: col.editable.data_type, + input_type: col.editable.input_type, name: col.editable.name, options: col.editable.options, fk_entity: col.editable.fk_entity, diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js index f4700a6b01882f9ae5d4e1c82d0f46f0b8c37605..89752172d5d14bca15fb985c0116e37c026e4b78 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js @@ -3,7 +3,9 @@ // Trait provides base methods and properties common to all search display types angular.module('crmSearchDisplay').factory('searchDisplayBaseTrait', function(crmApi4) { - var ts = CRM.ts('org.civicrm.search_kit'); + var ts = CRM.ts('org.civicrm.search_kit'), + runCount = 0, + seed = Date.now(); // Replace tokens keyed to rowData. // Pass view=true to replace with view value, otherwise raw value is used. @@ -72,12 +74,13 @@ var ctrl = this; this.limit = this.settings.limit; this.sort = this.settings.sort ? _.cloneDeep(this.settings.sort) : []; + this.seed = Date.now(); this.getResults = _.debounce(function() { $scope.$apply(function() { ctrl.runSearch(); }); - }, 100); + }, 800); // If search is embedded in contact summary tab, display count in tab-header var contactTab = $element.closest('.crm-contact-page .ui-tabs-panel').attr('id'); @@ -128,6 +131,7 @@ display: this.display, sort: this.sort, limit: this.limit, + seed: this.seed, filters: _.assign({}, (this.afFieldset ? this.afFieldset.getFieldData() : {}), this.filters), afform: this.afFieldset ? this.afFieldset.getFormName() : null }; @@ -142,12 +146,16 @@ // Call SearchDisplay.run and update ctrl.results and ctrl.rowCount runSearch: function(editedRow) { var ctrl = this, + requestId = ++runCount, apiParams = this.getApiParams(); this.loading = true; _.each(ctrl.onPreRun, function(callback) { callback.call(ctrl, apiParams); }); return crmApi4('SearchDisplay', 'run', apiParams).then(function(results) { + if (requestId < runCount) { + return; // Another request started after this one + } ctrl.results = results; ctrl.editing = ctrl.loading = false; if (!ctrl.rowCount) { @@ -164,6 +172,9 @@ callback.call(ctrl, results, 'success', editedRow); }); }, function(error) { + if (requestId < runCount) { + return; // Another request started after this one + } ctrl.results = []; ctrl.editing = ctrl.loading = false; _.each(ctrl.onPostRun, function(callback) { diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js index 207da88e10e9f0a96c482a38fb51de4414692bdd..403ddeab5398fffd752fc4684ed0053aca39a0ce 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplaySortableTrait.service.js @@ -10,6 +10,10 @@ sort: [], + isSortable: function(col) { + return col.type === 'field' && col.sortable !== false; + }, + getSort: function(col) { var dir = _.reduce(this.sort, function(dir, item) { return item[0] === col.key ? item[1] : dir; @@ -21,7 +25,7 @@ }, setSort: function(col, $event) { - if (col.type !== 'field') { + if (!this.isSortable(col)) { return; } var dir = this.getSort(col) === 'fa-sort-asc' ? 'DESC' : 'ASC'; diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html index 86c5b1ca070deb8632c1d0dd9a80a2bcf3a0cde1..5857239c13684814984f958f3c61e95f1c4fa488 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.html @@ -3,14 +3,14 @@ <div class="btn-group" ng-include="'~/crmSearchDisplay/SearchButton.html'" ng-if="$ctrl.settings.button"></div> <crm-search-tasks ng-if="$ctrl.settings.actions" entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" search="$ctrl.search" display="$ctrl.display" display-controller="$ctrl" refresh="$ctrl.refreshAfterTask()"></crm-search-tasks> </div> - <table> + <table class="{{:: $ctrl.settings.classes.join(' ') }}"> <thead> <tr> <th class="crm-search-result-select" ng-if=":: $ctrl.settings.actions"> <input type="checkbox" ng-disabled="$ctrl.loading || !$ctrl.results.length" ng-checked="$ctrl.allRowsSelected" ng-click="$ctrl.selectAllRows()" > </th> - <th ng-repeat="col in $ctrl.settings.columns" ng-click="$ctrl.setSort(col, $event)" title="{{:: col.type === 'field' ? ts('Click to sort results (shift-click to sort by multiple).') : '' }}"> - <i ng-if=":: col.type === 'field'" class="crm-i {{ $ctrl.getSort(col) }}"></i> + <th ng-repeat="col in $ctrl.settings.columns" ng-click="$ctrl.setSort(col, $event)" title="{{:: $ctrl.isSortable(col) ? ts('Click to sort results (shift-click to sort by multiple).') : '' }}"> + <i ng-if=":: $ctrl.isSortable(col)" class="crm-i {{ $ctrl.getSort(col) }}"></i> <span>{{:: col.label }}</span> </th> </tr> diff --git a/civicrm/ext/search_kit/css/crmSearchAdmin.css b/civicrm/ext/search_kit/css/crmSearchAdmin.css index bdcf4123c5c3068fd4106062c46490910af3b159..a02c9c956210008fbd50b1bb257990e402806c61 100644 --- a/civicrm/ext/search_kit/css/crmSearchAdmin.css +++ b/civicrm/ext/search_kit/css/crmSearchAdmin.css @@ -211,16 +211,39 @@ #bootstrap-theme tbody .crm-search-admin-icon-col { text-align: center; } +#bootstrap-theme .crm-search-admin-tag-color { + display: inline-block; + width: 12px; + height: 12px; + border: 1px solid lightgrey; + border-radius: 5px; +} + +#bootstrap-theme crm-search-admin-tags.btn-group-xs .crm-search-admin-tags-btn-label { + display: none; +} -#bootstrap-theme input[type=search]::placeholder { - font-family: FontAwesome; - text-align: right; +#bootstrap-theme .dropdown-menu li .form-inline { + padding: 2px 19px 2px 21px; + clear: both; + font-weight: 400; + line-height: 1.5384615385; + color: #4d4d69; + white-space: nowrap; } -#bootstrap-theme input[type=search]:-ms-input-placeholder { - font-family: FontAwesome; - text-align: right; + +#bootstrap-theme .dropdown-menu li > * > label { + font-weight: normal; + cursor: pointer; } -#bootstrap-theme input[type=search]::-ms-input-placeholder { - font-family: FontAwesome; - text-align: right; + +#bootstrap-theme .dropdown-menu li .form-inline > select { + max-width: 120px; + padding-left: 5px; + padding-right: 5px; +} + +#bootstrap-theme li .form-inline input[type=color] { + width: 30px; + padding: 2px 4px; } diff --git a/civicrm/ext/search_kit/css/crmSearchTasks.css b/civicrm/ext/search_kit/css/crmSearchTasks.css index 69f37e89593293e55baae46adcfeb0306aed5e2b..dbd48542e1c2ea67f80c5e4b48cc1ba21a50bd4f 100644 --- a/civicrm/ext/search_kit/css/crmSearchTasks.css +++ b/civicrm/ext/search_kit/css/crmSearchTasks.css @@ -4,6 +4,10 @@ border: 1px solid lightgrey; } +#bootstrap-theme .crm-search-display-table > table.table > thead > tr > th.crm-search-result-select { + vertical-align: middle; +} + .crm-search-display.crm-search-display-table td > crm-search-display-editable, .crm-search-display.crm-search-display-table td > .crm-editable-enabled { display: block !important; diff --git a/civicrm/ext/search_kit/info.xml b/civicrm/ext/search_kit/info.xml index d986a1e3f4c3afbecacf41cd37409faea5c082d0..ff9f27487999f2b87758ca746b8f19880c7df232 100644 --- a/civicrm/ext/search_kit/info.xml +++ b/civicrm/ext/search_kit/info.xml @@ -14,7 +14,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-01-06</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <develStage>beta</develStage> <compatibility> <ver>5.38</ver> diff --git a/civicrm/ext/search_kit/managed/TagUsedFor.mgd.php b/civicrm/ext/search_kit/managed/TagUsedFor.mgd.php new file mode 100644 index 0000000000000000000000000000000000000000..d11246a79358d82a9e09f1a608cfd2cdbedbf225 --- /dev/null +++ b/civicrm/ext/search_kit/managed/TagUsedFor.mgd.php @@ -0,0 +1,15 @@ +<?php +// Adds option group for SearchDisplay.type + +return [ + [ + 'name' => 'SavedSearch:tag_used_for', + 'entity' => 'OptionValue', + 'params' => [ + 'option_group_id' => 'tag_used_for', + 'value' => 'civicrm_saved_search', + 'name' => 'SavedSearch', + 'label' => ts('Saved Searches'), + ], + ], +]; diff --git a/civicrm/ext/search_kit/search_kit.php b/civicrm/ext/search_kit/search_kit.php index 846b2b61b632629b8ddf76599b8a490c8c1f1d54..c37d3e5c482df014e340672d4f210383bc1d6548 100644 --- a/civicrm/ext/search_kit/search_kit.php +++ b/civicrm/ext/search_kit/search_kit.php @@ -130,4 +130,12 @@ function search_kit_civicrm_pre($op, $entity, $id, &$params) { $params['name'] = \CRM_Utils_String::munge($params['label']); } } + // When deleting a saved search, also delete the displays + // This would happen anyway in sql because of the ON DELETE CASCADE foreign key, + // But this ensures that pre and post hooks are called + if ($entity === 'SavedSearch' && $op === 'delete') { + \Civi\Api4\SearchDisplay::delete(FALSE) + ->addWhere('saved_search_id', '=', $id) + ->execute(); + } } diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php index c790462eacde9cacae8c5b1114db621a1a652711..feaee1539f1a3b28e7577ac9c513d5d9abe582fa 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchAfformTest.php @@ -1,6 +1,8 @@ <?php namespace api\v4\SearchDisplay; +use Civi\Api4\Action\Afform\Save; +use Civi\Api4\Afform; use Civi\Api4\Contact; use Civi\Api4\Email; use Civi\Api4\SavedSearch; @@ -35,7 +37,7 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn 'select' => [ 'id', 'display_name', - 'GROUP_CONCAT(DISTINCT Contact_Email_contact_id_01.email) AS GROUP_CONCAT_DISTINCT_Contact_Email_contact_id_01_email', + 'GROUP_CONCAT(DISTINCT Contact_Email_contact_id_01.email) AS GROUP_CONCAT_Contact_Email_contact_id_01_email', ], 'orderBy' => [], 'where' => [ @@ -77,7 +79,7 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn 'type' => 'field', ], [ - 'key' => 'GROUP_CONCAT_DISTINCT_Contact_Email_contact_id_01_email', + 'key' => 'GROUP_CONCAT_Contact_Email_contact_id_01_email', 'label' => 'Emails', 'dataType' => 'String', 'type' => 'field', @@ -151,4 +153,53 @@ class SearchAfformTest extends \PHPUnit\Framework\TestCase implements HeadlessIn $this->assertCount(1, $result); } + public function testDeleteSearchWillDeleteAfform() { + $search = SavedSearch::create(FALSE) + ->setValues([ + 'name' => 'TestSearchToDelete', + 'label' => 'TestSearchToDelete', + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id'], + ], + ]) + ->execute()->first(); + + $display = SearchDisplay::create(FALSE) + ->setValues([ + 'name' => 'TestDisplayToDelete', + 'label' => 'TestDisplayToDelete', + 'saved_search_id.name' => 'TestSearchToDelete', + 'type' => 'table', + 'settings' => [ + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + ], + ], + 'acl_bypass' => FALSE, + ]) + ->execute()->first(); + + Afform::create(FALSE) + ->addValue('name', 'TestAfformToDelete') + ->addValue('title', 'TestAfformToDelete') + ->setLayoutFormat('html') + ->addValue('layout', '<div><crm-search-display-table search-name="TestSearchToDelete" display-name="TestDisplayToDelete"></crm-search-display-table></div>') + ->execute(); + + $this->assertCount(1, Afform::get(FALSE)->addWhere('name', '=', 'TestAfformToDelete')->execute()); + + SavedSearch::delete(FALSE) + ->addWhere('name', '=', 'TestSearchToDelete') + ->execute(); + + $this->assertCount(0, Afform::get(FALSE)->addWhere('name', '=', 'TestAfformToDelete')->execute()); + } + } diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchDownloadTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchDownloadTest.php index fd2851864014fd4cda53f32105743a35360abb88..bd642f4b57dabf8dc27bf180197107238ce099aa 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchDownloadTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchDownloadTest.php @@ -18,6 +18,65 @@ class SearchDownloadTest extends \PHPUnit\Framework\TestCase implements Headless ->apply(); } + /** + * Test downloading array format. + */ + public function testDownloadArray() { + $lastName = uniqid(__FUNCTION__); + $sampleData = [ + ['first_name' => 'One', 'last_name' => $lastName], + ['first_name' => 'Two', 'last_name' => $lastName], + ['first_name' => 'Three', 'last_name' => $lastName], + ['first_name' => 'Four', 'last_name' => $lastName], + ]; + Contact::save(FALSE)->setRecords($sampleData)->execute(); + + $params = [ + 'checkPermissions' => FALSE, + 'format' => 'array', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['last_name'], + 'where' => [], + ], + ], + 'display' => [ + 'type' => 'table', + 'label' => '', + 'settings' => [ + 'limit' => 2, + 'actions' => TRUE, + 'pager' => [], + 'columns' => [ + [ + 'key' => 'last_name', + 'label' => 'First Last', + 'dataType' => 'String', + 'type' => 'field', + 'rewrite' => '[first_name] [last_name]', + ], + ], + 'sort' => [ + ['id', 'ASC'], + ], + ], + ], + 'filters' => ['last_name' => $lastName], + 'afform' => NULL, + ]; + + $download = (array) civicrm_api4('SearchDisplay', 'download', $params); + $header = array_shift($download); + + $this->assertEquals('First Last', $header[0]['label']); + + foreach ($download as $rowNum => $data) { + $this->assertEquals($sampleData[$rowNum]['first_name'] . ' ' . $lastName, $data[0]); + } + } + /** * Test downloading CSV format. * diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php index c22b32e6de3106da3a8a11feea738b5886536d51..20158ed149ceb4464a6e1a97c74b8a0b4234d017 100644 --- a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php @@ -41,7 +41,7 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter ['first_name' => 'One', 'last_name' => $lastName, 'contact_sub_type' => ['Tester', 'Bot']], ['first_name' => 'Two', 'last_name' => $lastName, 'contact_sub_type' => ['Tester']], ['first_name' => 'Three', 'last_name' => $lastName, 'contact_sub_type' => ['Bot']], - ['first_name' => 'Four', 'last_name' => $lastName], + ['first_name' => 'Four', 'middle_name' => 'None', 'last_name' => $lastName], ]; Contact::save(FALSE)->setRecords($sampleData)->execute(); @@ -52,7 +52,7 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter 'api_entity' => 'Contact', 'api_params' => [ 'version' => 4, - 'select' => ['id', 'first_name', 'last_name', 'contact_sub_type:label', 'is_deceased'], + 'select' => ['id', 'first_name', 'middle_name', 'last_name', 'contact_sub_type:label', 'is_deceased'], 'where' => [], ], ], @@ -110,18 +110,24 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter $this->assertEquals(FALSE, $result[0]['is_deceased']['raw']); $this->assertEquals(ts('No'), $result[0]['is_deceased']['view']); - $params['filters'] = ['id' => ['>' => $result[0]['id']['raw'], '<=' => $result[1]['id']['raw'] + 1]]; + $params['filters'] = ['last_name' => $lastName, 'id' => ['>' => $result[0]['id']['raw'], '<=' => $result[1]['id']['raw'] + 1]]; $params['sort'] = [['first_name', 'ASC']]; $result = civicrm_api4('SearchDisplay', 'run', $params); $this->assertCount(2, $result); $this->assertEquals('Three', $result[0]['first_name']['raw']); $this->assertEquals('Two', $result[1]['first_name']['raw']); - $params['filters'] = ['contact_sub_type:label' => ['Tester', 'Bot']]; + $params['filters'] = ['last_name' => $lastName, 'contact_sub_type:label' => ['Tester', 'Bot']]; $result = civicrm_api4('SearchDisplay', 'run', $params); $this->assertCount(3, $result); - $params['filters'] = ['contact_sub_type' => ['Tester']]; + // Comma indicates first_name OR last_name + $params['filters'] = ['first_name,last_name' => $lastName, 'contact_sub_type' => ['Tester']]; + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(2, $result); + + // Comma indicates first_name OR middle_name, matches "One" or "None" + $params['filters'] = ['first_name,middle_name' => 'one', 'last_name' => $lastName]; $result = civicrm_api4('SearchDisplay', 'run', $params); $this->assertCount(2, $result); } @@ -491,4 +497,75 @@ class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInter $this->assertStringContainsString('failed', $error); } + /** + * Test running a searchDisplay with random sorting. + */ + public function testSortByRand() { + $lastName = uniqid(__FUNCTION__); + $sampleData = [ + ['first_name' => 'One', 'last_name' => $lastName], + ['first_name' => 'Two', 'last_name' => $lastName], + ['first_name' => 'Three', 'last_name' => $lastName], + ['first_name' => 'Four', 'last_name' => $lastName], + ]; + Contact::save(FALSE)->setRecords($sampleData)->execute(); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id', 'first_name', 'last_name'], + 'where' => [['last_name', '=', $lastName]], + ], + ], + 'display' => [ + 'type' => 'list', + 'label' => '', + 'settings' => [ + 'limit' => 20, + 'pager' => TRUE, + 'columns' => [ + [ + 'key' => 'first_name', + 'label' => 'First Name', + 'dataType' => 'String', + 'type' => 'field', + ], + ], + 'sort' => [ + ['RAND()', 'ASC'], + ], + ], + ], + 'afform' => NULL, + ]; + + // Without seed, results are returned in unpredictable order + // (hard to test this, but we can at least assert we get the correct number of results back) + $unseeded = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(4, $unseeded); + + // Seed must be an integer + $params['seed'] = 'hello'; + try { + civicrm_api4('SearchDisplay', 'run', $params); + $this->fail(); + } + catch (\API_Exception $e) { + } + + // With a random seed, results should be shuffled in stable order + $params['seed'] = 12345678987654321; + $seeded = civicrm_api4('SearchDisplay', 'run', $params); + + // Same seed, same order every time + for ($i = 0; $i <= 9; ++$i) { + $repeat = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertEquals($seeded->column('id'), $repeat->column('id')); + } + } + } diff --git a/civicrm/ext/search_kit/tests/phpunit/bootstrap.php b/civicrm/ext/search_kit/tests/phpunit/bootstrap.php index a5b49253c819c5ab65947070e7ee67d0cac48ea1..5133778c819133e6d0a8d558055d5aa1a48b1ec3 100644 --- a/civicrm/ext/search_kit/tests/phpunit/bootstrap.php +++ b/civicrm/ext/search_kit/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/sequentialcreditnotes/info.xml b/civicrm/ext/sequentialcreditnotes/info.xml index 53b6ab1cec269cf72e28fd726f56883583032072..c1551dc14e880e1c300a0f7debf3b12d764a89f9 100644 --- a/civicrm/ext/sequentialcreditnotes/info.xml +++ b/civicrm/ext/sequentialcreditnotes/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-28</releaseDate> - <version>5.42.1</version> + <version>5.43.0</version> <tags> <tag>mgmt:hidden</tag> </tags> diff --git a/civicrm/js/Common.js b/civicrm/js/Common.js index c17432bb7f379badfe85bf60e33cd44d751a2f82..f5601ed8c0df7118541b84ca7b8c33e7123131f5 100644 --- a/civicrm/js/Common.js +++ b/civicrm/js/Common.js @@ -368,6 +368,9 @@ if (!CRM.vars) CRM.vars = {}; settings.width = '' + parseInt(percentage+gap-((screenWidth - 700)/7*(gap)/100), 10) + '%'; } } + if (settings.dialogClass && !_.includes(settings.dialogClass, 'crm-container')) { + settings.dialogClass += ' crm-container'; + } return settings; }; diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 48a46a3f3d2a6e66979973f2861814419dd32f91..dffc97b019a95f209df956868773d8446fadece3 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,6 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.43.0 + +Released November 3, 2021 + +- **[Synopsis](release-notes/5.43.0.md#synopsis)** +- **[Features](release-notes/5.43.0.md#features)** +- **[Bugs resolved](release-notes/5.43.0.md#bugs)** +- **[Miscellany](release-notes/5.43.0.md#misc)** +- **[Credits](release-notes/5.43.0.md#credits)** +- **[Feedback](release-notes/5.43.0.md#feedback)** + ## CiviCRM 5.42.1 Released October 13, 2021 diff --git a/civicrm/release-notes/5.43.0.md b/civicrm/release-notes/5.43.0.md new file mode 100644 index 0000000000000000000000000000000000000000..88f14b0d66730ace54684e77d214bd97d7d1d8d2 --- /dev/null +++ b/civicrm/release-notes/5.43.0.md @@ -0,0 +1,1238 @@ +# CiviCRM 5.43.0 + +Released November 3, 2021 + +- **[Synopsis](#synopsis)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | no | +| **Change the database schema?** | **yes** | +| **Alter the API?** | **yes** | +| **Require attention to configuration options?** | **yes** | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Use money formatting for currency in templates + ([21783](https://github.com/civicrm/civicrm-core/pull/21783))** + + Receipt templates now use the more modern Brick/Money library to format + currency amounts. This will provide better formats in most cases, but it will + be a change. + +- **Add sort functionality to event summary report + ([21501](https://github.com/civicrm/civicrm-core/pull/21501))** + + Improves Event Summary Report by making it possible to sort columns. + +- **Add REGEXP/NOT REGEXP operators to API4 + ([dev/core#2793](https://lab.civicrm.org/dev/core/-/issues/2793): + [21288](https://github.com/civicrm/civicrm-core/pull/21288))** + + Makes it so users can use regular expressions operators in APIv4. + +- **APIv4 - Add Contact.age_years extra field to make age calculations easy + ([21718](https://github.com/civicrm/civicrm-core/pull/21718))** + + Adds a calculated field to APIv4 which makes it simple to return or filter on + a contact's age. + +- **APIv4 - Add support for sql equations + ([21551](https://github.com/civicrm/civicrm-core/pull/21551))** + + Allows equations e.g. (1 + 1) as sql expressions in APIv4 queries. + +- **Apiv4 entity parity (Work Towards + [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486): + [21355](https://github.com/civicrm/civicrm-core/pull/21355) and + [21500](https://github.com/civicrm/civicrm-core/pull/21500))** + + Adds APIv4 entity support for the PrintLabel and Survey entities. + +- **APIv4 - Use event instead of hardcoded list to resolve entityName to + className ([21771](https://github.com/civicrm/civicrm-core/pull/21771), + [21803](https://github.com/civicrm/civicrm-core/pull/21803), + [21819](https://github.com/civicrm/civicrm-core/pull/21819), + [21824](https://github.com/civicrm/civicrm-core/pull/21824), + [21828](https://github.com/civicrm/civicrm-core/pull/21828), + [21839](https://github.com/civicrm/civicrm-core/pull/21839), and + [21851](https://github.com/civicrm/civicrm-core/pull/21851))** + + This allows core and extension-introduced entities to have arbitrary class and + entity names instead of requiring the two to agree. + +- **activity import: prepend custom group title to custom fields + ([21318](https://github.com/civicrm/civicrm-core/pull/21318))** + + Makes it possible to distinguish between core and custom fields on the + Activity Import screen. + +- **No way to distinguish the core and custom fields on Find and Merge Duplicate + Contacts page + ([dev/core#2766](https://lab.civicrm.org/dev/core/-/issues/2766): + [21728](https://github.com/civicrm/civicrm-core/pull/21728))** + + Makes it possible to distinguish between core and custom fields on the Find + and Merge Duplicate Contacts page. + +- **Support participant & membership tokens in send-email tasks + ([21745](https://github.com/civicrm/civicrm-core/pull/21745) and + [dev/core#2895](https://lab.civicrm.org/dev/core/-/issues/2895): + [21801](https://github.com/civicrm/civicrm-core/pull/21801))** + + Makes it so users can use participant & membership tokens in send-email tasks. + +- **Add participant tokens to pdf task + ([21695](https://github.com/civicrm/civicrm-core/pull/21695))** + + Makes it so users can use participant tokens in PDF tasks. + +- **Meta - token usage 5.43 standardisation effort + ([dev/core#2864](https://lab.civicrm.org/dev/core/-/issues/2864): + [21428](https://github.com/civicrm/civicrm-core/pull/21428), + [21605](https://github.com/civicrm/civicrm-core/pull/21605), + [21713](https://github.com/civicrm/civicrm-core/pull/21713), + [21584](https://github.com/civicrm/civicrm-core/pull/21584), + [21523](https://github.com/civicrm/civicrm-core/pull/21523), + [21706](https://github.com/civicrm/civicrm-core/pull/21706), + [21806](https://github.com/civicrm/civicrm-core/pull/21806), + [21821](https://github.com/civicrm/civicrm-core/pull/21821), + [21530](https://github.com/civicrm/civicrm-core/pull/21530), + [21537](https://github.com/civicrm/civicrm-core/pull/21537), and + [21913](https://github.com/civicrm/civicrm-core/pull/21913))** + + Standardizes Token usage. + +- **Add {domain.now}, supporting |crmDate + ([21531](https://github.com/civicrm/civicrm-core/pull/21531))** + + Adds new token {domain.now} that provides the current date. + +- **Afform - Use search display name as field prefix for url-based field + defaults ([21645](https://github.com/civicrm/civicrm-core/pull/21645))** + + Makes field prefix optional for Afform url-based defaults, and uses search + display name as prefix for search forms. + +- **Afform - Accept default field values from the url + ([21606](https://github.com/civicrm/civicrm-core/pull/21606))** + + Allows default Afform field values to be set from the url. + +- **Afform Admin add link icon & template cleanup + ([21764](https://github.com/civicrm/civicrm-core/pull/21764))** + + Minor cleanup to improve template efficiency, style afform page link, and add + a page title. + +- **Search kit - default filter - primary + ([dev/core#2852](https://lab.civicrm.org/dev/core/-/issues/2852): + [21574](https://github.com/civicrm/civicrm-core/pull/21574))** + + Adds is_primary as a default SearchKit filter. + +- **SearchKit - Add UI for arithmetic equations + ([21600](https://github.com/civicrm/civicrm-core/pull/21600))** + + Allows adding, subtracting, dividing and multiplying any number of values in + SearchKit. + +- **SearchKit - Support multiple arguments to field transformations aka SQL + functions ([21528](https://github.com/civicrm/civicrm-core/pull/21528) and + [21535](https://github.com/civicrm/civicrm-core/pull/21535))** + + Enhances the SearchKit UI to allow multiple fields to be acted upon at once in + a function. + +- **SearchKit - Add pseudo-fields for row number and current user + ([21435](https://github.com/civicrm/civicrm-core/pull/21435))** + + Makes a couple calculated fields available for use as columns or tokens in + SearchKit. + +- **SearchKit - Support custom fields in bridge join entities + ([21424](https://github.com/civicrm/civicrm-core/pull/21424))** + + Makes it possible to use relationship custom data throughout Search Kit. + +- **SearchKit & Afform - Use Bootstrap table styles on admin screens + ([21405](https://github.com/civicrm/civicrm-core/pull/21405) and + [21397](https://github.com/civicrm/civicrm-core/pull/21397))** + + applies Bootstrap table styles to admin tables in SearchKit and Afform. + +- **SearchKit - Filter search listing by creator + ([21388](https://github.com/civicrm/civicrm-core/pull/21388))** + + Makes it so users can filter the search listing by creator. + +- **SearchKit - enable tags for Saved Searches + ([21376](https://github.com/civicrm/civicrm-core/pull/21376))** + + Enables tags for saved searches in searchkit. + +- **SearchKit - Add 'array' option to download API and add test + ([21363](https://github.com/civicrm/civicrm-core/pull/21363))** + + Adds a new option to the SearchKit "Download" api to return a normal array + result, which makes testing easier. + +- **SearchKit - Sortable column fixes/improvements + ([21720](https://github.com/civicrm/civicrm-core/pull/21720) and + [21894](https://github.com/civicrm/civicrm-core/pull/21894))** + + Fixes sortable column headers on SearchKit admin tables and makes + click-sortable column headers configurable. + +- **Add message admin to dist + ([21670](https://github.com/civicrm/civicrm-core/pull/21670))** + + Adds Message admin extension. + +- **message_admin - Add titles/hints to hyperlinks + ([21698](https://github.com/civicrm/civicrm-core/pull/21698))** + + Adds help text to links on Message Admin Screen. + +- **Replace expensive query with cheaper one + ([21426](https://github.com/civicrm/civicrm-core/pull/21426))** + + Improves performance. + +- **Add support for CiviCRM date formats in crmDate + ([21508](https://github.com/civicrm/civicrm-core/pull/21508))** + + Adds support for CiviCRM date formats in crmDate. + +- **Mailing Unsubscribe Form: Show if email is already unsubscribed + ([21174](https://github.com/civicrm/civicrm-core/pull/21174))** + + Improves languaging on the Mailing Unsubscribe form regarding if the email is + already unsubscribed. + +- **Change Do Not SMS privacy icon + ([dev/core#2754](https://lab.civicrm.org/dev/core/-/issues/2754): + [21354](https://github.com/civicrm/civicrm-core/pull/21354))** + + Improves usability by improving the Do Not SMS icon. + +### CiviContribute + +- **Add workflow template for 'recurring edit' workflow + ([21356](https://github.com/civicrm/civicrm-core/pull/21356) and + [21826](https://github.com/civicrm/civicrm-core/pull/21826))** + + Adds workflow template for 'recurring edit' workflow + +- **Can we re-order the 'recur links' + ([dev/core#2843](https://lab.civicrm.org/dev/core/-/issues/2843): + [21529](https://github.com/civicrm/civicrm-core/pull/21529))** + + Improves user experience by reordering the contribution recur links. + +- **View Contribution page, move the Done button to the last button, currently + shown in the middle + ([21547](https://github.com/civicrm/civicrm-core/pull/21547))** + + Reorders buttons on the Contribution page to improve user experience. + +- **Replace "Print Invoice" and "Print Invoice and Credit Note" buttons with + label "Download Invoice" and "Download Invoice and Credit Note" + ([21546](https://github.com/civicrm/civicrm-core/pull/21546))** + + Improves labels for Invoice buttons. + +### CiviEvent + +- **Custom Participant tokens not working in scheduled reminders + ([dev/core#348](https://lab.civicrm.org/dev/core/-/issues/348): + [21666](https://github.com/civicrm/civicrm-core/pull/21666))** + + Adds support for participant tokens in scheduled reminders. + +### CiviMail + +- **CRM-19236 - Fix Flexmailer extension to support unicode urls + ([21597](https://github.com/civicrm/civicrm-core/pull/21597))** + + Updates flexmailer click tracking to support unicode urls. + +- **Install flexmailer by default on new installs + ([dev/core#2836](https://lab.civicrm.org/dev/core/-/issues/2836): + [21522](https://github.com/civicrm/civicrm-core/pull/21522) and + [21830](https://github.com/civicrm/civicrm-core/pull/21830))** + + Installs flexmailer on new installs by default. + +### CiviMember + +- **Fix code to use Order api to create Memberships in core forms (Work Towards + [dev/core#2717](https://lab.civicrm.org/dev/core/-/issues/2717): + [21152](https://github.com/civicrm/civicrm-core/pull/21152))** + + Use order api for new membership create in batch. + +### WordPress integration + +- **Add deduping to Quick Add Dashboard Widget + ([256](https://github.com/civicrm/civicrm-wordpress/pull/256))** + + Adds a simple deduplication check when submitting details via the "Quick Add + Contact to CiviCRM" Dashboard Widget. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **Full Month Names: avoid relying on the operating system's locale for + translation + ([dev/translation#71](https://lab.civicrm.org/dev/translation/-/issues/71): + [21157](https://github.com/civicrm/civicrm-core/pull/21157))** + +- **CRM_Utils_Date - Month and day names should match active locale + ([21569](https://github.com/civicrm/civicrm-core/pull/21569))** + +- **System Workflow Messages - Improve localization experience (Work Towards + [dev/mail#83](https://lab.civicrm.org/dev/mail/-/issues/83): + [21773](https://github.com/civicrm/civicrm-core/pull/21773), + [21747](https://github.com/civicrm/civicrm-core/pull/21747), + [21774](https://github.com/civicrm/civicrm-core/pull/21774), + [21772](https://github.com/civicrm/civicrm-core/pull/21772), + [21590](https://github.com/civicrm/civicrm-core/pull/21590), + [21338](https://github.com/civicrm/civicrm-core/pull/21338), + [21480](https://github.com/civicrm/civicrm-core/pull/21480) and + [21486](https://github.com/civicrm/civicrm-core/pull/21486))** + +- **When extensions do upgrades and add fields to tables, trigger-based logging + tables require the extension to do the right thing + ([dev/core#1618](https://lab.civicrm.org/dev/core/-/issues/1618): + [21135](https://github.com/civicrm/civicrm-core/pull/21135))** + +- **Special characters become "?" On PDF report + ([dev/core#2126](https://lab.civicrm.org/dev/core/-/issues/2126): + [21423](https://github.com/civicrm/civicrm-core/pull/21423))** + +- **Send an Email / Cancel button does not work + ([dev/core#2318](https://lab.civicrm.org/dev/core/-/issues/2318): + [21474](https://github.com/civicrm/civicrm-core/pull/21474))** + +- **hook_civicrm_tokenValues inconsistent data + ([dev/core#2554](https://lab.civicrm.org/dev/core/-/issues/2554): + [21490](https://github.com/civicrm/civicrm-core/pull/21490))** + + Remove code to assign contact to the template in sendEmail. + +- **Use consistent token syntax for pseudoconstants + ([dev/core#2650](https://lab.civicrm.org/dev/core/-/issues/2650): + [21477](https://github.com/civicrm/civicrm-core/pull/21477), + [21464](https://github.com/civicrm/civicrm-core/pull/21464), + [21570](https://github.com/civicrm/civicrm-core/pull/21570) and + [21705](https://github.com/civicrm/civicrm-core/pull/21705))** + +- **Remove unused token assigns (Work Towards + [dev/core#2748](https://lab.civicrm.org/dev/core/-/issues/2748): + [21059](https://github.com/civicrm/civicrm-core/pull/21059))** + + Removes some no-longer-used token assigns & adds an upgrade message in case + people have templates still referring to them. + +- **Something something tokens something tokens + ([dev/core#2856](https://lab.civicrm.org/dev/core/-/issues/2856): + [21580](https://github.com/civicrm/civicrm-core/pull/21580))** + + Token "filter" can be null so filter[0] doesn't exist. + +- **Fix contact tokens class to load using apiv4 + ([21780](https://github.com/civicrm/civicrm-core/pull/21780))** + +- **Remove case token listing from contact email task + ([21787](https://github.com/civicrm/civicrm-core/pull/21787))** + +- **Fix another instance of double token rendering + ([21788](https://github.com/civicrm/civicrm-core/pull/21788))** + +- **Fix token regression - re-add support for empty tokens + ([21756](https://github.com/civicrm/civicrm-core/pull/21756))** + +- **Fix event custom field tokens in scheduled reminders + ([21374](https://github.com/civicrm/civicrm-core/pull/21374))** + +- **Reference token metadata internally fix custom tokens label bug + ([21767](https://github.com/civicrm/civicrm-core/pull/21767))** + +- **Participant tokens - remove / replace unsupportable from badges (conversion + preparation) ([21520](https://github.com/civicrm/civicrm-core/pull/21520))** + +- **Fix activity tokens + ([21489](https://github.com/civicrm/civicrm-core/pull/21489))** + +- **Ensure TokenSmary::render returns an array + ([21461](https://github.com/civicrm/civicrm-core/pull/21461))** + +- **Replace event type token in action schedule changes event.event_type_id to + participant.event_type_id:label + ([dev/core#2892](https://lab.civicrm.org/dev/core/-/issues/2892): + [21738](https://github.com/civicrm/civicrm-core/pull/21738))** + +- **Custom field multiselect of type int crashes when saving + ([dev/core#2772](https://lab.civicrm.org/dev/core/-/issues/2772): + [21186](https://github.com/civicrm/civicrm-core/pull/21186))** + +- **Deduping produces bad results after a rule change + ([dev/core#2820](https://lab.civicrm.org/dev/core/-/issues/2820): + [21509](https://github.com/civicrm/civicrm-core/pull/21509))** + +- **[REF] Extend 'managed' api to provide information about 'status' (Clean up + towards [dev/core#2823](https://lab.civicrm.org/dev/core/-/issues/2823): + [21399](https://github.com/civicrm/civicrm-core/pull/21399), + [21440](https://github.com/civicrm/civicrm-core/pull/21440), + [21400](https://github.com/civicrm/civicrm-core/pull/21400), + [21401](https://github.com/civicrm/civicrm-core/pull/21401), + [21412](https://github.com/civicrm/civicrm-core/pull/21412) and + [21395](https://github.com/civicrm/civicrm-core/pull/21395))** + +- **Dashboard error `Trying to access array offset on value of type null` + ([dev/core#2829](https://lab.civicrm.org/dev/core/-/issues/2829): + [21441](https://github.com/civicrm/civicrm-core/pull/21441) and + [21437](https://github.com/civicrm/civicrm-core/pull/21437))** + +- **Upgrade error - upgrading to 5.43 + ([dev/core#2870](https://lab.civicrm.org/dev/core/-/issues/2870): + [21640](https://github.com/civicrm/civicrm-core/pull/21640))** + + Fix upgrade error with rpow installed. + +- **Search Builder: Fails validation when state_province location type is + "primary" and operator is "IN" + ([dev/core#2874](https://lab.civicrm.org/dev/core/-/issues/2874): + [21646](https://github.com/civicrm/civicrm-core/pull/21646))** + +- **APIv3 "replace" action is broken when there is > 25 records to replace. + ([dev/core#2881](https://lab.civicrm.org/dev/core/-/issues/2881): + [21681](https://github.com/civicrm/civicrm-core/pull/21681))** + +- **Add contacts to Group action missing custom fields + ([dev/core#2885](https://lab.civicrm.org/dev/core/-/issues/2885): + [21716](https://github.com/civicrm/civicrm-core/pull/21716))** + +- **Find Activities + Send Email task always says the contact is on hold or + deceased etc ([dev/core#2901](https://lab.civicrm.org/dev/core/-/issues/2901): + [21781](https://github.com/civicrm/civicrm-core/pull/21781))** + +- **Afform - Fix chainSelect to work with anonymous users + ([21759](https://github.com/civicrm/civicrm-core/pull/21759))** + +- **Afform - Fix chain-select of country and address to work on SearchKit forms + ([21749](https://github.com/civicrm/civicrm-core/pull/21749))** + +- **Afform - gracefully handle missing html files + ([21436](https://github.com/civicrm/civicrm-core/pull/21436))** + +- **Afform - fix loading embedded blocks + ([21609](https://github.com/civicrm/civicrm-core/pull/21609))** + +- **Afform - ensure default value data type matches input type + ([21643](https://github.com/civicrm/civicrm-core/pull/21643))** + +- **api4 explorer - entity displays as `\undefined` in the generated code sample + ([dev/core#2867](https://lab.civicrm.org/dev/core/-/issues/2867): + [21634](https://github.com/civicrm/civicrm-core/pull/21634))** + +- **APIv4 - Default select clause to exclude "Extra" fields + ([21438](https://github.com/civicrm/civicrm-core/pull/21438))** + +- **APIv4 - Give every SQL expression a title + ([21691](https://github.com/civicrm/civicrm-core/pull/21691))** + +- **APIv4 - Automatically coalesce potentially null field values in equations + ([21647](https://github.com/civicrm/civicrm-core/pull/21647))** + +- **UX: Deleting a saved Search Kit search should warn/delete associated afforms + ([dev/core#2824](https://lab.civicrm.org/dev/core/-/issues/2824): + [21457](https://github.com/civicrm/civicrm-core/pull/21457))** + +- **search kit: deleting a search has weird confirmation dialog box + ([dev/core#2826](https://lab.civicrm.org/dev/core/-/issues/2826): + [21404](https://github.com/civicrm/civicrm-core/pull/21404))** + +- **New download spreadsheet search kit feature broken + ([dev/core#2888](https://lab.civicrm.org/dev/core/-/issues/2888): + [21724](https://github.com/civicrm/civicrm-core/pull/21724))** + +- **SearchKit - Style buttons for compatability with Shoreditch theme + ([21627](https://github.com/civicrm/civicrm-core/pull/21627))** + +- **SearchKit - tweak button styles for shorditch + ([21726](https://github.com/civicrm/civicrm-core/pull/21726))** + + Tweaks the "Tags" and "Add" buttons in SearchKit to look better in Shoreditch, + and tidies up some ts() calls. + +- **SearchKit - A random stable genius + ([21586](https://github.com/civicrm/civicrm-core/pull/21586))** + + Allows the pager, edit-in-place, and bulk updates to work properly with random + sorting. + +- **SearchKit - Exclude custom fields from ON clause selector + ([21495](https://github.com/civicrm/civicrm-core/pull/21495))** + + Custom fields cannot as-yet be added to an ON clause in APIv4 because they do + not belong to the tables being joined. This removes the tripping hazard from + the UI, by making custom fields unavailable to select in an ON clause. + +- **SearchKit - Fix links to non-aggregage join fields + ([21482](https://github.com/civicrm/civicrm-core/pull/21482))** + +- **SearchKit - Fix display of links in aggregated columns + ([21420](https://github.com/civicrm/civicrm-core/pull/21420))** + +- **SearchKit - Fix alignment in table headers + ([21431](https://github.com/civicrm/civicrm-core/pull/21431))** + +- **SearchKit - Correctly process filters passed through Afform from js + ([21485](https://github.com/civicrm/civicrm-core/pull/21485))** + +- **SearchKit - Prevent race conditions in search display loading + ([21394](https://github.com/civicrm/civicrm-core/pull/21394))** + +- **[search kit] Semicolon vs comma + ([21406](https://github.com/civicrm/civicrm-core/pull/21406))** + +- **message_admin Style fixes + ([21712](https://github.com/civicrm/civicrm-core/pull/21712))** + +- **message_admin - Fix quirk when using "Create Draft" + ([21700](https://github.com/civicrm/civicrm-core/pull/21700))** + +- **MessageTemplate API - Fix saving of templates with workflow_name sans + workflow_id ([21694](https://github.com/civicrm/civicrm-core/pull/21694))** + +- **Find Activities Search, default search option for Activity Text is set to + "both" in the code, but should actually be set to 6 which is the value for + "both" ([21598](https://github.com/civicrm/civicrm-core/pull/21598))** + +- **UFMatch - E_NOTICE when nonexistent uf_id + ([21576](https://github.com/civicrm/civicrm-core/pull/21576))** + +- **flushCaches should respect permitCacheFlushMode. Also flush caches which + have a NULL cache_date + ([21430](https://github.com/civicrm/civicrm-core/pull/21430))** + +- **Setting::getItem - use deprecatedWarning instead of just logging + ([21625](https://github.com/civicrm/civicrm-core/pull/21625))** + +- **Fix display of subscription frequency on 'Update Subscription' form + ([21469](https://github.com/civicrm/civicrm-core/pull/21469))** + +- **Fix bug where log hook is ignored on custom field create + ([21557](https://github.com/civicrm/civicrm-core/pull/21557))** + +- **Set default for civicrm_message_template.is_reserved + ([21651](https://github.com/civicrm/civicrm-core/pull/21651))** + +- **CiviReport - avoid error in test environments when using built-in php web + server ([21560](https://github.com/civicrm/civicrm-core/pull/21560))** + +- **Update SelfSvcUpdate.php + ([21679](https://github.com/civicrm/civicrm-core/pull/21679))** + + Changes "cancel" text to read "cancel registration". + +- **Import csv-Fix not importing extension in phones + ([20995](https://github.com/civicrm/civicrm-core/pull/20995))** + +- **Missed message template updates from 5.39/5.40 + ([21550](https://github.com/civicrm/civicrm-core/pull/21550))** + +- **Don't clear the GroupContactCache until we're ready to insert the new + version ([21384](https://github.com/civicrm/civicrm-core/pull/21384))** + +- **Fix syntax error on a ts() function call + ([21518](https://github.com/civicrm/civicrm-core/pull/21518))** + +- **flushCaches should respect permitCacheFlushMode + ([21468](https://github.com/civicrm/civicrm-core/pull/21468))** + +- **Smarty warning about missing contact subtype on New Individual + ([21410](https://github.com/civicrm/civicrm-core/pull/21410))** + +- **Fix Upgrade step to ensure all fields are converted correctly as well + ([21396](https://github.com/civicrm/civicrm-core/pull/21396))** + +- **Don't specify character set for civicrm_relationship_cache table + ([21382](https://github.com/civicrm/civicrm-core/pull/21382))** + +- **Error about count() on New Email + ([21714](https://github.com/civicrm/civicrm-core/pull/21714))** + +- **Fix generating civicrm.settings.php by ensuring that CMSdbSSL and dbSSL + variables are properly removed from the DSNs + ([63](https://github.com/civicrm/civicrm-joomla/pull/63))** + +- **Smarty notices on Find Activities results page + ([21422](https://github.com/civicrm/civicrm-core/pull/21422))** + +- **Smarty notice on Find Activities / Find Cases + ([21421](https://github.com/civicrm/civicrm-core/pull/21421))** + +- **Tpl notice fixes + ([21503](https://github.com/civicrm/civicrm-core/pull/21503))** + +- **Fix extra apostrophe added in 21636 + ([21650](https://github.com/civicrm/civicrm-core/pull/21650))** + +- **avoid back trace when importing preferred communication method + ([21433](https://github.com/civicrm/civicrm-core/pull/21433))** + +- **Fixed issue with sending from do-not-reply@domain address + ([21455](https://github.com/civicrm/civicrm-core/pull/21455))** + +- **Find Activities Search, the default search option of "With" criteria + excludes Activities by default. Confuses End Users when 0 results are returned + when criteria appears to be correct. + ([21595](https://github.com/civicrm/civicrm-core/pull/21595))** + +- **Do not send email notification to the user if `notify` is not set in the + params ([21562](https://github.com/civicrm/civicrm-core/pull/21562))** + +- **ensure blank note date in UI defaults to current date. + ([21717](https://github.com/civicrm/civicrm-core/pull/21717))** + +- **System status checks only shows 25 messages + ([21748](https://github.com/civicrm/civicrm-core/pull/21748))** + +- **Enotice fixes + ([21723](https://github.com/civicrm/civicrm-core/pull/21723))** + +- **Enotice tpl fix + ([21689](https://github.com/civicrm/civicrm-core/pull/21689))** + +- **Enotice fix + ([21782](https://github.com/civicrm/civicrm-core/pull/21782))** + +- **Enotice fix + ([21732](https://github.com/civicrm/civicrm-core/pull/21732))** + +- **enotice fix + ([21702](https://github.com/civicrm/civicrm-core/pull/21702))** + +- **typo fixes + ([21655](https://github.com/civicrm/civicrm-core/pull/21655))** + +- **Enotice fix + ([21636](https://github.com/civicrm/civicrm-core/pull/21636))** + +- **enotice fix + ([21631](https://github.com/civicrm/civicrm-core/pull/21631))** + +- **Enotice fix + ([21579](https://github.com/civicrm/civicrm-core/pull/21579))** + +- **Fix header e-notices + ([21633](https://github.com/civicrm/civicrm-core/pull/21633))** + +- **Enotice fix + ([21658](https://github.com/civicrm/civicrm-core/pull/21658))** + +- **Enotice fixes + ([21659](https://github.com/civicrm/civicrm-core/pull/21659))** + +- **Enotice fixes + ([21632](https://github.com/civicrm/civicrm-core/pull/21632))** + +- **enotice fixes in fatal error template + ([21639](https://github.com/civicrm/civicrm-core/pull/21639))** + +- **Tpl notice fix + ([21543](https://github.com/civicrm/civicrm-core/pull/21543))** + +- **tpl enotice fixes on extensions page + ([21545](https://github.com/civicrm/civicrm-core/pull/21545))** + +- **Tpl notice fixes + ([21544](https://github.com/civicrm/civicrm-core/pull/21544))** + +- **Tpl enotice fixes + ([21542](https://github.com/civicrm/civicrm-core/pull/21542))** + +- **Enotice fixes in tpls + ([21541](https://github.com/civicrm/civicrm-core/pull/21541))** + +- **Add missing ts + ([21711](https://github.com/civicrm/civicrm-core/pull/21711))** + +- **Another enotice fix + ([21682](https://github.com/civicrm/civicrm-core/pull/21682))** + +- **And another one + ([21683](https://github.com/civicrm/civicrm-core/pull/21683))** + +- **Another one bites the dust + ([21684](https://github.com/civicrm/civicrm-core/pull/21684))** + +- **Fix possibly undefined $form variables in smarty templates + ([21735](https://github.com/civicrm/civicrm-core/pull/21735))** + +- **Fix regression from enotice fixes + ([21743](https://github.com/civicrm/civicrm-core/pull/21743))** + +- **Count of sent messages can be wrong in status popup for email form + ([dev/core#2914](https://lab.civicrm.org/dev/core/-/issues/2914): + [21827](https://github.com/civicrm/civicrm-core/pull/21827)) + +- **[REF] Fix pseduoconstant token rendering for contributions via legacy way on + php8 and include campaign_id pseudoconsntants as well + ([21958](https://github.com/civicrm/civicrm-core/pull/21958))** + +### CiviCase + +- **For latest iteration of case email form, don't fail when there's no To + contact ([21737](https://github.com/civicrm/civicrm-core/pull/21737))** + +### CiviContribute + +- **Fix PHP notices in contributionrecur tpl + ([21526](https://github.com/civicrm/civicrm-core/pull/21526))** + +- **Follow up on removing contributeMode from templates + ([21417](https://github.com/civicrm/civicrm-core/pull/21417))** + +- **Getting system status message about contributeMode after upgrade to 5.43 + when it seems like it shouldn't + ([dev/core#2828](https://lab.civicrm.org/dev/core/-/issues/2828): + [21434](https://github.com/civicrm/civicrm-core/pull/21434))** + +- **Participant Status: pending refund can have two conflicting meanings (Work + Towards [dev/core#2629](https://lab.civicrm.org/dev/core/-/issues/2629): + [21624](https://github.com/civicrm/civicrm-core/pull/21624))** + + Only show contribution statuses on contribution form. + +- **Money - create new Civi:: facade - now format helper (Work Towards: + [dev/core#2638](https://lab.civicrm.org/dev/core/-/issues/2638): + [21599](https://github.com/civicrm/civicrm-core/pull/21599))** + + Adds a helper function for formatting. + +- **CiviCRM 5.35.1, truncation of money values where $1,000 donation is recorded + as $1 which appears to be truncating at the thousand separator when using the + Australian (AU) and US Locale (Work Towards + [dev/core#2493](https://lab.civicrm.org/dev/core/-/issues/2493): + [21555](https://github.com/civicrm/civicrm-core/pull/21555))** + + Ensures that any money fields retrieved by getSubmittedValue are in a machine + usable format. + +- **[regression-ish] When a recurring contribution template has no line items, + the contact contribution tab crashes + ([dev/financial#187](https://lab.civicrm.org/dev/financial/-/issues/187): + [21729](https://github.com/civicrm/civicrm-core/pull/21729))** + +- **ContributionRecur modified_date should update to current_timestamp on update + ([21472](https://github.com/civicrm/civicrm-core/pull/21472))** + +- **ensure recur options are present on backend cc contribution form. + ([21577](https://github.com/civicrm/civicrm-core/pull/21577))** + +### CiviEvent + +- **Flush metadata cache on event edit + ([21740](https://github.com/civicrm/civicrm-core/pull/21740))** + +- **Fix Badge to use token processor + ([dev/core#2834](https://lab.civicrm.org/dev/core/-/issues/2834): + [21458](https://github.com/civicrm/civicrm-core/pull/21458) and + [21587](https://github.com/civicrm/civicrm-core/pull/21587))** + +- **Event confirmation emails should go to the email submitted, not primary + email ([dev/event#64](https://lab.civicrm.org/dev/event/-/issues/64): + [21669](https://github.com/civicrm/civicrm-core/pull/21669))** + +- **Fix label for participant role + ([21656](https://github.com/civicrm/civicrm-core/pull/21656))** + +### CiviMail + +- **flexmailer - Update `[CiviMail Draft]` prefix to match BAO behavior + ([21715](https://github.com/civicrm/civicrm-core/pull/21715))** + +- **update_email_resetdate job does not consider opt out on hold + ([dev/core#2850](https://lab.civicrm.org/dev/core/-/issues/2850): + [21564](https://github.com/civicrm/civicrm-core/pull/21564))** + +- **Start phasing out 'preferred_mail_format' (Work Towards + [dev/core#2866](https://lab.civicrm.org/dev/core/-/issues/2866): + [21676](https://github.com/civicrm/civicrm-core/pull/21676))** + +### Drupal Integration + +- **Contact Image uploaded from Drupal Webform doesn't render on Drupal View as + a thumbnail. ([dev/drupal#13](https://lab.civicrm.org/dev/drupal/issues/13): + [524](https://github.com/civicrm/civicrm-drupal/pull/524))** + +- **Session erroneously getting set to NULL on Drupal user login + ([dev/drupal#163](https://lab.civicrm.org/dev/drupal/-/issues/163): + [21403](https://github.com/civicrm/civicrm-core/pull/21403))** + +### WordPress integration + +- **Wordpress Profile User Creation Sign On (v2) + ([20807](https://github.com/civicrm/civicrm-core/pull/20807))** + + Ensures user is logged in on profile submission. + +## <a name="misc"></a>Miscellany + +- **MessageTemplate - Deprecate `valueName`. Emphasize `workflow`. Consolidate + converters. ([21657](https://github.com/civicrm/civicrm-core/pull/21657))** + +- **Bump minimum upgradable version to 4.5.9 + ([21408](https://github.com/civicrm/civicrm-core/pull/21408))** + +- **Use Case form for case email action + ([21688](https://github.com/civicrm/civicrm-core/pull/21688))** + +- **Consolidate building of contact token list + ([21429](https://github.com/civicrm/civicrm-core/pull/21429), + [21761](https://github.com/civicrm/civicrm-core/pull/21761), and + [dev/core#2907](https://lab.civicrm.org/dev/core/-/issues/2907): + [21812](https://github.com/civicrm/civicrm-core/pull/21812))** + +- **Remove call to legacy getTokenDetails + ([21786](https://github.com/civicrm/civicrm-core/pull/21786))** + +- **Remove extraneous call to legacy token processing in sms task + ([21785](https://github.com/civicrm/civicrm-core/pull/21785))** + +- **Remove stray token code + ([21763](https://github.com/civicrm/civicrm-core/pull/21763))** + +- **Stop using `replaceContributionTokens` in core + ([dev/core#2851](https://lab.civicrm.org/dev/core/-/issues/2851): + [21525](https://github.com/civicrm/civicrm-core/pull/21525) and + [21565](https://github.com/civicrm/civicrm-core/pull/21565))** + +- **Add SqlFunction support in addWhere + ([21301](https://github.com/civicrm/civicrm-core/pull/21301))** + +- **Deprecate `replaceEntityTokens`, stop using in core + ([dev/core#2832](https://lab.civicrm.org/dev/core/-/issues/2832): + [21506](https://github.com/civicrm/civicrm-core/pull/21506), + [21521](https://github.com/civicrm/civicrm-core/pull/21521), + [21452](https://github.com/civicrm/civicrm-core/pull/21452) and + [21453](https://github.com/civicrm/civicrm-core/pull/21453))** + +- **Deprecate `replaceCaseTokens` in core + ([dev/core#2817](https://lab.civicrm.org/dev/core/-/issues/2817): + [21380](https://github.com/civicrm/civicrm-core/pull/21380), + [21445](https://github.com/civicrm/civicrm-core/pull/21445), + [21383](https://github.com/civicrm/civicrm-core/pull/21383), + [21381](https://github.com/civicrm/civicrm-core/pull/21381), + [21447](https://github.com/civicrm/civicrm-core/pull/21447) and + [21475](https://github.com/civicrm/civicrm-core/pull/21475))** + +- **Stop using replaceContactTokens in core (Work Towards + [dev/core#2814](https://lab.civicrm.org/dev/core/-/issues/2814): + [21365](https://github.com/civicrm/civicrm-core/pull/21365), + [21414](https://github.com/civicrm/civicrm-core/pull/21414), + [21364](https://github.com/civicrm/civicrm-core/pull/21364), + [21379](https://github.com/civicrm/civicrm-core/pull/21379), + [21377](https://github.com/civicrm/civicrm-core/pull/21377), + [21378](https://github.com/civicrm/civicrm-core/pull/21378), + [21568](https://github.com/civicrm/civicrm-core/pull/21568), + [21494](https://github.com/civicrm/civicrm-core/pull/21494), + [21367](https://github.com/civicrm/civicrm-core/pull/21367) and + [21449](https://github.com/civicrm/civicrm-core/pull/21449))** + +- **[REF] Cleanup pdf classes to use a trait like we do for email classes + ([dev/core#2790](https://lab.civicrm.org/dev/core/-/issues/2790): + [21478](https://github.com/civicrm/civicrm-core/pull/21478), + [21479](https://github.com/civicrm/civicrm-core/pull/21479), + [21366](https://github.com/civicrm/civicrm-core/pull/21366), + [21359](https://github.com/civicrm/civicrm-core/pull/21359) and + [21335](https://github.com/civicrm/civicrm-core/pull/21335))** + +- **Afform - Add getters/setters to the AfformSubmitEvent class + ([21572](https://github.com/civicrm/civicrm-core/pull/21572))** + +- **Api v4 contact delete bug (Cleanup Towards + [dev/core#2757](https://lab.civicrm.org/dev/core/-/issues/2757): + [21210](https://github.com/civicrm/civicrm-core/pull/21210), + [21198](https://github.com/civicrm/civicrm-core/pull/21198), + [21211](https://github.com/civicrm/civicrm-core/pull/21211) and + [21199](https://github.com/civicrm/civicrm-core/pull/21199))** + +- **[REF] Separate repeattransaction from completeorder function - only call the + latter from payment.create + (Cleanup Towards [dev/core#2716](https://lab.civicrm.org/dev/core/-/issues/2716): + [20856](https://github.com/civicrm/civicrm-core/pull/20856))** + +- **Financial record processing - extract to new class to faciliate cleanup + (Work Towards [dev/core#2715](https://lab.civicrm.org/dev/core/-/issues/2715): + [20985](https://github.com/civicrm/civicrm-core/pull/20985) and + [21370](https://github.com/civicrm/civicrm-core/pull/21370))** + +- **Add unique class to price field template + ([21484](https://github.com/civicrm/civicrm-core/pull/21484))** + +- **Clean up UpdateBilling/UpdateSubscription/ContributionRecur to use getters + ([21538](https://github.com/civicrm/civicrm-core/pull/21538))** + +- **[REF] Fix form to call this->setTitle() + ([21362](https://github.com/civicrm/civicrm-core/pull/21362))** + +- **Update use of CRM_Utils_System::setTitle() for legacycustomsearches + ([21375](https://github.com/civicrm/civicrm-core/pull/21375))** + +- **Switch to CRM_Core_Form::setTitle() instead of CRM_Utils_System::setTitle() + part 2 ([21202](https://github.com/civicrm/civicrm-core/pull/21202))** + +- **Switch to CRM_Core_Form::setTitle() instead of CRM_Utils_System::setTitle() + part 3 ([21352](https://github.com/civicrm/civicrm-core/pull/21352))** + +- **Switch to CRM_Core_Form::setTitle() instead of CRM_Utils_System::setTitle() + part 4 ([21368](https://github.com/civicrm/civicrm-core/pull/21368))** + +- **Simplify getRecurFromAddress + ([21613](https://github.com/civicrm/civicrm-core/pull/21613))** + +- **Return another function to the email trait + ([21677](https://github.com/civicrm/civicrm-core/pull/21677))** + +- **Rename test clas to reflect tested class name + ([21686](https://github.com/civicrm/civicrm-core/pull/21686))** + +- **Remove unused function - convertDateFieldsToMySQL + ([21617](https://github.com/civicrm/civicrm-core/pull/21617))** + +- **Remove all references to safe_mode, DEPRECATED as of PHP 5.3.0 and REMOVED + as of PHP 5.4.0 + ([21594](https://github.com/civicrm/civicrm-core/pull/21594))** + +- **Remove duplicate global declaration in civicrm.settings.php template + ([21409](https://github.com/civicrm/civicrm-core/pull/21409))** + +- **Remove broken code + ([21602](https://github.com/civicrm/civicrm-core/pull/21602))** + +- **Remove call to the dreaded replaceMultipleContributionTokens + ([21652](https://github.com/civicrm/civicrm-core/pull/21652))** + +- **Remove handling for empty required field + ([21623](https://github.com/civicrm/civicrm-core/pull/21623))** + +- **Remove error handling for core error being returned + ([21425](https://github.com/civicrm/civicrm-core/pull/21425))** + +- **Remove over-copied function + ([21641](https://github.com/civicrm/civicrm-core/pull/21641))** + +- **Remove unused paramter + ([21685](https://github.com/civicrm/civicrm-core/pull/21685))** + +- **Remove deprecated code lines + ([21566](https://github.com/civicrm/civicrm-core/pull/21566))** + +- **Remove workflow_id reference + ([21671](https://github.com/civicrm/civicrm-core/pull/21671))** + +- **Remove now-silly function + ([21680](https://github.com/civicrm/civicrm-core/pull/21680))** + +- **Remove fugly bit + ([21497](https://github.com/civicrm/civicrm-core/pull/21497))** + +- **Remove requirement to enter email address on Opt Out + ([21350](https://github.com/civicrm/civicrm-core/pull/21350))** + +- **Remove requirement to enter email address on unsubscribe + ([21175](https://github.com/civicrm/civicrm-core/pull/21175))** + +- **Remove deprecated input variable + ([21372](https://github.com/civicrm/civicrm-core/pull/21372))** + +- **Remove unused private function + ([21371](https://github.com/civicrm/civicrm-core/pull/21371))** + +- **Remove deprecated function + ([21361](https://github.com/civicrm/civicrm-core/pull/21361))** + +- **Remove testing hack + ([21360](https://github.com/civicrm/civicrm-core/pull/21360))** + +- **Remove deprecated function + ([21358](https://github.com/civicrm/civicrm-core/pull/21358))** + +- **Removes duplicate replace on event fee amount. + ([21739](https://github.com/civicrm/civicrm-core/pull/21739))** + +- **Remove function duplicated in error + ([21758](https://github.com/civicrm/civicrm-core/pull/21758))** + +- **Remove now-obsolete getPseudoTokens + ([21760](https://github.com/civicrm/civicrm-core/pull/21760))** + +- **APIv4 - Minor code cleanup to improve efficiency in + CreateApi4RequestSubscriber + ([21775](https://github.com/civicrm/civicrm-core/pull/21775))** + +- **Function cleanup following move to non-static function + ([21693](https://github.com/civicrm/civicrm-core/pull/21693))** + +- **[REF] Extract getRedirectUrl method + ([21687](https://github.com/civicrm/civicrm-core/pull/21687))** + +- **[REF] Copy another email trait function back to the trait + ([21648](https://github.com/civicrm/civicrm-core/pull/21648))** + +- **REF - Remove non-functional code from APIv3 + ([21727](https://github.com/civicrm/civicrm-core/pull/21727))** + +- **[REF] Do not set input['line_item'] pointlessly + ([21311](https://github.com/civicrm/civicrm-core/pull/21311))** + +- **[REF] Use getSubmittedValue rather than passed values + ([21668](https://github.com/civicrm/civicrm-core/pull/21668))** + +- **(REF) MessageTemplate - Reverse renderTemplate()<=>sendTemplate() call + ([21610](https://github.com/civicrm/civicrm-core/pull/21610))** + +- **[REF] Separate contact tokens from 'tokenCompatSubscriber' + ([21626](https://github.com/civicrm/civicrm-core/pull/21626))** + +- **[Ref] Function signature cleanup + ([21618](https://github.com/civicrm/civicrm-core/pull/21618))** + +- **[REF] Return the sendEmail function to it's owner + ([21608](https://github.com/civicrm/civicrm-core/pull/21608))** + +- **[REF] Remove illusion of looping + ([21554](https://github.com/civicrm/civicrm-core/pull/21554))** + +- **[Ref] Extend email trait test, process more sanely + ([21553](https://github.com/civicrm/civicrm-core/pull/21553))** + +- **[REF] Extract domain tokens to their own class + ([21510](https://github.com/civicrm/civicrm-core/pull/21510))** + +- **[REF] add test & static array to participant values tokens + ([21476](https://github.com/civicrm/civicrm-core/pull/21476))** + +- **[REF] simplify member_tokens + ([21481](https://github.com/civicrm/civicrm-core/pull/21481))** + +- **[Ref] Cleanup on SelectValues::contributeTokens + ([21465](https://github.com/civicrm/civicrm-core/pull/21465))** + +- **[Ref] Remove pass-by-reference + ([21466](https://github.com/civicrm/civicrm-core/pull/21466))** + +- **[Ref] Remove unnecessary pass-by-reference + ([21463](https://github.com/civicrm/civicrm-core/pull/21463))** + +- **[REF] Use OO when determining what to suggest for settings.php prefixes for + drupal/backdrop views, instead of scattered "if cms ==" + ([21042](https://github.com/civicrm/civicrm-core/pull/21042))** + +- **[REF] Remove unused parameter + ([21448](https://github.com/civicrm/civicrm-core/pull/21448))** + +- **[REF] Remove unused variable + ([21451](https://github.com/civicrm/civicrm-core/pull/21451))** + +- **[REF] Extract code to load the contact in tokenCompat + ([21450](https://github.com/civicrm/civicrm-core/pull/21450))** + +- **[REF] Extract function to getDomainTokens + ([21416](https://github.com/civicrm/civicrm-core/pull/21416))** + +- **[REF] Remove cruft + ([21418](https://github.com/civicrm/civicrm-core/pull/21418))** + +- **[REF] Extract code to get the from address for a recurring contribution. + ([21357](https://github.com/civicrm/civicrm-core/pull/21357))** + +- **[Ref] Remove no-longer-used variables + ([21459](https://github.com/civicrm/civicrm-core/pull/21459))** + +- **[REF] Update Frequenecy template assignments in UpdateBilling to be + consistent with #21469 + ([21635](https://github.com/civicrm/civicrm-core/pull/21635))** + +- **[REF] Update Product Create to use hooks and also switch the manage + product/premium page to use APIv4 Product Entity + ([20822](https://github.com/civicrm/civicrm-core/pull/20822))** + +- **[REF] Add in upgrade step to align the relationship cache table collation + and charset with the other tables + ([21389](https://github.com/civicrm/civicrm-core/pull/21389))** + +- **[REF] stop passing form into createActivities + ([21653](https://github.com/civicrm/civicrm-core/pull/21653))** + +- **[REF] Extract function for re-use + ([21778](https://github.com/civicrm/civicrm-core/pull/21778))** + +- **[REF] Move getCustomFieldTokens to the tokens class, annotate more + deprecations ([21660](https://github.com/civicrm/civicrm-core/pull/21660))** + +- **Update contributors for Third Sector Design + ([21516](https://github.com/civicrm/civicrm-core/pull/21516))** + +- **[NFC/Unit test] - Fix test fail on php 7.4 + CRM_Core_BAO_MessageTemplateTest::testCaseActivityCopyTemplate + ([21443](https://github.com/civicrm/civicrm-core/pull/21443))** + +- **[NFC/Unit Test] Remove wombats and bananas from + sites/default/files/civicrm/custom + ([21768](https://github.com/civicrm/civicrm-core/pull/21768))** + +- **[NFC/Unit test] - Fix secondary issue with case token consistency test + ([21369](https://github.com/civicrm/civicrm-core/pull/21369))** + +- **Authx: README: add note about CMS permissions + ([21439](https://github.com/civicrm/civicrm-core/pull/21439))** + +- **[NFC] Add test for new case email url + ([21766](https://github.com/civicrm/civicrm-core/pull/21766))** + +- **[NFC] Afform - Add array shape annotations to FormDataModel + ([21765](https://github.com/civicrm/civicrm-core/pull/21765))** + +- **[NFC] Unit test fixes for the problem of quickform rules going missing + ([21725](https://github.com/civicrm/civicrm-core/pull/21725))** + +- **NFC - Update code comments + ([21675](https://github.com/civicrm/civicrm-core/pull/21675))** + +- **[NFC] Unit test for file-on-case + ([21678](https://github.com/civicrm/civicrm-core/pull/21678))** + +- **[NFC] [test] minor cleanup in test + ([21498](https://github.com/civicrm/civicrm-core/pull/21498))** + +- **[NFC] Fix Fatal error on php 8 due to mis matched function declaration + ([21487](https://github.com/civicrm/civicrm-core/pull/21487))** + +- **[NFC] Put back email test without tokens and enhance a little + ([21398](https://github.com/civicrm/civicrm-core/pull/21398))** + +- **[NFC] Extend send email test to cover for contact tokens being replaced + ([21386](https://github.com/civicrm/civicrm-core/pull/21386))** + +- **[NFC] Add in type hints to template upgrade functions + ([21390](https://github.com/civicrm/civicrm-core/pull/21390))** + +- **NFC Clarify description for ckeditor4 plugin + ([21349](https://github.com/civicrm/civicrm-core/pull/21349))** + +- **Improve test readability, use schema labels for membership tokens + ([21708](https://github.com/civicrm/civicrm-core/pull/21708))** + +- **Add test to cancel subscription form + ([21588](https://github.com/civicrm/civicrm-core/pull/21588))** + +- **Fix test to test trait not deprecated function + ([21373](https://github.com/civicrm/civicrm-core/pull/21373))** + +- **Fix test + ([21585](https://github.com/civicrm/civicrm-core/pull/21585))** + +- **Tests - update to use postProcess + ([21637](https://github.com/civicrm/civicrm-core/pull/21637))** + +- **Basic IDE cleanup on test class + ([21661](https://github.com/civicrm/civicrm-core/pull/21661))** + +- **Test fix + ([21662](https://github.com/civicrm/civicrm-core/pull/21662))** + +- **tests/events/*.php - Enforce general compliance with hook/event signatures + ([21615](https://github.com/civicrm/civicrm-core/pull/21615))** + +- **HttpTestTrait - Allow one to easily authenticate subrequests + ([21261](https://github.com/civicrm/civicrm-core/pull/21261))** + +- **Test regression fix + ([21649](https://github.com/civicrm/civicrm-core/pull/21649))** + +- **Test tearDown fixes + ([21548](https://github.com/civicrm/civicrm-core/pull/21548))** + +- **Convert more tests to call postProcess + ([21628](https://github.com/civicrm/civicrm-core/pull/21628))** + +- **Stop testing for gender_id output that was described as 'legacy' years ago + ([21558](https://github.com/civicrm/civicrm-core/pull/21558))** + +- **Test cleanup + ([21622](https://github.com/civicrm/civicrm-core/pull/21622))** + +- **Fix test to use postProcess + ([21630](https://github.com/civicrm/civicrm-core/pull/21630))** + +- **Test cleanup -convert to use postProcess + ([21629](https://github.com/civicrm/civicrm-core/pull/21629))** + +- **Add test and fix for API4 failing to decode strings stored as HTML + ([21549](https://github.com/civicrm/civicrm-core/pull/21549))** + +- **Initial test on event tokens + ([21563](https://github.com/civicrm/civicrm-core/pull/21563))** + +- **Cleanup on test tear downs + ([21552](https://github.com/civicrm/civicrm-core/pull/21552))** + +- **Attempt to fix test site 500 errors on activity pdf + ([21504](https://github.com/civicrm/civicrm-core/pull/21504))** + +- **(NFC) TokenConsistencyTest - Add some examples of HTML escaping + ([21837](https://github.com/civicrm/civicrm-core/pull/21837))** + +- **[REF] Fix PDF Test failure on php versions 7.4 and later + ([21866](https://github.com/civicrm/civicrm-core/pull/21866))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Justin Freeman; Andy +Burns; Benjamin W; Christian Wach; CiviCoop - Jaap Jansma; CiviCRM - Coleman +Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy; +Dave D; Digitalcourage - Detlev Sieber; Francesc Bassas i Bullich; Fuzion - +Jitendra Purohit; Greenpeace Central and Eastern Europe - Patrick Figel; iXiam - +Rubén Pineda; JMA Consulting - Monish Deb, Seamus Lee; John Kingsnorth; +Lighthouse Consulting and Design - Brian Shaughnessy; Megaphone Technology +Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; Progressive Technology +Project - Jamie McClelland; Third Sector Design - Kurund Jalmi, Michael +McAndrew, William Mortada; Valéry Gouleau; Wikimedia Foundation - Eileen +McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +AGH Strategies - Eli Lisseck; Artful Robot - Rich Lott; Black Brick Software - +David Hayes; CiviCRM - Josh Gowans; CiviDesk - Yashodha Chaku; CompuCorp - Omar +Abu Hussein; Freeform Solutions - Herb van den Dool; Humanists UK - Andrew West; +Lemniscus - Noah Miller; OPEN - dewy; Richard Baugh; Richard van Oosterhout; +Semper IT - Karin Gerritsen; Skvare - Mark Hanna; Squiffle Consulting - Aidan +Saunders; Tadpole Collective - Kevin Cristiano + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andie Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/settings/Core.setting.php b/civicrm/settings/Core.setting.php index 64778e4d87bae74397b25d45c6abe335db0be7e8..b01373382d6a9be22c9810fb973948f851827d33 100644 --- a/civicrm/settings/Core.setting.php +++ b/civicrm/settings/Core.setting.php @@ -529,6 +529,78 @@ return [ 'callback' => 'CRM_Contact_Form_Task_PDFLetterCommon::getLoggingOptions', ], ], + 'dompdf_font_dir' => [ + 'is_domain' => 1, + 'is_contact' => 0, + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'dompdf_font_dir', + 'title' => ts('DOMPDF Font Folder'), + 'description' => ts('Additional folder where DOMPDF will look for fonts.'), + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_type' => 'text', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 256, + ], + 'default' => NULL, + 'help_text' => NULL, + 'add' => '5.43', + ], + 'dompdf_chroot' => [ + 'is_domain' => 1, + 'is_contact' => 0, + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'dompdf_chroot', + 'title' => ts('DOMPDF Local Images Folder'), + 'description' => ts('Folder to restrict where DOMPDF looks when loading local images. By default it is the DOMPDF folder itself for security reasons. It will search in subfolders.'), + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_type' => 'text', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 256, + ], + 'default' => NULL, + 'help_text' => NULL, + 'add' => '5.43', + ], + 'dompdf_enable_remote' => [ + 'is_domain' => 1, + 'is_contact' => 0, + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'dompdf_enable_remote', + 'title' => ts('DOMPDF Enable Remote Images'), + 'description' => ts('Enable the use of remote images. By default this is enabled, but if not using remote images you may wish to turn it off for security reasons.'), + 'type' => 'Boolean', + 'quick_form_type' => 'YesNo', + 'html_type' => '', + 'default' => TRUE, + 'help_text' => NULL, + 'add' => '5.43', + ], + 'dompdf_log_output_file' => [ + 'is_domain' => 1, + 'is_contact' => 0, + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'dompdf_log_output_file', + 'title' => ts('DOMPDF Log File'), + 'description' => ts('DOMPDF will log debugging output in this file.'), + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_type' => 'text', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 256, + ], + 'default' => NULL, + 'help_text' => NULL, + 'add' => '5.43', + ], 'wkhtmltopdfPath' => [ 'group_name' => 'CiviCRM Preferences', 'group' => 'core', diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index d6df7ec8ceea24116918393b0f8e809e95f9f2ca..c57a1fdc695c6b6f6102a95355ef2e7f63082697 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -283,7 +283,7 @@ CREATE TABLE `civicrm_msg_template` ( `workflow_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value', `workflow_name` varchar(255), `is_default` tinyint DEFAULT 1 COMMENT 'is this the default message template for the workflow referenced by workflow_id?', - `is_reserved` tinyint COMMENT 'is this the reserved message template which we ship for the workflow referenced by workflow_id?', + `is_reserved` tinyint DEFAULT 0 COMMENT 'is this the reserved message template which we ship for the workflow referenced by workflow_id?', `is_sms` tinyint DEFAULT 0 COMMENT 'Is this message template used for sms?', `pdf_format_id` int unsigned COMMENT 'a pseudo-FK to civicrm_option_value containing PDF Page Format.', PRIMARY KEY (`id`) @@ -1699,7 +1699,7 @@ CREATE TABLE `civicrm_mapping_field` ( `operator` varchar(16) COMMENT 'SQL WHERE operator for search-builder mapping fields (search criteria).', `value` varchar(255) COMMENT 'SQL WHERE value for search-builder mapping fields.', PRIMARY KEY (`id`), - CONSTRAINT FK_civicrm_mapping_field_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`), + CONSTRAINT FK_civicrm_mapping_field_mapping_id FOREIGN KEY (`mapping_id`) REFERENCES `civicrm_mapping`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_mapping_field_location_type_id FOREIGN KEY (`location_type_id`) REFERENCES `civicrm_location_type`(`id`), CONSTRAINT FK_civicrm_mapping_field_relationship_type_id FOREIGN KEY (`relationship_type_id`) REFERENCES `civicrm_relationship_type`(`id`) ) @@ -3360,7 +3360,7 @@ CREATE TABLE `civicrm_contribution_recur` ( `installments` int unsigned COMMENT 'Total number of payments to be made. Set this to 0 if this is an open-ended commitment i.e. no set end date.', `start_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The date the first scheduled recurring contribution occurs.', `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this recurring contribution record was created.', - `modified_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', + `modified_date` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', `cancel_date` datetime COMMENT 'Date this recurring contribution was cancelled by contributor- if we can get access to it', `cancel_reason` text COMMENT 'Free text field for a reason for cancelling', `end_date` datetime COMMENT 'Date this recurring contribution finished successfully', diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 15a949658d9c59dde7a683332bf848f580a0ec4b..4a929b59311d9d8e4f28c373639754cf0738fa83 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -5333,19 +5333,19 @@ VALUES -- email greeting. (@option_group_id_emailGreeting, 'Dear {contact.first_name}', 1, 'Dear {contact.first_name}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_emailGreeting, 'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}', 2, 'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_emailGreeting, 'Dear {contact.individual_prefix} {contact.last_name}', 3, 'Dear {contact.individual_prefix} {contact.last_name}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, 'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}', 2, 'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, 'Dear {contact.prefix_id:label} {contact.last_name}', 3, 'Dear {contact.prefix_id:label} {contact.last_name}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_emailGreeting, 'Customized', 4, 'Customized', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), (@option_group_id_emailGreeting, 'Dear {contact.household_name}', 5, 'Dear {contact.household_name}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- postal greeting. (@option_group_id_postalGreeting, 'Dear {contact.first_name}', 1, 'Dear {contact.first_name}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_postalGreeting, 'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}', 2, 'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_postalGreeting, 'Dear {contact.individual_prefix} {contact.last_name}', 3, 'Dear {contact.individual_prefix} {contact.last_name}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, 'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}', 2, 'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, 'Dear {contact.prefix_id:label} {contact.last_name}', 3, 'Dear {contact.prefix_id:label} {contact.last_name}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_postalGreeting, 'Customized', 4, 'Customized', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), (@option_group_id_postalGreeting, 'Dear {contact.household_name}', 5, 'Dear {contact.household_name}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- addressee - (@option_group_id_addressee, '{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}', '1', '}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}', NULL , '1', '1', '1', NULL , '0', '0', '1', NULL , NULL, NULL), + (@option_group_id_addressee, '{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}', '1', '{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}', NULL , '1', '1', '1', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, '{contact.household_name}', '2', '{contact.household_name}', NULL , '2', '1', '2', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, '{contact.organization_name}', '3', '{contact.organization_name}', NULL , '3', '1', '3', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, 'Customized', '4', 'Customized', NULL , 0 , '0', '4', NULL , '0', '1', '1', NULL , NULL, NULL), @@ -23157,6 +23157,7 @@ INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_act INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'recaptcha', 'reCAPTCHA', 'reCAPTCHA', 'recaptcha', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'ckeditor4', 'CKEditor4', 'CKEditor4', 'ckeditor4', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'legacycustomsearches', 'Custom search framework', 'Custom search framework', 'legacycustomsearches', 1); +INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'org.civicrm.flexmailer', 'FlexMailer', 'FlexMailer', 'flexmailer', 1); -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | @@ -23194,7 +23195,7 @@ INSERT INTO `civicrm_dashboard` -- event badge INSERT INTO civicrm_print_label (title, name, description, label_format_name, label_type_id, is_default, is_reserved, is_active, data) VALUES -('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}'); +('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date|crmDate:\"%B %E%f\"}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}'); -- navigation @@ -23961,4 +23962,4 @@ INSERT INTO `civicrm_report_instance` ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) VALUES ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); -UPDATE civicrm_domain SET version = '5.42.1'; +UPDATE civicrm_domain SET version = '5.43.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 0521d9e75732b971c5fdc46b54005ce9aa66518f..a39591405e3aa0287c5e92f6e392d01e1d38094e 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,15 +1,16 @@ --- MySQL dump 10.19 Distrib 10.3.29-MariaDB, for debian-linux-gnu (x86_64) +-- MySQL dump 10.13 Distrib 5.6.47, for Linux (x86_64) -- --- Host: database Database: dmastercivicrm +-- Host: 127.0.0.1 Database: dmastercivi_ssc8b -- ------------------------------------------------------ --- Server version 10.4.20-MariaDB-1:10.4.20+maria~focal +-- Server version 5.6.47 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; +/*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; @@ -159,629 +160,629 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity` WRITE; /*!40000 ALTER TABLE `civicrm_activity` DISABLE KEYS */; INSERT INTO `civicrm_activity` (`id`, `source_record_id`, `activity_type_id`, `subject`, `activity_date_time`, `duration`, `location`, `phone_id`, `phone_number`, `details`, `status_id`, `priority_id`, `parent_id`, `is_test`, `medium_id`, `is_auto`, `relationship_id`, `is_current_revision`, `original_id`, `result`, `is_deleted`, `campaign_id`, `engagement_level`, `weight`, `is_star`, `created_date`, `modified_date`) VALUES - (1,NULL,9,'Subject for Tell a Friend','2020-12-04 12:12:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (2,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 20:32:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (3,NULL,10,'Subject for Pledge Acknowledgment','2020-08-22 01:57:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (4,NULL,9,'Subject for Tell a Friend','2020-10-02 01:06:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (5,NULL,10,'Subject for Pledge Acknowledgment','2020-12-12 15:15:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (6,NULL,10,'Subject for Pledge Acknowledgment','2020-08-10 16:38:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (7,NULL,9,'Subject for Tell a Friend','2020-12-21 11:34:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (8,NULL,9,'Subject for Tell a Friend','2020-10-09 23:43:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (9,NULL,10,'Subject for Pledge Acknowledgment','2020-12-09 13:59:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (10,NULL,9,'Subject for Tell a Friend','2021-01-27 18:45:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (11,NULL,10,'Subject for Pledge Acknowledgment','2020-09-23 04:57:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (12,NULL,10,'Subject for Pledge Acknowledgment','2021-01-14 17:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (13,NULL,9,'Subject for Tell a Friend','2021-06-26 05:05:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (14,NULL,10,'Subject for Pledge Acknowledgment','2021-04-14 06:18:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (15,NULL,9,'Subject for Tell a Friend','2020-10-01 14:47:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (16,NULL,9,'Subject for Tell a Friend','2020-09-20 11:20:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (17,NULL,9,'Subject for Tell a Friend','2020-09-21 02:34:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (18,NULL,9,'Subject for Tell a Friend','2020-10-24 18:24:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (19,NULL,10,'Subject for Pledge Acknowledgment','2021-06-11 14:47:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (20,NULL,10,'Subject for Pledge Acknowledgment','2020-08-26 06:53:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (21,NULL,10,'Subject for Pledge Acknowledgment','2020-12-12 10:48:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (22,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 04:20:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (23,NULL,9,'Subject for Tell a Friend','2021-01-24 13:16:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (24,NULL,9,'Subject for Tell a Friend','2021-07-07 22:55:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (25,NULL,10,'Subject for Pledge Acknowledgment','2021-01-13 02:59:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:45','2021-07-26 14:08:45'), - (26,NULL,9,'Subject for Tell a Friend','2021-01-18 17:24:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (27,NULL,10,'Subject for Pledge Acknowledgment','2020-09-04 03:32:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (28,NULL,9,'Subject for Tell a Friend','2021-05-03 02:24:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (29,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 05:59:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (30,NULL,9,'Subject for Tell a Friend','2020-09-10 12:39:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (31,NULL,10,'Subject for Pledge Acknowledgment','2021-02-17 14:49:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (32,NULL,9,'Subject for Tell a Friend','2020-12-08 00:45:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (33,NULL,9,'Subject for Tell a Friend','2020-09-22 18:21:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (34,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 11:17:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (35,NULL,9,'Subject for Tell a Friend','2021-05-03 05:23:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (36,NULL,10,'Subject for Pledge Acknowledgment','2020-12-11 19:44:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (37,NULL,9,'Subject for Tell a Friend','2021-01-11 23:58:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (38,NULL,10,'Subject for Pledge Acknowledgment','2020-07-27 05:53:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (39,NULL,10,'Subject for Pledge Acknowledgment','2020-11-10 00:28:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (40,NULL,9,'Subject for Tell a Friend','2021-02-25 13:10:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (41,NULL,9,'Subject for Tell a Friend','2020-11-04 14:41:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (42,NULL,10,'Subject for Pledge Acknowledgment','2020-11-29 13:30:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (43,NULL,9,'Subject for Tell a Friend','2021-07-13 00:35:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (44,NULL,10,'Subject for Pledge Acknowledgment','2020-09-11 21:43:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (45,NULL,9,'Subject for Tell a Friend','2021-06-03 23:45:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (46,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 02:59:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (47,NULL,10,'Subject for Pledge Acknowledgment','2020-08-20 22:28:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (48,NULL,10,'Subject for Pledge Acknowledgment','2021-04-28 08:45:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (49,NULL,10,'Subject for Pledge Acknowledgment','2020-09-07 02:47:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (50,NULL,9,'Subject for Tell a Friend','2020-11-15 13:41:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (51,NULL,10,'Subject for Pledge Acknowledgment','2021-02-19 10:08:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (52,NULL,9,'Subject for Tell a Friend','2020-10-01 02:38:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (53,NULL,10,'Subject for Pledge Acknowledgment','2021-03-24 00:02:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (54,NULL,10,'Subject for Pledge Acknowledgment','2021-04-23 07:00:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (55,NULL,9,'Subject for Tell a Friend','2021-03-26 04:13:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (56,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 15:05:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (57,NULL,10,'Subject for Pledge Acknowledgment','2021-02-27 07:09:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (58,NULL,10,'Subject for Pledge Acknowledgment','2020-08-13 01:46:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (59,NULL,9,'Subject for Tell a Friend','2021-07-25 21:52:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (60,NULL,9,'Subject for Tell a Friend','2021-07-21 06:12:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (61,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 23:41:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (62,NULL,9,'Subject for Tell a Friend','2021-06-11 02:57:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (63,NULL,9,'Subject for Tell a Friend','2021-06-21 07:42:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (64,NULL,9,'Subject for Tell a Friend','2021-07-09 14:16:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (65,NULL,9,'Subject for Tell a Friend','2020-10-19 06:34:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (66,NULL,10,'Subject for Pledge Acknowledgment','2021-05-21 20:41:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (67,NULL,10,'Subject for Pledge Acknowledgment','2021-04-02 01:04:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (68,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 19:25:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (69,NULL,10,'Subject for Pledge Acknowledgment','2020-07-29 23:25:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (70,NULL,10,'Subject for Pledge Acknowledgment','2021-05-21 18:52:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (71,NULL,10,'Subject for Pledge Acknowledgment','2021-03-26 12:57:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (72,NULL,9,'Subject for Tell a Friend','2021-04-09 13:53:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (73,NULL,9,'Subject for Tell a Friend','2021-03-07 23:11:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (74,NULL,9,'Subject for Tell a Friend','2020-09-24 03:18:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (75,NULL,10,'Subject for Pledge Acknowledgment','2020-09-19 15:59:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (76,NULL,9,'Subject for Tell a Friend','2021-05-22 10:52:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (77,NULL,9,'Subject for Tell a Friend','2021-07-21 12:26:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (78,NULL,10,'Subject for Pledge Acknowledgment','2020-08-19 13:59:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (79,NULL,10,'Subject for Pledge Acknowledgment','2021-02-23 09:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (80,NULL,9,'Subject for Tell a Friend','2021-03-08 08:35:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (81,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 03:23:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (82,NULL,10,'Subject for Pledge Acknowledgment','2020-12-08 07:38:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (83,NULL,9,'Subject for Tell a Friend','2021-04-05 15:06:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (84,NULL,9,'Subject for Tell a Friend','2021-04-12 11:18:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (85,NULL,9,'Subject for Tell a Friend','2020-09-29 08:24:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (86,NULL,9,'Subject for Tell a Friend','2021-06-24 06:39:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (87,NULL,10,'Subject for Pledge Acknowledgment','2021-06-28 01:41:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (88,NULL,10,'Subject for Pledge Acknowledgment','2021-02-22 03:49:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (89,NULL,9,'Subject for Tell a Friend','2021-07-19 12:10:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (90,NULL,10,'Subject for Pledge Acknowledgment','2020-11-09 23:51:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (91,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 13:26:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (92,NULL,9,'Subject for Tell a Friend','2021-04-30 12:03:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (93,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 22:21:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (94,NULL,9,'Subject for Tell a Friend','2021-04-23 08:05:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (95,NULL,9,'Subject for Tell a Friend','2020-12-13 00:42:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (96,NULL,9,'Subject for Tell a Friend','2021-05-09 07:15:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (97,NULL,9,'Subject for Tell a Friend','2021-07-05 04:00:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (98,NULL,10,'Subject for Pledge Acknowledgment','2021-07-08 13:18:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (99,NULL,10,'Subject for Pledge Acknowledgment','2020-08-25 16:51:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (100,NULL,10,'Subject for Pledge Acknowledgment','2020-08-13 00:29:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (101,NULL,9,'Subject for Tell a Friend','2020-11-10 02:40:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (102,NULL,9,'Subject for Tell a Friend','2021-05-31 07:51:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (103,NULL,10,'Subject for Pledge Acknowledgment','2020-09-02 02:42:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (104,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 04:13:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (105,NULL,9,'Subject for Tell a Friend','2021-03-09 06:15:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (106,NULL,9,'Subject for Tell a Friend','2020-08-25 23:56:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (107,NULL,10,'Subject for Pledge Acknowledgment','2021-03-05 01:01:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (108,NULL,9,'Subject for Tell a Friend','2020-09-18 21:04:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (109,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 10:15:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (110,NULL,10,'Subject for Pledge Acknowledgment','2021-04-21 03:15:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (111,NULL,9,'Subject for Tell a Friend','2021-06-23 06:09:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (112,NULL,10,'Subject for Pledge Acknowledgment','2021-03-14 19:14:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (113,NULL,9,'Subject for Tell a Friend','2020-11-05 16:50:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (114,NULL,9,'Subject for Tell a Friend','2020-09-11 05:53:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (115,NULL,10,'Subject for Pledge Acknowledgment','2021-04-05 21:25:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (116,NULL,9,'Subject for Tell a Friend','2021-02-02 23:35:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (117,NULL,10,'Subject for Pledge Acknowledgment','2020-10-09 09:11:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (118,NULL,9,'Subject for Tell a Friend','2020-11-07 11:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (119,NULL,10,'Subject for Pledge Acknowledgment','2021-06-24 15:10:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (120,NULL,9,'Subject for Tell a Friend','2021-02-14 11:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (121,NULL,9,'Subject for Tell a Friend','2020-10-24 20:15:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (122,NULL,10,'Subject for Pledge Acknowledgment','2020-09-09 17:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (123,NULL,9,'Subject for Tell a Friend','2021-04-20 07:35:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (124,NULL,10,'Subject for Pledge Acknowledgment','2021-02-19 18:32:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (125,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 19:01:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (126,NULL,9,'Subject for Tell a Friend','2021-06-06 05:00:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (127,NULL,9,'Subject for Tell a Friend','2021-06-27 20:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (128,NULL,9,'Subject for Tell a Friend','2021-07-13 18:44:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (129,NULL,10,'Subject for Pledge Acknowledgment','2021-02-18 23:59:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (130,NULL,9,'Subject for Tell a Friend','2021-04-17 19:15:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (131,NULL,10,'Subject for Pledge Acknowledgment','2020-11-03 23:53:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (132,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 08:46:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (133,NULL,10,'Subject for Pledge Acknowledgment','2020-08-27 17:44:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (134,NULL,9,'Subject for Tell a Friend','2020-08-18 18:49:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (135,NULL,10,'Subject for Pledge Acknowledgment','2021-02-16 15:57:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (136,NULL,9,'Subject for Tell a Friend','2020-09-05 08:36:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (137,NULL,10,'Subject for Pledge Acknowledgment','2020-08-20 15:01:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (138,NULL,9,'Subject for Tell a Friend','2020-10-16 11:28:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (139,NULL,10,'Subject for Pledge Acknowledgment','2020-11-10 07:50:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (140,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 01:27:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (141,NULL,10,'Subject for Pledge Acknowledgment','2021-03-16 01:44:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (142,NULL,9,'Subject for Tell a Friend','2021-05-23 15:48:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (143,NULL,9,'Subject for Tell a Friend','2020-10-26 09:57:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (144,NULL,9,'Subject for Tell a Friend','2020-11-23 15:31:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (145,NULL,9,'Subject for Tell a Friend','2020-12-19 19:11:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (146,NULL,9,'Subject for Tell a Friend','2021-06-15 17:33:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (147,NULL,10,'Subject for Pledge Acknowledgment','2021-07-11 23:53:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (148,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 12:28:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (149,NULL,9,'Subject for Tell a Friend','2021-04-06 07:16:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (150,NULL,10,'Subject for Pledge Acknowledgment','2021-07-10 12:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (151,NULL,9,'Subject for Tell a Friend','2021-01-21 13:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (152,NULL,10,'Subject for Pledge Acknowledgment','2020-10-22 14:40:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (153,NULL,9,'Subject for Tell a Friend','2021-02-07 13:49:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (154,NULL,9,'Subject for Tell a Friend','2020-08-14 11:14:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (155,NULL,10,'Subject for Pledge Acknowledgment','2021-01-23 19:46:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (156,NULL,10,'Subject for Pledge Acknowledgment','2021-02-04 18:51:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (157,NULL,9,'Subject for Tell a Friend','2020-11-03 19:21:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (158,NULL,9,'Subject for Tell a Friend','2020-12-02 08:11:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (159,NULL,10,'Subject for Pledge Acknowledgment','2021-02-16 15:34:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (160,NULL,9,'Subject for Tell a Friend','2021-06-29 04:12:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (161,NULL,9,'Subject for Tell a Friend','2020-11-21 16:53:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (162,NULL,9,'Subject for Tell a Friend','2020-09-11 16:27:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (163,NULL,10,'Subject for Pledge Acknowledgment','2021-05-03 17:26:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (164,NULL,9,'Subject for Tell a Friend','2020-11-07 04:51:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (165,NULL,9,'Subject for Tell a Friend','2020-08-13 06:11:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (166,NULL,9,'Subject for Tell a Friend','2020-08-13 03:49:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (167,NULL,10,'Subject for Pledge Acknowledgment','2021-01-27 04:43:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (168,NULL,9,'Subject for Tell a Friend','2021-03-29 09:17:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (169,NULL,9,'Subject for Tell a Friend','2021-02-12 22:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (170,NULL,10,'Subject for Pledge Acknowledgment','2021-03-24 07:00:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (171,NULL,10,'Subject for Pledge Acknowledgment','2021-01-19 17:58:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (172,NULL,9,'Subject for Tell a Friend','2020-09-26 06:00:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (173,NULL,9,'Subject for Tell a Friend','2021-02-14 04:38:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (174,NULL,9,'Subject for Tell a Friend','2021-02-15 03:36:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:46','2021-07-26 14:08:46'), - (175,NULL,9,'Subject for Tell a Friend','2021-06-16 02:37:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (176,NULL,9,'Subject for Tell a Friend','2020-11-20 09:54:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (177,NULL,9,'Subject for Tell a Friend','2020-08-20 22:54:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (178,NULL,9,'Subject for Tell a Friend','2020-08-07 19:20:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (179,NULL,10,'Subject for Pledge Acknowledgment','2020-12-15 11:48:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (180,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 17:14:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (181,NULL,10,'Subject for Pledge Acknowledgment','2021-04-04 09:06:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (182,NULL,10,'Subject for Pledge Acknowledgment','2021-06-01 08:24:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (183,NULL,10,'Subject for Pledge Acknowledgment','2020-10-10 09:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (184,NULL,10,'Subject for Pledge Acknowledgment','2020-12-29 22:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (185,NULL,10,'Subject for Pledge Acknowledgment','2021-01-11 11:38:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (186,NULL,10,'Subject for Pledge Acknowledgment','2021-06-05 10:27:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (187,NULL,9,'Subject for Tell a Friend','2020-10-15 07:57:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (188,NULL,10,'Subject for Pledge Acknowledgment','2021-02-03 13:26:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (189,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 23:15:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (190,NULL,10,'Subject for Pledge Acknowledgment','2021-04-03 20:57:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (191,NULL,9,'Subject for Tell a Friend','2021-03-26 11:09:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (192,NULL,9,'Subject for Tell a Friend','2020-10-20 23:26:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (193,NULL,10,'Subject for Pledge Acknowledgment','2020-07-29 05:27:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (194,NULL,10,'Subject for Pledge Acknowledgment','2021-01-14 07:50:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (195,NULL,10,'Subject for Pledge Acknowledgment','2021-02-16 04:05:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (196,NULL,10,'Subject for Pledge Acknowledgment','2020-09-21 02:55:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (197,NULL,9,'Subject for Tell a Friend','2021-06-02 07:14:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (198,NULL,10,'Subject for Pledge Acknowledgment','2021-02-28 02:57:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (199,NULL,9,'Subject for Tell a Friend','2020-10-06 12:47:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (200,NULL,10,'Subject for Pledge Acknowledgment','2020-10-20 01:29:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (201,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 22:41:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (202,NULL,9,'Subject for Tell a Friend','2021-07-24 22:35:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (203,NULL,9,'Subject for Tell a Friend','2021-02-03 17:21:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (204,NULL,9,'Subject for Tell a Friend','2021-01-25 00:00:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (205,NULL,9,'Subject for Tell a Friend','2021-02-16 18:53:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (206,NULL,9,'Subject for Tell a Friend','2021-04-28 01:15:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (207,NULL,10,'Subject for Pledge Acknowledgment','2021-01-26 09:28:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (208,NULL,9,'Subject for Tell a Friend','2020-12-29 14:25:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (209,NULL,9,'Subject for Tell a Friend','2021-06-20 02:57:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (210,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 21:00:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (211,NULL,10,'Subject for Pledge Acknowledgment','2021-06-10 22:23:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (212,NULL,10,'Subject for Pledge Acknowledgment','2021-03-19 06:04:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (213,NULL,9,'Subject for Tell a Friend','2021-03-13 21:41:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (214,NULL,10,'Subject for Pledge Acknowledgment','2021-03-15 09:49:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (215,NULL,10,'Subject for Pledge Acknowledgment','2021-06-25 22:11:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (216,NULL,9,'Subject for Tell a Friend','2020-09-16 00:08:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (217,NULL,10,'Subject for Pledge Acknowledgment','2021-02-05 19:29:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (218,NULL,9,'Subject for Tell a Friend','2021-03-10 00:02:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (219,NULL,10,'Subject for Pledge Acknowledgment','2021-01-07 03:52:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (220,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 03:23:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (221,NULL,10,'Subject for Pledge Acknowledgment','2020-10-12 07:29:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (222,NULL,10,'Subject for Pledge Acknowledgment','2020-08-07 21:53:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (223,NULL,9,'Subject for Tell a Friend','2020-12-09 16:42:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (224,NULL,9,'Subject for Tell a Friend','2021-07-19 09:29:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (225,NULL,10,'Subject for Pledge Acknowledgment','2020-09-02 05:41:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (226,NULL,9,'Subject for Tell a Friend','2021-05-28 02:33:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (227,NULL,10,'Subject for Pledge Acknowledgment','2021-02-04 00:38:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (228,NULL,10,'Subject for Pledge Acknowledgment','2020-09-04 22:28:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (229,NULL,9,'Subject for Tell a Friend','2021-01-06 14:50:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (230,NULL,10,'Subject for Pledge Acknowledgment','2021-03-10 20:49:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (231,NULL,9,'Subject for Tell a Friend','2020-12-06 20:58:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (232,NULL,9,'Subject for Tell a Friend','2021-07-09 04:22:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (233,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 05:24:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (234,NULL,10,'Subject for Pledge Acknowledgment','2020-09-02 12:41:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (235,NULL,9,'Subject for Tell a Friend','2021-04-22 07:11:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (236,NULL,9,'Subject for Tell a Friend','2021-02-20 11:29:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (237,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 07:08:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (238,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 16:55:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (239,NULL,9,'Subject for Tell a Friend','2021-06-18 02:17:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (240,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 04:46:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (241,NULL,10,'Subject for Pledge Acknowledgment','2020-12-08 09:15:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (242,NULL,9,'Subject for Tell a Friend','2020-09-17 03:28:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (243,NULL,9,'Subject for Tell a Friend','2020-09-14 21:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (244,NULL,10,'Subject for Pledge Acknowledgment','2020-08-15 06:33:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (245,NULL,9,'Subject for Tell a Friend','2020-08-04 02:27:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (246,NULL,10,'Subject for Pledge Acknowledgment','2020-08-10 00:16:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (247,NULL,10,'Subject for Pledge Acknowledgment','2021-01-16 06:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (248,NULL,9,'Subject for Tell a Friend','2020-10-12 17:30:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (249,NULL,10,'Subject for Pledge Acknowledgment','2020-09-17 13:24:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (250,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 17:53:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (251,NULL,9,'Subject for Tell a Friend','2020-11-06 13:21:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (252,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 09:42:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (253,NULL,9,'Subject for Tell a Friend','2021-07-18 02:13:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (254,NULL,9,'Subject for Tell a Friend','2021-04-27 14:42:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (255,NULL,10,'Subject for Pledge Acknowledgment','2020-12-31 22:52:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (256,NULL,9,'Subject for Tell a Friend','2020-12-01 05:33:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (257,NULL,10,'Subject for Pledge Acknowledgment','2021-01-08 12:14:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (258,NULL,10,'Subject for Pledge Acknowledgment','2021-04-12 01:06:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (259,NULL,9,'Subject for Tell a Friend','2020-09-22 21:14:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (260,NULL,10,'Subject for Pledge Acknowledgment','2021-02-08 05:03:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (261,NULL,9,'Subject for Tell a Friend','2020-12-14 03:33:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (262,NULL,10,'Subject for Pledge Acknowledgment','2021-01-28 05:22:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (263,NULL,9,'Subject for Tell a Friend','2021-06-19 21:59:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (264,NULL,9,'Subject for Tell a Friend','2021-02-17 22:26:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (265,NULL,10,'Subject for Pledge Acknowledgment','2020-12-18 18:52:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (266,NULL,9,'Subject for Tell a Friend','2020-11-02 00:56:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (267,NULL,10,'Subject for Pledge Acknowledgment','2020-07-30 21:55:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (268,NULL,9,'Subject for Tell a Friend','2020-11-19 12:35:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (269,NULL,9,'Subject for Tell a Friend','2020-11-08 07:16:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (270,NULL,9,'Subject for Tell a Friend','2021-02-16 08:54:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (271,NULL,10,'Subject for Pledge Acknowledgment','2020-12-05 18:18:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (272,NULL,9,'Subject for Tell a Friend','2020-11-22 21:31:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (273,NULL,10,'Subject for Pledge Acknowledgment','2020-11-03 11:48:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (274,NULL,9,'Subject for Tell a Friend','2021-02-18 07:06:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (275,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 17:04:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (276,NULL,9,'Subject for Tell a Friend','2020-10-25 16:50:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (277,NULL,9,'Subject for Tell a Friend','2021-07-24 01:57:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (278,NULL,9,'Subject for Tell a Friend','2020-07-26 16:31:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (279,NULL,9,'Subject for Tell a Friend','2020-11-01 07:06:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (280,NULL,9,'Subject for Tell a Friend','2021-06-13 12:36:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (281,NULL,9,'Subject for Tell a Friend','2021-03-23 10:19:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (282,NULL,10,'Subject for Pledge Acknowledgment','2021-06-14 10:34:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (283,NULL,10,'Subject for Pledge Acknowledgment','2021-01-20 00:39:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (284,NULL,9,'Subject for Tell a Friend','2020-10-04 04:01:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (285,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 04:25:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (286,NULL,9,'Subject for Tell a Friend','2021-04-13 09:06:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (287,NULL,9,'Subject for Tell a Friend','2020-11-23 20:12:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:47','2021-07-26 14:08:47'), - (288,NULL,9,'Subject for Tell a Friend','2020-09-12 11:12:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (289,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 18:02:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (290,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 07:12:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (291,NULL,10,'Subject for Pledge Acknowledgment','2020-12-18 04:53:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (292,NULL,10,'Subject for Pledge Acknowledgment','2020-10-07 16:13:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (293,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 19:52:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (294,NULL,10,'Subject for Pledge Acknowledgment','2020-10-10 20:34:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (295,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 00:41:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (296,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 11:07:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (297,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 14:02:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (298,NULL,9,'Subject for Tell a Friend','2020-10-06 19:23:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (299,NULL,10,'Subject for Pledge Acknowledgment','2020-10-28 05:50:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (300,NULL,10,'Subject for Pledge Acknowledgment','2021-07-05 02:28:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (301,NULL,10,'Subject for Pledge Acknowledgment','2020-09-06 07:35:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (302,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 15:04:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (303,NULL,9,'Subject for Tell a Friend','2021-02-27 20:20:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (304,NULL,10,'Subject for Pledge Acknowledgment','2020-09-26 21:45:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (305,NULL,10,'Subject for Pledge Acknowledgment','2021-01-23 06:02:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (306,NULL,9,'Subject for Tell a Friend','2020-12-05 02:34:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (307,NULL,9,'Subject for Tell a Friend','2020-11-21 17:34:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (308,NULL,10,'Subject for Pledge Acknowledgment','2021-02-24 16:25:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (309,NULL,10,'Subject for Pledge Acknowledgment','2020-09-16 08:56:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (310,NULL,9,'Subject for Tell a Friend','2021-02-03 21:17:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (311,NULL,10,'Subject for Pledge Acknowledgment','2021-02-01 01:08:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (312,NULL,9,'Subject for Tell a Friend','2020-10-02 19:53:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (313,NULL,9,'Subject for Tell a Friend','2021-01-10 01:54:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (314,NULL,10,'Subject for Pledge Acknowledgment','2021-07-03 16:01:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (315,NULL,9,'Subject for Tell a Friend','2020-08-14 04:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (316,NULL,9,'Subject for Tell a Friend','2020-10-11 19:05:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (317,NULL,9,'Subject for Tell a Friend','2020-10-01 04:51:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (318,NULL,10,'Subject for Pledge Acknowledgment','2021-04-06 21:00:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (319,NULL,9,'Subject for Tell a Friend','2021-05-30 23:04:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (320,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 09:26:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (321,NULL,10,'Subject for Pledge Acknowledgment','2020-12-31 03:15:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (322,NULL,10,'Subject for Pledge Acknowledgment','2020-08-24 06:53:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (323,NULL,9,'Subject for Tell a Friend','2020-11-06 22:22:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (324,NULL,9,'Subject for Tell a Friend','2021-05-11 07:06:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (325,NULL,9,'Subject for Tell a Friend','2020-08-17 14:36:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (326,NULL,9,'Subject for Tell a Friend','2021-03-04 20:40:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (327,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 09:22:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (328,NULL,9,'Subject for Tell a Friend','2021-02-27 01:09:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (329,NULL,9,'Subject for Tell a Friend','2021-05-25 07:59:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (330,NULL,10,'Subject for Pledge Acknowledgment','2020-09-26 15:09:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (331,NULL,9,'Subject for Tell a Friend','2020-11-06 13:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (332,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 07:02:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (333,NULL,10,'Subject for Pledge Acknowledgment','2021-02-25 12:18:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (334,NULL,10,'Subject for Pledge Acknowledgment','2020-12-24 16:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (335,NULL,10,'Subject for Pledge Acknowledgment','2020-08-17 03:29:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (336,NULL,10,'Subject for Pledge Acknowledgment','2021-04-01 22:25:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (337,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 21:50:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (338,NULL,9,'Subject for Tell a Friend','2020-12-15 02:16:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (339,NULL,9,'Subject for Tell a Friend','2020-09-28 14:56:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (340,NULL,9,'Subject for Tell a Friend','2020-11-02 04:50:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (341,NULL,9,'Subject for Tell a Friend','2021-02-10 05:19:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (342,NULL,9,'Subject for Tell a Friend','2021-01-07 17:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (343,NULL,10,'Subject for Pledge Acknowledgment','2021-02-08 19:42:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (344,NULL,10,'Subject for Pledge Acknowledgment','2021-04-28 06:53:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (345,NULL,10,'Subject for Pledge Acknowledgment','2020-10-04 05:29:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (346,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 05:19:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (347,NULL,10,'Subject for Pledge Acknowledgment','2021-05-11 00:08:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (348,NULL,9,'Subject for Tell a Friend','2020-11-19 14:55:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (349,NULL,9,'Subject for Tell a Friend','2020-11-30 01:12:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (350,NULL,9,'Subject for Tell a Friend','2021-02-15 11:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (351,NULL,9,'Subject for Tell a Friend','2021-06-25 04:14:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (352,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 15:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (353,NULL,10,'Subject for Pledge Acknowledgment','2021-03-28 22:41:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (354,NULL,9,'Subject for Tell a Friend','2021-05-02 23:45:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (355,NULL,9,'Subject for Tell a Friend','2020-08-13 20:50:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (356,NULL,9,'Subject for Tell a Friend','2021-04-30 05:20:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (357,NULL,9,'Subject for Tell a Friend','2021-05-07 17:53:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (358,NULL,9,'Subject for Tell a Friend','2021-05-13 01:19:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (359,NULL,10,'Subject for Pledge Acknowledgment','2021-03-26 04:59:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (360,NULL,9,'Subject for Tell a Friend','2021-01-25 10:21:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (361,NULL,10,'Subject for Pledge Acknowledgment','2021-06-06 15:19:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (362,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 10:40:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (363,NULL,9,'Subject for Tell a Friend','2021-03-10 19:13:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (364,NULL,9,'Subject for Tell a Friend','2021-05-23 09:09:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (365,NULL,10,'Subject for Pledge Acknowledgment','2020-09-29 14:53:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (366,NULL,9,'Subject for Tell a Friend','2021-01-14 03:50:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (367,NULL,10,'Subject for Pledge Acknowledgment','2020-12-21 17:48:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (368,NULL,9,'Subject for Tell a Friend','2020-12-02 01:02:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (369,NULL,9,'Subject for Tell a Friend','2021-06-30 11:20:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (370,NULL,9,'Subject for Tell a Friend','2021-05-27 11:36:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (371,NULL,9,'Subject for Tell a Friend','2021-02-11 14:33:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (372,NULL,9,'Subject for Tell a Friend','2020-11-07 04:13:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (373,NULL,10,'Subject for Pledge Acknowledgment','2021-02-25 04:17:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (374,NULL,9,'Subject for Tell a Friend','2020-10-21 14:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (375,NULL,9,'Subject for Tell a Friend','2021-06-03 17:32:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (376,NULL,9,'Subject for Tell a Friend','2021-04-27 08:04:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (377,NULL,9,'Subject for Tell a Friend','2021-02-18 23:27:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (378,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 07:44:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (379,NULL,9,'Subject for Tell a Friend','2021-05-30 22:54:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (380,NULL,10,'Subject for Pledge Acknowledgment','2020-10-19 09:21:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (381,NULL,10,'Subject for Pledge Acknowledgment','2020-10-11 05:26:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (382,NULL,10,'Subject for Pledge Acknowledgment','2020-10-20 18:52:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (383,NULL,9,'Subject for Tell a Friend','2021-07-13 21:27:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (384,NULL,10,'Subject for Pledge Acknowledgment','2021-06-03 16:36:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (385,NULL,10,'Subject for Pledge Acknowledgment','2020-12-06 15:34:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (386,NULL,9,'Subject for Tell a Friend','2020-12-11 02:34:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (387,NULL,9,'Subject for Tell a Friend','2021-05-23 15:44:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (388,NULL,9,'Subject for Tell a Friend','2021-04-04 08:36:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (389,NULL,9,'Subject for Tell a Friend','2021-06-01 01:09:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (390,NULL,10,'Subject for Pledge Acknowledgment','2021-05-25 11:51:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (391,NULL,9,'Subject for Tell a Friend','2020-12-16 08:47:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (392,NULL,10,'Subject for Pledge Acknowledgment','2021-03-26 09:48:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:48','2021-07-26 14:08:48'), - (393,NULL,10,'Subject for Pledge Acknowledgment','2020-12-09 17:45:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (394,NULL,9,'Subject for Tell a Friend','2021-05-07 11:54:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (395,NULL,9,'Subject for Tell a Friend','2021-07-23 19:44:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (396,NULL,9,'Subject for Tell a Friend','2020-10-06 12:19:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (397,NULL,10,'Subject for Pledge Acknowledgment','2021-05-03 22:50:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (398,NULL,10,'Subject for Pledge Acknowledgment','2020-08-26 12:24:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (399,NULL,9,'Subject for Tell a Friend','2020-10-07 08:27:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (400,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 18:35:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (401,NULL,9,'Subject for Tell a Friend','2020-11-17 22:59:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (402,NULL,9,'Subject for Tell a Friend','2020-08-12 02:42:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (403,NULL,10,'Subject for Pledge Acknowledgment','2021-07-24 21:03:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (404,NULL,10,'Subject for Pledge Acknowledgment','2021-06-07 01:39:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (405,NULL,10,'Subject for Pledge Acknowledgment','2021-02-11 12:22:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (406,NULL,10,'Subject for Pledge Acknowledgment','2020-09-04 20:08:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (407,NULL,9,'Subject for Tell a Friend','2020-10-26 09:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (408,NULL,9,'Subject for Tell a Friend','2020-09-14 06:31:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (409,NULL,9,'Subject for Tell a Friend','2021-04-11 12:27:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (410,NULL,9,'Subject for Tell a Friend','2021-06-30 16:41:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (411,NULL,9,'Subject for Tell a Friend','2020-07-29 22:22:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (412,NULL,10,'Subject for Pledge Acknowledgment','2021-02-13 07:41:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (413,NULL,9,'Subject for Tell a Friend','2021-07-13 14:08:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (414,NULL,9,'Subject for Tell a Friend','2021-03-21 18:56:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (415,NULL,10,'Subject for Pledge Acknowledgment','2021-01-06 13:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (416,NULL,10,'Subject for Pledge Acknowledgment','2020-09-07 07:15:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (417,NULL,10,'Subject for Pledge Acknowledgment','2021-06-23 14:15:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (418,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 09:27:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (419,NULL,9,'Subject for Tell a Friend','2021-02-11 16:25:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (420,NULL,9,'Subject for Tell a Friend','2020-12-25 16:26:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (421,NULL,10,'Subject for Pledge Acknowledgment','2020-11-19 12:37:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (422,NULL,10,'Subject for Pledge Acknowledgment','2021-03-21 01:15:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (423,NULL,9,'Subject for Tell a Friend','2021-07-24 02:32:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (424,NULL,9,'Subject for Tell a Friend','2020-12-17 09:26:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (425,NULL,9,'Subject for Tell a Friend','2021-07-15 12:48:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (426,NULL,10,'Subject for Pledge Acknowledgment','2020-08-15 07:16:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (427,NULL,9,'Subject for Tell a Friend','2021-06-12 20:33:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (428,NULL,9,'Subject for Tell a Friend','2020-08-26 10:38:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (429,NULL,9,'Subject for Tell a Friend','2020-09-23 15:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (430,NULL,10,'Subject for Pledge Acknowledgment','2020-12-28 13:52:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (431,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 08:05:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (432,NULL,10,'Subject for Pledge Acknowledgment','2020-08-06 20:50:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (433,NULL,9,'Subject for Tell a Friend','2020-10-15 17:52:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (434,NULL,9,'Subject for Tell a Friend','2021-02-25 10:20:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (435,NULL,10,'Subject for Pledge Acknowledgment','2021-02-23 18:43:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (436,NULL,9,'Subject for Tell a Friend','2021-03-12 06:50:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (437,NULL,10,'Subject for Pledge Acknowledgment','2020-10-03 08:53:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (438,NULL,10,'Subject for Pledge Acknowledgment','2020-08-11 16:34:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (439,NULL,9,'Subject for Tell a Friend','2020-12-04 14:54:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (440,NULL,10,'Subject for Pledge Acknowledgment','2020-10-03 21:31:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (441,NULL,10,'Subject for Pledge Acknowledgment','2020-09-02 17:58:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (442,NULL,10,'Subject for Pledge Acknowledgment','2021-03-23 02:59:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (443,NULL,9,'Subject for Tell a Friend','2020-09-27 16:22:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (444,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 11:45:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (445,NULL,9,'Subject for Tell a Friend','2021-05-10 20:00:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (446,NULL,9,'Subject for Tell a Friend','2021-07-10 02:08:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (447,NULL,9,'Subject for Tell a Friend','2021-04-21 03:38:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (448,NULL,10,'Subject for Pledge Acknowledgment','2021-01-12 22:28:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (449,NULL,10,'Subject for Pledge Acknowledgment','2020-10-17 17:54:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (450,NULL,9,'Subject for Tell a Friend','2021-04-03 16:45:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (464,1,7,'General','2021-07-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (465,2,7,'Student','2021-07-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (466,3,7,'General','2021-07-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (467,4,7,'Student','2021-07-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (468,5,7,'General','2019-06-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (469,6,7,'Student','2021-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (470,7,7,'General','2021-07-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (471,8,7,'Student','2021-07-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (472,9,7,'General','2021-07-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (473,10,7,'General','2019-05-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (474,11,7,'Lifetime','2021-07-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (475,12,7,'Student','2021-07-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (476,13,7,'General','2021-07-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (477,14,7,'Student','2021-07-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (478,15,7,'Student','2020-07-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (479,16,7,'Student','2021-07-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (480,17,7,'General','2021-07-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (481,18,7,'Student','2021-07-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (482,19,7,'General','2021-07-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (483,20,7,'General','2019-02-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (484,21,7,'General','2021-07-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (485,22,7,'Lifetime','2021-07-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (486,23,7,'General','2021-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (487,24,7,'Student','2021-07-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (488,25,7,'Student','2020-07-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (489,26,7,'Student','2021-07-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (490,27,7,'General','2021-06-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (491,28,7,'Student','2021-06-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (492,29,7,'General','2021-06-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (493,30,7,'General','2018-12-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (494,14,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (495,15,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (496,16,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (497,17,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (498,18,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (499,19,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (500,20,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (501,21,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (502,22,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (503,23,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (504,24,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (505,25,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (506,26,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (508,28,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (510,30,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (512,32,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (513,33,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (514,34,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (515,35,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (516,36,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (518,38,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (520,40,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (522,42,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (523,43,6,'$ 100.00 - General Membership: Offline signup','2021-07-26 14:08:49',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:49','2021-07-26 14:08:49'), - (525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (575,45,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (576,46,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (577,47,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (578,48,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (579,49,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (580,50,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (581,51,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (582,52,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (584,54,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (585,55,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (587,57,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (588,58,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (589,59,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (590,60,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (591,61,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (594,64,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (601,71,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (602,72,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (603,73,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (604,74,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (607,77,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (608,78,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (611,81,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (612,82,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (614,84,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (615,85,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (617,87,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (621,91,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (622,92,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (623,93,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'), - (624,94,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-07-26 14:08:50',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-07-26 14:08:50','2021-07-26 14:08:50'); + (1,NULL,10,'Subject for Pledge Acknowledgment','2021-07-25 15:51:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (2,NULL,9,'Subject for Tell a Friend','2021-08-19 05:45:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (3,NULL,10,'Subject for Pledge Acknowledgment','2021-01-15 22:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (4,NULL,10,'Subject for Pledge Acknowledgment','2020-11-08 08:53:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (5,NULL,9,'Subject for Tell a Friend','2021-04-29 05:39:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (6,NULL,9,'Subject for Tell a Friend','2021-04-22 16:06:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (7,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 01:49:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (8,NULL,9,'Subject for Tell a Friend','2021-03-31 23:05:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (9,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 05:57:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (10,NULL,10,'Subject for Pledge Acknowledgment','2021-06-01 22:29:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (11,NULL,9,'Subject for Tell a Friend','2020-11-11 15:05:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (12,NULL,10,'Subject for Pledge Acknowledgment','2021-08-06 20:26:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (13,NULL,9,'Subject for Tell a Friend','2021-07-24 03:10:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (14,NULL,10,'Subject for Pledge Acknowledgment','2021-06-19 07:36:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (15,NULL,9,'Subject for Tell a Friend','2021-06-16 02:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (16,NULL,10,'Subject for Pledge Acknowledgment','2021-01-30 15:29:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (17,NULL,9,'Subject for Tell a Friend','2020-12-16 09:56:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (18,NULL,9,'Subject for Tell a Friend','2021-01-29 02:23:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (19,NULL,9,'Subject for Tell a Friend','2021-01-03 06:29:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (20,NULL,9,'Subject for Tell a Friend','2021-03-18 21:58:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (21,NULL,10,'Subject for Pledge Acknowledgment','2020-12-18 14:02:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (22,NULL,10,'Subject for Pledge Acknowledgment','2021-02-16 00:21:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (23,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 21:40:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (24,NULL,10,'Subject for Pledge Acknowledgment','2021-03-27 07:44:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (25,NULL,9,'Subject for Tell a Friend','2020-12-09 16:33:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (26,NULL,10,'Subject for Pledge Acknowledgment','2020-11-04 10:07:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (27,NULL,9,'Subject for Tell a Friend','2020-11-18 14:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (28,NULL,9,'Subject for Tell a Friend','2021-02-12 16:33:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (29,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 00:56:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (30,NULL,9,'Subject for Tell a Friend','2020-10-26 11:58:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (31,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 04:15:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (32,NULL,9,'Subject for Tell a Friend','2021-03-08 14:59:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (33,NULL,10,'Subject for Pledge Acknowledgment','2020-10-15 04:22:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (34,NULL,10,'Subject for Pledge Acknowledgment','2021-03-03 18:39:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (35,NULL,9,'Subject for Tell a Friend','2021-09-29 04:13:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (36,NULL,10,'Subject for Pledge Acknowledgment','2021-01-25 18:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (37,NULL,9,'Subject for Tell a Friend','2020-11-22 13:46:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (38,NULL,9,'Subject for Tell a Friend','2021-01-23 12:47:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (39,NULL,9,'Subject for Tell a Friend','2021-01-01 21:42:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (40,NULL,10,'Subject for Pledge Acknowledgment','2021-09-08 09:30:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (41,NULL,10,'Subject for Pledge Acknowledgment','2021-07-27 10:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (42,NULL,10,'Subject for Pledge Acknowledgment','2021-05-05 06:19:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (43,NULL,9,'Subject for Tell a Friend','2021-09-19 17:36:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (44,NULL,9,'Subject for Tell a Friend','2021-03-02 11:43:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (45,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 07:10:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (46,NULL,10,'Subject for Pledge Acknowledgment','2021-01-09 01:04:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (47,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 11:31:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (48,NULL,10,'Subject for Pledge Acknowledgment','2021-03-07 00:31:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (49,NULL,9,'Subject for Tell a Friend','2021-03-10 05:19:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (50,NULL,9,'Subject for Tell a Friend','2021-08-22 21:56:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (51,NULL,9,'Subject for Tell a Friend','2021-07-18 10:03:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (52,NULL,10,'Subject for Pledge Acknowledgment','2021-09-22 17:47:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (53,NULL,10,'Subject for Pledge Acknowledgment','2021-04-12 15:31:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (54,NULL,10,'Subject for Pledge Acknowledgment','2020-10-16 10:02:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (55,NULL,9,'Subject for Tell a Friend','2021-03-31 21:23:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (56,NULL,10,'Subject for Pledge Acknowledgment','2021-02-14 18:29:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (57,NULL,9,'Subject for Tell a Friend','2021-02-06 03:42:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (58,NULL,9,'Subject for Tell a Friend','2021-03-07 20:40:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (59,NULL,9,'Subject for Tell a Friend','2021-06-20 12:50:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (60,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 14:43:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (61,NULL,10,'Subject for Pledge Acknowledgment','2020-11-10 18:12:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (62,NULL,9,'Subject for Tell a Friend','2021-03-06 04:21:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (63,NULL,9,'Subject for Tell a Friend','2020-11-28 03:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (64,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 15:53:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (65,NULL,9,'Subject for Tell a Friend','2021-02-03 04:47:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (66,NULL,10,'Subject for Pledge Acknowledgment','2021-04-06 10:32:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (67,NULL,9,'Subject for Tell a Friend','2021-04-26 10:25:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (68,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 17:25:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (69,NULL,9,'Subject for Tell a Friend','2020-12-01 02:05:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (70,NULL,9,'Subject for Tell a Friend','2020-12-07 01:54:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (71,NULL,10,'Subject for Pledge Acknowledgment','2020-12-07 12:22:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (72,NULL,9,'Subject for Tell a Friend','2020-10-16 23:16:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (73,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 22:07:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (74,NULL,10,'Subject for Pledge Acknowledgment','2021-08-05 21:10:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (75,NULL,9,'Subject for Tell a Friend','2021-04-06 01:08:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (76,NULL,10,'Subject for Pledge Acknowledgment','2021-09-05 03:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (77,NULL,9,'Subject for Tell a Friend','2021-04-30 09:09:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (78,NULL,9,'Subject for Tell a Friend','2020-10-29 17:04:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (79,NULL,9,'Subject for Tell a Friend','2021-02-21 18:05:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (80,NULL,9,'Subject for Tell a Friend','2020-11-02 09:26:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (81,NULL,9,'Subject for Tell a Friend','2021-04-14 20:35:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (82,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 04:40:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (83,NULL,9,'Subject for Tell a Friend','2021-06-08 11:23:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (84,NULL,10,'Subject for Pledge Acknowledgment','2021-08-08 18:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (85,NULL,9,'Subject for Tell a Friend','2021-01-07 08:07:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (86,NULL,9,'Subject for Tell a Friend','2021-03-23 18:20:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (87,NULL,9,'Subject for Tell a Friend','2021-09-03 09:34:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (88,NULL,10,'Subject for Pledge Acknowledgment','2021-08-02 15:43:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (89,NULL,10,'Subject for Pledge Acknowledgment','2020-12-19 21:12:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (90,NULL,10,'Subject for Pledge Acknowledgment','2021-01-27 09:30:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (91,NULL,10,'Subject for Pledge Acknowledgment','2021-09-04 07:51:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (92,NULL,10,'Subject for Pledge Acknowledgment','2021-03-28 06:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (93,NULL,9,'Subject for Tell a Friend','2021-06-18 18:24:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (94,NULL,9,'Subject for Tell a Friend','2021-05-27 10:40:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (95,NULL,10,'Subject for Pledge Acknowledgment','2021-01-16 12:23:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (96,NULL,9,'Subject for Tell a Friend','2021-02-09 03:34:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (97,NULL,9,'Subject for Tell a Friend','2021-07-17 18:33:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (98,NULL,10,'Subject for Pledge Acknowledgment','2020-12-30 11:01:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (99,NULL,9,'Subject for Tell a Friend','2021-01-02 04:33:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (100,NULL,9,'Subject for Tell a Friend','2021-02-02 20:44:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (101,NULL,10,'Subject for Pledge Acknowledgment','2021-04-07 15:37:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (102,NULL,9,'Subject for Tell a Friend','2021-02-12 00:56:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (103,NULL,9,'Subject for Tell a Friend','2021-02-28 19:18:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (104,NULL,9,'Subject for Tell a Friend','2021-01-14 07:26:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (105,NULL,10,'Subject for Pledge Acknowledgment','2021-05-03 15:54:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (106,NULL,9,'Subject for Tell a Friend','2021-01-25 17:29:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (107,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 00:18:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (108,NULL,10,'Subject for Pledge Acknowledgment','2021-02-01 14:43:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (109,NULL,9,'Subject for Tell a Friend','2021-09-20 19:53:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (110,NULL,9,'Subject for Tell a Friend','2021-05-22 00:34:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (111,NULL,9,'Subject for Tell a Friend','2021-05-15 00:21:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (112,NULL,9,'Subject for Tell a Friend','2021-03-02 11:26:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (113,NULL,10,'Subject for Pledge Acknowledgment','2020-11-16 10:09:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (114,NULL,10,'Subject for Pledge Acknowledgment','2021-09-14 02:58:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (115,NULL,9,'Subject for Tell a Friend','2021-03-03 10:21:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (116,NULL,10,'Subject for Pledge Acknowledgment','2021-08-27 11:38:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (117,NULL,9,'Subject for Tell a Friend','2021-05-06 20:37:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (118,NULL,9,'Subject for Tell a Friend','2021-02-05 06:36:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (119,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 01:36:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (120,NULL,10,'Subject for Pledge Acknowledgment','2021-05-01 19:16:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (121,NULL,10,'Subject for Pledge Acknowledgment','2021-02-10 12:07:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (122,NULL,9,'Subject for Tell a Friend','2021-10-01 06:29:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (123,NULL,9,'Subject for Tell a Friend','2021-04-12 18:42:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (124,NULL,10,'Subject for Pledge Acknowledgment','2021-06-06 11:35:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (125,NULL,10,'Subject for Pledge Acknowledgment','2021-05-07 14:34:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (126,NULL,10,'Subject for Pledge Acknowledgment','2021-09-21 11:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (127,NULL,9,'Subject for Tell a Friend','2021-05-12 14:40:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (128,NULL,10,'Subject for Pledge Acknowledgment','2021-09-29 16:01:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (129,NULL,10,'Subject for Pledge Acknowledgment','2021-04-07 05:03:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (130,NULL,10,'Subject for Pledge Acknowledgment','2020-10-22 12:22:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (131,NULL,10,'Subject for Pledge Acknowledgment','2021-03-20 16:00:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (132,NULL,9,'Subject for Tell a Friend','2021-05-18 23:48:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (133,NULL,10,'Subject for Pledge Acknowledgment','2021-08-23 06:57:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (134,NULL,9,'Subject for Tell a Friend','2021-02-14 02:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (135,NULL,9,'Subject for Tell a Friend','2021-02-13 17:59:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (136,NULL,10,'Subject for Pledge Acknowledgment','2021-02-14 14:20:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (137,NULL,9,'Subject for Tell a Friend','2021-04-20 15:25:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (138,NULL,9,'Subject for Tell a Friend','2021-08-12 20:01:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (139,NULL,9,'Subject for Tell a Friend','2021-05-21 21:55:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (140,NULL,9,'Subject for Tell a Friend','2021-02-22 07:03:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (141,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 01:21:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (142,NULL,9,'Subject for Tell a Friend','2021-07-31 01:44:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (143,NULL,10,'Subject for Pledge Acknowledgment','2021-02-26 05:29:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (144,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 00:36:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (145,NULL,9,'Subject for Tell a Friend','2021-06-22 19:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (146,NULL,9,'Subject for Tell a Friend','2021-09-02 15:26:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (147,NULL,9,'Subject for Tell a Friend','2021-02-19 11:04:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (148,NULL,10,'Subject for Pledge Acknowledgment','2021-09-04 21:26:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (149,NULL,9,'Subject for Tell a Friend','2021-07-27 19:29:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (150,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 11:49:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (151,NULL,9,'Subject for Tell a Friend','2021-08-05 09:37:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (152,NULL,9,'Subject for Tell a Friend','2020-10-26 12:26:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (153,NULL,9,'Subject for Tell a Friend','2021-03-20 08:18:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (154,NULL,9,'Subject for Tell a Friend','2021-06-11 00:06:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (155,NULL,9,'Subject for Tell a Friend','2021-06-29 02:20:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (156,NULL,9,'Subject for Tell a Friend','2021-07-08 01:11:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (157,NULL,10,'Subject for Pledge Acknowledgment','2021-03-31 10:39:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (158,NULL,9,'Subject for Tell a Friend','2021-03-22 06:24:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (159,NULL,9,'Subject for Tell a Friend','2021-05-17 03:30:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (160,NULL,10,'Subject for Pledge Acknowledgment','2021-02-11 09:28:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (161,NULL,10,'Subject for Pledge Acknowledgment','2020-12-22 23:17:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (162,NULL,10,'Subject for Pledge Acknowledgment','2021-08-19 23:04:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (163,NULL,9,'Subject for Tell a Friend','2021-04-26 13:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (164,NULL,10,'Subject for Pledge Acknowledgment','2021-04-05 19:01:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (165,NULL,9,'Subject for Tell a Friend','2021-04-08 23:58:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (166,NULL,10,'Subject for Pledge Acknowledgment','2020-11-28 02:42:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (167,NULL,10,'Subject for Pledge Acknowledgment','2021-08-10 15:03:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (168,NULL,10,'Subject for Pledge Acknowledgment','2021-08-22 22:12:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (169,NULL,10,'Subject for Pledge Acknowledgment','2021-03-31 07:11:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (170,NULL,9,'Subject for Tell a Friend','2020-12-13 10:03:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (171,NULL,9,'Subject for Tell a Friend','2021-01-26 13:48:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (172,NULL,9,'Subject for Tell a Friend','2021-10-03 23:42:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (173,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 10:27:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (174,NULL,9,'Subject for Tell a Friend','2020-11-18 17:55:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (175,NULL,9,'Subject for Tell a Friend','2021-06-27 17:25:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (176,NULL,9,'Subject for Tell a Friend','2021-04-28 05:59:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (177,NULL,9,'Subject for Tell a Friend','2021-01-24 14:34:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (178,NULL,10,'Subject for Pledge Acknowledgment','2021-04-20 11:33:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (179,NULL,9,'Subject for Tell a Friend','2021-05-20 18:47:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (180,NULL,9,'Subject for Tell a Friend','2021-04-04 05:45:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (181,NULL,9,'Subject for Tell a Friend','2021-01-15 16:44:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (182,NULL,9,'Subject for Tell a Friend','2020-11-21 22:27:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (183,NULL,9,'Subject for Tell a Friend','2021-01-13 03:48:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (184,NULL,9,'Subject for Tell a Friend','2021-01-28 14:05:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (185,NULL,9,'Subject for Tell a Friend','2021-04-07 11:33:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (186,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 00:29:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (187,NULL,9,'Subject for Tell a Friend','2021-06-15 18:57:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (188,NULL,10,'Subject for Pledge Acknowledgment','2021-02-26 00:21:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (189,NULL,9,'Subject for Tell a Friend','2021-03-17 16:19:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (190,NULL,10,'Subject for Pledge Acknowledgment','2021-03-20 15:30:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (191,NULL,10,'Subject for Pledge Acknowledgment','2021-01-18 23:42:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (192,NULL,10,'Subject for Pledge Acknowledgment','2021-01-07 03:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (193,NULL,9,'Subject for Tell a Friend','2021-07-27 18:30:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (194,NULL,9,'Subject for Tell a Friend','2021-04-27 17:16:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (195,NULL,10,'Subject for Pledge Acknowledgment','2021-06-14 17:07:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (196,NULL,10,'Subject for Pledge Acknowledgment','2021-07-02 22:56:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (197,NULL,9,'Subject for Tell a Friend','2021-06-03 00:18:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (198,NULL,10,'Subject for Pledge Acknowledgment','2020-12-20 09:51:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (199,NULL,10,'Subject for Pledge Acknowledgment','2021-02-11 08:49:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (200,NULL,9,'Subject for Tell a Friend','2020-11-02 19:23:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (201,NULL,9,'Subject for Tell a Friend','2021-06-06 08:07:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (202,NULL,10,'Subject for Pledge Acknowledgment','2020-11-02 10:24:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (203,NULL,10,'Subject for Pledge Acknowledgment','2021-09-17 01:52:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (204,NULL,10,'Subject for Pledge Acknowledgment','2021-01-17 12:49:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (205,NULL,9,'Subject for Tell a Friend','2021-03-05 00:13:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (206,NULL,9,'Subject for Tell a Friend','2021-08-29 12:11:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (207,NULL,9,'Subject for Tell a Friend','2021-06-20 07:06:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (208,NULL,9,'Subject for Tell a Friend','2021-09-09 17:09:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (209,NULL,9,'Subject for Tell a Friend','2020-12-25 10:06:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (210,NULL,9,'Subject for Tell a Friend','2021-03-24 01:05:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (211,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 00:42:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (212,NULL,10,'Subject for Pledge Acknowledgment','2021-01-19 03:51:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (213,NULL,10,'Subject for Pledge Acknowledgment','2021-10-03 08:01:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (214,NULL,10,'Subject for Pledge Acknowledgment','2021-06-01 08:18:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (215,NULL,10,'Subject for Pledge Acknowledgment','2020-12-04 15:43:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (216,NULL,9,'Subject for Tell a Friend','2021-04-06 15:30:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (217,NULL,9,'Subject for Tell a Friend','2021-02-13 22:43:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (218,NULL,9,'Subject for Tell a Friend','2021-06-02 15:32:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (219,NULL,10,'Subject for Pledge Acknowledgment','2020-10-21 22:18:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (220,NULL,10,'Subject for Pledge Acknowledgment','2021-01-23 21:11:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (221,NULL,10,'Subject for Pledge Acknowledgment','2021-08-08 10:10:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (222,NULL,9,'Subject for Tell a Friend','2021-03-20 13:09:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (223,NULL,9,'Subject for Tell a Friend','2021-05-31 00:54:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (224,NULL,9,'Subject for Tell a Friend','2021-05-02 02:59:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (225,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 21:20:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (226,NULL,10,'Subject for Pledge Acknowledgment','2021-08-19 07:21:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (227,NULL,9,'Subject for Tell a Friend','2021-01-25 17:22:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (228,NULL,10,'Subject for Pledge Acknowledgment','2021-01-02 19:06:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (229,NULL,9,'Subject for Tell a Friend','2020-10-31 03:54:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (230,NULL,10,'Subject for Pledge Acknowledgment','2020-12-20 21:07:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (231,NULL,9,'Subject for Tell a Friend','2021-02-22 10:03:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (232,NULL,9,'Subject for Tell a Friend','2020-11-03 05:26:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (233,NULL,10,'Subject for Pledge Acknowledgment','2020-11-30 10:35:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (234,NULL,9,'Subject for Tell a Friend','2021-07-18 23:44:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (235,NULL,10,'Subject for Pledge Acknowledgment','2021-08-05 12:23:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (236,NULL,9,'Subject for Tell a Friend','2020-11-01 21:10:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (237,NULL,10,'Subject for Pledge Acknowledgment','2021-05-21 04:51:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (238,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 08:20:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (239,NULL,9,'Subject for Tell a Friend','2021-09-14 19:16:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (240,NULL,9,'Subject for Tell a Friend','2021-04-05 23:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (241,NULL,9,'Subject for Tell a Friend','2021-09-18 10:15:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (242,NULL,10,'Subject for Pledge Acknowledgment','2021-08-23 12:44:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (243,NULL,10,'Subject for Pledge Acknowledgment','2021-01-12 14:13:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (244,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 12:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (245,NULL,9,'Subject for Tell a Friend','2021-08-11 21:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (246,NULL,10,'Subject for Pledge Acknowledgment','2021-02-10 16:34:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (247,NULL,9,'Subject for Tell a Friend','2021-03-17 03:39:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (248,NULL,9,'Subject for Tell a Friend','2021-08-25 02:37:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (249,NULL,10,'Subject for Pledge Acknowledgment','2020-11-18 01:37:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (250,NULL,10,'Subject for Pledge Acknowledgment','2021-08-07 05:36:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (251,NULL,9,'Subject for Tell a Friend','2021-09-23 18:49:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (252,NULL,9,'Subject for Tell a Friend','2020-11-06 18:16:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (253,NULL,10,'Subject for Pledge Acknowledgment','2021-04-14 14:28:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (254,NULL,10,'Subject for Pledge Acknowledgment','2021-02-24 16:06:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (255,NULL,9,'Subject for Tell a Friend','2021-07-10 19:13:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (256,NULL,9,'Subject for Tell a Friend','2021-03-28 00:11:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (257,NULL,10,'Subject for Pledge Acknowledgment','2020-11-17 09:16:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (258,NULL,10,'Subject for Pledge Acknowledgment','2021-09-20 02:25:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (259,NULL,10,'Subject for Pledge Acknowledgment','2021-02-24 09:09:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (260,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 16:31:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (261,NULL,9,'Subject for Tell a Friend','2020-11-13 11:53:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (262,NULL,9,'Subject for Tell a Friend','2021-09-13 14:51:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (263,NULL,9,'Subject for Tell a Friend','2021-05-24 06:41:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (264,NULL,9,'Subject for Tell a Friend','2021-06-15 05:46:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (265,NULL,10,'Subject for Pledge Acknowledgment','2021-07-15 11:37:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (266,NULL,9,'Subject for Tell a Friend','2020-11-05 22:49:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (267,NULL,10,'Subject for Pledge Acknowledgment','2021-08-04 06:23:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (268,NULL,10,'Subject for Pledge Acknowledgment','2021-10-10 10:48:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (269,NULL,10,'Subject for Pledge Acknowledgment','2021-03-04 05:45:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (270,NULL,9,'Subject for Tell a Friend','2020-11-11 13:55:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (271,NULL,10,'Subject for Pledge Acknowledgment','2021-07-07 03:38:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (272,NULL,9,'Subject for Tell a Friend','2021-06-27 05:31:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (273,NULL,9,'Subject for Tell a Friend','2020-12-28 00:46:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (274,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 15:57:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (275,NULL,9,'Subject for Tell a Friend','2021-09-04 13:22:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (276,NULL,10,'Subject for Pledge Acknowledgment','2021-09-19 20:19:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (277,NULL,9,'Subject for Tell a Friend','2021-09-23 19:48:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (278,NULL,9,'Subject for Tell a Friend','2021-03-20 23:35:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (279,NULL,9,'Subject for Tell a Friend','2021-08-07 06:00:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (280,NULL,9,'Subject for Tell a Friend','2020-11-21 15:33:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (281,NULL,10,'Subject for Pledge Acknowledgment','2021-09-29 06:25:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (282,NULL,9,'Subject for Tell a Friend','2021-07-26 03:07:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (283,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 08:12:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (284,NULL,9,'Subject for Tell a Friend','2021-09-25 12:19:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (285,NULL,9,'Subject for Tell a Friend','2021-02-20 01:07:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (286,NULL,10,'Subject for Pledge Acknowledgment','2020-10-25 22:39:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (287,NULL,9,'Subject for Tell a Friend','2020-11-03 03:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (288,NULL,9,'Subject for Tell a Friend','2020-11-01 04:24:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (289,NULL,9,'Subject for Tell a Friend','2021-06-05 02:28:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (290,NULL,9,'Subject for Tell a Friend','2021-08-08 20:51:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (291,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 05:45:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (292,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 06:28:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (293,NULL,10,'Subject for Pledge Acknowledgment','2021-04-03 04:13:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (294,NULL,10,'Subject for Pledge Acknowledgment','2021-03-02 10:26:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (295,NULL,10,'Subject for Pledge Acknowledgment','2020-10-21 11:38:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (296,NULL,10,'Subject for Pledge Acknowledgment','2021-08-26 12:57:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (297,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 22:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (298,NULL,10,'Subject for Pledge Acknowledgment','2020-10-17 23:24:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (299,NULL,10,'Subject for Pledge Acknowledgment','2021-09-03 09:57:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (300,NULL,10,'Subject for Pledge Acknowledgment','2020-12-27 12:13:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (301,NULL,9,'Subject for Tell a Friend','2021-06-28 16:06:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (302,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 05:57:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (303,NULL,9,'Subject for Tell a Friend','2021-09-27 05:11:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (304,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 06:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (305,NULL,9,'Subject for Tell a Friend','2020-11-19 03:23:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (306,NULL,9,'Subject for Tell a Friend','2021-02-12 14:58:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (307,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 15:45:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (308,NULL,10,'Subject for Pledge Acknowledgment','2020-11-28 06:07:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (309,NULL,9,'Subject for Tell a Friend','2021-09-15 06:24:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (310,NULL,10,'Subject for Pledge Acknowledgment','2021-08-06 03:29:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (311,NULL,10,'Subject for Pledge Acknowledgment','2021-08-21 23:56:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (312,NULL,10,'Subject for Pledge Acknowledgment','2021-08-26 00:19:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (313,NULL,10,'Subject for Pledge Acknowledgment','2020-11-08 04:53:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (314,NULL,9,'Subject for Tell a Friend','2021-04-12 13:09:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (315,NULL,10,'Subject for Pledge Acknowledgment','2021-03-12 15:20:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (316,NULL,10,'Subject for Pledge Acknowledgment','2021-07-07 10:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (317,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 22:14:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (318,NULL,9,'Subject for Tell a Friend','2020-11-11 09:59:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (319,NULL,10,'Subject for Pledge Acknowledgment','2021-03-16 10:06:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (320,NULL,9,'Subject for Tell a Friend','2021-10-01 21:48:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (321,NULL,10,'Subject for Pledge Acknowledgment','2021-10-02 03:56:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (322,NULL,9,'Subject for Tell a Friend','2021-04-21 00:43:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (323,NULL,9,'Subject for Tell a Friend','2021-04-03 02:45:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (324,NULL,9,'Subject for Tell a Friend','2020-10-24 09:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (325,NULL,9,'Subject for Tell a Friend','2021-03-09 13:24:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (326,NULL,9,'Subject for Tell a Friend','2020-12-13 00:12:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (327,NULL,9,'Subject for Tell a Friend','2021-08-31 00:10:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (328,NULL,10,'Subject for Pledge Acknowledgment','2020-12-10 03:48:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (329,NULL,10,'Subject for Pledge Acknowledgment','2020-11-01 18:12:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (330,NULL,9,'Subject for Tell a Friend','2021-04-13 13:07:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (331,NULL,9,'Subject for Tell a Friend','2020-12-16 23:42:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (332,NULL,9,'Subject for Tell a Friend','2021-07-05 10:33:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (333,NULL,9,'Subject for Tell a Friend','2021-08-18 05:19:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (334,NULL,9,'Subject for Tell a Friend','2021-05-01 00:42:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (335,NULL,9,'Subject for Tell a Friend','2020-12-18 04:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (336,NULL,9,'Subject for Tell a Friend','2021-09-18 15:50:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (337,NULL,10,'Subject for Pledge Acknowledgment','2020-11-15 01:07:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (338,NULL,9,'Subject for Tell a Friend','2021-03-19 13:50:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (339,NULL,10,'Subject for Pledge Acknowledgment','2021-01-09 04:31:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (340,NULL,9,'Subject for Tell a Friend','2021-09-03 21:58:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (341,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 06:53:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (342,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 21:52:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (343,NULL,10,'Subject for Pledge Acknowledgment','2021-06-19 21:08:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (344,NULL,9,'Subject for Tell a Friend','2021-06-25 00:24:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (345,NULL,9,'Subject for Tell a Friend','2021-02-20 00:55:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (346,NULL,9,'Subject for Tell a Friend','2020-10-24 02:21:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (347,NULL,10,'Subject for Pledge Acknowledgment','2021-06-02 06:14:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (348,NULL,10,'Subject for Pledge Acknowledgment','2021-10-10 13:50:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (349,NULL,9,'Subject for Tell a Friend','2021-05-02 18:28:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (350,NULL,10,'Subject for Pledge Acknowledgment','2020-12-01 05:52:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (351,NULL,9,'Subject for Tell a Friend','2021-09-27 06:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (352,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 05:18:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (353,NULL,9,'Subject for Tell a Friend','2020-12-03 18:48:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (354,NULL,10,'Subject for Pledge Acknowledgment','2021-02-06 17:42:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (355,NULL,9,'Subject for Tell a Friend','2021-08-12 09:42:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (356,NULL,10,'Subject for Pledge Acknowledgment','2020-10-27 05:37:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (357,NULL,9,'Subject for Tell a Friend','2021-03-07 01:47:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (358,NULL,10,'Subject for Pledge Acknowledgment','2021-02-06 13:30:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (359,NULL,9,'Subject for Tell a Friend','2021-04-18 21:56:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (360,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 18:01:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (361,NULL,10,'Subject for Pledge Acknowledgment','2020-11-01 00:09:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (362,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 11:44:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (363,NULL,9,'Subject for Tell a Friend','2020-10-30 00:33:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (364,NULL,10,'Subject for Pledge Acknowledgment','2021-01-29 16:16:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (365,NULL,9,'Subject for Tell a Friend','2021-03-26 22:46:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (366,NULL,9,'Subject for Tell a Friend','2021-08-06 21:17:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (367,NULL,10,'Subject for Pledge Acknowledgment','2020-11-06 09:55:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (368,NULL,9,'Subject for Tell a Friend','2020-11-01 09:44:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (369,NULL,9,'Subject for Tell a Friend','2021-03-07 07:00:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (370,NULL,10,'Subject for Pledge Acknowledgment','2021-08-28 22:06:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (371,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 14:16:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (372,NULL,9,'Subject for Tell a Friend','2021-04-28 04:38:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (373,NULL,9,'Subject for Tell a Friend','2021-03-10 11:54:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (374,NULL,9,'Subject for Tell a Friend','2021-03-13 10:56:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (375,NULL,9,'Subject for Tell a Friend','2021-02-12 20:28:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (376,NULL,10,'Subject for Pledge Acknowledgment','2020-10-24 22:19:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (377,NULL,9,'Subject for Tell a Friend','2021-10-09 03:57:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (378,NULL,9,'Subject for Tell a Friend','2021-08-26 08:37:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (379,NULL,9,'Subject for Tell a Friend','2021-04-12 03:05:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (380,NULL,9,'Subject for Tell a Friend','2020-12-07 21:50:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (381,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 06:10:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (382,NULL,10,'Subject for Pledge Acknowledgment','2021-05-18 14:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (383,NULL,9,'Subject for Tell a Friend','2021-03-11 23:48:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (384,NULL,9,'Subject for Tell a Friend','2021-05-12 21:29:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (385,NULL,9,'Subject for Tell a Friend','2021-02-28 13:57:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (386,NULL,9,'Subject for Tell a Friend','2020-10-23 23:13:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (387,NULL,10,'Subject for Pledge Acknowledgment','2021-09-30 18:29:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (388,NULL,9,'Subject for Tell a Friend','2021-01-15 03:41:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (389,NULL,10,'Subject for Pledge Acknowledgment','2020-12-13 07:06:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (390,NULL,10,'Subject for Pledge Acknowledgment','2021-08-25 11:16:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (391,NULL,10,'Subject for Pledge Acknowledgment','2021-04-21 10:11:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (392,NULL,10,'Subject for Pledge Acknowledgment','2021-02-11 01:05:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (393,NULL,9,'Subject for Tell a Friend','2020-12-24 19:53:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (394,NULL,9,'Subject for Tell a Friend','2021-02-19 09:39:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (395,NULL,10,'Subject for Pledge Acknowledgment','2021-01-31 17:11:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (396,NULL,10,'Subject for Pledge Acknowledgment','2021-05-07 23:03:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (397,NULL,9,'Subject for Tell a Friend','2021-08-08 06:29:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (398,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 10:34:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (399,NULL,9,'Subject for Tell a Friend','2021-06-27 22:54:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (400,NULL,10,'Subject for Pledge Acknowledgment','2020-12-26 18:25:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (401,NULL,10,'Subject for Pledge Acknowledgment','2020-10-14 06:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (402,NULL,9,'Subject for Tell a Friend','2021-09-24 09:57:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (403,NULL,9,'Subject for Tell a Friend','2020-11-15 01:18:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (404,NULL,10,'Subject for Pledge Acknowledgment','2021-09-19 01:36:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (405,NULL,10,'Subject for Pledge Acknowledgment','2020-12-01 07:39:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (406,NULL,9,'Subject for Tell a Friend','2021-04-17 04:01:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (407,NULL,10,'Subject for Pledge Acknowledgment','2020-11-11 05:03:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (408,NULL,10,'Subject for Pledge Acknowledgment','2021-08-20 04:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (409,NULL,10,'Subject for Pledge Acknowledgment','2021-04-08 15:30:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (410,NULL,9,'Subject for Tell a Friend','2021-07-01 17:42:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (411,NULL,9,'Subject for Tell a Friend','2021-04-25 14:24:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (412,NULL,9,'Subject for Tell a Friend','2020-12-12 18:59:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (413,NULL,10,'Subject for Pledge Acknowledgment','2021-08-09 08:36:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (414,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 19:20:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (415,NULL,10,'Subject for Pledge Acknowledgment','2020-10-18 17:48:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (416,NULL,9,'Subject for Tell a Friend','2021-05-27 17:29:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (417,NULL,9,'Subject for Tell a Friend','2021-10-08 22:48:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (418,NULL,9,'Subject for Tell a Friend','2021-06-07 11:42:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (419,NULL,9,'Subject for Tell a Friend','2021-05-05 20:11:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (420,NULL,10,'Subject for Pledge Acknowledgment','2021-07-23 19:54:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (421,NULL,10,'Subject for Pledge Acknowledgment','2020-12-29 01:31:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (422,NULL,9,'Subject for Tell a Friend','2021-09-18 14:21:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (423,NULL,10,'Subject for Pledge Acknowledgment','2020-11-05 04:03:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (424,NULL,10,'Subject for Pledge Acknowledgment','2021-03-31 15:27:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (425,NULL,9,'Subject for Tell a Friend','2021-08-06 16:39:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (426,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 23:09:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (427,NULL,9,'Subject for Tell a Friend','2021-04-14 00:58:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (428,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 11:28:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (429,NULL,9,'Subject for Tell a Friend','2021-05-22 17:24:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (430,NULL,9,'Subject for Tell a Friend','2021-09-26 09:46:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (431,NULL,9,'Subject for Tell a Friend','2021-06-02 21:39:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (432,NULL,10,'Subject for Pledge Acknowledgment','2021-01-12 05:24:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (433,NULL,10,'Subject for Pledge Acknowledgment','2020-10-20 02:44:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (434,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 22:50:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (435,NULL,9,'Subject for Tell a Friend','2021-04-04 15:15:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (436,NULL,10,'Subject for Pledge Acknowledgment','2021-01-24 21:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (437,NULL,10,'Subject for Pledge Acknowledgment','2021-05-02 16:25:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (438,NULL,9,'Subject for Tell a Friend','2021-03-01 18:37:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (439,NULL,9,'Subject for Tell a Friend','2021-01-11 13:21:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (440,NULL,9,'Subject for Tell a Friend','2021-07-29 08:01:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (441,NULL,9,'Subject for Tell a Friend','2021-04-26 00:02:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (442,NULL,10,'Subject for Pledge Acknowledgment','2020-11-13 18:35:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (443,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 03:24:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (444,NULL,10,'Subject for Pledge Acknowledgment','2021-03-28 05:56:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (445,NULL,10,'Subject for Pledge Acknowledgment','2021-01-01 13:19:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (446,NULL,10,'Subject for Pledge Acknowledgment','2021-03-18 00:38:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (447,NULL,9,'Subject for Tell a Friend','2021-06-21 12:18:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (448,NULL,10,'Subject for Pledge Acknowledgment','2021-07-24 13:34:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (449,NULL,10,'Subject for Pledge Acknowledgment','2020-10-23 16:28:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (450,NULL,10,'Subject for Pledge Acknowledgment','2021-09-19 10:09:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (451,1,6,'$ 125.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (452,2,6,'$ 50.00-Online: Save the Penguins','2010-03-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (453,3,6,'$ 25.00-Apr 2007 Mailer 1','2010-04-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (454,4,6,'$ 50.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (455,5,6,'$ 500.00-Apr 2007 Mailer 1','2010-04-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (456,6,6,'$ 175.00-Apr 2007 Mailer 1','2010-04-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (457,7,6,'$ 50.00-Online: Save the Penguins','2010-03-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (458,8,6,'$ 10.00-Online: Save the Penguins','2010-03-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (459,9,6,'$ 250.00-Online: Save the Penguins','2010-04-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (460,10,6,NULL,'2009-07-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (461,11,6,NULL,'2009-07-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (462,12,6,NULL,'2009-10-01 11:53:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (463,13,6,NULL,'2009-12-01 12:55:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (464,1,7,'General','2021-10-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (465,2,7,'Student','2021-10-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (466,3,7,'General','2021-10-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (467,4,7,'Student','2021-10-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (468,5,7,'General','2019-09-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (469,6,7,'Student','2021-10-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (470,7,7,'General','2021-10-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (471,8,7,'Student','2021-10-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (472,9,7,'General','2021-10-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (473,10,7,'General','2019-08-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (474,11,7,'Lifetime','2021-10-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (475,12,7,'Student','2021-10-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (476,13,7,'General','2021-10-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (477,14,7,'Student','2021-09-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (478,15,7,'Student','2020-09-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (479,16,7,'Student','2021-09-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (480,17,7,'General','2021-09-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (481,18,7,'Student','2021-09-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (482,19,7,'General','2021-09-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (483,20,7,'Student','2020-09-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (484,21,7,'General','2021-09-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (485,22,7,'Lifetime','2021-09-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (486,23,7,'General','2021-09-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (487,24,7,'Student','2021-09-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (488,25,7,'Student','2020-09-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (489,26,7,'Student','2021-09-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (490,27,7,'General','2021-09-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (491,28,7,'Student','2021-09-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (492,29,7,'General','2021-09-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (493,30,7,'Student','2020-09-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (494,14,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (495,15,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (496,16,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (497,17,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (498,18,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (499,19,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (500,20,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (501,21,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (502,22,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (503,23,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (504,24,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (505,25,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (506,26,6,'$ 100.00 - General Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (507,27,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (508,28,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (509,29,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (510,30,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (511,31,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (512,32,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (513,33,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (514,34,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (515,35,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (516,36,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (517,37,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (518,38,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (519,39,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (520,40,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (521,41,6,'$ 50.00 - Student Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (525,1,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (526,2,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (527,3,5,'NULL','2008-05-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (528,4,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (529,5,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (530,6,5,'NULL','2008-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (531,7,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (532,8,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (533,9,5,'NULL','2008-02-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (534,10,5,'NULL','2008-02-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (535,11,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (536,12,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (537,13,5,'NULL','2008-06-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (538,14,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (539,15,5,'NULL','2008-07-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (540,16,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (541,17,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (542,18,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (543,19,5,'NULL','2008-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (544,20,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (545,21,5,'NULL','2008-03-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (546,22,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (547,23,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (548,24,5,'NULL','2008-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (549,25,5,'NULL','2008-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (550,26,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (551,27,5,'NULL','2008-05-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (552,28,5,'NULL','2009-12-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (553,29,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (554,30,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (555,31,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (556,32,5,'NULL','2009-07-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (557,33,5,'NULL','2009-03-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (558,34,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (559,35,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (560,36,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (561,37,5,'NULL','2009-03-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (562,38,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (563,39,5,'NULL','2008-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (564,40,5,'NULL','2009-12-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (565,41,5,'NULL','2009-01-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (566,42,5,'NULL','2009-12-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (567,43,5,'NULL','2009-03-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (568,44,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (569,45,5,'NULL','2009-01-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (570,46,5,'NULL','2009-12-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (571,47,5,'NULL','2009-10-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (572,48,5,'NULL','2009-12-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (573,49,5,'NULL','2009-03-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (574,50,5,'NULL','2009-04-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (575,45,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (579,49,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (580,50,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (581,51,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (582,52,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (583,53,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (584,54,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (585,55,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (588,58,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (589,59,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (590,60,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (592,62,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (593,63,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (600,70,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (601,71,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (602,72,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (603,73,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (604,74,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (605,75,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (608,78,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (609,79,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (610,80,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (612,82,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (614,84,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (615,85,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (616,86,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (617,87,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (618,88,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'), + (624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2021-10-13 21:23:55',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2021-10-14 04:23:55','2021-10-14 04:23:55'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -792,807 +793,812 @@ UNLOCK TABLES; LOCK TABLES `civicrm_activity_contact` WRITE; /*!40000 ALTER TABLE `civicrm_activity_contact` DISABLE KEYS */; INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES - (421,280,1,3), - (423,281,1,3), - (483,324,1,3), - (543,363,1,3), - (95,64,2,3), - (143,96,2,3), - (505,339,2,3), - (679,451,2,2), - (434,288,3,3), - (487,326,3,3), - (518,348,3,3), - (766,538,3,2), - (680,452,4,2), - (787,559,4,2), - (122,83,5,3), - (139,94,5,3), - (455,306,5,3), - (681,453,6,2), - (791,563,6,2), - (152,102,7,3), - (6,4,8,3), - (145,97,8,3), - (545,364,8,3), - (682,454,8,2), - (562,374,9,3), - (639,424,10,3), - (696,468,10,2), - (722,498,10,2), - (168,113,11,3), - (492,329,11,3), - (586,389,11,3), - (674,447,11,3), - (702,474,11,2), - (723,504,11,2), - (466,313,12,3), - (520,349,12,3), - (655,434,12,3), - (109,74,13,3), - (219,146,13,3), - (379,254,13,3), - (530,355,13,3), - (658,436,13,3), - (156,105,14,3), - (223,149,14,3), - (695,467,14,2), - (724,497,14,2), - (93,63,15,3), - (419,279,15,3), - (12,8,16,3), - (158,106,16,3), - (262,173,16,3), - (357,239,16,3), - (400,268,16,3), - (614,408,16,3), - (683,455,16,2), - (717,489,16,2), - (725,519,16,2), - (461,310,17,3), - (699,471,17,2), - (726,501,17,2), - (118,80,18,3), - (700,472,18,2), - (727,502,18,2), - (22,15,19,3), - (402,269,19,3), - (407,272,19,3), - (684,456,19,2), - (782,554,19,2), - (112,76,20,3), - (161,108,20,3), - (264,174,20,3), - (473,317,20,3), - (623,413,20,3), - (150,101,21,3), - (272,178,21,3), - (509,341,21,3), - (760,532,21,2), - (48,32,22,3), - (295,197,22,3), - (310,206,22,3), - (448,301,22,2), - (449,302,22,2), - (450,303,22,2), - (452,304,22,2), - (453,305,22,2), - (454,306,22,2), - (456,307,22,2), - (458,308,22,2), - (459,309,22,2), - (460,310,22,2), - (462,311,22,2), - (463,312,22,2), - (465,313,22,2), - (467,314,22,2), - (468,315,22,2), - (470,316,22,2), - (472,317,22,2), - (474,318,22,2), - (475,319,22,2), - (477,320,22,2), - (478,321,22,2), - (479,322,22,2), - (480,323,22,2), - (482,324,22,2), - (484,325,22,2), - (486,326,22,2), - (488,327,22,2), - (489,328,22,2), - (491,329,22,2), - (493,330,22,2), - (494,331,22,2), - (496,332,22,2), - (497,333,22,2), - (498,334,22,2), - (499,335,22,2), - (500,336,22,2), - (501,337,22,2), - (502,338,22,2), - (504,339,22,2), - (506,340,22,2), - (508,341,22,2), - (510,342,22,2), - (512,343,22,2), - (513,344,22,2), - (514,345,22,2), - (515,346,22,2), - (516,347,22,2), - (517,348,22,2), - (519,349,22,2), - (521,350,22,2), - (523,351,22,2), - (525,352,22,2), - (526,353,22,2), - (527,354,22,2), - (529,355,22,2), - (531,356,22,2), - (533,357,22,2), - (535,358,22,2), - (537,359,22,2), - (538,360,22,2), - (540,361,22,2), - (541,362,22,2), - (542,363,22,2), - (544,364,22,2), - (546,365,22,2), - (547,366,22,2), - (549,367,22,2), - (550,368,22,2), - (552,369,22,2), - (554,370,22,2), - (556,371,22,2), - (558,372,22,2), - (560,373,22,2), - (561,374,22,2), - (563,375,22,2), - (565,376,22,2), - (567,377,22,2), - (569,378,22,2), - (570,379,22,2), - (572,380,22,2), - (573,381,22,2), - (574,382,22,2), - (575,383,22,2), - (577,384,22,2), - (578,385,22,2), - (579,386,22,2), - (581,387,22,2), - (583,388,22,2), - (585,389,22,2), - (587,390,22,2), - (588,391,22,2), - (590,392,22,2), - (591,393,22,2), - (592,394,22,2), - (594,395,22,2), - (596,396,22,2), - (598,397,22,2), - (599,398,22,2), - (600,399,22,2), - (602,400,22,2), - (603,401,22,2), - (605,402,22,2), - (607,403,22,2), - (608,404,22,2), - (609,405,22,2), - (610,406,22,2), - (611,407,22,2), - (613,408,22,2), - (615,409,22,2), - (617,410,22,2), - (619,411,22,2), - (621,412,22,2), - (622,413,22,2), - (624,414,22,2), - (626,415,22,2), - (627,416,22,2), - (628,417,22,2), - (629,418,22,2), - (630,419,22,2), - (631,419,22,3), - (632,420,22,2), - (634,421,22,2), - (635,422,22,2), - (636,423,22,2), - (638,424,22,2), - (640,425,22,2), - (642,426,22,2), - (643,427,22,2), - (645,428,22,2), - (647,429,22,2), - (648,429,22,3), - (649,430,22,2), - (650,431,22,2), - (651,432,22,2), - (652,433,22,2), - (654,434,22,2), - (656,435,22,2), - (657,436,22,2), - (659,437,22,2), - (660,438,22,2), - (661,439,22,2), - (663,440,22,2), - (664,441,22,2), - (665,442,22,2), - (666,443,22,2), - (668,444,22,2), - (669,445,22,2), - (671,446,22,2), - (673,447,22,2), - (675,448,22,2), - (676,449,22,2), - (677,450,22,2), - (593,394,23,3), - (755,527,23,2), - (77,52,24,3), - (392,263,24,3), - (481,323,24,3), - (694,466,24,2), - (728,496,24,2), - (451,303,25,3), - (522,350,25,3), - (564,375,25,3), - (705,477,25,2), - (729,507,25,2), - (777,549,25,2), - (333,223,26,3), - (39,26,27,3), - (86,59,27,3), - (206,138,27,3), - (215,144,27,3), - (633,420,27,3), - (792,564,27,2), - (176,118,28,3), - (582,387,28,3), - (324,216,29,3), - (507,340,29,3), - (287,191,30,3), - (366,245,30,3), - (566,376,30,3), - (244,162,32,3), - (313,208,32,3), - (536,358,32,3), - (690,462,32,2), - (691,463,32,2), - (410,274,33,3), - (495,331,33,3), - (45,30,34,3), - (687,459,34,2), - (192,128,35,3), - (430,286,35,3), - (672,446,35,3), - (105,72,36,3), - (308,205,36,3), - (361,242,36,3), - (413,276,36,3), - (50,33,37,3), - (53,35,37,3), - (289,192,37,3), - (302,202,37,3), - (589,391,37,3), - (231,154,38,3), - (568,377,39,3), - (417,278,40,3), - (662,439,40,3), - (179,120,41,3), - (200,134,41,3), - (342,229,41,3), - (776,548,41,2), - (60,40,42,3), - (427,284,42,3), - (469,315,42,3), - (128,86,43,3), - (689,461,43,2), - (759,531,43,2), - (551,368,44,3), - (559,372,44,3), - (42,28,45,3), - (282,187,45,3), - (254,168,46,3), - (26,17,47,3), - (389,261,47,3), - (698,470,47,2), - (730,500,47,2), - (397,266,48,3), - (646,428,48,3), - (256,169,49,3), - (511,342,49,3), - (786,558,49,2), - (229,153,51,3), - (242,161,51,3), - (141,95,52,3), - (188,126,52,3), - (268,176,52,3), - (370,248,52,3), - (235,157,53,3), - (667,443,53,3), - (678,450,53,3), - (797,569,53,2), - (88,60,54,3), - (374,251,54,3), - (576,383,54,3), - (795,567,54,2), - (237,158,55,3), - (320,213,55,3), - (485,325,55,3), - (758,530,55,2), - (1,1,56,2), - (3,2,56,2), - (4,3,56,2), - (5,4,56,2), - (7,5,56,2), - (8,6,56,2), - (9,7,56,2), - (11,8,56,2), - (13,9,56,2), - (14,10,56,2), - (16,11,56,2), - (17,12,56,2), - (18,13,56,2), - (20,14,56,2), - (21,15,56,2), - (23,16,56,2), - (25,17,56,2), - (27,18,56,2), - (29,19,56,2), - (30,20,56,2), - (31,21,56,2), - (32,22,56,2), - (33,23,56,2), - (35,24,56,2), - (37,25,56,2), - (38,26,56,2), - (40,27,56,2), - (41,28,56,2), - (43,29,56,2), - (44,30,56,2), - (46,31,56,2), - (47,32,56,2), - (49,33,56,2), - (51,34,56,2), - (52,35,56,2), - (54,36,56,2), - (55,37,56,2), - (57,38,56,2), - (58,39,56,2), - (59,40,56,2), - (61,41,56,2), - (63,42,56,2), - (64,43,56,2), - (66,44,56,2), - (67,45,56,2), - (69,46,56,2), - (70,47,56,2), - (71,48,56,2), - (72,49,56,2), - (73,50,56,2), - (75,51,56,2), - (76,52,56,2), - (78,53,56,2), - (79,54,56,2), - (80,55,56,2), - (82,56,56,2), - (83,57,56,2), - (84,58,56,2), - (85,59,56,2), - (87,60,56,2), - (89,61,56,2), - (90,62,56,2), - (92,63,56,2), - (94,64,56,2), - (96,65,56,2), - (98,66,56,2), - (99,67,56,2), - (100,68,56,2), - (101,69,56,2), - (102,70,56,2), - (103,71,56,2), - (104,72,56,2), - (106,73,56,2), - (108,74,56,2), - (110,75,56,2), - (111,76,56,2), - (113,77,56,2), - (115,78,56,2), - (116,79,56,2), - (117,80,56,2), - (119,81,56,2), - (120,82,56,2), - (121,83,56,2), - (123,84,56,2), - (125,85,56,2), - (127,86,56,2), - (129,87,56,2), - (130,88,56,2), - (131,89,56,2), - (133,90,56,2), - (134,91,56,2), - (135,92,56,2), - (137,93,56,2), - (138,94,56,2), - (140,95,56,2), - (142,96,56,2), - (144,97,56,2), - (146,98,56,2), - (147,99,56,2), - (148,100,56,2), - (149,101,56,2), - (151,102,56,2), - (153,103,56,2), - (154,104,56,2), - (155,105,56,2), - (157,106,56,2), - (159,107,56,2), - (160,108,56,2), - (162,109,56,2), - (163,110,56,2), - (164,111,56,2), - (166,112,56,2), - (167,113,56,2), - (169,114,56,2), - (171,115,56,2), - (172,116,56,2), - (174,117,56,2), - (175,118,56,2), - (177,119,56,2), - (178,120,56,2), - (180,121,56,2), - (182,122,56,2), - (183,123,56,2), - (185,124,56,2), - (186,125,56,2), - (187,126,56,2), - (189,127,56,2), - (191,128,56,2), - (193,129,56,2), - (194,130,56,2), - (196,131,56,2), - (197,132,56,2), - (198,133,56,2), - (199,134,56,2), - (201,135,56,2), - (202,136,56,2), - (204,137,56,2), - (205,138,56,2), - (207,139,56,2), - (208,140,56,2), - (209,141,56,2), - (210,142,56,2), - (212,143,56,2), - (214,144,56,2), - (216,145,56,2), - (218,146,56,2), - (220,147,56,2), - (221,148,56,2), - (222,149,56,2), - (224,150,56,2), - (195,130,57,3), - (213,143,57,3), - (644,427,57,3), - (345,231,58,3), - (15,10,59,3), - (132,89,59,3), - (226,151,59,3), - (306,204,59,3), - (625,414,59,3), - (641,425,59,3), - (595,395,60,3), - (19,13,61,3), - (190,127,61,3), - (714,486,62,2), - (731,516,62,2), - (2,1,63,3), - (56,37,63,3), - (247,164,64,3), - (270,177,64,3), - (415,277,64,3), - (184,123,65,3), - (211,142,65,3), - (136,92,66,3), - (386,259,66,3), - (457,307,66,3), - (785,557,66,2), - (97,65,67,3), - (203,136,67,3), - (476,319,67,3), - (606,402,67,3), - (709,481,67,2), - (732,511,67,2), - (62,41,68,3), - (165,111,68,3), - (266,175,68,3), - (553,369,68,3), - (620,411,68,3), - (713,485,68,2), - (733,515,68,2), - (763,535,68,2), - (716,488,69,2), - (734,518,69,2), - (81,55,70,3), - (327,218,70,3), - (377,253,70,3), - (653,433,70,3), - (753,525,70,2), - (688,460,71,2), - (712,484,71,2), - (735,514,71,2), - (217,145,72,3), - (706,478,72,2), - (736,508,72,2), - (597,396,74,3), - (126,85,75,3), - (363,243,75,3), - (404,270,75,3), - (584,388,75,3), - (789,561,75,2), - (670,445,76,3), - (351,235,77,3), - (532,356,77,3), - (181,121,79,3), - (173,116,80,3), - (445,298,81,3), - (539,360,82,3), - (685,457,82,2), - (28,18,83,3), - (124,84,83,3), - (315,209,83,3), - (347,232,83,3), - (555,370,83,3), - (756,528,83,2), - (394,264,84,3), - (503,338,84,3), - (528,354,84,3), - (601,399,84,3), - (10,7,85,3), - (534,357,85,3), - (616,409,85,3), - (251,166,86,3), - (796,568,86,2), - (36,24,87,3), - (170,114,87,3), - (353,236,87,3), - (382,256,87,3), - (471,316,87,3), - (490,328,88,3), - (34,23,89,3), - (91,62,89,3), - (107,73,89,3), - (260,172,89,3), - (464,312,89,3), - (710,482,89,2), - (737,512,89,2), - (524,351,90,3), - (74,50,91,3), - (548,366,91,3), - (612,407,91,3), - (790,562,91,2), - (24,16,92,3), - (65,43,92,3), - (249,165,92,3), - (618,410,92,3), - (686,458,92,2), - (773,545,93,2), - (68,45,94,3), - (580,386,94,3), - (114,77,95,3), - (335,224,95,3), - (715,487,95,2), - (738,517,95,2), - (304,203,96,3), - (240,160,97,3), - (432,287,98,3), - (637,423,98,3), - (799,571,98,2), - (571,379,99,3), - (298,199,100,3), - (338,226,100,3), - (557,371,100,3), - (604,401,100,3), - (693,465,101,2), - (739,495,101,2), - (784,556,102,2), - (783,555,105,2), - (697,469,106,2), - (740,499,106,2), - (754,526,110,2), - (720,492,111,2), - (741,522,111,2), - (788,560,112,2), - (798,570,113,2), - (701,473,114,2), - (742,503,114,2), - (707,479,115,2), - (743,509,115,2), - (767,539,116,2), - (768,540,117,2), - (708,480,119,2), - (744,510,119,2), - (802,574,121,2), - (719,491,122,2), - (745,521,122,2), - (692,464,124,2), - (746,494,124,2), - (765,537,124,2), - (774,546,131,2), - (794,566,142,2), - (778,550,144,2), - (711,483,148,2), - (747,513,148,2), - (780,552,149,2), - (775,547,152,2), - (757,529,158,2), - (770,542,165,2), - (781,553,166,2), - (764,536,167,2), - (703,475,168,2), - (748,505,168,2), - (769,541,170,2), - (718,490,171,2), - (749,520,171,2), - (800,572,173,2), - (771,543,176,2), - (721,493,182,2), - (750,523,182,2), - (779,551,183,2), - (762,534,190,2), - (225,151,193,2), - (227,152,193,2), - (228,153,193,2), - (230,154,193,2), - (232,155,193,2), - (233,156,193,2), - (234,157,193,2), - (236,158,193,2), - (238,159,193,2), - (239,160,193,2), - (241,161,193,2), - (243,162,193,2), - (245,163,193,2), - (246,164,193,2), - (248,165,193,2), - (250,166,193,2), - (252,167,193,2), - (253,168,193,2), - (255,169,193,2), - (257,170,193,2), - (258,171,193,2), - (259,172,193,2), - (261,173,193,2), - (263,174,193,2), - (265,175,193,2), - (267,176,193,2), - (269,177,193,2), - (271,178,193,2), - (273,179,193,2), - (274,180,193,2), - (275,181,193,2), - (276,182,193,2), - (277,183,193,2), - (278,184,193,2), - (279,185,193,2), - (280,186,193,2), - (281,187,193,2), - (283,188,193,2), - (284,189,193,2), - (285,190,193,2), - (286,191,193,2), - (288,192,193,2), - (290,193,193,2), - (291,194,193,2), - (292,195,193,2), - (293,196,193,2), - (294,197,193,2), - (296,198,193,2), - (297,199,193,2), - (299,200,193,2), - (300,201,193,2), - (301,202,193,2), - (303,203,193,2), - (305,204,193,2), - (307,205,193,2), - (309,206,193,2), - (311,207,193,2), - (312,208,193,2), - (314,209,193,2), - (316,210,193,2), - (317,211,193,2), - (318,212,193,2), - (319,213,193,2), - (321,214,193,2), - (322,215,193,2), - (323,216,193,2), - (325,217,193,2), - (326,218,193,2), - (328,219,193,2), - (329,220,193,2), - (330,221,193,2), - (331,222,193,2), - (332,223,193,2), - (334,224,193,2), - (336,225,193,2), - (337,226,193,2), - (339,227,193,2), - (340,228,193,2), - (341,229,193,2), - (343,230,193,2), - (344,231,193,2), - (346,232,193,2), - (348,233,193,2), - (349,234,193,2), - (350,235,193,2), - (352,236,193,2), - (354,237,193,2), - (355,238,193,2), - (356,239,193,2), - (358,240,193,2), - (359,241,193,2), - (360,242,193,2), - (362,243,193,2), - (364,244,193,2), - (365,245,193,2), - (367,246,193,2), - (368,247,193,2), - (369,248,193,2), - (371,249,193,2), - (372,250,193,2), - (373,251,193,2), - (375,252,193,2), - (376,253,193,2), - (378,254,193,2), - (380,255,193,2), - (381,256,193,2), - (383,257,193,2), - (384,258,193,2), - (385,259,193,2), - (387,260,193,2), - (388,261,193,2), - (390,262,193,2), - (391,263,193,2), - (393,264,193,2), - (395,265,193,2), - (396,266,193,2), - (398,267,193,2), - (399,268,193,2), - (401,269,193,2), - (403,270,193,2), - (405,271,193,2), - (406,272,193,2), - (408,273,193,2), - (409,274,193,2), - (411,275,193,2), - (412,276,193,2), - (414,277,193,2), - (416,278,193,2), - (418,279,193,2), - (420,280,193,2), - (422,281,193,2), - (424,282,193,2), - (425,283,193,2), - (426,284,193,2), - (428,285,193,2), - (429,286,193,2), - (431,287,193,2), - (433,288,193,2), - (435,289,193,2), - (436,290,193,2), - (437,291,193,2), - (438,292,193,2), - (439,293,193,2), - (440,294,193,2), - (441,295,193,2), - (442,296,193,2), - (443,297,193,2), - (444,298,193,2), - (446,299,193,2), - (447,300,193,2), - (801,573,197,2), - (704,476,199,2), - (751,506,199,2), - (761,533,199,2), - (793,565,200,2), - (772,544,201,2); + (72,49,1,3), + (506,332,1,3), + (321,208,2,3), + (371,241,2,3), + (517,338,2,3), + (684,451,2,2), + (283,183,3,3), + (438,285,4,3), + (595,388,4,3), + (685,452,4,2), + (702,469,4,2), + (742,509,4,2), + (227,149,5,3), + (281,182,5,3), + (477,314,5,3), + (722,489,5,2), + (752,519,5,2), + (216,142,6,3), + (399,261,6,3), + (686,453,6,2), + (157,103,7,3), + (103,69,8,3), + (168,110,8,3), + (401,262,8,3), + (539,353,8,3), + (638,418,8,3), + (687,454,8,2), + (123,81,9,3), + (325,210,9,3), + (527,345,9,3), + (542,355,9,3), + (607,397,9,3), + (66,44,10,3), + (494,325,10,3), + (548,359,10,3), + (108,72,11,3), + (332,216,11,3), + (385,251,11,3), + (629,412,11,3), + (658,431,11,3), + (266,174,12,3), + (782,549,12,2), + (514,336,13,3), + (805,572,13,2), + (19,13,15,3), + (465,305,15,3), + (471,309,15,3), + (533,349,15,3), + (545,357,15,3), + (37,25,16,3), + (81,55,16,3), + (181,118,16,3), + (482,318,16,3), + (688,455,16,2), + (720,487,16,2), + (750,517,16,2), + (179,117,17,3), + (199,132,17,3), + (243,158,17,3), + (723,490,17,2), + (738,505,17,2), + (48,32,18,3), + (504,331,18,3), + (644,422,18,3), + (669,439,18,3), + (794,561,18,2), + (689,456,19,2), + (726,493,19,2), + (754,521,19,2), + (367,239,20,3), + (767,534,21,2), + (209,138,22,3), + (341,222,22,3), + (467,306,22,3), + (763,530,22,2), + (270,176,23,3), + (421,275,23,3), + (498,327,23,3), + (717,484,23,2), + (736,503,23,2), + (376,245,25,3), + (443,288,25,3), + (634,416,25,3), + (162,106,27,3), + (166,109,27,3), + (229,151,28,2), + (231,152,28,2), + (233,153,28,2), + (235,154,28,2), + (237,155,28,2), + (239,156,28,2), + (241,157,28,2), + (242,158,28,2), + (244,159,28,2), + (246,160,28,2), + (247,161,28,2), + (248,162,28,2), + (249,163,28,2), + (251,164,28,2), + (252,165,28,2), + (253,165,28,3), + (254,166,28,2), + (255,167,28,2), + (256,168,28,2), + (257,169,28,2), + (258,170,28,2), + (260,171,28,2), + (262,172,28,2), + (264,173,28,2), + (265,174,28,2), + (267,175,28,2), + (269,176,28,2), + (271,177,28,2), + (273,178,28,2), + (274,179,28,2), + (276,180,28,2), + (278,181,28,2), + (280,182,28,2), + (282,183,28,2), + (284,184,28,2), + (286,185,28,2), + (288,186,28,2), + (289,187,28,2), + (291,188,28,2), + (292,189,28,2), + (294,190,28,2), + (295,191,28,2), + (296,192,28,2), + (297,193,28,2), + (299,194,28,2), + (301,195,28,2), + (302,196,28,2), + (303,197,28,2), + (305,198,28,2), + (306,199,28,2), + (307,200,28,2), + (309,201,28,2), + (311,202,28,2), + (312,203,28,2), + (313,204,28,2), + (314,205,28,2), + (316,206,28,2), + (318,207,28,2), + (320,208,28,2), + (322,209,28,2), + (324,210,28,2), + (326,211,28,2), + (327,212,28,2), + (328,213,28,2), + (329,214,28,2), + (330,215,28,2), + (331,216,28,2), + (333,217,28,2), + (335,218,28,2), + (337,219,28,2), + (338,220,28,2), + (339,221,28,2), + (340,222,28,2), + (342,223,28,2), + (344,224,28,2), + (346,225,28,2), + (347,226,28,2), + (348,227,28,2), + (350,228,28,2), + (351,229,28,2), + (353,230,28,2), + (354,231,28,2), + (356,232,28,2), + (358,233,28,2), + (359,234,28,2), + (361,235,28,2), + (362,236,28,2), + (364,237,28,2), + (365,238,28,2), + (366,239,28,2), + (368,240,28,2), + (370,241,28,2), + (372,242,28,2), + (373,243,28,2), + (374,244,28,2), + (375,245,28,2), + (377,246,28,2), + (378,247,28,2), + (380,248,28,2), + (382,249,28,2), + (383,250,28,2), + (384,251,28,2), + (386,252,28,2), + (388,253,28,2), + (389,254,28,2), + (390,255,28,2), + (392,256,28,2), + (394,257,28,2), + (395,258,28,2), + (396,259,28,2), + (397,260,28,2), + (398,261,28,2), + (400,262,28,2), + (402,263,28,2), + (404,264,28,2), + (406,265,28,2), + (407,266,28,2), + (409,267,28,2), + (410,268,28,2), + (411,269,28,2), + (412,270,28,2), + (414,271,28,2), + (415,272,28,2), + (417,273,28,2), + (419,274,28,2), + (420,275,28,2), + (422,276,28,2), + (423,277,28,2), + (425,278,28,2), + (427,279,28,2), + (429,280,28,2), + (431,281,28,2), + (432,282,28,2), + (434,283,28,2), + (435,284,28,2), + (437,285,28,2), + (439,286,28,2), + (440,287,28,2), + (441,287,28,3), + (442,288,28,2), + (444,289,28,2), + (446,290,28,2), + (448,291,28,2), + (449,292,28,2), + (450,293,28,2), + (451,294,28,2), + (452,295,28,2), + (453,296,28,2), + (454,297,28,2), + (455,298,28,2), + (456,299,28,2), + (457,300,28,2), + (97,65,29,3), + (52,35,30,3), + (172,112,30,3), + (708,475,30,2), + (744,511,30,2), + (352,229,31,3), + (680,447,31,3), + (57,38,32,3), + (64,43,32,3), + (117,78,32,3), + (426,278,32,3), + (588,384,32,3), + (695,462,32,2), + (696,463,32,2), + (336,218,33,3), + (485,320,33,3), + (488,322,33,3), + (636,417,33,3), + (774,541,33,2), + (29,19,34,3), + (520,340,34,3), + (692,459,34,2), + (236,154,35,3), + (355,231,35,3), + (393,256,35,3), + (620,406,35,3), + (759,526,35,2), + (92,62,36,3), + (211,139,36,3), + (556,365,36,3), + (27,18,37,3), + (510,334,37,3), + (150,99,38,3), + (601,393,38,3), + (159,104,39,3), + (188,123,39,3), + (379,247,39,3), + (31,20,40,3), + (7,5,41,3), + (238,155,41,3), + (250,163,41,3), + (413,270,41,3), + (433,282,41,3), + (447,290,41,3), + (496,326,41,3), + (772,539,41,2), + (25,17,42,3), + (323,209,42,3), + (603,394,42,3), + (694,461,43,2), + (105,70,44,3), + (126,83,44,3), + (272,177,44,3), + (391,255,44,3), + (571,374,44,3), + (673,441,44,3), + (725,492,44,2), + (739,506,44,2), + (259,170,46,3), + (287,185,46,3), + (424,277,46,3), + (787,554,46,2), + (213,140,47,3), + (300,194,47,3), + (610,399,47,3), + (558,366,48,3), + (207,137,49,3), + (569,373,49,3), + (193,127,50,3), + (204,135,50,3), + (786,553,50,2), + (94,63,51,3), + (458,301,51,2), + (460,302,51,2), + (461,303,51,2), + (463,304,51,2), + (464,305,51,2), + (466,306,51,2), + (468,307,51,2), + (469,308,51,2), + (470,309,51,2), + (472,310,51,2), + (473,311,51,2), + (474,312,51,2), + (475,313,51,2), + (476,314,51,2), + (478,315,51,2), + (479,316,51,2), + (480,317,51,2), + (481,318,51,2), + (483,319,51,2), + (484,320,51,2), + (486,321,51,2), + (487,322,51,2), + (489,323,51,2), + (491,324,51,2), + (493,325,51,2), + (495,326,51,2), + (497,327,51,2), + (499,328,51,2), + (500,329,51,2), + (501,330,51,2), + (503,331,51,2), + (505,332,51,2), + (507,333,51,2), + (509,334,51,2), + (511,335,51,2), + (513,336,51,2), + (515,337,51,2), + (516,338,51,2), + (518,339,51,2), + (519,340,51,2), + (521,341,51,2), + (522,342,51,2), + (523,343,51,2), + (524,344,51,2), + (526,345,51,2), + (528,346,51,2), + (530,347,51,2), + (531,348,51,2), + (532,349,51,2), + (534,350,51,2), + (535,351,51,2), + (537,352,51,2), + (538,353,51,2), + (540,354,51,2), + (541,355,51,2), + (543,356,51,2), + (544,357,51,2), + (546,358,51,2), + (547,359,51,2), + (549,360,51,2), + (550,361,51,2), + (551,362,51,2), + (552,363,51,2), + (554,364,51,2), + (555,365,51,2), + (557,366,51,2), + (559,367,51,2), + (560,368,51,2), + (562,369,51,2), + (564,370,51,2), + (565,371,51,2), + (566,372,51,2), + (568,373,51,2), + (570,374,51,2), + (572,375,51,2), + (574,376,51,2), + (575,377,51,2), + (577,378,51,2), + (579,379,51,2), + (581,380,51,2), + (583,381,51,2), + (584,382,51,2), + (585,383,51,2), + (587,384,51,2), + (589,385,51,2), + (591,386,51,2), + (593,387,51,2), + (594,388,51,2), + (596,389,51,2), + (597,390,51,2), + (598,391,51,2), + (599,392,51,2), + (600,393,51,2), + (602,394,51,2), + (604,395,51,2), + (605,396,51,2), + (606,397,51,2), + (608,398,51,2), + (609,399,51,2), + (611,400,51,2), + (612,401,51,2), + (613,402,51,2), + (615,403,51,2), + (617,404,51,2), + (618,405,51,2), + (619,406,51,2), + (621,407,51,2), + (622,408,51,2), + (623,409,51,2), + (624,410,51,2), + (626,411,51,2), + (628,412,51,2), + (630,413,51,2), + (631,414,51,2), + (632,415,51,2), + (633,416,51,2), + (635,417,51,2), + (637,418,51,2), + (639,419,51,2), + (641,420,51,2), + (642,421,51,2), + (643,422,51,2), + (645,423,51,2), + (646,424,51,2), + (647,425,51,2), + (649,426,51,2), + (650,427,51,2), + (652,428,51,2), + (653,429,51,2), + (655,430,51,2), + (657,431,51,2), + (659,432,51,2), + (660,433,51,2), + (661,434,51,2), + (662,435,51,2), + (664,436,51,2), + (665,437,51,2), + (666,438,51,2), + (667,438,51,3), + (668,439,51,2), + (670,440,51,2), + (672,441,51,2), + (674,442,51,2), + (675,443,51,2), + (676,444,51,2), + (677,445,51,2), + (678,446,51,2), + (679,447,51,2), + (681,448,51,2), + (682,449,51,2), + (683,450,51,2), + (713,480,51,2), + (734,501,51,2), + (758,525,51,2), + (536,351,52,3), + (462,303,53,3), + (3,2,54,3), + (230,151,54,3), + (567,372,54,3), + (84,57,55,3), + (360,234,55,3), + (802,569,55,2), + (490,323,56,3), + (698,465,56,2), + (740,507,56,2), + (240,156,57,3), + (369,240,57,3), + (648,425,57,3), + (129,85,58,3), + (147,97,58,3), + (234,153,58,3), + (724,491,58,2), + (753,520,58,2), + (308,200,59,3), + (345,224,59,3), + (405,264,59,3), + (561,368,59,3), + (42,28,60,3), + (186,122,60,3), + (761,528,60,2), + (59,39,61,3), + (202,134,61,3), + (663,435,61,3), + (418,273,62,3), + (508,333,62,3), + (155,102,63,3), + (349,227,63,3), + (703,470,63,2), + (730,497,63,2), + (76,51,64,3), + (800,567,64,2), + (277,180,65,3), + (55,37,66,3), + (121,80,66,3), + (140,93,66,3), + (152,100,67,3), + (220,145,67,3), + (428,279,67,3), + (9,6,68,3), + (74,50,68,3), + (512,335,68,3), + (232,152,69,3), + (656,430,70,3), + (716,483,70,2), + (749,516,70,2), + (693,460,71,2), + (408,266,73,3), + (651,427,73,3), + (769,536,73,2), + (119,79,74,3), + (317,206,74,3), + (363,236,76,3), + (553,363,76,3), + (627,411,76,3), + (16,11,77,3), + (285,184,77,3), + (445,289,77,3), + (502,330,77,3), + (525,344,77,3), + (529,346,77,3), + (590,385,77,3), + (671,440,77,3), + (12,8,78,3), + (115,77,78,3), + (261,171,78,3), + (298,193,78,3), + (580,379,78,3), + (640,419,78,3), + (22,15,79,3), + (315,205,79,3), + (343,223,79,3), + (616,403,79,3), + (625,410,79,3), + (586,383,80,3), + (614,402,80,3), + (100,67,82,3), + (582,380,82,3), + (690,457,82,2), + (783,550,82,2), + (222,146,83,3), + (416,272,83,3), + (170,111,84,3), + (796,563,84,2), + (142,94,85,3), + (245,159,85,3), + (700,467,85,2), + (741,508,85,2), + (86,58,86,3), + (176,115,86,3), + (131,86,87,3), + (263,172,87,3), + (459,301,87,3), + (563,369,87,3), + (112,75,88,3), + (290,187,88,3), + (381,248,88,3), + (792,559,89,2), + (334,217,90,3), + (357,232,90,3), + (387,252,90,3), + (697,464,90,2), + (727,494,90,2), + (40,27,91,3), + (436,284,91,3), + (45,30,92,3), + (293,189,92,3), + (403,263,92,3), + (573,375,92,3), + (592,386,92,3), + (691,458,92,2), + (714,481,92,2), + (748,515,92,2), + (88,59,93,3), + (492,324,93,3), + (765,532,93,2), + (319,207,94,3), + (145,96,95,3), + (654,429,95,3), + (268,175,96,3), + (304,197,96,3), + (430,280,96,3), + (224,147,98,3), + (279,181,98,3), + (578,378,98,3), + (133,87,99,3), + (275,179,99,3), + (576,377,99,3), + (310,201,100,3), + (762,529,100,2), + (789,556,103,2), + (791,558,104,2), + (711,478,107,2), + (746,513,107,2), + (801,568,107,2), + (798,565,110,2), + (712,479,113,2), + (747,514,113,2), + (797,564,114,2), + (1,1,115,2), + (2,2,115,2), + (4,3,115,2), + (5,4,115,2), + (6,5,115,2), + (8,6,115,2), + (10,7,115,2), + (11,8,115,2), + (13,9,115,2), + (14,10,115,2), + (15,11,115,2), + (17,12,115,2), + (18,13,115,2), + (20,14,115,2), + (21,15,115,2), + (23,16,115,2), + (24,17,115,2), + (26,18,115,2), + (28,19,115,2), + (30,20,115,2), + (32,21,115,2), + (33,22,115,2), + (34,23,115,2), + (35,24,115,2), + (36,25,115,2), + (38,26,115,2), + (39,27,115,2), + (41,28,115,2), + (43,29,115,2), + (44,30,115,2), + (46,31,115,2), + (47,32,115,2), + (49,33,115,2), + (50,34,115,2), + (51,35,115,2), + (53,36,115,2), + (54,37,115,2), + (56,38,115,2), + (58,39,115,2), + (60,40,115,2), + (61,41,115,2), + (62,42,115,2), + (63,43,115,2), + (65,44,115,2), + (67,45,115,2), + (68,46,115,2), + (69,47,115,2), + (70,48,115,2), + (71,49,115,2), + (73,50,115,2), + (75,51,115,2), + (77,52,115,2), + (78,53,115,2), + (79,54,115,2), + (80,55,115,2), + (82,56,115,2), + (83,57,115,2), + (85,58,115,2), + (87,59,115,2), + (89,60,115,2), + (90,61,115,2), + (91,62,115,2), + (93,63,115,2), + (95,64,115,2), + (96,65,115,2), + (98,66,115,2), + (99,67,115,2), + (101,68,115,2), + (102,69,115,2), + (104,70,115,2), + (106,71,115,2), + (107,72,115,2), + (109,73,115,2), + (110,74,115,2), + (111,75,115,2), + (113,76,115,2), + (114,77,115,2), + (116,78,115,2), + (118,79,115,2), + (120,80,115,2), + (122,81,115,2), + (124,82,115,2), + (125,83,115,2), + (127,84,115,2), + (128,85,115,2), + (130,86,115,2), + (132,87,115,2), + (134,88,115,2), + (135,89,115,2), + (136,90,115,2), + (137,91,115,2), + (138,92,115,2), + (139,93,115,2), + (141,94,115,2), + (143,95,115,2), + (144,96,115,2), + (146,97,115,2), + (148,98,115,2), + (149,99,115,2), + (151,100,115,2), + (153,101,115,2), + (154,102,115,2), + (156,103,115,2), + (158,104,115,2), + (160,105,115,2), + (161,106,115,2), + (163,107,115,2), + (164,108,115,2), + (165,109,115,2), + (167,110,115,2), + (169,111,115,2), + (171,112,115,2), + (173,113,115,2), + (174,114,115,2), + (175,115,115,2), + (177,116,115,2), + (178,117,115,2), + (180,118,115,2), + (182,119,115,2), + (183,120,115,2), + (184,121,115,2), + (185,122,115,2), + (187,123,115,2), + (189,124,115,2), + (190,125,115,2), + (191,126,115,2), + (192,127,115,2), + (194,128,115,2), + (195,129,115,2), + (196,130,115,2), + (197,131,115,2), + (198,132,115,2), + (200,133,115,2), + (201,134,115,2), + (203,135,115,2), + (205,136,115,2), + (206,137,115,2), + (208,138,115,2), + (210,139,115,2), + (212,140,115,2), + (214,141,115,2), + (215,142,115,2), + (217,143,115,2), + (218,144,115,2), + (219,145,115,2), + (221,146,115,2), + (223,147,115,2), + (225,148,115,2), + (226,149,115,2), + (228,150,115,2), + (701,468,117,2), + (729,496,117,2), + (781,548,117,2), + (804,571,122,2), + (785,552,123,2), + (799,566,125,2), + (704,471,127,2), + (743,510,127,2), + (768,535,129,2), + (715,482,132,2), + (735,502,132,2), + (793,560,133,2), + (777,544,136,2), + (780,547,142,2), + (807,574,143,2), + (806,573,144,2), + (771,538,147,2), + (776,543,151,2), + (719,486,152,2), + (737,504,152,2), + (778,545,153,2), + (788,555,155,2), + (795,562,157,2), + (775,542,158,2), + (718,485,159,2), + (756,523,159,2), + (773,540,166,2), + (705,472,168,2), + (731,498,168,2), + (707,474,170,2), + (755,522,170,2), + (770,537,171,2), + (766,533,179,2), + (710,477,180,2), + (745,512,180,2), + (784,551,184,2), + (699,466,185,2), + (728,495,185,2), + (779,546,185,2), + (764,531,187,2), + (790,557,191,2), + (709,476,194,2), + (733,500,194,2), + (706,473,195,2), + (732,499,195,2), + (760,527,196,2), + (803,570,200,2), + (721,488,201,2), + (751,518,201,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -1603,186 +1609,183 @@ UNLOCK TABLES; LOCK TABLES `civicrm_address` WRITE; /*!40000 ALTER TABLE `civicrm_address` DISABLE KEYS */; INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES - (1,65,1,1,0,'643D Pine St NE',643,'D',NULL,'Pine','St','NE',NULL,NULL,NULL,NULL,'Snowflake',1,1002,NULL,'85937',NULL,1228,34.560896,-110.03633,0,NULL,NULL,NULL), - (2,164,1,1,0,'71C Jackson Path NE',71,'C',NULL,'Jackson','Path','NE',NULL,NULL,NULL,NULL,'Edwardsville',1,1045,NULL,'22456',NULL,1228,37.852316,-76.40511,0,NULL,NULL,NULL), - (3,187,1,1,0,'449A Caulder Rd W',449,'A',NULL,'Caulder','Rd','W',NULL,NULL,NULL,NULL,'Belvidere',1,1026,NULL,'68315',NULL,1228,40.248038,-97.5574,0,NULL,NULL,NULL), - (4,69,1,1,0,'704U Maple St NW',704,'U',NULL,'Maple','St','NW',NULL,NULL,NULL,NULL,'Suwannee',1,1008,NULL,'32692',NULL,1228,29.330426,-83.14401,0,NULL,NULL,NULL), - (5,6,1,1,0,'664J Martin Luther King Way SE',664,'J',NULL,'Martin Luther King','Way','SE',NULL,NULL,NULL,NULL,'Missoula',1,1025,NULL,'59812',NULL,1228,47.116034,-114.049824,0,NULL,NULL,NULL), - (6,159,1,1,0,'969O College Rd SE',969,'O',NULL,'College','Rd','SE',NULL,NULL,NULL,NULL,'Homosassa',1,1008,NULL,'34446',NULL,1228,28.746912,-82.53331,0,NULL,NULL,NULL), - (7,33,1,1,0,'456H States Blvd E',456,'H',NULL,'States','Blvd','E',NULL,NULL,NULL,NULL,'Boomer',1,1032,NULL,'28606',NULL,1228,36.058853,-81.30497,0,NULL,NULL,NULL), - (8,185,1,1,0,'446I Green Blvd NW',446,'I',NULL,'Green','Blvd','NW',NULL,NULL,NULL,NULL,'Locustville',1,1045,NULL,'23404',NULL,1228,37.635838,-75.66642,0,NULL,NULL,NULL), - (9,103,1,1,0,'467K College Ave W',467,'K',NULL,'College','Ave','W',NULL,NULL,NULL,NULL,'East Lansing',1,1021,NULL,'48826',NULL,1228,42.599184,-84.371973,0,NULL,NULL,NULL), - (10,137,1,1,0,'879Y Caulder Way SE',879,'Y',NULL,'Caulder','Way','SE',NULL,NULL,NULL,NULL,'Rehobeth',1,1019,NULL,'21857',NULL,1228,38.092718,-75.888207,0,NULL,NULL,NULL), - (11,52,1,1,0,'458E Pine Ln SW',458,'E',NULL,'Pine','Ln','SW',NULL,NULL,NULL,NULL,'Atwater',1,1012,NULL,'62511',NULL,1228,39.346468,-89.73278,0,NULL,NULL,NULL), - (12,165,1,1,0,'1000U States Rd W',1000,'U',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Duquesne',1,1037,NULL,'15110',NULL,1228,40.369969,-79.85095,0,NULL,NULL,NULL), - (13,162,1,1,0,'927E Martin Luther King Pl S',927,'E',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Freeport',1,1022,NULL,'56331',NULL,1228,45.67539,-94.67303,0,NULL,NULL,NULL), - (14,131,1,1,0,'783Q Main Pl SW',783,'Q',NULL,'Main','Pl','SW',NULL,NULL,NULL,NULL,'Centerville',1,1037,NULL,'16404',NULL,1228,41.727069,-79.78908,0,NULL,NULL,NULL), - (15,171,1,1,0,'359K Second Path NW',359,'K',NULL,'Second','Path','NW',NULL,NULL,NULL,NULL,'Hector',1,1031,NULL,'14841',NULL,1228,42.521501,-76.86246,0,NULL,NULL,NULL), - (16,17,1,1,0,'917F States Dr SE',917,'F',NULL,'States','Dr','SE',NULL,NULL,NULL,NULL,'Cashiers',1,1032,NULL,'28717',NULL,1228,35.103251,-83.09538,0,NULL,NULL,NULL), - (17,149,1,1,0,'160W Jackson Ave SE',160,'W',NULL,'Jackson','Ave','SE',NULL,NULL,NULL,NULL,'Milesburg',1,1037,NULL,'16853',NULL,1228,40.942533,-77.7892,0,NULL,NULL,NULL), - (18,199,1,1,0,'13E El Camino Way NW',13,'E',NULL,'El Camino','Way','NW',NULL,NULL,NULL,NULL,'Glynn',1,1017,NULL,'70736',NULL,1228,30.633678,-91.33786,0,NULL,NULL,NULL), - (19,115,1,1,0,'752C Green St E',752,'C',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Williamsville',1,1024,NULL,'63967',NULL,1228,36.944333,-90.48271,0,NULL,NULL,NULL), - (20,201,1,1,0,'786V Woodbridge Pl SE',786,'V',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Axtell',1,1042,NULL,'76624',NULL,1228,31.661554,-96.95451,0,NULL,NULL,NULL), - (21,166,1,1,0,'47C Woodbridge Rd SE',47,'C',NULL,'Woodbridge','Rd','SE',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93771',NULL,1228,36.746375,-119.639658,0,NULL,NULL,NULL), - (22,138,1,1,0,'266O El Camino Ln SE',266,'O',NULL,'El Camino','Ln','SE',NULL,NULL,NULL,NULL,'Conowingo',1,1019,NULL,'21918',NULL,1228,39.679246,-76.15464,0,NULL,NULL,NULL), - (23,61,1,1,0,'846D Van Ness Rd S',846,'D',NULL,'Van Ness','Rd','S',NULL,NULL,NULL,NULL,'Nondalton',1,1001,NULL,'99640',NULL,1228,59.971286,-154.85008,0,NULL,NULL,NULL), - (24,25,1,1,0,'16E Pine St SE',16,'E',NULL,'Pine','St','SE',NULL,NULL,NULL,NULL,'Redwood City',1,1004,NULL,'94063',NULL,1228,37.483504,-122.2144,0,NULL,NULL,NULL), - (25,133,1,1,0,'593D Beech Path NE',593,'D',NULL,'Beech','Path','NE',NULL,NULL,NULL,NULL,'Millersburg',1,1016,NULL,'40348',NULL,1228,38.302495,-84.14578,0,NULL,NULL,NULL), - (26,184,1,1,0,'515V Green Blvd SE',515,'V',NULL,'Green','Blvd','SE',NULL,NULL,NULL,NULL,'Blue Hill Falls',1,1018,NULL,'04615',NULL,1228,44.354477,-68.54781,0,NULL,NULL,NULL), - (27,198,1,1,0,'701L Northpoint Ln S',701,'L',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Lake Park',1,1009,NULL,'31636',NULL,1228,30.72289,-83.13302,0,NULL,NULL,NULL), - (28,54,1,1,0,'882Q Woodbridge Blvd NW',882,'Q',NULL,'Woodbridge','Blvd','NW',NULL,NULL,NULL,NULL,'Weatogue',1,1006,NULL,'06089',NULL,1228,41.839731,-72.81974,0,NULL,NULL,NULL), - (29,55,1,1,0,'232O College Rd SW',232,'O',NULL,'College','Rd','SW',NULL,NULL,NULL,NULL,'Tennessee',1,1012,NULL,'62374',NULL,1228,40.403553,-90.8834,0,NULL,NULL,NULL), - (30,111,1,1,0,'46Y Cadell Pl W',46,'Y',NULL,'Cadell','Pl','W',NULL,NULL,NULL,NULL,'Harborcreek',1,1037,NULL,'16421',NULL,1228,42.169106,-79.9409,0,NULL,NULL,NULL), - (31,50,1,1,0,'348X Second Dr SE',348,'X',NULL,'Second','Dr','SE',NULL,NULL,NULL,NULL,'Fenwick Island',1,1007,NULL,'19944',NULL,1228,38.459314,-75.05356,0,NULL,NULL,NULL), - (32,13,1,1,0,'898D Pine Ave NW',898,'D',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Eton',1,1009,NULL,'30724',NULL,1228,34.822176,-84.75967,0,NULL,NULL,NULL), - (33,112,1,1,0,'65C Beech Dr W',65,'C',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'Oak City',1,1043,NULL,'84649',NULL,1228,39.370295,-112.32369,0,NULL,NULL,NULL), - (34,114,1,1,0,'253C Woodbridge Ave E',253,'C',NULL,'Woodbridge','Ave','E',NULL,NULL,NULL,NULL,'Clearfield',1,1037,NULL,'16830',NULL,1228,41.026239,-78.43838,0,NULL,NULL,NULL), - (35,175,1,1,0,'356O Bay Way SW',356,'O',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Clarendon',1,1042,NULL,'79226',NULL,1228,34.971719,-100.90662,0,NULL,NULL,NULL), - (36,90,1,1,0,'855U Van Ness Way E',855,'U',NULL,'Van Ness','Way','E',NULL,NULL,NULL,NULL,'Corona',1,1040,NULL,'57227',NULL,1228,45.377288,-96.64746,0,NULL,NULL,NULL), - (37,80,1,1,0,'405Y Woodbridge Path E',405,'Y',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Charlotte',1,1032,NULL,'28207',NULL,1228,35.197643,-80.82752,0,NULL,NULL,NULL), - (38,20,1,1,0,'152A Van Ness Rd W',152,'A',NULL,'Van Ness','Rd','W',NULL,NULL,NULL,NULL,'Huntington',1,1047,NULL,'25726',NULL,1228,38.413384,-82.277401,0,NULL,NULL,NULL), - (39,41,1,1,0,'261W Second Rd NW',261,'W',NULL,'Second','Rd','NW',NULL,NULL,NULL,NULL,'Quicksburg',1,1045,NULL,'22847',NULL,1228,38.704494,-78.70088,0,NULL,NULL,NULL), - (40,193,1,1,0,'10U Woodbridge Pl SE',10,'U',NULL,'Woodbridge','Pl','SE',NULL,NULL,NULL,NULL,'Eufaula',1,1035,NULL,'74432',NULL,1228,35.280145,-95.57854,0,NULL,NULL,NULL), - (41,128,1,1,0,'58G Maple Pl E',58,'G',NULL,'Maple','Pl','E',NULL,NULL,NULL,NULL,'Winchester',1,1004,NULL,'92596',NULL,1228,33.653216,-117.07986,0,NULL,NULL,NULL), - (42,197,1,1,0,'213N States Blvd SE',213,'N',NULL,'States','Blvd','SE',NULL,NULL,NULL,NULL,'Bogart',1,1009,NULL,'30622',NULL,1228,33.927792,-83.51552,0,NULL,NULL,NULL), - (43,26,1,1,0,'781T El Camino Way NE',781,'T',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Arabi',1,1017,NULL,'70032',NULL,1228,29.958802,-89.99902,0,NULL,NULL,NULL), - (44,135,1,1,0,'655I Pine Blvd W',655,'I',NULL,'Pine','Blvd','W',NULL,NULL,NULL,NULL,'Great Bend',1,1037,NULL,'18821',NULL,1228,41.977241,-75.74391,0,NULL,NULL,NULL), - (45,28,1,1,0,'653F Caulder Pl S',653,'F',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Wilkes Barre',1,1037,NULL,'18761',NULL,1228,41.272248,-75.880146,0,NULL,NULL,NULL), - (46,7,1,1,0,'838C Martin Luther King Ave NE',838,'C',NULL,'Martin Luther King','Ave','NE',NULL,NULL,NULL,NULL,'Pulaski',1,1037,NULL,'16143',NULL,1228,41.096535,-80.46266,0,NULL,NULL,NULL), - (47,36,1,1,0,'489Q Caulder Ln SE',489,'Q',NULL,'Caulder','Ln','SE',NULL,NULL,NULL,NULL,'Carbon Hill',1,1034,NULL,'43111',NULL,1228,39.501342,-82.24434,0,NULL,NULL,NULL), - (48,155,1,1,0,'377I Dowlen Pl W',377,'I',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Fort Howard',1,1019,NULL,'21052',NULL,1228,39.206108,-76.44642,0,NULL,NULL,NULL), - (49,102,1,1,0,'295P Second St NE',295,'P',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Stratford',1,1046,NULL,'98853',NULL,1228,47.417461,-119.28312,0,NULL,NULL,NULL), - (50,9,1,1,0,'311A Northpoint Blvd N',311,'A',NULL,'Northpoint','Blvd','N',NULL,NULL,NULL,NULL,'Gaffney',1,1039,NULL,'29340',NULL,1228,35.03653,-81.62497,0,NULL,NULL,NULL), - (51,130,1,1,0,'817B Main Ln SW',817,'B',NULL,'Main','Ln','SW',NULL,NULL,NULL,NULL,'Upton',1,1020,NULL,'01568',NULL,1228,42.17382,-71.60971,0,NULL,NULL,NULL), - (52,144,1,1,0,'905U Woodbridge Blvd SW',905,'U',NULL,'Woodbridge','Blvd','SW',NULL,NULL,NULL,NULL,'Buffalo',1,1022,NULL,'55313',NULL,1228,45.175558,-93.85441,0,NULL,NULL,NULL), - (53,29,1,1,0,'519P Beech Rd S',519,'P',NULL,'Beech','Rd','S',NULL,NULL,NULL,NULL,'Concord',1,1037,NULL,'17217',NULL,1228,40.225168,-77.725013,0,NULL,NULL,NULL), - (54,48,1,1,0,'30Q Pine Way S',30,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Poway',1,1004,NULL,'92074',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), - (55,15,1,1,0,'985Z Woodbridge Ave N',985,'Z',NULL,'Woodbridge','Ave','N',NULL,NULL,NULL,NULL,'Sweetwater',1,1041,NULL,'37874',NULL,1228,35.598659,-84.46613,0,NULL,NULL,NULL), - (56,183,1,1,0,'525B El Camino Pl NW',525,'B',NULL,'El Camino','Pl','NW',NULL,NULL,NULL,NULL,'Henryville',1,1037,NULL,'18332',NULL,1228,41.093813,-75.26213,0,NULL,NULL,NULL), - (57,63,1,1,0,'394O Main Rd S',394,'O',NULL,'Main','Rd','S',NULL,NULL,NULL,NULL,'Dingle',1,1011,NULL,'83233',NULL,1228,42.177359,-111.217381,0,NULL,NULL,NULL), - (58,151,1,1,0,'769M Van Ness Pl NW',769,'M',NULL,'Van Ness','Pl','NW',NULL,NULL,NULL,NULL,'Ripley',1,1031,NULL,'14775',NULL,1228,42.254906,-79.69185,0,NULL,NULL,NULL), - (59,127,1,1,0,'902O Martin Luther King Blvd N',902,'O',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'Coupland',1,1042,NULL,'78615',NULL,1228,30.460373,-97.3935,0,NULL,NULL,NULL), - (60,8,1,1,0,'184C Pine Blvd SE',184,'C',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Ponce',1,1056,NULL,'00733',NULL,1228,18.019331,-66.619165,0,NULL,NULL,NULL), - (61,66,1,1,0,'706Z Northpoint Blvd NE',706,'Z',NULL,'Northpoint','Blvd','NE',NULL,NULL,NULL,NULL,'Luray',1,1045,NULL,'22875',NULL,1228,38.665568,-78.466716,0,NULL,NULL,NULL), - (62,74,1,1,0,'812I Cadell Ln NE',812,'I',NULL,'Cadell','Ln','NE',NULL,NULL,NULL,NULL,'East Hartland',1,1006,NULL,'06027',NULL,1228,42.002345,-72.90922,0,NULL,NULL,NULL), - (63,179,3,1,0,'801T Bay Way NE',801,'T',NULL,'Bay','Way','NE',NULL,'Urgent',NULL,NULL,'Kaneohe',1,1010,NULL,'96477',NULL,1228,21.41345,-157.80575,0,NULL,NULL,NULL), - (64,86,2,1,0,'801T Bay Way NE',801,'T',NULL,'Bay','Way','NE',NULL,'Urgent',NULL,NULL,'Kaneohe',1,1010,NULL,'96477',NULL,1228,21.41345,-157.80575,0,NULL,NULL,63), - (65,107,3,1,0,'41Y Pine Way NW',41,'Y',NULL,'Pine','Way','NW',NULL,'Editorial Dept',NULL,NULL,'La Jolla',1,1004,NULL,'92038',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), - (66,106,2,1,0,'41Y Pine Way NW',41,'Y',NULL,'Pine','Way','NW',NULL,'Editorial Dept',NULL,NULL,'La Jolla',1,1004,NULL,'92038',NULL,1228,33.016928,-116.846046,0,NULL,NULL,65), - (67,167,3,1,0,'249V Beech Way S',249,'V',NULL,'Beech','Way','S',NULL,'Community Relations',NULL,NULL,'Whiting',1,1044,NULL,'05778',NULL,1228,43.864419,-73.21148,0,NULL,NULL,NULL), - (68,6,2,0,0,'249V Beech Way S',249,'V',NULL,'Beech','Way','S',NULL,'Community Relations',NULL,NULL,'Whiting',1,1044,NULL,'05778',NULL,1228,43.864419,-73.21148,0,NULL,NULL,67), - (69,154,3,1,0,'301F Dowlen Ln N',301,'F',NULL,'Dowlen','Ln','N',NULL,'Donor Relations',NULL,NULL,'Charlotte',1,1003,NULL,'72522',NULL,1228,35.819494,-91.45128,0,NULL,NULL,NULL), - (70,88,3,1,0,'503R Green Dr SE',503,'R',NULL,'Green','Dr','SE',NULL,'Disbursements',NULL,NULL,'Liberal',1,1015,NULL,'67905',NULL,1228,37.021641,-100.938049,0,NULL,NULL,NULL), - (71,59,2,1,0,'503R Green Dr SE',503,'R',NULL,'Green','Dr','SE',NULL,'Disbursements',NULL,NULL,'Liberal',1,1015,NULL,'67905',NULL,1228,37.021641,-100.938049,0,NULL,NULL,70), - (72,70,3,1,0,'883C Dowlen Dr N',883,'C',NULL,'Dowlen','Dr','N',NULL,'Community Relations',NULL,NULL,'Claremont',1,1004,NULL,'91711',NULL,1228,34.110009,-117.71973,0,NULL,NULL,NULL), - (73,54,2,0,0,'883C Dowlen Dr N',883,'C',NULL,'Dowlen','Dr','N',NULL,'Community Relations',NULL,NULL,'Claremont',1,1004,NULL,'91711',NULL,1228,34.110009,-117.71973,0,NULL,NULL,72), - (74,191,3,1,0,'355W Second Ln S',355,'W',NULL,'Second','Ln','S',NULL,'Mailstop 101',NULL,NULL,'Saluda',1,1032,NULL,'28773',NULL,1228,35.23899,-82.34408,0,NULL,NULL,NULL), - (75,87,2,1,0,'355W Second Ln S',355,'W',NULL,'Second','Ln','S',NULL,'Mailstop 101',NULL,NULL,'Saluda',1,1032,NULL,'28773',NULL,1228,35.23899,-82.34408,0,NULL,NULL,74), - (76,188,3,1,0,'191K Jackson Ln W',191,'K',NULL,'Jackson','Ln','W',NULL,'Mailstop 101',NULL,NULL,'Kerby',1,1036,NULL,'97531',NULL,1228,42.208018,-123.65551,0,NULL,NULL,NULL), - (77,39,2,1,0,'191K Jackson Ln W',191,'K',NULL,'Jackson','Ln','W',NULL,'Mailstop 101',NULL,NULL,'Kerby',1,1036,NULL,'97531',NULL,1228,42.208018,-123.65551,0,NULL,NULL,76), - (78,57,3,1,0,'564O Van Ness Dr W',564,'O',NULL,'Van Ness','Dr','W',NULL,'Mailstop 101',NULL,NULL,'Cornettsville',1,1016,NULL,'41731',NULL,1228,37.115385,-83.08501,0,NULL,NULL,NULL), - (79,200,2,1,0,'564O Van Ness Dr W',564,'O',NULL,'Van Ness','Dr','W',NULL,'Mailstop 101',NULL,NULL,'Cornettsville',1,1016,NULL,'41731',NULL,1228,37.115385,-83.08501,0,NULL,NULL,78), - (80,109,3,1,0,'568D Dowlen Ln NW',568,'D',NULL,'Dowlen','Ln','NW',NULL,'Attn: Development',NULL,NULL,'Greenville',1,1023,NULL,'38703',NULL,1228,33.442801,-91.02984,0,NULL,NULL,NULL), - (81,187,2,0,0,'568D Dowlen Ln NW',568,'D',NULL,'Dowlen','Ln','NW',NULL,'Attn: Development',NULL,NULL,'Greenville',1,1023,NULL,'38703',NULL,1228,33.442801,-91.02984,0,NULL,NULL,80), - (82,110,3,1,0,'939M El Camino Blvd W',939,'M',NULL,'El Camino','Blvd','W',NULL,'Mailstop 101',NULL,NULL,'White Lake',1,1031,NULL,'12786',NULL,1228,41.649008,-74.85751,0,NULL,NULL,NULL), - (83,18,2,1,0,'939M El Camino Blvd W',939,'M',NULL,'El Camino','Blvd','W',NULL,'Mailstop 101',NULL,NULL,'White Lake',1,1031,NULL,'12786',NULL,1228,41.649008,-74.85751,0,NULL,NULL,82), - (84,34,3,1,0,'815R Green Rd SE',815,'R',NULL,'Green','Rd','SE',NULL,'Receiving',NULL,NULL,'Pittsburgh',1,1037,NULL,'15213',NULL,1228,40.443269,-79.95487,0,NULL,NULL,NULL), - (85,152,3,1,0,'483B Pine Rd N',483,'B',NULL,'Pine','Rd','N',NULL,'Editorial Dept',NULL,NULL,'Greenfield',1,1014,NULL,'50849',NULL,1228,41.308843,-94.42424,0,NULL,NULL,NULL), - (86,42,3,1,0,'840B Maple Way W',840,'B',NULL,'Maple','Way','W',NULL,'Cuffe Parade',NULL,NULL,'Fargo',1,1035,NULL,'73840',NULL,1228,36.403804,-99.64674,0,NULL,NULL,NULL), - (87,76,3,1,0,'848D Second Way W',848,'D',NULL,'Second','Way','W',NULL,'Urgent',NULL,NULL,'Gracewood',1,1009,NULL,'30812',NULL,1228,33.386041,-82.090996,0,NULL,NULL,NULL), - (88,190,2,1,0,'848D Second Way W',848,'D',NULL,'Second','Way','W',NULL,'Urgent',NULL,NULL,'Gracewood',1,1009,NULL,'30812',NULL,1228,33.386041,-82.090996,0,NULL,NULL,87), - (89,97,3,1,0,'317W Cadell Way E',317,'W',NULL,'Cadell','Way','E',NULL,'c/o PO Plus',NULL,NULL,'Addis',1,1017,NULL,'70710',NULL,1228,30.350306,-91.26121,0,NULL,NULL,NULL), - (90,38,2,1,0,'317W Cadell Way E',317,'W',NULL,'Cadell','Way','E',NULL,'c/o PO Plus',NULL,NULL,'Addis',1,1017,NULL,'70710',NULL,1228,30.350306,-91.26121,0,NULL,NULL,89), - (91,125,3,1,0,'601E Dowlen Way S',601,'E',NULL,'Dowlen','Way','S',NULL,'Cuffe Parade',NULL,NULL,'Dawson',1,1012,NULL,'62520',NULL,1228,39.824457,-89.45643,0,NULL,NULL,NULL), - (92,31,3,1,0,'694T Van Ness Ln E',694,'T',NULL,'Van Ness','Ln','E',NULL,'Donor Relations',NULL,NULL,'Heyburn',1,1011,NULL,'83336',NULL,1228,42.562839,-113.7864,0,NULL,NULL,NULL), - (93,116,2,1,0,'694T Van Ness Ln E',694,'T',NULL,'Van Ness','Ln','E',NULL,'Donor Relations',NULL,NULL,'Heyburn',1,1011,NULL,'83336',NULL,1228,42.562839,-113.7864,0,NULL,NULL,92), - (94,120,3,1,0,'19B Maple Way NE',19,'B',NULL,'Maple','Way','NE',NULL,'Attn: Development',NULL,NULL,'Parrish',1,1000,NULL,'35580',NULL,1228,33.701484,-87.27103,0,NULL,NULL,NULL), - (95,104,2,1,0,'19B Maple Way NE',19,'B',NULL,'Maple','Way','NE',NULL,'Attn: Development',NULL,NULL,'Parrish',1,1000,NULL,'35580',NULL,1228,33.701484,-87.27103,0,NULL,NULL,94), - (96,73,3,1,0,'737Z Dowlen Dr S',737,'Z',NULL,'Dowlen','Dr','S',NULL,'Editorial Dept',NULL,NULL,'Danese',1,1047,NULL,'25831',NULL,1228,37.950115,-80.92051,0,NULL,NULL,NULL), - (97,72,2,1,0,'737Z Dowlen Dr S',737,'Z',NULL,'Dowlen','Dr','S',NULL,'Editorial Dept',NULL,NULL,'Danese',1,1047,NULL,'25831',NULL,1228,37.950115,-80.92051,0,NULL,NULL,96), - (98,161,1,1,0,'781T El Camino Way NE',781,'T',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Arabi',1,1017,NULL,'70032',NULL,1228,29.958802,-89.99902,0,NULL,NULL,43), - (99,72,1,0,0,'781T El Camino Way NE',781,'T',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Arabi',1,1017,NULL,'70032',NULL,1228,29.958802,-89.99902,0,NULL,NULL,43), - (100,18,1,0,0,'781T El Camino Way NE',781,'T',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Arabi',1,1017,NULL,'70032',NULL,1228,29.958802,-89.99902,0,NULL,NULL,43), - (101,145,1,1,0,'781T El Camino Way NE',781,'T',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Arabi',1,1017,NULL,'70032',NULL,1228,29.958802,-89.99902,0,NULL,NULL,43), - (102,192,1,1,0,'655I Pine Blvd W',655,'I',NULL,'Pine','Blvd','W',NULL,NULL,NULL,NULL,'Great Bend',1,1037,NULL,'18821',NULL,1228,41.977241,-75.74391,0,NULL,NULL,44), - (103,95,1,1,0,'655I Pine Blvd W',655,'I',NULL,'Pine','Blvd','W',NULL,NULL,NULL,NULL,'Great Bend',1,1037,NULL,'18821',NULL,1228,41.977241,-75.74391,0,NULL,NULL,44), - (104,124,1,1,0,'655I Pine Blvd W',655,'I',NULL,'Pine','Blvd','W',NULL,NULL,NULL,NULL,'Great Bend',1,1037,NULL,'18821',NULL,1228,41.977241,-75.74391,0,NULL,NULL,44), - (105,101,1,1,0,'655I Pine Blvd W',655,'I',NULL,'Pine','Blvd','W',NULL,NULL,NULL,NULL,'Great Bend',1,1037,NULL,'18821',NULL,1228,41.977241,-75.74391,0,NULL,NULL,44), - (106,79,1,1,0,'653F Caulder Pl S',653,'F',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Wilkes Barre',1,1037,NULL,'18761',NULL,1228,41.272248,-75.880146,0,NULL,NULL,45), - (107,62,1,1,0,'653F Caulder Pl S',653,'F',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Wilkes Barre',1,1037,NULL,'18761',NULL,1228,41.272248,-75.880146,0,NULL,NULL,45), - (108,148,1,1,0,'653F Caulder Pl S',653,'F',NULL,'Caulder','Pl','S',NULL,NULL,NULL,NULL,'Wilkes Barre',1,1037,NULL,'18761',NULL,1228,41.272248,-75.880146,0,NULL,NULL,45), - (109,96,1,1,0,'824L Cadell Path W',824,'L',NULL,'Cadell','Path','W',NULL,NULL,NULL,NULL,'Monee',1,1012,NULL,'60449',NULL,1228,41.422555,-87.75531,0,NULL,NULL,NULL), - (110,150,1,1,0,'838C Martin Luther King Ave NE',838,'C',NULL,'Martin Luther King','Ave','NE',NULL,NULL,NULL,NULL,'Pulaski',1,1037,NULL,'16143',NULL,1228,41.096535,-80.46266,0,NULL,NULL,46), - (111,16,1,1,0,'838C Martin Luther King Ave NE',838,'C',NULL,'Martin Luther King','Ave','NE',NULL,NULL,NULL,NULL,'Pulaski',1,1037,NULL,'16143',NULL,1228,41.096535,-80.46266,0,NULL,NULL,46), - (112,122,1,1,0,'838C Martin Luther King Ave NE',838,'C',NULL,'Martin Luther King','Ave','NE',NULL,NULL,NULL,NULL,'Pulaski',1,1037,NULL,'16143',NULL,1228,41.096535,-80.46266,0,NULL,NULL,46), - (113,3,1,1,0,'18V Maple Pl S',18,'V',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'Osage',1,1014,NULL,'50461',NULL,1228,43.290536,-92.82115,0,NULL,NULL,NULL), - (114,24,1,1,0,'489Q Caulder Ln SE',489,'Q',NULL,'Caulder','Ln','SE',NULL,NULL,NULL,NULL,'Carbon Hill',1,1034,NULL,'43111',NULL,1228,39.501342,-82.24434,0,NULL,NULL,47), - (115,141,1,1,0,'489Q Caulder Ln SE',489,'Q',NULL,'Caulder','Ln','SE',NULL,NULL,NULL,NULL,'Carbon Hill',1,1034,NULL,'43111',NULL,1228,39.501342,-82.24434,0,NULL,NULL,47), - (116,117,1,1,0,'489Q Caulder Ln SE',489,'Q',NULL,'Caulder','Ln','SE',NULL,NULL,NULL,NULL,'Carbon Hill',1,1034,NULL,'43111',NULL,1228,39.501342,-82.24434,0,NULL,NULL,47), - (117,100,1,1,0,'340N Jackson Rd N',340,'N',NULL,'Jackson','Rd','N',NULL,NULL,NULL,NULL,'Soldiers Grove',1,1048,NULL,'54655',NULL,1228,43.388055,-90.76632,0,NULL,NULL,NULL), - (118,82,1,1,0,'377I Dowlen Pl W',377,'I',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Fort Howard',1,1019,NULL,'21052',NULL,1228,39.206108,-76.44642,0,NULL,NULL,48), - (119,104,1,0,0,'377I Dowlen Pl W',377,'I',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Fort Howard',1,1019,NULL,'21052',NULL,1228,39.206108,-76.44642,0,NULL,NULL,48), - (120,139,1,1,0,'377I Dowlen Pl W',377,'I',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Fort Howard',1,1019,NULL,'21052',NULL,1228,39.206108,-76.44642,0,NULL,NULL,48), - (121,87,1,0,0,'377I Dowlen Pl W',377,'I',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Fort Howard',1,1019,NULL,'21052',NULL,1228,39.206108,-76.44642,0,NULL,NULL,48), - (122,12,1,1,0,'295P Second St NE',295,'P',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Stratford',1,1046,NULL,'98853',NULL,1228,47.417461,-119.28312,0,NULL,NULL,49), - (123,176,1,1,0,'295P Second St NE',295,'P',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Stratford',1,1046,NULL,'98853',NULL,1228,47.417461,-119.28312,0,NULL,NULL,49), - (124,14,1,1,0,'295P Second St NE',295,'P',NULL,'Second','St','NE',NULL,NULL,NULL,NULL,'Stratford',1,1046,NULL,'98853',NULL,1228,47.417461,-119.28312,0,NULL,NULL,49), - (125,129,1,1,0,'712A Maple Ln NW',712,'A',NULL,'Maple','Ln','NW',NULL,NULL,NULL,NULL,'Oroville',1,1004,NULL,'95966',NULL,1228,39.491076,-121.49468,0,NULL,NULL,NULL), - (126,106,1,0,0,'311A Northpoint Blvd N',311,'A',NULL,'Northpoint','Blvd','N',NULL,NULL,NULL,NULL,'Gaffney',1,1039,NULL,'29340',NULL,1228,35.03653,-81.62497,0,NULL,NULL,50), - (127,59,1,0,0,'311A Northpoint Blvd N',311,'A',NULL,'Northpoint','Blvd','N',NULL,NULL,NULL,NULL,'Gaffney',1,1039,NULL,'29340',NULL,1228,35.03653,-81.62497,0,NULL,NULL,50), - (128,64,1,1,0,'311A Northpoint Blvd N',311,'A',NULL,'Northpoint','Blvd','N',NULL,NULL,NULL,NULL,'Gaffney',1,1039,NULL,'29340',NULL,1228,35.03653,-81.62497,0,NULL,NULL,50), - (129,67,1,1,0,'547H Dowlen St NW',547,'H',NULL,'Dowlen','St','NW',NULL,NULL,NULL,NULL,'Karnack',1,1042,NULL,'75661',NULL,1228,32.66797,-94.16846,0,NULL,NULL,NULL), - (130,168,1,1,0,'817B Main Ln SW',817,'B',NULL,'Main','Ln','SW',NULL,NULL,NULL,NULL,'Upton',1,1020,NULL,'01568',NULL,1228,42.17382,-71.60971,0,NULL,NULL,51), - (131,189,1,1,0,'817B Main Ln SW',817,'B',NULL,'Main','Ln','SW',NULL,NULL,NULL,NULL,'Upton',1,1020,NULL,'01568',NULL,1228,42.17382,-71.60971,0,NULL,NULL,51), - (132,142,1,1,0,'817B Main Ln SW',817,'B',NULL,'Main','Ln','SW',NULL,NULL,NULL,NULL,'Upton',1,1020,NULL,'01568',NULL,1228,42.17382,-71.60971,0,NULL,NULL,51), - (133,116,1,0,0,'705W Martin Luther King Ave SW',705,'W',NULL,'Martin Luther King','Ave','SW',NULL,NULL,NULL,NULL,'Broadview',1,1030,NULL,'88112',NULL,1228,34.857544,-103.15193,0,NULL,NULL,NULL), - (134,47,1,1,0,'905U Woodbridge Blvd SW',905,'U',NULL,'Woodbridge','Blvd','SW',NULL,NULL,NULL,NULL,'Buffalo',1,1022,NULL,'55313',NULL,1228,45.175558,-93.85441,0,NULL,NULL,52), - (135,105,1,1,0,'905U Woodbridge Blvd SW',905,'U',NULL,'Woodbridge','Blvd','SW',NULL,NULL,NULL,NULL,'Buffalo',1,1022,NULL,'55313',NULL,1228,45.175558,-93.85441,0,NULL,NULL,52), - (136,118,1,1,0,'905U Woodbridge Blvd SW',905,'U',NULL,'Woodbridge','Blvd','SW',NULL,NULL,NULL,NULL,'Buffalo',1,1022,NULL,'55313',NULL,1228,45.175558,-93.85441,0,NULL,NULL,52), - (137,140,1,1,0,'905U Woodbridge Blvd SW',905,'U',NULL,'Woodbridge','Blvd','SW',NULL,NULL,NULL,NULL,'Buffalo',1,1022,NULL,'55313',NULL,1228,45.175558,-93.85441,0,NULL,NULL,52), - (138,200,1,0,0,'519P Beech Rd S',519,'P',NULL,'Beech','Rd','S',NULL,NULL,NULL,NULL,'Concord',1,1037,NULL,'17217',NULL,1228,40.225168,-77.725013,0,NULL,NULL,53), - (139,51,1,1,0,'519P Beech Rd S',519,'P',NULL,'Beech','Rd','S',NULL,NULL,NULL,NULL,'Concord',1,1037,NULL,'17217',NULL,1228,40.225168,-77.725013,0,NULL,NULL,53), - (140,22,1,1,0,'519P Beech Rd S',519,'P',NULL,'Beech','Rd','S',NULL,NULL,NULL,NULL,'Concord',1,1037,NULL,'17217',NULL,1228,40.225168,-77.725013,0,NULL,NULL,53), - (141,113,1,1,0,'519P Beech Rd S',519,'P',NULL,'Beech','Rd','S',NULL,NULL,NULL,NULL,'Concord',1,1037,NULL,'17217',NULL,1228,40.225168,-77.725013,0,NULL,NULL,53), - (142,132,1,1,0,'30Q Pine Way S',30,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Poway',1,1004,NULL,'92074',NULL,1228,33.016928,-116.846046,0,NULL,NULL,54), - (143,108,1,1,0,'30Q Pine Way S',30,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Poway',1,1004,NULL,'92074',NULL,1228,33.016928,-116.846046,0,NULL,NULL,54), - (144,178,1,1,0,'30Q Pine Way S',30,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Poway',1,1004,NULL,'92074',NULL,1228,33.016928,-116.846046,0,NULL,NULL,54), - (145,160,1,1,0,'30Q Pine Way S',30,'Q',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Poway',1,1004,NULL,'92074',NULL,1228,33.016928,-116.846046,0,NULL,NULL,54), - (146,93,1,1,0,'985Z Woodbridge Ave N',985,'Z',NULL,'Woodbridge','Ave','N',NULL,NULL,NULL,NULL,'Sweetwater',1,1041,NULL,'37874',NULL,1228,35.598659,-84.46613,0,NULL,NULL,55), - (147,174,1,1,0,'985Z Woodbridge Ave N',985,'Z',NULL,'Woodbridge','Ave','N',NULL,NULL,NULL,NULL,'Sweetwater',1,1041,NULL,'37874',NULL,1228,35.598659,-84.46613,0,NULL,NULL,55), - (148,92,1,1,0,'985Z Woodbridge Ave N',985,'Z',NULL,'Woodbridge','Ave','N',NULL,NULL,NULL,NULL,'Sweetwater',1,1041,NULL,'37874',NULL,1228,35.598659,-84.46613,0,NULL,NULL,55), - (149,186,1,1,0,'985Z Woodbridge Ave N',985,'Z',NULL,'Woodbridge','Ave','N',NULL,NULL,NULL,NULL,'Sweetwater',1,1041,NULL,'37874',NULL,1228,35.598659,-84.46613,0,NULL,NULL,55), - (150,147,1,1,0,'525B El Camino Pl NW',525,'B',NULL,'El Camino','Pl','NW',NULL,NULL,NULL,NULL,'Henryville',1,1037,NULL,'18332',NULL,1228,41.093813,-75.26213,0,NULL,NULL,56), - (151,68,1,1,0,'525B El Camino Pl NW',525,'B',NULL,'El Camino','Pl','NW',NULL,NULL,NULL,NULL,'Henryville',1,1037,NULL,'18332',NULL,1228,41.093813,-75.26213,0,NULL,NULL,56), - (152,40,1,1,0,'525B El Camino Pl NW',525,'B',NULL,'El Camino','Pl','NW',NULL,NULL,NULL,NULL,'Henryville',1,1037,NULL,'18332',NULL,1228,41.093813,-75.26213,0,NULL,NULL,56), - (153,190,1,0,0,'416R States Ave NE',416,'R',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Trujillo Alto',1,1056,NULL,'00976',NULL,1228,18.346767,-66.00561,0,NULL,NULL,NULL), - (154,136,1,1,0,'394O Main Rd S',394,'O',NULL,'Main','Rd','S',NULL,NULL,NULL,NULL,'Dingle',1,1011,NULL,'83233',NULL,1228,42.177359,-111.217381,0,NULL,NULL,57), - (155,75,1,1,0,'394O Main Rd S',394,'O',NULL,'Main','Rd','S',NULL,NULL,NULL,NULL,'Dingle',1,1011,NULL,'83233',NULL,1228,42.177359,-111.217381,0,NULL,NULL,57), - (156,156,1,1,0,'394O Main Rd S',394,'O',NULL,'Main','Rd','S',NULL,NULL,NULL,NULL,'Dingle',1,1011,NULL,'83233',NULL,1228,42.177359,-111.217381,0,NULL,NULL,57), - (157,180,1,1,0,'394O Main Rd S',394,'O',NULL,'Main','Rd','S',NULL,NULL,NULL,NULL,'Dingle',1,1011,NULL,'83233',NULL,1228,42.177359,-111.217381,0,NULL,NULL,57), - (158,123,1,1,0,'769M Van Ness Pl NW',769,'M',NULL,'Van Ness','Pl','NW',NULL,NULL,NULL,NULL,'Ripley',1,1031,NULL,'14775',NULL,1228,42.254906,-79.69185,0,NULL,NULL,58), - (159,45,1,1,0,'769M Van Ness Pl NW',769,'M',NULL,'Van Ness','Pl','NW',NULL,NULL,NULL,NULL,'Ripley',1,1031,NULL,'14775',NULL,1228,42.254906,-79.69185,0,NULL,NULL,58), - (160,23,1,1,0,'769M Van Ness Pl NW',769,'M',NULL,'Van Ness','Pl','NW',NULL,NULL,NULL,NULL,'Ripley',1,1031,NULL,'14775',NULL,1228,42.254906,-79.69185,0,NULL,NULL,58), - (161,46,1,1,0,'769M Van Ness Pl NW',769,'M',NULL,'Van Ness','Pl','NW',NULL,NULL,NULL,NULL,'Ripley',1,1031,NULL,'14775',NULL,1228,42.254906,-79.69185,0,NULL,NULL,58), - (162,98,1,1,0,'902O Martin Luther King Blvd N',902,'O',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'Coupland',1,1042,NULL,'78615',NULL,1228,30.460373,-97.3935,0,NULL,NULL,59), - (163,143,1,1,0,'902O Martin Luther King Blvd N',902,'O',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'Coupland',1,1042,NULL,'78615',NULL,1228,30.460373,-97.3935,0,NULL,NULL,59), - (164,5,1,1,0,'902O Martin Luther King Blvd N',902,'O',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'Coupland',1,1042,NULL,'78615',NULL,1228,30.460373,-97.3935,0,NULL,NULL,59), - (165,38,1,0,0,'902O Martin Luther King Blvd N',902,'O',NULL,'Martin Luther King','Blvd','N',NULL,NULL,NULL,NULL,'Coupland',1,1042,NULL,'78615',NULL,1228,30.460373,-97.3935,0,NULL,NULL,59), - (166,196,1,1,0,'184C Pine Blvd SE',184,'C',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Ponce',1,1056,NULL,'00733',NULL,1228,18.019331,-66.619165,0,NULL,NULL,60), - (167,194,1,1,0,'184C Pine Blvd SE',184,'C',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Ponce',1,1056,NULL,'00733',NULL,1228,18.019331,-66.619165,0,NULL,NULL,60), - (168,86,1,0,0,'184C Pine Blvd SE',184,'C',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Ponce',1,1056,NULL,'00733',NULL,1228,18.019331,-66.619165,0,NULL,NULL,60), - (169,163,1,1,0,'184C Pine Blvd SE',184,'C',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Ponce',1,1056,NULL,'00733',NULL,1228,18.019331,-66.619165,0,NULL,NULL,60), - (170,89,1,1,0,'706Z Northpoint Blvd NE',706,'Z',NULL,'Northpoint','Blvd','NE',NULL,NULL,NULL,NULL,'Luray',1,1045,NULL,'22875',NULL,1228,38.665568,-78.466716,0,NULL,NULL,61), - (171,158,1,1,0,'706Z Northpoint Blvd NE',706,'Z',NULL,'Northpoint','Blvd','NE',NULL,NULL,NULL,NULL,'Luray',1,1045,NULL,'22875',NULL,1228,38.665568,-78.466716,0,NULL,NULL,61), - (172,77,1,1,0,'706Z Northpoint Blvd NE',706,'Z',NULL,'Northpoint','Blvd','NE',NULL,NULL,NULL,NULL,'Luray',1,1045,NULL,'22875',NULL,1228,38.665568,-78.466716,0,NULL,NULL,61), - (173,83,1,1,0,'706Z Northpoint Blvd NE',706,'Z',NULL,'Northpoint','Blvd','NE',NULL,NULL,NULL,NULL,'Luray',1,1045,NULL,'22875',NULL,1228,38.665568,-78.466716,0,NULL,NULL,61), - (174,44,1,1,0,'812I Cadell Ln NE',812,'I',NULL,'Cadell','Ln','NE',NULL,NULL,NULL,NULL,'East Hartland',1,1006,NULL,'06027',NULL,1228,42.002345,-72.90922,0,NULL,NULL,62), - (175,85,1,1,0,'812I Cadell Ln NE',812,'I',NULL,'Cadell','Ln','NE',NULL,NULL,NULL,NULL,'East Hartland',1,1006,NULL,'06027',NULL,1228,42.002345,-72.90922,0,NULL,NULL,62), - (176,43,1,1,0,'812I Cadell Ln NE',812,'I',NULL,'Cadell','Ln','NE',NULL,NULL,NULL,NULL,'East Hartland',1,1006,NULL,'06027',NULL,1228,42.002345,-72.90922,0,NULL,NULL,62), - (177,84,1,1,0,'11X States Ln NE',11,'X',NULL,'States','Ln','NE',NULL,NULL,NULL,NULL,'Niotaze',1,1015,NULL,'67355',NULL,1228,37.053112,-96.01065,0,NULL,NULL,NULL), - (178,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL), - (179,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL), - (180,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); + (1,4,1,1,0,'16F Green Dr NE',16,'F',NULL,'Green','Dr','NE',NULL,NULL,NULL,NULL,'Baldwin Place',1,1031,NULL,'10505',NULL,1228,41.33431,-73.749244,0,NULL,NULL,NULL), + (2,200,1,1,0,'63C Jackson Blvd NE',63,'C',NULL,'Jackson','Blvd','NE',NULL,NULL,NULL,NULL,'Norfolk',1,1045,NULL,'23507',NULL,1228,36.864047,-76.29947,0,NULL,NULL,NULL), + (3,195,1,1,0,'119U Northpoint Ave NE',119,'U',NULL,'Northpoint','Ave','NE',NULL,NULL,NULL,NULL,'Reliance',1,1049,NULL,'82943',NULL,1228,41.702635,-109.22044,0,NULL,NULL,NULL), + (4,156,1,1,0,'778D College St NE',778,'D',NULL,'College','St','NE',NULL,NULL,NULL,NULL,'Meadview',1,1002,NULL,'86444',NULL,1228,35.950442,-114.07783,0,NULL,NULL,NULL), + (5,157,1,1,0,'329B Bay Dr SW',329,'B',NULL,'Bay','Dr','SW',NULL,NULL,NULL,NULL,'Hampton',1,1006,NULL,'06247',NULL,1228,41.767929,-72.06127,0,NULL,NULL,NULL), + (6,28,1,1,0,'449P Dowlen Dr W',449,'P',NULL,'Dowlen','Dr','W',NULL,NULL,NULL,NULL,'Homosassa',1,1008,NULL,'34487',NULL,1228,28.859286,-82.508694,0,NULL,NULL,NULL), + (7,13,1,1,0,'217O Cadell Path NW',217,'O',NULL,'Cadell','Path','NW',NULL,NULL,NULL,NULL,'Fort Myers',1,1008,NULL,'33912',NULL,1228,26.501582,-81.82841,0,NULL,NULL,NULL), + (8,191,1,1,0,'664F States Rd E',664,'F',NULL,'States','Rd','E',NULL,NULL,NULL,NULL,'New Buffalo',1,1021,NULL,'49117',NULL,1228,41.784691,-86.75519,0,NULL,NULL,NULL), + (9,7,1,1,0,'215N Maple Rd N',215,'N',NULL,'Maple','Rd','N',NULL,NULL,NULL,NULL,'West Suffield',1,1006,NULL,'06093',NULL,1228,42.019907,-72.73357,0,NULL,NULL,NULL), + (10,30,1,1,0,'495Y El Camino Ave NE',495,'Y',NULL,'El Camino','Ave','NE',NULL,NULL,NULL,NULL,'Mobile',1,1000,NULL,'36605',NULL,1228,30.641191,-88.08222,0,NULL,NULL,NULL), + (11,109,1,1,0,'160B Beech Ln SW',160,'B',NULL,'Beech','Ln','SW',NULL,NULL,NULL,NULL,'Tippo',1,1023,NULL,'38962',NULL,1228,33.90263,-90.16305,0,NULL,NULL,NULL), + (12,98,1,1,0,'368E Bay St W',368,'E',NULL,'Bay','St','W',NULL,NULL,NULL,NULL,'Dodge City',1,1015,NULL,'67801',NULL,1228,37.755267,-100.02632,0,NULL,NULL,NULL), + (13,116,1,1,0,'286F Maple Blvd S',286,'F',NULL,'Maple','Blvd','S',NULL,NULL,NULL,NULL,'Honolulu',1,1010,NULL,'96810',NULL,1228,24.859832,-168.021815,0,NULL,NULL,NULL), + (14,32,1,1,0,'691K Van Ness Dr NE',691,'K',NULL,'Van Ness','Dr','NE',NULL,NULL,NULL,NULL,'Concord',1,1032,NULL,'28026',NULL,1228,35.346285,-80.541088,0,NULL,NULL,NULL), + (15,12,1,1,0,'105H Second Blvd NE',105,'H',NULL,'Second','Blvd','NE',NULL,NULL,NULL,NULL,'Callery',1,1037,NULL,'16024',NULL,1228,40.739587,-80.03721,0,NULL,NULL,NULL), + (16,3,1,1,0,'948A Northpoint Ln NW',948,'A',NULL,'Northpoint','Ln','NW',NULL,NULL,NULL,NULL,'Albany',1,1031,NULL,'12214',NULL,1228,42.614852,-73.970812,0,NULL,NULL,NULL), + (17,73,1,1,0,'48T Main Ave N',48,'T',NULL,'Main','Ave','N',NULL,NULL,NULL,NULL,'Ossineke',1,1021,NULL,'49766',NULL,1228,44.920907,-83.45125,0,NULL,NULL,NULL), + (18,36,1,1,0,'476E Van Ness Ln S',476,'E',NULL,'Van Ness','Ln','S',NULL,NULL,NULL,NULL,'Wartburg',1,1041,NULL,'37887',NULL,1228,36.091018,-84.56863,0,NULL,NULL,NULL), + (19,53,1,1,0,'144P Beech Blvd E',144,'P',NULL,'Beech','Blvd','E',NULL,NULL,NULL,NULL,'Dennison',1,1022,NULL,'55018',NULL,1228,44.422975,-93.00089,0,NULL,NULL,NULL), + (20,83,1,1,0,'52N Maple Dr NW',52,'N',NULL,'Maple','Dr','NW',NULL,NULL,NULL,NULL,'Wheeling',1,1047,NULL,'26003',NULL,1228,40.071472,-80.6868,0,NULL,NULL,NULL), + (21,171,1,1,0,'278N Bay Dr SE',278,'N',NULL,'Bay','Dr','SE',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93771',NULL,1228,36.746375,-119.639658,0,NULL,NULL,NULL), + (22,25,1,1,0,'278W College Pl NW',278,'W',NULL,'College','Pl','NW',NULL,NULL,NULL,NULL,'Manorville',1,1037,NULL,'16238',NULL,1228,40.786362,-79.52164,0,NULL,NULL,NULL), + (23,163,1,1,0,'656I El Camino Blvd S',656,'I',NULL,'El Camino','Blvd','S',NULL,NULL,NULL,NULL,'West Springfield',1,1020,NULL,'01089',NULL,1228,42.112793,-72.64066,0,NULL,NULL,NULL), + (24,8,1,1,0,'541O Van Ness Rd E',541,'O',NULL,'Van Ness','Rd','E',NULL,NULL,NULL,NULL,'Tampa',1,1008,NULL,'33605',NULL,1228,27.963849,-82.43193,0,NULL,NULL,NULL), + (25,23,1,1,0,'502J Pine Ave N',502,'J',NULL,'Pine','Ave','N',NULL,NULL,NULL,NULL,'Scottdale',1,1009,NULL,'30079',NULL,1228,33.791537,-84.25994,0,NULL,NULL,NULL), + (26,38,1,1,0,'962L Maple Path S',962,'L',NULL,'Maple','Path','S',NULL,NULL,NULL,NULL,'Ebro',1,1008,NULL,'32437',NULL,1228,30.443152,-85.88079,0,NULL,NULL,NULL), + (27,55,1,1,0,'105S Dowlen Way N',105,'S',NULL,'Dowlen','Way','N',NULL,NULL,NULL,NULL,'Tularosa',1,1030,NULL,'88352',NULL,1228,33.098649,-106.02058,0,NULL,NULL,NULL), + (28,72,1,1,0,'399J El Camino Way SE',399,'J',NULL,'El Camino','Way','SE',NULL,NULL,NULL,NULL,'Charleston',1,1039,NULL,'29424',NULL,1228,32.783076,-79.93701,0,NULL,NULL,NULL), + (29,18,1,1,0,'507M Main Ln S',507,'M',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Harris',1,1024,NULL,'64645',NULL,1228,40.299574,-93.33273,0,NULL,NULL,NULL), + (30,44,1,1,0,'982Q Van Ness Dr N',982,'Q',NULL,'Van Ness','Dr','N',NULL,NULL,NULL,NULL,'Yellow Springs',1,1034,NULL,'45387',NULL,1228,39.797227,-83.89239,0,NULL,NULL,NULL), + (31,114,1,1,0,'451L El Camino Way NW',451,'L',NULL,'El Camino','Way','NW',NULL,NULL,NULL,NULL,'Kenoza Lake',1,1031,NULL,'12750',NULL,1228,41.729581,-74.961146,0,NULL,NULL,NULL), + (32,15,1,1,0,'228U Van Ness Blvd E',228,'U',NULL,'Van Ness','Blvd','E',NULL,NULL,NULL,NULL,'Amherstdale',1,1047,NULL,'25607',NULL,1228,37.788146,-81.80248,0,NULL,NULL,NULL), + (33,128,1,1,0,'908N Van Ness Rd NW',908,'N',NULL,'Van Ness','Rd','NW',NULL,NULL,NULL,NULL,'The Plains',1,1034,NULL,'45780',NULL,1228,39.370636,-82.13406,0,NULL,NULL,NULL), + (34,70,1,1,0,'71T Green Ln SE',71,'T',NULL,'Green','Ln','SE',NULL,NULL,NULL,NULL,'Bedminster',1,1037,NULL,'18910',NULL,1228,40.328645,-75.10278,0,NULL,NULL,NULL), + (35,24,1,1,0,'961S Dowlen St NW',961,'S',NULL,'Dowlen','St','NW',NULL,NULL,NULL,NULL,'Tahoe Vista',1,1004,NULL,'96148',NULL,1228,39.243877,-120.05437,0,NULL,NULL,NULL), + (36,41,1,1,0,'357D Dowlen Path N',357,'D',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Atlanta',1,1009,NULL,'30301',NULL,1228,33.844371,-84.47405,0,NULL,NULL,NULL), + (37,2,1,1,0,'693U Woodbridge Way SW',693,'U',NULL,'Woodbridge','Way','SW',NULL,NULL,NULL,NULL,'Young America',1,1013,NULL,'46998',NULL,1228,40.569059,-86.34952,0,NULL,NULL,NULL), + (38,10,1,1,0,'777Y Jackson Path NE',777,'Y',NULL,'Jackson','Path','NE',NULL,NULL,NULL,NULL,'Dexter',1,1022,NULL,'55926',NULL,1228,43.731945,-92.70852,0,NULL,NULL,NULL), + (39,133,1,1,0,'342R Cadell Ave SW',342,'R',NULL,'Cadell','Ave','SW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76130',NULL,1228,32.771419,-97.291484,0,NULL,NULL,NULL), + (40,124,1,1,0,'91Z Main Pl NW',91,'Z',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Bearsville',1,1031,NULL,'12409',NULL,1228,42.061841,-74.16063,0,NULL,NULL,NULL), + (41,96,1,1,0,'778P Jackson Ln W',778,'P',NULL,'Jackson','Ln','W',NULL,NULL,NULL,NULL,'Paoli',1,1037,NULL,'19301',NULL,1228,40.042252,-75.48357,0,NULL,NULL,NULL), + (42,184,1,1,0,'311G Lincoln Ave E',311,'G',NULL,'Lincoln','Ave','E',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79920',NULL,1228,31.821439,-106.461405,0,NULL,NULL,NULL), + (43,192,1,1,0,'76H Caulder Dr E',76,'H',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Summerfield',1,1034,NULL,'43788',NULL,1228,39.799978,-81.33548,0,NULL,NULL,NULL), + (44,193,1,1,0,'805K Dowlen Path N',805,'K',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Oil City',1,1037,NULL,'16301',NULL,1228,41.439658,-79.69044,0,NULL,NULL,NULL), + (45,189,1,1,0,'830D Beech Ave W',830,'D',NULL,'Beech','Ave','W',NULL,NULL,NULL,NULL,'Buckeye Lake',1,1034,NULL,'43008',NULL,1228,39.93398,-82.47932,0,NULL,NULL,NULL), + (46,33,1,1,0,'724E College Dr SE',724,'E',NULL,'College','Dr','SE',NULL,NULL,NULL,NULL,'Plano',1,1042,NULL,'75025',NULL,1228,33.086868,-96.74504,0,NULL,NULL,NULL), + (47,66,1,1,0,'30D Green Ave NE',30,'D',NULL,'Green','Ave','NE',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,NULL), + (48,158,1,1,0,'897E Dowlen Blvd E',897,'E',NULL,'Dowlen','Blvd','E',NULL,NULL,NULL,NULL,'Oxbow',1,1018,NULL,'04764',NULL,1228,46.416656,-68.47646,0,NULL,NULL,NULL), + (49,77,1,1,0,'317V States Pl SE',317,'V',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Galt',1,1024,NULL,'64641',NULL,1228,40.165088,-93.39425,0,NULL,NULL,NULL), + (50,34,1,1,0,'973N Caulder Pl SE',973,'N',NULL,'Caulder','Pl','SE',NULL,NULL,NULL,NULL,'Rush Hill',1,1024,NULL,'65280',NULL,1228,39.213975,-91.73545,0,NULL,NULL,NULL), + (51,20,1,1,0,'805Z Pine Dr W',805,'Z',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1009,NULL,'31038',NULL,1228,33.172786,-83.63554,0,NULL,NULL,NULL), + (52,148,1,1,0,'265U Pine Path S',265,'U',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Chuckey',1,1041,NULL,'37641',NULL,1228,36.21503,-82.6744,0,NULL,NULL,NULL), + (53,79,1,1,0,'743U Van Ness Ln SE',743,'U',NULL,'Van Ness','Ln','SE',NULL,NULL,NULL,NULL,'Castaic',1,1004,NULL,'91310',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL), + (54,162,1,1,0,'964E Cadell Ln S',964,'E',NULL,'Cadell','Ln','S',NULL,NULL,NULL,NULL,'Pleasant Ridge',1,1021,NULL,'48069',NULL,1228,42.472235,-83.14051,0,NULL,NULL,NULL), + (55,123,1,1,0,'705O Main Rd E',705,'O',NULL,'Main','Rd','E',NULL,NULL,NULL,NULL,'Yorkville',1,1041,NULL,'38389',NULL,1228,36.135364,-89.111653,0,NULL,NULL,NULL), + (56,37,1,1,0,'508U Cadell Way NE',508,'U',NULL,'Cadell','Way','NE',NULL,NULL,NULL,NULL,'Piney Point',1,1019,NULL,'20674',NULL,1228,38.127843,-76.49055,0,NULL,NULL,NULL), + (57,91,1,1,0,'839I Dowlen Ave N',839,'I',NULL,'Dowlen','Ave','N',NULL,NULL,NULL,NULL,'North Fort Myers',1,1008,NULL,'33918',NULL,1228,26.71613,-81.607007,0,NULL,NULL,NULL), + (58,174,1,1,0,'905C Bay Way SE',905,'C',NULL,'Bay','Way','SE',NULL,NULL,NULL,NULL,'Ashford',1,1046,NULL,'98304',NULL,1228,46.75523,-122.01544,0,NULL,NULL,NULL), + (59,167,3,1,0,'484K Lincoln Rd E',484,'K',NULL,'Lincoln','Rd','E',NULL,'Churchgate',NULL,NULL,'Foster',1,1047,NULL,'25081',NULL,1228,38.092103,-81.75855,0,NULL,NULL,NULL), + (60,7,2,0,0,'484K Lincoln Rd E',484,'K',NULL,'Lincoln','Rd','E',NULL,'Churchgate',NULL,NULL,'Foster',1,1047,NULL,'25081',NULL,1228,38.092103,-81.75855,0,NULL,NULL,59), + (61,95,3,1,0,'361R Bay Ave NE',361,'R',NULL,'Bay','Ave','NE',NULL,'c/o OPDC',NULL,NULL,'Alexander City',1,1000,NULL,'35011',NULL,1228,32.990191,-85.958001,0,NULL,NULL,NULL), + (62,146,3,1,0,'494K Second Blvd W',494,'K',NULL,'Second','Blvd','W',NULL,'c/o PO Plus',NULL,NULL,'Yucca Valley',1,1004,NULL,'92284',NULL,1228,34.161795,-116.41246,0,NULL,NULL,NULL), + (63,195,2,0,0,'494K Second Blvd W',494,'K',NULL,'Second','Blvd','W',NULL,'c/o PO Plus',NULL,NULL,'Yucca Valley',1,1004,NULL,'92284',NULL,1228,34.161795,-116.41246,0,NULL,NULL,62), + (64,78,3,1,0,'460M Green Path E',460,'M',NULL,'Green','Path','E',NULL,'Receiving',NULL,NULL,'Trinity',1,1042,NULL,'75862',NULL,1228,30.94481,-95.33298,0,NULL,NULL,NULL), + (65,13,2,0,0,'460M Green Path E',460,'M',NULL,'Green','Path','E',NULL,'Receiving',NULL,NULL,'Trinity',1,1042,NULL,'75862',NULL,1228,30.94481,-95.33298,0,NULL,NULL,64), + (66,42,3,1,0,'639N Beech Blvd N',639,'N',NULL,'Beech','Blvd','N',NULL,'Editorial Dept',NULL,NULL,'Westport',1,1020,NULL,'02781',NULL,1228,41.522877,-71.069344,0,NULL,NULL,NULL), + (67,39,2,1,0,'639N Beech Blvd N',639,'N',NULL,'Beech','Blvd','N',NULL,'Editorial Dept',NULL,NULL,'Westport',1,1020,NULL,'02781',NULL,1228,41.522877,-71.069344,0,NULL,NULL,66), + (68,169,3,1,0,'127L Second Dr S',127,'L',NULL,'Second','Dr','S',NULL,'c/o OPDC',NULL,NULL,'Snow Shoe',1,1037,NULL,'16874',NULL,1228,41.034029,-77.93356,0,NULL,NULL,NULL), + (69,58,2,1,0,'127L Second Dr S',127,'L',NULL,'Second','Dr','S',NULL,'c/o OPDC',NULL,NULL,'Snow Shoe',1,1037,NULL,'16874',NULL,1228,41.034029,-77.93356,0,NULL,NULL,68), + (70,81,3,1,0,'976N El Camino Ave NW',976,'N',NULL,'El Camino','Ave','NW',NULL,'Community Relations',NULL,NULL,'Altura',1,1022,NULL,'55910',NULL,1228,44.128262,-91.95965,0,NULL,NULL,NULL), + (71,44,2,0,0,'976N El Camino Ave NW',976,'N',NULL,'El Camino','Ave','NW',NULL,'Community Relations',NULL,NULL,'Altura',1,1022,NULL,'55910',NULL,1228,44.128262,-91.95965,0,NULL,NULL,70), + (72,166,3,1,0,'534I Lincoln Pl SW',534,'I',NULL,'Lincoln','Pl','SW',NULL,'Receiving',NULL,NULL,'Arlington',1,1045,NULL,'22218',NULL,1228,38.880811,-77.11295,0,NULL,NULL,NULL), + (73,50,2,1,0,'534I Lincoln Pl SW',534,'I',NULL,'Lincoln','Pl','SW',NULL,'Receiving',NULL,NULL,'Arlington',1,1045,NULL,'22218',NULL,1228,38.880811,-77.11295,0,NULL,NULL,72), + (74,134,3,1,0,'827N Beech Blvd SE',827,'N',NULL,'Beech','Blvd','SE',NULL,'Editorial Dept',NULL,NULL,'Quaker Hill',1,1006,NULL,'06375',NULL,1228,41.401398,-72.11444,0,NULL,NULL,NULL), + (75,141,3,1,0,'48C States Way E',48,'C',NULL,'States','Way','E',NULL,'Mailstop 101',NULL,NULL,'Knoxville',1,1041,NULL,'37919',NULL,1228,35.922881,-84.00384,0,NULL,NULL,NULL), + (76,56,2,1,0,'48C States Way E',48,'C',NULL,'States','Way','E',NULL,'Mailstop 101',NULL,NULL,'Knoxville',1,1041,NULL,'37919',NULL,1228,35.922881,-84.00384,0,NULL,NULL,75), + (77,86,3,1,0,'764N Green Path S',764,'N',NULL,'Green','Path','S',NULL,'Disbursements',NULL,NULL,'Jackson',1,1025,NULL,'59736',NULL,1228,45.26938,-113.35533,0,NULL,NULL,NULL), + (78,110,2,1,0,'764N Green Path S',764,'N',NULL,'Green','Path','S',NULL,'Disbursements',NULL,NULL,'Jackson',1,1025,NULL,'59736',NULL,1228,45.26938,-113.35533,0,NULL,NULL,77), + (79,125,3,1,0,'812H Beech St E',812,'H',NULL,'Beech','St','E',NULL,'Donor Relations',NULL,NULL,'Locust Hill',1,1045,NULL,'23092',NULL,1228,37.593059,-76.50694,0,NULL,NULL,NULL), + (80,17,2,1,0,'812H Beech St E',812,'H',NULL,'Beech','St','E',NULL,'Donor Relations',NULL,NULL,'Locust Hill',1,1045,NULL,'23092',NULL,1228,37.593059,-76.50694,0,NULL,NULL,79), + (81,68,3,1,0,'748X Northpoint Way N',748,'X',NULL,'Northpoint','Way','N',NULL,'Community Relations',NULL,NULL,'Lenapah',1,1035,NULL,'74042',NULL,1228,36.857305,-95.61423,0,NULL,NULL,NULL), + (82,26,2,1,0,'748X Northpoint Way N',748,'X',NULL,'Northpoint','Way','N',NULL,'Community Relations',NULL,NULL,'Lenapah',1,1035,NULL,'74042',NULL,1228,36.857305,-95.61423,0,NULL,NULL,81), + (83,173,3,1,0,'739P Jackson Path S',739,'P',NULL,'Jackson','Path','S',NULL,'Attn: Development',NULL,NULL,'Miccosukee Cpo',1,1008,NULL,'32309',NULL,1228,30.514599,-84.188446,0,NULL,NULL,NULL), + (84,100,3,1,0,'143M Caulder Ln N',143,'M',NULL,'Caulder','Ln','N',NULL,'Payables Dept.',NULL,NULL,'Anahola',1,1010,NULL,'96703',NULL,1228,22.148133,-159.31765,0,NULL,NULL,NULL), + (85,35,2,1,0,'143M Caulder Ln N',143,'M',NULL,'Caulder','Ln','N',NULL,'Payables Dept.',NULL,NULL,'Anahola',1,1010,NULL,'96703',NULL,1228,22.148133,-159.31765,0,NULL,NULL,84), + (86,14,3,1,0,'614H Green St SE',614,'H',NULL,'Green','St','SE',NULL,'Disbursements',NULL,NULL,'Seattle',1,1046,NULL,'98122',NULL,1228,47.61157,-122.30406,0,NULL,NULL,NULL), + (87,62,2,1,0,'614H Green St SE',614,'H',NULL,'Green','St','SE',NULL,'Disbursements',NULL,NULL,'Seattle',1,1046,NULL,'98122',NULL,1228,47.61157,-122.30406,0,NULL,NULL,86), + (88,87,3,1,0,'252T Dowlen Path S',252,'T',NULL,'Dowlen','Path','S',NULL,'Disbursements',NULL,NULL,'Boise',1,1011,NULL,'83799',NULL,1228,43.459855,-116.243984,0,NULL,NULL,NULL), + (89,151,2,1,0,'252T Dowlen Path S',252,'T',NULL,'Dowlen','Path','S',NULL,'Disbursements',NULL,NULL,'Boise',1,1011,NULL,'83799',NULL,1228,43.459855,-116.243984,0,NULL,NULL,88), + (90,129,3,1,0,'147C Caulder Blvd N',147,'C',NULL,'Caulder','Blvd','N',NULL,'Cuffe Parade',NULL,NULL,'Dillwyn',1,1045,NULL,'23936',NULL,1228,37.529284,-78.49082,0,NULL,NULL,NULL), + (91,67,2,1,0,'147C Caulder Blvd N',147,'C',NULL,'Caulder','Blvd','N',NULL,'Cuffe Parade',NULL,NULL,'Dillwyn',1,1045,NULL,'23936',NULL,1228,37.529284,-78.49082,0,NULL,NULL,90), + (92,182,3,1,0,'766W Woodbridge Pl SE',766,'W',NULL,'Woodbridge','Pl','SE',NULL,'Urgent',NULL,NULL,'Kennewick',1,1046,NULL,'99536',NULL,1228,46.216706,-119.160173,0,NULL,NULL,NULL), + (93,113,2,1,0,'766W Woodbridge Pl SE',766,'W',NULL,'Woodbridge','Pl','SE',NULL,'Urgent',NULL,NULL,'Kennewick',1,1046,NULL,'99536',NULL,1228,46.216706,-119.160173,0,NULL,NULL,92), + (94,102,3,1,0,'875Y Beech Dr W',875,'Y',NULL,'Beech','Dr','W',NULL,'Attn: Development',NULL,NULL,'Southern Pines',1,1032,NULL,'28387',NULL,1228,35.180394,-79.39084,0,NULL,NULL,NULL), + (95,120,1,1,0,'342R Cadell Ave SW',342,'R',NULL,'Cadell','Ave','SW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76130',NULL,1228,32.771419,-97.291484,0,NULL,NULL,39), + (96,135,1,1,0,'342R Cadell Ave SW',342,'R',NULL,'Cadell','Ave','SW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76130',NULL,1228,32.771419,-97.291484,0,NULL,NULL,39), + (97,80,1,1,0,'342R Cadell Ave SW',342,'R',NULL,'Cadell','Ave','SW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76130',NULL,1228,32.771419,-97.291484,0,NULL,NULL,39), + (98,10,1,0,0,'342R Cadell Ave SW',342,'R',NULL,'Cadell','Ave','SW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76130',NULL,1228,32.771419,-97.291484,0,NULL,NULL,39), + (99,62,1,0,0,'91Z Main Pl NW',91,'Z',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Bearsville',1,1031,NULL,'12409',NULL,1228,42.061841,-74.16063,0,NULL,NULL,40), + (100,118,1,1,0,'91Z Main Pl NW',91,'Z',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Bearsville',1,1031,NULL,'12409',NULL,1228,42.061841,-74.16063,0,NULL,NULL,40), + (101,75,1,1,0,'91Z Main Pl NW',91,'Z',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Bearsville',1,1031,NULL,'12409',NULL,1228,42.061841,-74.16063,0,NULL,NULL,40), + (102,154,1,1,0,'640J Woodbridge Way E',640,'J',NULL,'Woodbridge','Way','E',NULL,NULL,NULL,NULL,'Roanoke',1,1045,NULL,'24018',NULL,1228,37.229786,-80.02477,0,NULL,NULL,NULL), + (103,126,1,1,0,'778P Jackson Ln W',778,'P',NULL,'Jackson','Ln','W',NULL,NULL,NULL,NULL,'Paoli',1,1037,NULL,'19301',NULL,1228,40.042252,-75.48357,0,NULL,NULL,41), + (104,127,1,1,0,'778P Jackson Ln W',778,'P',NULL,'Jackson','Ln','W',NULL,NULL,NULL,NULL,'Paoli',1,1037,NULL,'19301',NULL,1228,40.042252,-75.48357,0,NULL,NULL,41), + (105,65,1,1,0,'778P Jackson Ln W',778,'P',NULL,'Jackson','Ln','W',NULL,NULL,NULL,NULL,'Paoli',1,1037,NULL,'19301',NULL,1228,40.042252,-75.48357,0,NULL,NULL,41), + (106,76,1,1,0,'267O Beech Rd NE',267,'O',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Austin',1,1042,NULL,'78765',NULL,1228,30.326374,-97.771258,0,NULL,NULL,NULL), + (107,115,1,1,0,'311G Lincoln Ave E',311,'G',NULL,'Lincoln','Ave','E',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79920',NULL,1228,31.821439,-106.461405,0,NULL,NULL,42), + (108,110,1,0,0,'311G Lincoln Ave E',311,'G',NULL,'Lincoln','Ave','E',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79920',NULL,1228,31.821439,-106.461405,0,NULL,NULL,42), + (109,74,1,1,0,'311G Lincoln Ave E',311,'G',NULL,'Lincoln','Ave','E',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79920',NULL,1228,31.821439,-106.461405,0,NULL,NULL,42), + (110,51,1,1,0,'539X Caulder Way N',539,'X',NULL,'Caulder','Way','N',NULL,NULL,NULL,NULL,'Billings',1,1035,NULL,'74630',NULL,1228,36.52791,-97.43304,0,NULL,NULL,NULL), + (111,143,1,1,0,'76H Caulder Dr E',76,'H',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Summerfield',1,1034,NULL,'43788',NULL,1228,39.799978,-81.33548,0,NULL,NULL,43), + (112,170,1,1,0,'76H Caulder Dr E',76,'H',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Summerfield',1,1034,NULL,'43788',NULL,1228,39.799978,-81.33548,0,NULL,NULL,43), + (113,50,1,0,0,'76H Caulder Dr E',76,'H',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Summerfield',1,1034,NULL,'43788',NULL,1228,39.799978,-81.33548,0,NULL,NULL,43), + (114,71,1,1,0,'76H Caulder Dr E',76,'H',NULL,'Caulder','Dr','E',NULL,NULL,NULL,NULL,'Summerfield',1,1034,NULL,'43788',NULL,1228,39.799978,-81.33548,0,NULL,NULL,43), + (115,60,1,1,0,'805K Dowlen Path N',805,'K',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Oil City',1,1037,NULL,'16301',NULL,1228,41.439658,-79.69044,0,NULL,NULL,44), + (116,64,1,1,0,'805K Dowlen Path N',805,'K',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Oil City',1,1037,NULL,'16301',NULL,1228,41.439658,-79.69044,0,NULL,NULL,44), + (117,186,1,1,0,'805K Dowlen Path N',805,'K',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Oil City',1,1037,NULL,'16301',NULL,1228,41.439658,-79.69044,0,NULL,NULL,44), + (118,97,1,1,0,'805K Dowlen Path N',805,'K',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Oil City',1,1037,NULL,'16301',NULL,1228,41.439658,-79.69044,0,NULL,NULL,44), + (119,185,1,1,0,'830D Beech Ave W',830,'D',NULL,'Beech','Ave','W',NULL,NULL,NULL,NULL,'Buckeye Lake',1,1034,NULL,'43008',NULL,1228,39.93398,-82.47932,0,NULL,NULL,45), + (120,5,1,1,0,'830D Beech Ave W',830,'D',NULL,'Beech','Ave','W',NULL,NULL,NULL,NULL,'Buckeye Lake',1,1034,NULL,'43008',NULL,1228,39.93398,-82.47932,0,NULL,NULL,45), + (121,180,1,1,0,'830D Beech Ave W',830,'D',NULL,'Beech','Ave','W',NULL,NULL,NULL,NULL,'Buckeye Lake',1,1034,NULL,'43008',NULL,1228,39.93398,-82.47932,0,NULL,NULL,45), + (122,150,1,1,0,'830D Beech Ave W',830,'D',NULL,'Beech','Ave','W',NULL,NULL,NULL,NULL,'Buckeye Lake',1,1034,NULL,'43008',NULL,1228,39.93398,-82.47932,0,NULL,NULL,45), + (123,113,1,0,0,'724E College Dr SE',724,'E',NULL,'College','Dr','SE',NULL,NULL,NULL,NULL,'Plano',1,1042,NULL,'75025',NULL,1228,33.086868,-96.74504,0,NULL,NULL,46), + (124,147,1,1,0,'724E College Dr SE',724,'E',NULL,'College','Dr','SE',NULL,NULL,NULL,NULL,'Plano',1,1042,NULL,'75025',NULL,1228,33.086868,-96.74504,0,NULL,NULL,46), + (125,17,1,0,0,'724E College Dr SE',724,'E',NULL,'College','Dr','SE',NULL,NULL,NULL,NULL,'Plano',1,1042,NULL,'75025',NULL,1228,33.086868,-96.74504,0,NULL,NULL,46), + (126,201,1,1,0,'724E College Dr SE',724,'E',NULL,'College','Dr','SE',NULL,NULL,NULL,NULL,'Plano',1,1042,NULL,'75025',NULL,1228,33.086868,-96.74504,0,NULL,NULL,46), + (127,119,1,1,0,'30D Green Ave NE',30,'D',NULL,'Green','Ave','NE',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,47), + (128,56,1,0,0,'30D Green Ave NE',30,'D',NULL,'Green','Ave','NE',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,47), + (129,19,1,1,0,'30D Green Ave NE',30,'D',NULL,'Green','Ave','NE',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,47), + (130,9,1,1,0,'30D Green Ave NE',30,'D',NULL,'Green','Ave','NE',NULL,NULL,NULL,NULL,'Winston Salem',1,1032,NULL,'27150',NULL,1228,36.027482,-80.20728,0,NULL,NULL,47), + (131,52,1,1,0,'897E Dowlen Blvd E',897,'E',NULL,'Dowlen','Blvd','E',NULL,NULL,NULL,NULL,'Oxbow',1,1018,NULL,'04764',NULL,1228,46.416656,-68.47646,0,NULL,NULL,48), + (132,40,1,1,0,'897E Dowlen Blvd E',897,'E',NULL,'Dowlen','Blvd','E',NULL,NULL,NULL,NULL,'Oxbow',1,1018,NULL,'04764',NULL,1228,46.416656,-68.47646,0,NULL,NULL,48), + (133,84,1,1,0,'897E Dowlen Blvd E',897,'E',NULL,'Dowlen','Blvd','E',NULL,NULL,NULL,NULL,'Oxbow',1,1018,NULL,'04764',NULL,1228,46.416656,-68.47646,0,NULL,NULL,48), + (134,178,1,1,0,'897E Dowlen Blvd E',897,'E',NULL,'Dowlen','Blvd','E',NULL,NULL,NULL,NULL,'Oxbow',1,1018,NULL,'04764',NULL,1228,46.416656,-68.47646,0,NULL,NULL,48), + (135,140,1,1,0,'317V States Pl SE',317,'V',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Galt',1,1024,NULL,'64641',NULL,1228,40.165088,-93.39425,0,NULL,NULL,49), + (136,82,1,1,0,'317V States Pl SE',317,'V',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Galt',1,1024,NULL,'64641',NULL,1228,40.165088,-93.39425,0,NULL,NULL,49), + (137,131,1,1,0,'317V States Pl SE',317,'V',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Galt',1,1024,NULL,'64641',NULL,1228,40.165088,-93.39425,0,NULL,NULL,49), + (138,117,1,1,0,'317V States Pl SE',317,'V',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Galt',1,1024,NULL,'64641',NULL,1228,40.165088,-93.39425,0,NULL,NULL,49), + (139,181,1,1,0,'973N Caulder Pl SE',973,'N',NULL,'Caulder','Pl','SE',NULL,NULL,NULL,NULL,'Rush Hill',1,1024,NULL,'65280',NULL,1228,39.213975,-91.73545,0,NULL,NULL,50), + (140,21,1,1,0,'973N Caulder Pl SE',973,'N',NULL,'Caulder','Pl','SE',NULL,NULL,NULL,NULL,'Rush Hill',1,1024,NULL,'65280',NULL,1228,39.213975,-91.73545,0,NULL,NULL,50), + (141,155,1,1,0,'973N Caulder Pl SE',973,'N',NULL,'Caulder','Pl','SE',NULL,NULL,NULL,NULL,'Rush Hill',1,1024,NULL,'65280',NULL,1228,39.213975,-91.73545,0,NULL,NULL,50), + (142,89,1,1,0,'973N Caulder Pl SE',973,'N',NULL,'Caulder','Pl','SE',NULL,NULL,NULL,NULL,'Rush Hill',1,1024,NULL,'65280',NULL,1228,39.213975,-91.73545,0,NULL,NULL,50), + (143,11,1,1,0,'805Z Pine Dr W',805,'Z',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1009,NULL,'31038',NULL,1228,33.172786,-83.63554,0,NULL,NULL,51), + (144,29,1,1,0,'805Z Pine Dr W',805,'Z',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1009,NULL,'31038',NULL,1228,33.172786,-83.63554,0,NULL,NULL,51), + (145,187,1,1,0,'805Z Pine Dr W',805,'Z',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1009,NULL,'31038',NULL,1228,33.172786,-83.63554,0,NULL,NULL,51), + (146,164,1,1,0,'805Z Pine Dr W',805,'Z',NULL,'Pine','Dr','W',NULL,NULL,NULL,NULL,'Hillsboro',1,1009,NULL,'31038',NULL,1228,33.172786,-83.63554,0,NULL,NULL,51), + (147,112,1,1,0,'265U Pine Path S',265,'U',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Chuckey',1,1041,NULL,'37641',NULL,1228,36.21503,-82.6744,0,NULL,NULL,52), + (148,198,1,1,0,'265U Pine Path S',265,'U',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Chuckey',1,1041,NULL,'37641',NULL,1228,36.21503,-82.6744,0,NULL,NULL,52), + (149,16,1,1,0,'265U Pine Path S',265,'U',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Chuckey',1,1041,NULL,'37641',NULL,1228,36.21503,-82.6744,0,NULL,NULL,52), + (150,176,1,1,0,'265U Pine Path S',265,'U',NULL,'Pine','Path','S',NULL,NULL,NULL,NULL,'Chuckey',1,1041,NULL,'37641',NULL,1228,36.21503,-82.6744,0,NULL,NULL,52), + (151,153,1,1,0,'743U Van Ness Ln SE',743,'U',NULL,'Van Ness','Ln','SE',NULL,NULL,NULL,NULL,'Castaic',1,1004,NULL,'91310',NULL,1228,33.786594,-118.298662,0,NULL,NULL,53), + (152,151,1,0,0,'743U Van Ness Ln SE',743,'U',NULL,'Van Ness','Ln','SE',NULL,NULL,NULL,NULL,'Castaic',1,1004,NULL,'91310',NULL,1228,33.786594,-118.298662,0,NULL,NULL,53), + (153,106,1,1,0,'743U Van Ness Ln SE',743,'U',NULL,'Van Ness','Ln','SE',NULL,NULL,NULL,NULL,'Castaic',1,1004,NULL,'91310',NULL,1228,33.786594,-118.298662,0,NULL,NULL,53), + (154,196,1,1,0,'743U Van Ness Ln SE',743,'U',NULL,'Van Ness','Ln','SE',NULL,NULL,NULL,NULL,'Castaic',1,1004,NULL,'91310',NULL,1228,33.786594,-118.298662,0,NULL,NULL,53), + (155,137,1,1,0,'964E Cadell Ln S',964,'E',NULL,'Cadell','Ln','S',NULL,NULL,NULL,NULL,'Pleasant Ridge',1,1021,NULL,'48069',NULL,1228,42.472235,-83.14051,0,NULL,NULL,54), + (156,145,1,1,0,'964E Cadell Ln S',964,'E',NULL,'Cadell','Ln','S',NULL,NULL,NULL,NULL,'Pleasant Ridge',1,1021,NULL,'48069',NULL,1228,42.472235,-83.14051,0,NULL,NULL,54), + (157,59,1,1,0,'964E Cadell Ln S',964,'E',NULL,'Cadell','Ln','S',NULL,NULL,NULL,NULL,'Pleasant Ridge',1,1021,NULL,'48069',NULL,1228,42.472235,-83.14051,0,NULL,NULL,54), + (158,45,1,1,0,'959L Main Dr SE',959,'L',NULL,'Main','Dr','SE',NULL,NULL,NULL,NULL,'San Antonio',1,1042,NULL,'78278',NULL,1228,29.437532,-98.461582,0,NULL,NULL,NULL), + (159,35,1,0,0,'705O Main Rd E',705,'O',NULL,'Main','Rd','E',NULL,NULL,NULL,NULL,'Yorkville',1,1041,NULL,'38389',NULL,1228,36.135364,-89.111653,0,NULL,NULL,55), + (160,92,1,1,0,'705O Main Rd E',705,'O',NULL,'Main','Rd','E',NULL,NULL,NULL,NULL,'Yorkville',1,1041,NULL,'38389',NULL,1228,36.135364,-89.111653,0,NULL,NULL,55), + (161,161,1,1,0,'705O Main Rd E',705,'O',NULL,'Main','Rd','E',NULL,NULL,NULL,NULL,'Yorkville',1,1041,NULL,'38389',NULL,1228,36.135364,-89.111653,0,NULL,NULL,55), + (162,183,1,1,0,'705O Main Rd E',705,'O',NULL,'Main','Rd','E',NULL,NULL,NULL,NULL,'Yorkville',1,1041,NULL,'38389',NULL,1228,36.135364,-89.111653,0,NULL,NULL,55), + (163,168,1,1,0,'508U Cadell Way NE',508,'U',NULL,'Cadell','Way','NE',NULL,NULL,NULL,NULL,'Piney Point',1,1019,NULL,'20674',NULL,1228,38.127843,-76.49055,0,NULL,NULL,56), + (164,90,1,1,0,'508U Cadell Way NE',508,'U',NULL,'Cadell','Way','NE',NULL,NULL,NULL,NULL,'Piney Point',1,1019,NULL,'20674',NULL,1228,38.127843,-76.49055,0,NULL,NULL,56), + (165,101,1,1,0,'508U Cadell Way NE',508,'U',NULL,'Cadell','Way','NE',NULL,NULL,NULL,NULL,'Piney Point',1,1019,NULL,'20674',NULL,1228,38.127843,-76.49055,0,NULL,NULL,56), + (166,160,1,1,0,'962N Cadell Ave E',962,'N',NULL,'Cadell','Ave','E',NULL,NULL,NULL,NULL,'Gunter',1,1042,NULL,'75058',NULL,1228,33.453628,-96.73436,0,NULL,NULL,NULL), + (167,22,1,1,0,'839I Dowlen Ave N',839,'I',NULL,'Dowlen','Ave','N',NULL,NULL,NULL,NULL,'North Fort Myers',1,1008,NULL,'33918',NULL,1228,26.71613,-81.607007,0,NULL,NULL,57), + (168,177,1,1,0,'839I Dowlen Ave N',839,'I',NULL,'Dowlen','Ave','N',NULL,NULL,NULL,NULL,'North Fort Myers',1,1008,NULL,'33918',NULL,1228,26.71613,-81.607007,0,NULL,NULL,57), + (169,31,1,1,0,'839I Dowlen Ave N',839,'I',NULL,'Dowlen','Ave','N',NULL,NULL,NULL,NULL,'North Fort Myers',1,1008,NULL,'33918',NULL,1228,26.71613,-81.607007,0,NULL,NULL,57), + (170,46,1,1,0,'341W Dowlen Way SW',341,'W',NULL,'Dowlen','Way','SW',NULL,NULL,NULL,NULL,'Hanover',1,1045,NULL,'23069',NULL,1228,37.753904,-77.33963,0,NULL,NULL,NULL), + (171,197,1,1,0,'905C Bay Way SE',905,'C',NULL,'Bay','Way','SE',NULL,NULL,NULL,NULL,'Ashford',1,1046,NULL,'98304',NULL,1228,46.75523,-122.01544,0,NULL,NULL,58), + (172,144,1,1,0,'905C Bay Way SE',905,'C',NULL,'Bay','Way','SE',NULL,NULL,NULL,NULL,'Ashford',1,1046,NULL,'98304',NULL,1228,46.75523,-122.01544,0,NULL,NULL,58), + (173,159,1,1,0,'905C Bay Way SE',905,'C',NULL,'Bay','Way','SE',NULL,NULL,NULL,NULL,'Ashford',1,1046,NULL,'98304',NULL,1228,46.75523,-122.01544,0,NULL,NULL,58), + (174,93,1,1,0,'905C Bay Way SE',905,'C',NULL,'Bay','Way','SE',NULL,NULL,NULL,NULL,'Ashford',1,1046,NULL,'98304',NULL,1228,46.75523,-122.01544,0,NULL,NULL,58), + (175,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL), + (176,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL), + (177,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_address` ENABLE KEYS */; UNLOCK TABLES; @@ -1893,207 +1896,207 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact` WRITE; /*!40000 ALTER TABLE `civicrm_contact` DISABLE KEYS */; INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES - (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-07-26 14:08:31'), - (2,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'DÃaz, Santina','Santina DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','3076461979',NULL,'Sample Data','Santina','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina DÃaz',NULL,1,'1971-02-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Rolando','Rolando Müller III',NULL,NULL,NULL,'2',NULL,'Both','2804310363',NULL,'Sample Data','Rolando','C','Müller',NULL,4,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Müller III',NULL,2,'1970-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (4,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Rebekah','Rebekah Patel',NULL,NULL,NULL,NULL,NULL,'Both','218502217',NULL,'Sample Data','Rebekah','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Patel',NULL,1,'1974-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Olsen, Brent','Brent Wagner-Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3671570293',NULL,'Sample Data','Brent','G','Wagner-Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Wagner-Olsen',NULL,2,'2002-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Brittney','Brittney Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3852362968',NULL,'Sample Data','Brittney','N','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Cruz',NULL,1,'1943-06-16',1,NULL,NULL,NULL,'Urban Legal Center',NULL,NULL,167,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (7,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,NULL,NULL,'Both','1144797465',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller family',5,NULL,'Dear Müller family',2,NULL,'Müller family',NULL,NULL,NULL,0,NULL,'Müller family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (8,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Lee family','Lee family',NULL,NULL,NULL,NULL,NULL,'Both','845831176',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Lee family',5,NULL,'Dear Lee family',2,NULL,'Lee family',NULL,NULL,NULL,0,NULL,'Lee family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (9,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Parker family','Parker family',NULL,NULL,NULL,'3',NULL,'Both','425242179',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker family',5,NULL,'Dear Parker family',2,NULL,'Parker family',NULL,NULL,NULL,0,NULL,'Parker family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Megan','Megan Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3426769371',NULL,'Sample Data','Megan','J','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Jensen',NULL,1,'1951-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Sherman','Sherman Roberts',NULL,NULL,NULL,NULL,NULL,'Both','1027715448',NULL,'Sample Data','Sherman','N','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Roberts',NULL,NULL,'1947-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (12,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Angelika','Dr. Angelika Müller',NULL,NULL,NULL,NULL,NULL,'Both','420537853',NULL,'Sample Data','Angelika','T','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Dr. Angelika Müller',NULL,1,'1966-07-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (13,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Iris','Iris Roberts',NULL,NULL,NULL,'1',NULL,'Both','1428740139',NULL,'Sample Data','Iris','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (14,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Jacob','Jacob Müller',NULL,NULL,NULL,'3',NULL,'Both','176489544',NULL,'Sample Data','Jacob','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Müller',NULL,2,'2001-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (15,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner family','Wagner family',NULL,NULL,NULL,NULL,NULL,'Both','1570966486',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner family',5,NULL,'Dear Wagner family',2,NULL,'Wagner family',NULL,NULL,NULL,0,NULL,'Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (16,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Müller, Allan','Allan Müller',NULL,NULL,NULL,'5',NULL,'Both','324455196',NULL,'Sample Data','Allan','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Müller',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (17,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ct.wilson@fakemail.biz','ct.wilson@fakemail.biz',NULL,NULL,NULL,'2',NULL,'Both','1210566056',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear ct.wilson@fakemail.biz',1,NULL,'Dear ct.wilson@fakemail.biz',1,NULL,'ct.wilson@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (18,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Betty','Dr. Betty Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3826692336',NULL,'Sample Data','Betty','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Dr. Betty Jensen',NULL,NULL,'2000-02-02',0,NULL,NULL,NULL,'El Camino Family Alliance',NULL,NULL,110,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (19,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Landon','Landon Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2517566731',NULL,'Sample Data','Landon','R','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Wagner',NULL,NULL,'1937-09-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Princess','Ms. Princess Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1925726838',NULL,'Sample Data','Princess','','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Ms. Princess Deforest',NULL,1,'1981-02-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (21,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Beula','Ms. Beula Jensen',NULL,NULL,NULL,'2',NULL,'Both','1956895432',NULL,'Sample Data','Beula','I','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Ms. Beula Jensen',NULL,1,'1976-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (22,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Kandace','Kandace Adams',NULL,NULL,NULL,NULL,NULL,'Both','1187139850',NULL,'Sample Data','Kandace','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Adams',NULL,1,'2009-06-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Scott','Mr. Scott Reynolds Sr.',NULL,NULL,NULL,NULL,NULL,'Both','674660419',NULL,'Sample Data','Scott','','Reynolds',3,2,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Mr. Scott Reynolds Sr.',NULL,2,'1998-08-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Elbert','Elbert Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3751423670',NULL,'Sample Data','Elbert','S','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Nielsen',NULL,NULL,'1954-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Norris','Mr. Norris Terrell',NULL,NULL,NULL,NULL,NULL,'Both','1035663398',NULL,'Sample Data','Norris','','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Mr. Norris Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (26,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen family','Jensen family',NULL,NULL,NULL,NULL,NULL,'Both','797435572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen family',5,NULL,'Dear Jensen family',2,NULL,'Jensen family',NULL,NULL,NULL,0,NULL,'Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Jackson','Mr. Jackson Yadav',NULL,NULL,NULL,NULL,NULL,'Both','1490538521',NULL,'Sample Data','Jackson','','Yadav',3,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Mr. Jackson Yadav',NULL,2,'1967-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (28,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Yadav family','ÅÄ…chowski-Yadav family',NULL,NULL,NULL,NULL,NULL,'Both','3479662396',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski-Yadav family',5,NULL,'Dear ÅÄ…chowski-Yadav family',2,NULL,'ÅÄ…chowski-Yadav family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski-Yadav family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (29,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Adams family','Adams family',NULL,NULL,NULL,NULL,NULL,'Both','1515323104',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams family',5,NULL,'Dear Adams family',2,NULL,'Adams family',NULL,NULL,NULL,0,NULL,'Adams family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (30,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'jacobs.erik34@lol.info','jacobs.erik34@lol.info',NULL,NULL,NULL,'5',NULL,'Both','2122755995',NULL,'Sample Data',NULL,NULL,NULL,4,4,NULL,NULL,1,NULL,'Dear jacobs.erik34@lol.info',1,NULL,'Dear jacobs.erik34@lol.info',1,NULL,'jacobs.erik34@lol.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (31,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Idaho Wellness Collective','Idaho Wellness Collective',NULL,NULL,NULL,NULL,NULL,'Both','2125875626',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Idaho Wellness Collective',NULL,NULL,NULL,0,NULL,NULL,116,'Idaho Wellness Collective',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bnielsen17@infomail.net','bnielsen17@infomail.net',NULL,NULL,NULL,NULL,NULL,'Both','1278613659',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bnielsen17@infomail.net',1,NULL,'Dear bnielsen17@infomail.net',1,NULL,'bnielsen17@infomail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (33,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Sanford','Sanford Smith',NULL,NULL,NULL,NULL,NULL,'Both','2584375586',NULL,'Sample Data','Sanford','G','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Smith',NULL,2,'1936-05-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (34,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Rural Sustainability Collective','Rural Sustainability Collective',NULL,NULL,NULL,'5',NULL,'Both','2757306759',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Sustainability Collective',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Sustainability Collective',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Jed','Jed Jensen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3204161808',NULL,'Sample Data','Jed','T','Jensen',NULL,1,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Jensen Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (36,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,'1',NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (37,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Sanford','Sanford Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','2540808507',NULL,'Sample Data','Sanford','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Nielsen',NULL,2,'1961-12-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Clint','Dr. Clint Wagner III',NULL,NULL,NULL,'2',NULL,'Both','205032941',NULL,'Sample Data','Clint','Z','Wagner',4,4,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Dr. Clint Wagner III',NULL,NULL,'1974-11-04',0,NULL,NULL,NULL,'Sierra Sustainability Systems',NULL,NULL,97,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Sherman','Sherman Zope III',NULL,NULL,NULL,NULL,NULL,'Both','3265645175',NULL,'Sample Data','Sherman','N','Zope',NULL,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Zope III',NULL,2,'1957-06-23',0,NULL,NULL,NULL,'Jackson Education Association',NULL,NULL,188,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (40,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Sharyn','Sharyn Samuels',NULL,NULL,NULL,'5',NULL,'Both','1300309067',NULL,'Sample Data','Sharyn','E','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Samuels',NULL,NULL,'1983-08-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Margaret','Ms. Margaret Jensen',NULL,NULL,NULL,'1',NULL,'Both','198729910',NULL,'Sample Data','Margaret','A','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Ms. Margaret Jensen',NULL,1,'1957-12-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (42,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Oklahoma Legal Systems','Oklahoma Legal Systems',NULL,NULL,NULL,NULL,NULL,'Both','543319240',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Oklahoma Legal Systems',NULL,NULL,NULL,0,NULL,NULL,NULL,'Oklahoma Legal Systems',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'brigettesmith-grant-adams@testing.com','brigettesmith-grant-adams@testing.com',NULL,NULL,NULL,'5',NULL,'Both','846941203',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear brigettesmith-grant-adams@testing.com',1,NULL,'Dear brigettesmith-grant-adams@testing.com',1,NULL,'brigettesmith-grant-adams@testing.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Shauna','Shauna Adams',NULL,NULL,NULL,NULL,NULL,'Both','1778468249',NULL,'Sample Data','Shauna','Y','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Adams',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Laree','Laree Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','1293450074',NULL,'Sample Data','Laree','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Reynolds',NULL,1,'2006-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (46,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Reynolds, Miguel','Dr. Miguel Reynolds II',NULL,NULL,NULL,'4',NULL,'Both','2637758166',NULL,'Sample Data','Miguel','','Reynolds',4,3,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Dr. Miguel Reynolds II',NULL,NULL,'1981-03-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (47,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Rosario','Rosario Terry',NULL,NULL,NULL,NULL,NULL,'Both','1264009879',NULL,'Sample Data','Rosario','T','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Terry',NULL,NULL,'1973-02-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (48,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson family','Robertson family',NULL,NULL,NULL,NULL,NULL,'Both','3444393980',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Robertson family',5,NULL,'Dear Robertson family',2,NULL,'Robertson family',NULL,NULL,NULL,0,NULL,'Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Kiara','Kiara Jameson',NULL,NULL,NULL,'2',NULL,'Both','1442754095',NULL,'Sample Data','Kiara','B','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Jameson',NULL,1,'1967-11-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (50,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Junko','Ms. Junko Jones',NULL,NULL,NULL,'3',NULL,'Both','3254186828',NULL,'Sample Data','Junko','','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Ms. Junko Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'adams.rebekah@fishmail.net','adams.rebekah@fishmail.net',NULL,NULL,NULL,NULL,NULL,'Both','1105467188',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear adams.rebekah@fishmail.net',1,NULL,'Dear adams.rebekah@fishmail.net',1,NULL,'adams.rebekah@fishmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Kathleen','Ms. Kathleen Lee',NULL,NULL,NULL,NULL,NULL,'Both','2198492721',NULL,'Sample Data','Kathleen','','Lee',2,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Ms. Kathleen Lee',NULL,1,'1991-01-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (53,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Zope, Magan','Magan Zope',NULL,NULL,NULL,'1',NULL,'Both','250517479',NULL,'Sample Data','Magan','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Zope',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (54,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'DÃaz, Kenny','Kenny DÃaz II',NULL,NULL,NULL,'4',NULL,'Both','3864119395',NULL,'Sample Data','Kenny','V','DÃaz',NULL,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny DÃaz II',NULL,2,'1945-07-18',0,NULL,NULL,NULL,'Dowlen Technology Systems',NULL,NULL,70,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (55,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Smith, Barry','Barry Smith',NULL,NULL,NULL,'3',NULL,'Both','3850252418',NULL,'Sample Data','Barry','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Smith',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Barry','Mr. Barry Adams',NULL,NULL,NULL,'5',NULL,'Both','1282794695',NULL,'Sample Data','Barry','','Adams',3,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Adams',NULL,2,'1945-06-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (57,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Cornettsville Literacy Initiative','Cornettsville Literacy Initiative',NULL,NULL,NULL,'3',NULL,'Both','3359459322',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cornettsville Literacy Initiative',NULL,NULL,NULL,0,NULL,NULL,200,'Cornettsville Literacy Initiative',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (58,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov, Shad','Shad Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','4103446266',NULL,'Sample Data','Shad','S','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Ivanov',NULL,NULL,'1997-03-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (59,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Parker, Junko','Mrs. Junko Parker',NULL,NULL,NULL,NULL,NULL,'Both','2594142512',NULL,'Sample Data','Junko','E','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Mrs. Junko Parker',NULL,NULL,'1982-05-15',0,NULL,NULL,NULL,'Global Environmental Systems',NULL,NULL,88,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Russell','Dr. Russell Parker',NULL,NULL,NULL,'3',NULL,'Both','1852900847',NULL,'Sample Data','Russell','','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Parker',NULL,2,NULL,1,'2020-12-05',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Scott','Dr. Scott Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','674660419',NULL,'Sample Data','Scott','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Reynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (62,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'chowski-yadav.maxwell75@sample.org','chowski-yadav.maxwell75@sample.org',NULL,NULL,NULL,'5',NULL,'Both','3705846184',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear chowski-yadav.maxwell75@sample.org',1,NULL,'Dear chowski-yadav.maxwell75@sample.org',1,NULL,'chowski-yadav.maxwell75@sample.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (63,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Grant family','Grant family',NULL,NULL,NULL,NULL,NULL,'Both','3228000340',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Grant family',5,NULL,'Dear Grant family',2,NULL,'Grant family',NULL,NULL,NULL,0,NULL,'Grant family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Eleonor','Mrs. Eleonor Parker',NULL,NULL,NULL,'2',NULL,'Both','3234463672',NULL,'Sample Data','Eleonor','D','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Mrs. Eleonor Parker',NULL,1,'1985-10-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (65,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Norris','Norris González Sr.',NULL,NULL,NULL,'1',NULL,'Both','2069001526',NULL,'Sample Data','Norris','K','González',NULL,2,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris González Sr.',NULL,2,'1971-11-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (66,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Samson family','Roberts-Samson family',NULL,NULL,NULL,'5',NULL,'Both','2677861429',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts-Samson family',5,NULL,'Dear Roberts-Samson family',2,NULL,'Roberts-Samson family',NULL,NULL,NULL,0,NULL,'Roberts-Samson family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (67,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'princessp46@infomail.info','princessp46@infomail.info',NULL,NULL,NULL,'4',NULL,'Both','1332791446',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear princessp46@infomail.info',1,NULL,'Dear princessp46@infomail.info',1,NULL,'princessp46@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (68,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Kandace','Kandace Samuels',NULL,NULL,NULL,'5',NULL,'Both','757003024',NULL,'Sample Data','Kandace','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Samuels',NULL,1,'2010-11-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Bob','Dr. Bob Blackwell III',NULL,NULL,NULL,NULL,NULL,'Both','533638173',NULL,'Sample Data','Bob','X','Blackwell',4,4,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Dr. Bob Blackwell III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (70,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Dowlen Technology Systems','Dowlen Technology Systems',NULL,NULL,NULL,'3',NULL,'Both','462859646',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dowlen Technology Systems',NULL,NULL,NULL,0,NULL,NULL,54,'Dowlen Technology Systems',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (71,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Laree','Ms. Laree Deforest',NULL,NULL,NULL,'3',NULL,'Both','2017561536',NULL,'Sample Data','Laree','R','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Ms. Laree Deforest',NULL,1,'1997-05-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (72,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Norris','Norris Jensen',NULL,NULL,NULL,'5',NULL,'Both','4026647106',NULL,'Sample Data','Norris','M','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Jensen',NULL,2,NULL,0,NULL,NULL,NULL,'Dowlen Culture Trust',NULL,NULL,73,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (73,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Dowlen Culture Trust','Dowlen Culture Trust',NULL,NULL,NULL,'2',NULL,'Both','756900020',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dowlen Culture Trust',NULL,NULL,NULL,0,NULL,NULL,72,'Dowlen Culture Trust',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (74,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-Grant-Adams family','Smith-Grant-Adams family',NULL,NULL,NULL,'4',NULL,'Both','3195403293',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith-Grant-Adams family',5,NULL,'Dear Smith-Grant-Adams family',2,NULL,'Smith-Grant-Adams family',NULL,NULL,NULL,0,NULL,'Smith-Grant-Adams family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (75,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Grant, Maxwell','Mr. Maxwell Grant III',NULL,NULL,NULL,NULL,NULL,'Both','3863854365',NULL,'Sample Data','Maxwell','','Grant',3,4,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Mr. Maxwell Grant III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (76,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Second Sports Partners','Second Sports Partners',NULL,NULL,NULL,'3',NULL,'Both','1809491574',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Second Sports Partners',NULL,NULL,NULL,0,NULL,NULL,190,'Second Sports Partners',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Samson, Arlyne','Ms. Arlyne Roberts-Samson',NULL,NULL,NULL,'3',NULL,'Both','70150083',NULL,'Sample Data','Arlyne','I','Roberts-Samson',2,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Ms. Arlyne Roberts-Samson',NULL,NULL,'1980-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (78,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Adams, Rebekah','Rebekah Adams',NULL,NULL,NULL,NULL,NULL,'Both','323607436',NULL,'Sample Data','Rebekah','I','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Adams',NULL,1,'1940-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (79,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'lyadav@fishmail.info','lyadav@fishmail.info',NULL,NULL,NULL,NULL,NULL,'Both','1434246618',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear lyadav@fishmail.info',1,NULL,'Dear lyadav@fishmail.info',1,NULL,'lyadav@fishmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Laree','Laree Samuels',NULL,NULL,NULL,NULL,NULL,'Both','2893408513',NULL,'Sample Data','Laree','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Samuels',NULL,1,'1936-03-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (81,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González, Megan','Mrs. Megan González',NULL,NULL,NULL,NULL,NULL,'Both','558876545',NULL,'Sample Data','Megan','K','González',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan González',NULL,1,'1964-12-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Felisha','Felisha Olsen',NULL,NULL,NULL,'5',NULL,'Both','3594358078',NULL,'Sample Data','Felisha','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Olsen',NULL,1,'1972-08-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (83,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Toby','Toby Roberts II',NULL,NULL,NULL,NULL,NULL,'Both','3766769567',NULL,'Sample Data','Toby','','Roberts',NULL,3,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Roberts II',NULL,2,'1964-07-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Sanford','Mr. Sanford Grant',NULL,NULL,NULL,'2',NULL,'Both','27540077',NULL,'Sample Data','Sanford','B','Grant',3,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Grant',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (85,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Smith-Grant-Adams, Damaris','Dr. Damaris Smith-Grant-Adams',NULL,NULL,NULL,NULL,NULL,'Both','2679369995',NULL,'Sample Data','Damaris','','Smith-Grant-Adams',4,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Dr. Damaris Smith-Grant-Adams',NULL,1,'1989-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Ashlie','Ashlie Lee',NULL,NULL,NULL,NULL,NULL,'Both','3141899481',NULL,'Sample Data','Ashlie','P','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Lee',NULL,1,NULL,0,NULL,NULL,NULL,'Kaneohe Poetry Trust',NULL,NULL,179,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (87,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Olsen, Roland','Mr. Roland Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3464138564',NULL,'Sample Data','Roland','C','Olsen',3,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Mr. Roland Olsen',NULL,NULL,'1996-04-11',0,NULL,NULL,NULL,'Rural Music Network',NULL,NULL,191,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (88,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Global Environmental Systems','Global Environmental Systems',NULL,NULL,NULL,'1',NULL,'Both','736386757',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Environmental Systems',NULL,NULL,NULL,0,NULL,NULL,59,'Global Environmental Systems',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Rebekah','Dr. Rebekah Samson',NULL,NULL,NULL,NULL,NULL,'Both','2854985005',NULL,'Sample Data','Rebekah','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Dr. Rebekah Samson',NULL,NULL,'1954-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wilson.sanford27@fakemail.co.uk','wilson.sanford27@fakemail.co.uk',NULL,NULL,NULL,'3',NULL,'Both','2011204283',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear wilson.sanford27@fakemail.co.uk',1,NULL,'Dear wilson.sanford27@fakemail.co.uk',1,NULL,'wilson.sanford27@fakemail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Betty','Mrs. Betty Blackwell',NULL,NULL,NULL,'4',NULL,'Both','1950991394',NULL,'Sample Data','Betty','N','Blackwell',1,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Mrs. Betty Blackwell',NULL,NULL,'1937-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (92,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Errol','Mr. Errol Wagner Jr.',NULL,NULL,NULL,NULL,NULL,'Both','700104039',NULL,'Sample Data','Errol','','Wagner',3,1,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Wagner Jr.',NULL,2,'1985-11-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Wagner, Delana','Dr. Delana Ivanov-Wagner',NULL,NULL,NULL,NULL,NULL,'Both','821987495',NULL,'Sample Data','Delana','','Ivanov-Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Dr. Delana Ivanov-Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Kenny','Dr. Kenny McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','3554599492',NULL,'Sample Data','Kenny','Y','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny McReynolds',NULL,2,'1953-07-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (95,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'terrelli51@airmail.info','terrelli51@airmail.info',NULL,NULL,NULL,'3',NULL,'Both','1122014594',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear terrelli51@airmail.info',1,NULL,'Dear terrelli51@airmail.info',1,NULL,'terrelli51@airmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'lawerencechowski92@example.biz','lawerencechowski92@example.biz',NULL,NULL,NULL,'1',NULL,'Both','1418757669',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear lawerencechowski92@example.biz',1,NULL,'Dear lawerencechowski92@example.biz',1,NULL,'lawerencechowski92@example.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (97,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Sierra Sustainability Systems','Sierra Sustainability Systems',NULL,NULL,NULL,'2',NULL,'Both','155568892',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sierra Sustainability Systems',NULL,NULL,NULL,0,NULL,NULL,38,'Sierra Sustainability Systems',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (98,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Olsen, Kathleen','Kathleen Olsen',NULL,NULL,NULL,'2',NULL,'Both','1625164526',NULL,'Sample Data','Kathleen','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Olsen',NULL,1,'1965-03-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Betty','Ms. Betty Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1306733997',NULL,'Sample Data','Betty','O','Jameson',2,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Ms. Betty Jameson',NULL,1,'1946-10-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (100,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'nielsen.jackson90@testing.co.pl','nielsen.jackson90@testing.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','3216767670',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear nielsen.jackson90@testing.co.pl',1,NULL,'Dear nielsen.jackson90@testing.co.pl',1,NULL,'nielsen.jackson90@testing.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2155865046',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (102,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,NULL,NULL,'Both','1144797465',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller family',5,NULL,'Dear Müller family',2,NULL,'Müller family',NULL,NULL,NULL,0,NULL,'Müller family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (103,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Rodrigo','Dr. Rodrigo DÃaz',NULL,NULL,NULL,'5',NULL,'Both','1921232492',NULL,'Sample Data','Rodrigo','','DÃaz',4,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo DÃaz',NULL,2,'1982-03-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Jackson','Jackson Olsen Jr.',NULL,NULL,NULL,'4',NULL,'Both','2108387664',NULL,'Sample Data','Jackson','','Olsen',NULL,1,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Olsen Jr.',NULL,2,'2013-03-03',0,NULL,NULL,NULL,'Parrish Advocacy Initiative',NULL,NULL,120,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (105,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Heidi','Heidi Terry',NULL,NULL,NULL,'2',NULL,'Both','3824053436',NULL,'Sample Data','Heidi','Q','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Terry',NULL,1,'1991-05-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Justina','Justina Parker',NULL,NULL,NULL,NULL,NULL,'Both','3792308388',NULL,'Sample Data','Justina','X','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Parker',NULL,NULL,'1962-11-04',0,NULL,NULL,NULL,'Pine Health Partnership',NULL,NULL,107,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (107,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Pine Health Partnership','Pine Health Partnership',NULL,NULL,NULL,NULL,NULL,'Both','1715202444',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Health Partnership',NULL,NULL,NULL,0,NULL,NULL,106,'Pine Health Partnership',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Rosario','Rosario Robertson',NULL,NULL,NULL,'5',NULL,'Both','1907398578',NULL,'Sample Data','Rosario','J','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Robertson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (109,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Environmental Alliance','Rural Environmental Alliance',NULL,NULL,NULL,NULL,NULL,'Both','1663956080',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Environmental Alliance',NULL,NULL,NULL,0,NULL,NULL,187,'Rural Environmental Alliance',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (110,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'El Camino Family Alliance','El Camino Family Alliance',NULL,NULL,NULL,'2',NULL,'Both','900420684',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'El Camino Family Alliance',NULL,NULL,NULL,0,NULL,NULL,18,'El Camino Family Alliance',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (111,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Arlyne','Mrs. Arlyne Bachman',NULL,NULL,NULL,NULL,NULL,'Both','3269134604',NULL,'Sample Data','Arlyne','','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Mrs. Arlyne Bachman',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (112,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Mei','Mei Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3305491240',NULL,'Sample Data','Mei','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Jensen',NULL,1,'1935-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (113,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Rosario','Rosario Adams',NULL,NULL,NULL,'1',NULL,'Both','628774619',NULL,'Sample Data','Rosario','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Adams',NULL,2,'1965-03-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (114,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'jameson.sharyn@lol.org','jameson.sharyn@lol.org',NULL,NULL,NULL,'4',NULL,'Both','3814673775',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear jameson.sharyn@lol.org',1,NULL,'Dear jameson.sharyn@lol.org',1,NULL,'jameson.sharyn@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Kiara','Kiara Terry',NULL,NULL,NULL,NULL,NULL,'Both','4073244041',NULL,'Sample Data','Kiara','X','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (116,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'rosariod@airmail.org','rosariod@airmail.org',NULL,NULL,NULL,'2',NULL,'Both','132093910',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear rosariod@airmail.org',1,NULL,'Dear rosariod@airmail.org',1,NULL,'rosariod@airmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,'Idaho Wellness Collective',NULL,NULL,31,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (117,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Junko','Dr. Junko Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','2926916105',NULL,'Sample Data','Junko','','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Dr. Junko Nielsen',NULL,1,'1983-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (118,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Ashley','Dr. Ashley Terry Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3948576229',NULL,'Sample Data','Ashley','','Terry',4,2,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Terry Sr.',NULL,NULL,'1985-11-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Sherman','Mr. Sherman Smith II',NULL,NULL,NULL,'1',NULL,'Both','2534452689',NULL,'Sample Data','Sherman','','Smith',3,3,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Mr. Sherman Smith II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (120,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Parrish Advocacy Initiative','Parrish Advocacy Initiative',NULL,NULL,NULL,'2',NULL,'Both','1690045769',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Parrish Advocacy Initiative',NULL,NULL,NULL,0,NULL,NULL,104,'Parrish Advocacy Initiative',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Mei','Mei Smith',NULL,NULL,NULL,'3',NULL,'Both','3741631719',NULL,'Sample Data','Mei','H','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Beula','Beula Müller',NULL,NULL,NULL,NULL,NULL,'Both','521667941',NULL,'Sample Data','Beula','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Müller',NULL,1,'2005-03-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (123,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Reynolds, Princess','Dr. Princess Reynolds',NULL,NULL,NULL,'2',NULL,'Both','2219276168',NULL,'Sample Data','Princess','R','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Dr. Princess Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (124,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'terrell.santina@infomail.com','terrell.santina@infomail.com',NULL,NULL,NULL,'3',NULL,'Both','3222025074',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear terrell.santina@infomail.com',1,NULL,'Dear terrell.santina@infomail.com',1,NULL,'terrell.santina@infomail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (125,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Dawson Agriculture Association','Dawson Agriculture Association',NULL,NULL,NULL,'3',NULL,'Both','1720179439',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dawson Agriculture Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Dawson Agriculture Association',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Brigette','Dr. Brigette Wattson',NULL,NULL,NULL,NULL,NULL,'Both','4266118861',NULL,'Sample Data','Brigette','Z','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Dr. Brigette Wattson',NULL,NULL,'1989-11-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (127,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Olsen family','Wagner-Olsen family',NULL,NULL,NULL,'1',NULL,'Both','267436342',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner-Olsen family',5,NULL,'Dear Wagner-Olsen family',2,NULL,'Wagner-Olsen family',NULL,NULL,NULL,0,NULL,'Wagner-Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (128,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Laree','Laree Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2017561536',NULL,'Sample Data','Laree','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Nicole','Nicole Müller',NULL,NULL,NULL,NULL,NULL,'Both','2729775781',NULL,'Sample Data','Nicole','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Müller',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (130,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,NULL,NULL,'Both','3235379039',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Deforest family',5,NULL,'Dear Deforest family',2,NULL,'Deforest family',NULL,NULL,NULL,0,NULL,'Deforest family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Lawerence','Lawerence Lee',NULL,NULL,NULL,'3',NULL,'Both','834383091',NULL,'Sample Data','Lawerence','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Lee',NULL,NULL,'1971-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'robertsona83@lol.org','robertsona83@lol.org',NULL,NULL,NULL,'3',NULL,'Both','486974159',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear robertsona83@lol.org',1,NULL,'Dear robertsona83@lol.org',1,NULL,'robertsona83@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (133,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'González, Jerome','Mr. Jerome González',NULL,NULL,NULL,'5',NULL,'Both','775254007',NULL,'Sample Data','Jerome','','González',3,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Mr. Jerome González',NULL,2,'1993-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Ashlie','Ms. Ashlie Bachman',NULL,NULL,NULL,'2',NULL,'Both','628441271',NULL,'Sample Data','Ashlie','N','Bachman',2,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ms. Ashlie Bachman',NULL,NULL,'1948-04-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (135,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell family','Terrell family',NULL,NULL,NULL,NULL,NULL,'Both','1136333121',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terrell family',5,NULL,'Dear Terrell family',2,NULL,'Terrell family',NULL,NULL,NULL,0,NULL,'Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (136,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'elizabethgrant@spamalot.biz','elizabethgrant@spamalot.biz',NULL,NULL,NULL,NULL,NULL,'Both','3087022863',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear elizabethgrant@spamalot.biz',1,NULL,'Dear elizabethgrant@spamalot.biz',1,NULL,'elizabethgrant@spamalot.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Rodrigo','Dr. Rodrigo Roberts',NULL,NULL,NULL,'3',NULL,'Both','2634521608',NULL,'Sample Data','Rodrigo','','Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo Roberts',NULL,2,'1983-02-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (138,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Margaret','Margaret Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2539132666',NULL,'Sample Data','Margaret','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Margaret','Margaret Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3839484919',NULL,'Sample Data','Margaret','E','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Olsen',NULL,1,'1985-06-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (140,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Terry, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Terry III',NULL,NULL,NULL,NULL,NULL,'Both','884241841',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Terry',NULL,4,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Terry III',NULL,NULL,'1973-01-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (141,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Santina','Santina Nielsen',NULL,NULL,NULL,'1',NULL,'Both','4294042447',NULL,'Sample Data','Santina','W','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Nielsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Eleonor','Dr. Eleonor Deforest',NULL,NULL,NULL,'3',NULL,'Both','873042490',NULL,'Sample Data','Eleonor','L','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Dr. Eleonor Deforest',NULL,1,'1988-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Olsen, Betty','Betty Wagner-Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3294730098',NULL,'Sample Data','Betty','C','Wagner-Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Wagner-Olsen',NULL,1,'2013-03-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (144,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'2',NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Laree','Laree Jacobs',NULL,NULL,NULL,'4',NULL,'Both','3788424198',NULL,'Sample Data','Laree','S','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Jacobs',NULL,1,'1936-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Truman','Dr. Truman Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2843718007',NULL,'Sample Data','Truman','V','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Dr. Truman Barkley',NULL,2,'1942-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (147,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wilson-Samuels, Herminia','Herminia Wilson-Samuels',NULL,NULL,NULL,NULL,NULL,'Both','4281562450',NULL,'Sample Data','Herminia','P','Wilson-Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Wilson-Samuels',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (148,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'chowski-yadav.arlyne@testing.net','chowski-yadav.arlyne@testing.net',NULL,NULL,NULL,NULL,NULL,'Both','3309369873',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear chowski-yadav.arlyne@testing.net',1,NULL,'Dear chowski-yadav.arlyne@testing.net',1,NULL,'chowski-yadav.arlyne@testing.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (149,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Rosario','Rosario González',NULL,NULL,NULL,'1',NULL,'Both','3206727065',NULL,'Sample Data','Rosario','V','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario González',NULL,2,'1940-02-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (150,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Brittney','Brittney Müller',NULL,NULL,NULL,'3',NULL,'Both','1298536395',NULL,'Sample Data','Brittney','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Müller',NULL,1,'1954-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (151,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (152,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Environmental Association','Creative Environmental Association',NULL,NULL,NULL,NULL,NULL,'Both','63083572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Environmental Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Creative Environmental Association',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (153,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Magan','Magan Müller',NULL,NULL,NULL,'5',NULL,'Both','681120033',NULL,'Sample Data','Magan','T','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Müller',NULL,1,'1978-09-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (154,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Charlotte Education Association','Charlotte Education Association',NULL,NULL,NULL,NULL,NULL,'Both','2202053113',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Charlotte Education Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Charlotte Education Association',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (155,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen family','Olsen family',NULL,NULL,NULL,NULL,NULL,'Both','1990073228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen family',5,NULL,'Dear Olsen family',2,NULL,'Olsen family',NULL,NULL,NULL,0,NULL,'Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:42'), - (156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Merrie','Merrie Grant',NULL,NULL,NULL,'4',NULL,'Both','1746149346',NULL,'Sample Data','Merrie','F','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Grant',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Margaret','Dr. Margaret Terry',NULL,NULL,NULL,'3',NULL,'Both','4072810936',NULL,'Sample Data','Margaret','','Terry',4,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Dr. Margaret Terry',NULL,1,'1969-08-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (158,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts-Samson, Sherman','Sherman Roberts-Samson',NULL,NULL,NULL,NULL,NULL,'Both','2488675464',NULL,'Sample Data','Sherman','A','Roberts-Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Roberts-Samson',NULL,2,'1981-09-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Sharyn','Mrs. Sharyn DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','4129279229',NULL,'Sample Data','Sharyn','G','DÃaz',1,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Mrs. Sharyn DÃaz',NULL,NULL,'1936-11-10',1,'2020-09-15',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (160,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Jerome','Dr. Jerome Robertson III',NULL,NULL,NULL,'5',NULL,'Both','3716406144',NULL,'Sample Data','Jerome','','Robertson',4,4,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Robertson III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kandace','Kandace Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2339972314',NULL,'Sample Data','Kandace','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Jensen',NULL,NULL,'1967-12-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (162,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Megan','Megan Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2663769717',NULL,'Sample Data','Megan','R','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Allen','Allen Lee',NULL,NULL,NULL,NULL,NULL,'Both','23882505',NULL,'Sample Data','Allen','P','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Lee',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (164,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Juliann','Juliann Prentice',NULL,NULL,NULL,'1',NULL,'Both','4163234057',NULL,'Sample Data','Juliann','N','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Prentice',NULL,NULL,'1970-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (165,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Zope, Angelika','Angelika Zope',NULL,NULL,NULL,'1',NULL,'Both','797627515',NULL,'Sample Data','Angelika','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Zope',NULL,NULL,'1973-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Andrew','Dr. Andrew Wattson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3954041415',NULL,'Sample Data','Andrew','','Wattson',4,1,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Dr. Andrew Wattson Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (167,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Legal Center','Urban Legal Center',NULL,NULL,NULL,'1',NULL,'Both','3304452841',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Legal Center',NULL,NULL,NULL,0,NULL,NULL,6,'Urban Legal Center',NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:43'), - (168,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Brittney','Mrs. Brittney Deforest',NULL,NULL,NULL,'3',NULL,'Both','1540368141',NULL,'Sample Data','Brittney','','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Mrs. Brittney Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Alida','Ms. Alida Cooper',NULL,NULL,NULL,NULL,NULL,'Both','4292976032',NULL,'Sample Data','Alida','','Cooper',2,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Ms. Alida Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (170,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Lashawnda','Lashawnda Samson',NULL,NULL,NULL,NULL,NULL,'Both','1918471490',NULL,'Sample Data','Lashawnda','B','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Samson',NULL,1,'1953-08-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'juliannchowski@mymail.co.nz','juliannchowski@mymail.co.nz',NULL,NULL,NULL,'1',NULL,'Both','2708318330',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear juliannchowski@mymail.co.nz',1,NULL,'Dear juliannchowski@mymail.co.nz',1,NULL,'juliannchowski@mymail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (172,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Scarlet','Mrs. Scarlet Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','959385532',NULL,'Sample Data','Scarlet','','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Mrs. Scarlet Ivanov',NULL,NULL,'1958-09-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'yadav.v.barry20@notmail.co.in','yadav.v.barry20@notmail.co.in',NULL,NULL,NULL,'5',NULL,'Both','906622343',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear yadav.v.barry20@notmail.co.in',1,NULL,'Dear yadav.v.barry20@notmail.co.in',1,NULL,'yadav.v.barry20@notmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:40'), - (174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Kiara','Dr. Kiara Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2385501712',NULL,'Sample Data','Kiara','','Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Dr. Kiara Wagner',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (175,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Margaret','Ms. Margaret Terry',NULL,NULL,NULL,NULL,NULL,'Both','4072810936',NULL,'Sample Data','Margaret','','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Ms. Margaret Terry',NULL,1,'1956-11-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Ray','Ray Müller Sr.',NULL,NULL,NULL,'3',NULL,'Both','1173052896',NULL,'Sample Data','Ray','B','Müller',NULL,2,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Müller Sr.',NULL,NULL,'2009-07-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Norris','Norris Wattson',NULL,NULL,NULL,NULL,NULL,'Both','4180802164',NULL,'Sample Data','Norris','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Wattson',NULL,2,'1997-03-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:41'), - (178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Claudio','Claudio Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3950881166',NULL,'Sample Data','Claudio','N','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Robertson',NULL,2,'2001-01-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:39','2021-07-26 14:08:44'), - (179,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Kaneohe Poetry Trust','Kaneohe Poetry Trust',NULL,NULL,NULL,NULL,NULL,'Both','3030009151',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kaneohe Poetry Trust',NULL,NULL,NULL,0,NULL,NULL,86,'Kaneohe Poetry Trust',NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:43'), - (180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Ashley','Dr. Ashley Grant III',NULL,NULL,NULL,NULL,NULL,'Both','1641977721',NULL,'Sample Data','Ashley','D','Grant',4,4,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Grant III',NULL,2,'1960-11-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (181,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Ashley','Ashley Cooper II',NULL,NULL,NULL,'3',NULL,'Both','495032298',NULL,'Sample Data','Ashley','T','Cooper',NULL,3,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Cooper II',NULL,2,'1959-09-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:40'), - (182,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Maria','Dr. Maria Jacobs Sr.',NULL,NULL,NULL,'1',NULL,'Both','2004248227',NULL,'Sample Data','Maria','','Jacobs',4,2,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Jacobs Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:41'), - (183,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,NULL,NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:42'), - (184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ashleymcreynolds11@lol.org','ashleymcreynolds11@lol.org',NULL,NULL,NULL,'2',NULL,'Both','4125278943',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ashleymcreynolds11@lol.org',1,NULL,'Dear ashleymcreynolds11@lol.org',1,NULL,'ashleymcreynolds11@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:41'), - (185,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov, Valene','Valene Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','1409634663',NULL,'Sample Data','Valene','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Dimitrov',NULL,1,'1961-01-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:40'), - (186,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jwagner@spamalot.co.in','jwagner@spamalot.co.in',NULL,NULL,NULL,'1',NULL,'Both','2177136335',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jwagner@spamalot.co.in',1,NULL,'Dear jwagner@spamalot.co.in',1,NULL,'jwagner@spamalot.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Rodrigo','Rodrigo Samson',NULL,NULL,NULL,'3',NULL,'Both','2189738630',NULL,'Sample Data','Rodrigo','O','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Samson',NULL,2,'1947-01-19',1,'2020-08-18',NULL,NULL,'Rural Environmental Alliance',NULL,NULL,109,0,'2021-07-26 14:08:40','2021-07-26 14:08:43'), - (188,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Jackson Education Association','Jackson Education Association',NULL,NULL,NULL,NULL,NULL,'Both','2403360554',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Jackson Education Association',NULL,NULL,NULL,0,NULL,NULL,39,'Jackson Education Association',NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:43'), - (189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Felisha','Felisha Deforest',NULL,NULL,NULL,'3',NULL,'Both','3583247352',NULL,'Sample Data','Felisha','O','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Deforest',NULL,1,'2016-11-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (190,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Samuels, Rodrigo','Rodrigo Samuels',NULL,NULL,NULL,'4',NULL,'Both','1345988157',NULL,'Sample Data','Rodrigo','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Samuels',NULL,2,NULL,0,NULL,NULL,NULL,'Second Sports Partners',NULL,NULL,76,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (191,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Music Network','Rural Music Network',NULL,NULL,NULL,NULL,NULL,'Both','2463996286',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Music Network',NULL,NULL,NULL,0,NULL,NULL,87,'Rural Music Network',NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:43'), - (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-Terrell, Sherman','Sherman Prentice-Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2332317818',NULL,'Sample Data','Sherman','L','Prentice-Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Prentice-Terrell',NULL,2,'1967-01-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:43'), - (193,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Adams, Eleonor','Eleonor Adams',NULL,NULL,NULL,'5',NULL,'Both','780665455',NULL,'Sample Data','Eleonor','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Adams',NULL,NULL,'1961-09-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:41'), - (194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Lawerence','Dr. Lawerence Lee',NULL,NULL,NULL,'2',NULL,'Both','834383091',NULL,'Sample Data','Lawerence','Y','Lee',4,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Dr. Lawerence Lee',NULL,2,'1980-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'terry.esta30@example.co.in','terry.esta30@example.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2679605165',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear terry.esta30@example.co.in',1,NULL,'Dear terry.esta30@example.co.in',1,NULL,'terry.esta30@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:40'), - (196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Megan','Ms. Megan Lee',NULL,NULL,NULL,NULL,NULL,'Both','3517834087',NULL,'Sample Data','Megan','F','Lee',2,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Ms. Megan Lee',NULL,1,'1964-05-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Shauna','Dr. Shauna Grant',NULL,NULL,NULL,'2',NULL,'Both','2794914962',NULL,'Sample Data','Shauna','','Grant',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Grant',NULL,1,'1944-05-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:41'), - (198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Lawerence','Lawerence McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2918598675',NULL,'Sample Data','Lawerence','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence McReynolds',NULL,2,'1980-12-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:41'), - (199,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Delana','Delana Patel',NULL,NULL,NULL,NULL,NULL,'Both','725274088',NULL,'Sample Data','Delana','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Patel',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:40'), - (200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee-Adams, Delana','Delana Lee-Adams',NULL,NULL,NULL,NULL,NULL,'Both','603814298',NULL,'Sample Data','Delana','H','Lee-Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Lee-Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,'Cornettsville Literacy Initiative',NULL,NULL,57,0,'2021-07-26 14:08:40','2021-07-26 14:08:44'), - (201,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Zope, Barry','Barry Zope III',NULL,NULL,NULL,'3',NULL,'Both','1953474040',NULL,'Sample Data','Barry','','Zope',NULL,4,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Zope III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-07-26 14:08:40','2021-07-26 14:08:40'); + (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2021-10-14 04:23:51'), + (2,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Barkley, Kathleen','Kathleen Barkley',NULL,NULL,NULL,NULL,NULL,'Both','560974379',NULL,'Sample Data','Kathleen','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Barkley',NULL,1,'1998-06-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (3,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Mei','Mei Patel',NULL,NULL,NULL,'5',NULL,'Both','1870757222',NULL,'Sample Data','Mei','D','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Patel',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (4,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Irvin','Mr. Irvin Wattson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2806500990',NULL,'Sample Data','Irvin','Y','Wattson',3,1,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Mr. Irvin Wattson Jr.',NULL,NULL,'1966-05-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Ashley','Ashley Cooper',NULL,NULL,NULL,NULL,NULL,'Both','495032298',NULL,'Sample Data','Ashley','T','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Cooper',NULL,1,'2014-09-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Lashawnda','Lashawnda Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3524202222',NULL,'Sample Data','Lashawnda','I','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Samuels',NULL,1,'1941-06-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (7,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Arlyne','Arlyne Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3120138036',NULL,'Sample Data','Arlyne','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Reynolds',NULL,NULL,'1977-06-25',0,NULL,NULL,NULL,'Lincoln Technology Collective',NULL,NULL,167,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (8,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Barry','Dr. Barry Terry Jr.',NULL,NULL,NULL,NULL,NULL,'Both','929041000',NULL,'Sample Data','Barry','','Terry',4,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Terry Jr.',NULL,2,'1984-06-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Lincoln','Dr. Lincoln Samson II',NULL,NULL,NULL,'2',NULL,'Both','1364687804',NULL,'Sample Data','Lincoln','U','Samson',4,3,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Samson II',NULL,NULL,'1965-01-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bj.wilson@example.org','bj.wilson@example.org',NULL,NULL,NULL,NULL,NULL,'Both','1790437097',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear bj.wilson@example.org',1,NULL,'Dear bj.wilson@example.org',1,NULL,'bj.wilson@example.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (11,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Herminia','Herminia Samuels',NULL,NULL,NULL,'2',NULL,'Both','2536556293',NULL,'Sample Data','Herminia','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Samuels',NULL,NULL,'1977-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Truman','Dr. Truman Cooper',NULL,NULL,NULL,NULL,NULL,'Both','938772676',NULL,'Sample Data','Truman','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Dr. Truman Cooper',NULL,NULL,'1961-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (13,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee, BrzÄ™czysÅ‚aw','Dr. BrzÄ™czysÅ‚aw Lee',NULL,NULL,NULL,NULL,NULL,'Both','2392926300',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Lee',4,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dr. BrzÄ™czysÅ‚aw Lee',NULL,2,'1996-11-21',0,NULL,NULL,NULL,'Green Technology School',NULL,NULL,78,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (14,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Green Family Association','Green Family Association',NULL,NULL,NULL,NULL,NULL,'Both','2146910932',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Green Family Association',NULL,NULL,NULL,0,NULL,NULL,62,'Green Family Association',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (15,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Beula','Mrs. Beula Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','1989597446',NULL,'Sample Data','Beula','X','Nielsen',1,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Mrs. Beula Nielsen',NULL,NULL,'1953-06-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Jacobs, Jina','Jina Olsen-Jacobs',NULL,NULL,NULL,'1',NULL,'Both','2274760444',NULL,'Sample Data','Jina','','Olsen-Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Olsen-Jacobs',NULL,1,'1993-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'angelikaw@notmail.biz','angelikaw@notmail.biz',NULL,NULL,NULL,'5',NULL,'Both','1156913310',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear angelikaw@notmail.biz',1,NULL,'Dear angelikaw@notmail.biz',1,NULL,'angelikaw@notmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,'Locust Hill Technology Collective',NULL,NULL,125,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (18,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Teddy','Dr. Teddy Wilson III',NULL,NULL,NULL,NULL,NULL,'Both','1714543497',NULL,'Sample Data','Teddy','U','Wilson',4,4,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Wilson III',NULL,2,'1978-01-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (19,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson-Wattson, Rodrigo','Rodrigo Samson-Wattson III',NULL,NULL,NULL,'2',NULL,'Both','3240820617',NULL,'Sample Data','Rodrigo','V','Samson-Wattson',NULL,4,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Samson-Wattson III',NULL,NULL,'2003-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (20,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,'5',NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (21,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Elbert','Elbert Roberts II',NULL,NULL,NULL,'5',NULL,'Both','2457403218',NULL,'Sample Data','Elbert','W','Roberts',NULL,3,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Roberts II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (22,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Tanya','Tanya Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2953066257',NULL,'Sample Data','Tanya','B','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Barkley',NULL,NULL,'1964-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Bernadette','Ms. Bernadette Samson',NULL,NULL,NULL,NULL,NULL,'Both','1089960007',NULL,'Sample Data','Bernadette','','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Ms. Bernadette Samson',NULL,1,'1945-12-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Brent','Dr. Brent Jacobs',NULL,NULL,NULL,'3',NULL,'Both','2357186266',NULL,'Sample Data','Brent','R','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Dr. Brent Jacobs',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (25,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jameson, Allen','Allen Jameson',NULL,NULL,NULL,NULL,NULL,'Both','3044297960',NULL,'Sample Data','Allen','Z','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Jameson',NULL,NULL,'1990-01-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (26,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Jina','Dr. Jina Samuels',NULL,NULL,NULL,NULL,NULL,'Both','202942024',NULL,'Sample Data','Jina','','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Dr. Jina Samuels',NULL,1,NULL,0,NULL,NULL,NULL,'Oklahoma Arts Collective',NULL,NULL,68,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Junko','Mrs. Junko Müller',NULL,NULL,NULL,'3',NULL,'Both','3355176554',NULL,'Sample Data','Junko','','Müller',1,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Mrs. Junko Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Esta','Dr. Esta Adams',NULL,NULL,NULL,NULL,NULL,'Both','1125073025',NULL,'Sample Data','Esta','W','Adams',4,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Dr. Esta Adams',NULL,1,'1990-06-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (29,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Toby','Toby Samuels Jr.',NULL,NULL,NULL,'5',NULL,'Both','126496012',NULL,'Sample Data','Toby','Z','Samuels',NULL,1,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Samuels Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (30,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jacobs, Lawerence','Mr. Lawerence Jacobs Sr.',NULL,NULL,NULL,'5',NULL,'Both','2914828015',NULL,'Sample Data','Lawerence','','Jacobs',3,2,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Mr. Lawerence Jacobs Sr.',NULL,2,'1958-04-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (31,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson-Barkley, Troy','Troy Jameson-Barkley II',NULL,NULL,NULL,NULL,NULL,'Both','3887786774',NULL,'Sample Data','Troy','C','Jameson-Barkley',NULL,3,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Jameson-Barkley II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Miguel','Miguel Nielsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3325979689',NULL,'Sample Data','Miguel','','Nielsen',NULL,1,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Nielsen Jr.',NULL,2,'1973-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (33,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner family','Wagner family',NULL,NULL,NULL,NULL,NULL,'Both','1570966486',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wagner family',5,NULL,'Dear Wagner family',2,NULL,'Wagner family',NULL,NULL,NULL,0,NULL,'Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (34,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts family','Roberts family',NULL,NULL,NULL,NULL,NULL,'Both','2097305882',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts family',5,NULL,'Dear Roberts family',2,NULL,'Roberts family',NULL,NULL,NULL,0,NULL,'Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (35,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov-Jones, Ivey','Ms. Ivey Dimitrov-Jones',NULL,NULL,NULL,'2',NULL,'Both','3620358871',NULL,'Sample Data','Ivey','M','Dimitrov-Jones',2,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ms. Ivey Dimitrov-Jones',NULL,NULL,'1984-12-02',0,NULL,NULL,NULL,'Hawaii Empowerment Center',NULL,NULL,100,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (36,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Landon','Landon Dimitrov II',NULL,NULL,NULL,'1',NULL,'Both','3544857327',NULL,'Sample Data','Landon','H','Dimitrov',NULL,3,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Dimitrov II',NULL,2,'1934-05-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (37,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen family','Olsen family',NULL,NULL,NULL,'2',NULL,'Both','1990073228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen family',5,NULL,'Dear Olsen family',2,NULL,'Olsen family',NULL,NULL,NULL,0,NULL,'Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Ivey','Ivey Patel',NULL,NULL,NULL,NULL,NULL,'Both','1657972343',NULL,'Sample Data','Ivey','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Patel',NULL,1,'1961-06-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Erik','Erik Wattson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1174454182',NULL,'Sample Data','Erik','','Wattson',NULL,1,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Wattson Jr.',NULL,2,'1969-03-06',0,NULL,NULL,NULL,'Rural Poetry Trust',NULL,NULL,42,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (40,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Omar','Omar Nielsen Sr.',NULL,NULL,NULL,'4',NULL,'Both','1831503188',NULL,'Sample Data','Omar','I','Nielsen',NULL,2,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Nielsen Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (41,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'bachmanb50@airmail.info','bachmanb50@airmail.info',NULL,NULL,NULL,NULL,NULL,'Both','2029445311',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bachmanb50@airmail.info',1,NULL,'Dear bachmanb50@airmail.info',1,NULL,'bachmanb50@airmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (42,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Poetry Trust','Rural Poetry Trust',NULL,NULL,NULL,NULL,NULL,'Both','682926146',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Poetry Trust',NULL,NULL,NULL,0,NULL,NULL,39,'Rural Poetry Trust',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Billy','Mr. Billy Samuels',NULL,NULL,NULL,NULL,NULL,'Both','92935923',NULL,'Sample Data','Billy','','Samuels',3,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Mr. Billy Samuels',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Allen','Dr. Allen ÅÄ…chowski Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3162448518',NULL,'Sample Data','Allen','','ÅÄ…chowski',4,2,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen ÅÄ…chowski Sr.',NULL,2,NULL,0,NULL,NULL,NULL,'Global Wellness Trust',NULL,NULL,81,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Damaris','Ms. Damaris ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','3452696651',NULL,'Sample Data','Damaris','G','ÅÄ…chowski',2,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Ms. Damaris ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (46,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson, Sonny','Mr. Sonny Jameson Sr.',NULL,NULL,NULL,'4',NULL,'Both','3728912262',NULL,'Sample Data','Sonny','L','Jameson',3,2,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Mr. Sonny Jameson Sr.',NULL,2,'1992-12-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (47,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Craig','Mr. Craig Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2031234016',NULL,'Sample Data','Craig','T','Wagner',3,NULL,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Wagner',NULL,NULL,'1951-06-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (48,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Brigette','Brigette Wattson',NULL,NULL,NULL,NULL,NULL,'Both','4266118861',NULL,'Sample Data','Brigette','W','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Wattson',NULL,1,'1961-10-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (49,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Erik','Erik Terry Jr.',NULL,NULL,NULL,'4',NULL,'Both','4189171326',NULL,'Sample Data','Erik','W','Terry',NULL,1,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Terry Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (50,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson-Terrell, Daren','Daren Samson-Terrell',NULL,NULL,NULL,'4',NULL,'Both','3849209138',NULL,'Sample Data','Daren','E','Samson-Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Samson-Terrell',NULL,NULL,'1980-12-01',0,NULL,NULL,NULL,'Community Advocacy Solutions',NULL,NULL,166,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (51,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Ray','Mr. Ray Adams',NULL,NULL,NULL,NULL,NULL,'Both','1995383476',NULL,'Sample Data','Ray','','Adams',3,NULL,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Mr. Ray Adams',NULL,NULL,'1976-03-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (52,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Junko','Junko Nielsen',NULL,NULL,NULL,'4',NULL,'Both','2926916105',NULL,'Sample Data','Junko','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Nielsen',NULL,1,'1958-06-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Bernadette','Mrs. Bernadette Cooper',NULL,NULL,NULL,NULL,NULL,'Both','1160205929',NULL,'Sample Data','Bernadette','G','Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette Cooper',NULL,1,'1957-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (54,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'santinadeforest@sample.co.uk','santinadeforest@sample.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','1158701715',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear santinadeforest@sample.co.uk',1,NULL,'Dear santinadeforest@sample.co.uk',1,NULL,'santinadeforest@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (55,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley, Kiara','Dr. Kiara Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2141749595',NULL,'Sample Data','Kiara','','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Dr. Kiara Barkley',NULL,1,'1939-05-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Wattson, Omar','Omar Samson-Wattson III',NULL,NULL,NULL,NULL,NULL,'Both','354104625',NULL,'Sample Data','Omar','S','Samson-Wattson',NULL,4,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Samson-Wattson III',NULL,2,'1987-03-31',0,NULL,NULL,NULL,'Urban Empowerment Partnership',NULL,NULL,141,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Scott','Scott Lee Jr.',NULL,NULL,NULL,'5',NULL,'Both','4023573390',NULL,'Sample Data','Scott','V','Lee',NULL,1,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Lee Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Arlyne','Arlyne Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3808368075',NULL,'Sample Data','Arlyne','E','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,'Snow Shoe Arts Association',NULL,NULL,169,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (59,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Jameson, Margaret','Margaret ÅÄ…chowski-Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2364033948',NULL,'Sample Data','Margaret','','ÅÄ…chowski-Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret ÅÄ…chowski-Jameson',NULL,1,'2005-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson-Müller, Kenny','Dr. Kenny Jameson-Müller',NULL,NULL,NULL,'4',NULL,'Both','3436168703',NULL,'Sample Data','Kenny','S','Jameson-Müller',4,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Jameson-Müller',NULL,2,'1968-01-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (61,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Ivey','Mrs. Ivey Wilson',NULL,NULL,NULL,'4',NULL,'Both','4270128246',NULL,'Sample Data','Ivey','','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (62,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Justina','Dr. Justina Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1737971561',NULL,'Sample Data','Justina','','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Dr. Justina Samuels',NULL,1,NULL,0,NULL,NULL,NULL,'Green Family Association',NULL,NULL,14,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Shad','Shad Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2908565533',NULL,'Sample Data','Shad','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Barkley',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (64,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Rolando','Rolando Müller II',NULL,NULL,NULL,NULL,NULL,'Both','2804310363',NULL,'Sample Data','Rolando','O','Müller',NULL,3,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Müller II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Prentice, Erik','Dr. Erik Terry-Prentice',NULL,NULL,NULL,'5',NULL,'Both','685103230',NULL,'Sample Data','Erik','','Terry-Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Terry-Prentice',NULL,NULL,'1987-10-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (66,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Samson-Wattson family','Samson-Wattson family',NULL,NULL,NULL,'5',NULL,'Both','269631773',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson-Wattson family',5,NULL,'Dear Samson-Wattson family',2,NULL,'Samson-Wattson family',NULL,NULL,NULL,0,NULL,'Samson-Wattson family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Alexia','Ms. Alexia Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','1389353396',NULL,'Sample Data','Alexia','Q','Reynolds',2,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Ms. Alexia Reynolds',NULL,1,'1951-11-09',0,NULL,NULL,NULL,'Global Arts Fellowship',NULL,NULL,129,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (68,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Oklahoma Arts Collective','Oklahoma Arts Collective',NULL,NULL,NULL,NULL,NULL,'Both','2854687282',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Oklahoma Arts Collective',NULL,NULL,NULL,0,NULL,NULL,26,'Oklahoma Arts Collective',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Sanford','Sanford Samson Sr.',NULL,NULL,NULL,'3',NULL,'Both','802697989',NULL,'Sample Data','Sanford','X','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Samson Sr.',NULL,2,'1984-12-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Lashawnda','Ms. Lashawnda Cruz',NULL,NULL,NULL,NULL,NULL,'Both','2604537313',NULL,'Sample Data','Lashawnda','B','Cruz',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Cruz',NULL,NULL,'1960-03-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (71,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Roland','Dr. Roland Samson',NULL,NULL,NULL,NULL,NULL,'Both','2394998180',NULL,'Sample Data','Roland','L','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Samson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (72,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Scott','Dr. Scott Müller',NULL,NULL,NULL,NULL,NULL,'Both','2575613599',NULL,'Sample Data','Scott','W','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Müller',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (73,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels, Omar','Mr. Omar Samuels',NULL,NULL,NULL,'5',NULL,'Both','1072276407',NULL,'Sample Data','Omar','X','Samuels',3,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Samuels',NULL,NULL,'1962-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (74,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'adamsf@sample.co.nz','adamsf@sample.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','554483999',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear adamsf@sample.co.nz',1,NULL,'Dear adamsf@sample.co.nz',1,NULL,'adamsf@sample.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Lashawnda','Lashawnda Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3524202222',NULL,'Sample Data','Lashawnda','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Samuels',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (76,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Teddy','Teddy Terry',NULL,NULL,NULL,NULL,NULL,'Both','1402049800',NULL,'Sample Data','Teddy','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Terry',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (77,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Terry family','Terry family',NULL,NULL,NULL,'5',NULL,'Both','558108751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry family',5,NULL,'Dear Terry family',2,NULL,'Terry family',NULL,NULL,NULL,0,NULL,'Terry family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (78,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Green Technology School','Green Technology School',NULL,NULL,NULL,'2',NULL,'Both','3321300520',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Green Technology School',NULL,NULL,NULL,0,NULL,NULL,13,'Green Technology School',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (79,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,'3',NULL,'Both','1669281794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel family',5,NULL,'Dear Patel family',2,NULL,'Patel family',NULL,NULL,NULL,0,NULL,'Patel family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Clint','Clint Samuels Jr.',NULL,NULL,NULL,'1',NULL,'Both','1165497253',NULL,'Sample Data','Clint','','Samuels',NULL,1,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Samuels Jr.',NULL,2,'2015-08-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (81,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Global Wellness Trust','Global Wellness Trust',NULL,NULL,NULL,'5',NULL,'Both','43589731',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Wellness Trust',NULL,NULL,NULL,0,NULL,NULL,44,'Global Wellness Trust',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (82,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Terry, Magan','Dr. Magan Terry',NULL,NULL,NULL,'1',NULL,'Both','1306605687',NULL,'Sample Data','Magan','S','Terry',4,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Dr. Magan Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (83,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Bernadette','Mrs. Bernadette Roberts',NULL,NULL,NULL,NULL,NULL,'Both','4225100946',NULL,'Sample Data','Bernadette','K','Roberts',1,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Mrs. Bernadette Roberts',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (84,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Troy','Troy Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','4095296897',NULL,'Sample Data','Troy','F','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Nielsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Maxwell','Maxwell Cruz',NULL,NULL,NULL,NULL,NULL,'Both','780249075',NULL,'Sample Data','Maxwell','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Cruz',NULL,2,'1960-04-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (86,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Rural Food Academy','Rural Food Academy',NULL,NULL,NULL,NULL,NULL,'Both','3746923021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Food Academy',NULL,NULL,NULL,0,NULL,NULL,110,'Rural Food Academy',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (87,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Boise Peace Partners','Boise Peace Partners',NULL,NULL,NULL,NULL,NULL,'Both','3009264098',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Boise Peace Partners',NULL,NULL,NULL,0,NULL,NULL,151,'Boise Peace Partners',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (88,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Müller, Felisha','Felisha Müller',NULL,NULL,NULL,'2',NULL,'Both','258703399',NULL,'Sample Data','Felisha','S','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Müller',NULL,1,'1965-02-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Sonny','Sonny Roberts III',NULL,NULL,NULL,NULL,NULL,'Both','624070005',NULL,'Sample Data','Sonny','','Roberts',NULL,4,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Roberts III',NULL,2,'1981-12-05',0,NULL,NULL,NULL,'Alexander City Poetry Association',NULL,NULL,95,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Heidi','Dr. Heidi Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3023333247',NULL,'Sample Data','Heidi','Y','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Olsen',NULL,NULL,'1977-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (91,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson-Barkley family','Jameson-Barkley family',NULL,NULL,NULL,'1',NULL,'Both','1137328179',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson-Barkley family',5,NULL,'Dear Jameson-Barkley family',2,NULL,'Jameson-Barkley family',NULL,NULL,NULL,0,NULL,'Jameson-Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (92,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Toby','Mr. Toby Jones',NULL,NULL,NULL,NULL,NULL,'Both','1728032569',NULL,'Sample Data','Toby','G','Jones',3,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Mr. Toby Jones',NULL,NULL,'1981-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Lou','Lou Jensen',NULL,NULL,NULL,'1',NULL,'Both','707335642',NULL,'Sample Data','Lou','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Jensen',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Rolando','Rolando Terrell Sr.',NULL,NULL,NULL,'3',NULL,'Both','3773897082',NULL,'Sample Data','Rolando','','Terrell',NULL,2,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Terrell Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (95,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Alexander City Poetry Association','Alexander City Poetry Association',NULL,NULL,NULL,NULL,NULL,'Both','4230975214',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Alexander City Poetry Association',NULL,NULL,NULL,0,NULL,NULL,89,'Alexander City Poetry Association',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (96,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Prentice family','Terry-Prentice family',NULL,NULL,NULL,'5',NULL,'Both','563442745',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry-Prentice family',5,NULL,'Dear Terry-Prentice family',2,NULL,'Terry-Prentice family',NULL,NULL,NULL,0,NULL,'Terry-Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (97,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Andrew','Andrew Müller',NULL,NULL,NULL,'3',NULL,'Both','1251065595',NULL,'Sample Data','Andrew','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Müller',NULL,NULL,'1958-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Norris','Norris Cruz III',NULL,NULL,NULL,'2',NULL,'Both','1269804686',NULL,'Sample Data','Norris','','Cruz',NULL,4,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Cruz III',NULL,2,NULL,1,'2021-08-01',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (99,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Megan','Megan Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','1545547017',NULL,'Sample Data','Megan','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Blackwell',NULL,1,'1948-03-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (100,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Hawaii Empowerment Center','Hawaii Empowerment Center',NULL,NULL,NULL,NULL,NULL,'Both','2701338814',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Hawaii Empowerment Center',NULL,NULL,NULL,0,NULL,NULL,35,'Hawaii Empowerment Center',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (101,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Olsen, Arlyne','Arlyne Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3061476892',NULL,'Sample Data','Arlyne','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Olsen',NULL,1,'2018-10-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (102,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Friends Health Fund','Friends Health Fund',NULL,NULL,NULL,'5',NULL,'Both','1168427903',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Health Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Friends Health Fund',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (103,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Carylon','Dr. Carylon Patel',NULL,NULL,NULL,'3',NULL,'Both','1606295742',NULL,'Sample Data','Carylon','U','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Dr. Carylon Patel',NULL,1,'1995-06-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kiara','Kiara Jensen',NULL,NULL,NULL,NULL,NULL,'Both','4228592498',NULL,'Sample Data','Kiara','X','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Jensen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (105,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Scott','Scott Terry Sr.',NULL,NULL,NULL,'3',NULL,'Both','4244412361',NULL,'Sample Data','Scott','P','Terry',NULL,2,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Terry Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'patelj@lol.com','patelj@lol.com',NULL,NULL,NULL,'4',NULL,'Both','4145652266',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear patelj@lol.com',1,NULL,'Dear patelj@lol.com',1,NULL,'patelj@lol.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Kathleen','Dr. Kathleen Terrell',NULL,NULL,NULL,'4',NULL,'Both','1212297989',NULL,'Sample Data','Kathleen','','Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Dr. Kathleen Terrell',NULL,1,'1952-09-12',1,'2021-01-01',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (108,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Grant, Rosario','Rosario Grant',NULL,NULL,NULL,NULL,NULL,'Both','2992904466',NULL,'Sample Data','Rosario','G','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Grant',NULL,2,'1979-03-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Wattson III',NULL,NULL,NULL,'3',NULL,'Both','1189364369',NULL,'Sample Data','BrzÄ™czysÅ‚aw','E','Wattson',NULL,4,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Wattson III',NULL,2,'1994-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Rebekah','Rebekah Adams',NULL,NULL,NULL,'2',NULL,'Both','323607436',NULL,'Sample Data','Rebekah','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Adams',NULL,NULL,'2009-08-06',0,NULL,NULL,NULL,'Rural Food Academy',NULL,NULL,86,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (111,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Juliann','Juliann Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3120075857',NULL,'Sample Data','Juliann','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Samuels',NULL,1,NULL,1,'2021-01-28',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (112,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jacobs, Teresa','Teresa Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','128468563',NULL,'Sample Data','Teresa','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Jacobs',NULL,NULL,'1984-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (113,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wagner, Juliann','Juliann Wagner',NULL,NULL,NULL,'4',NULL,'Both','2532288095',NULL,'Sample Data','Juliann','W','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Wagner',NULL,NULL,'1996-05-09',0,NULL,NULL,NULL,'Global Education Systems',NULL,NULL,182,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (114,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'lterrell14@mymail.com','lterrell14@mymail.com',NULL,NULL,NULL,'5',NULL,'Both','4066193161',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear lterrell14@mymail.com',1,NULL,'Dear lterrell14@mymail.com',1,NULL,'lterrell14@mymail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (115,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Adams, Angelika','Angelika Adams',NULL,NULL,NULL,'2',NULL,'Both','347992528',NULL,'Sample Data','Angelika','I','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Adams',NULL,NULL,'1963-05-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Betty','Ms. Betty Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3171896776',NULL,'Sample Data','Betty','P','Olsen',2,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Ms. Betty Olsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'shermant@notmail.biz','shermant@notmail.biz',NULL,NULL,NULL,NULL,NULL,'Both','3989446187',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear shermant@notmail.biz',1,NULL,'Dear shermant@notmail.biz',1,NULL,'shermant@notmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (118,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Norris','Dr. Norris Samuels',NULL,NULL,NULL,'1',NULL,'Both','729903079',NULL,'Sample Data','Norris','','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Samuels',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (119,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'wattson.betty@fishmail.co.uk','wattson.betty@fishmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2879494088',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear wattson.betty@fishmail.co.uk',1,NULL,'Dear wattson.betty@fishmail.co.uk',1,NULL,'wattson.betty@fishmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (120,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'samuels.alexia57@infomail.org','samuels.alexia57@infomail.org',NULL,NULL,NULL,NULL,NULL,'Both','2586307204',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear samuels.alexia57@infomail.org',1,NULL,'Dear samuels.alexia57@infomail.org',1,NULL,'samuels.alexia57@infomail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (121,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'andrewb81@fakemail.org','andrewb81@fakemail.org',NULL,NULL,NULL,'5',NULL,'Both','3762315372',NULL,'Sample Data',NULL,NULL,NULL,3,2,NULL,NULL,1,NULL,'Dear andrewb81@fakemail.org',1,NULL,'Dear andrewb81@fakemail.org',1,NULL,'andrewb81@fakemail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (122,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Ivey','Ms. Ivey Jones',NULL,NULL,NULL,NULL,NULL,'Both','2553949763',NULL,'Sample Data','Ivey','','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ms. Ivey Jones',NULL,1,'1945-06-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (123,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'4',NULL,'Both','1110516799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones family',5,NULL,'Dear Jones family',2,NULL,'Jones family',NULL,NULL,NULL,0,NULL,'Jones family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (124,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,'2',NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (125,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Locust Hill Technology Collective','Locust Hill Technology Collective',NULL,NULL,NULL,'4',NULL,'Both','135820058',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Locust Hill Technology Collective',NULL,NULL,NULL,0,NULL,NULL,17,'Locust Hill Technology Collective',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Josefa','Dr. Josefa Prentice',NULL,NULL,NULL,'4',NULL,'Both','3169036877',NULL,'Sample Data','Josefa','H','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Dr. Josefa Prentice',NULL,NULL,'1963-01-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (127,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Terry-Prentice, Mei','Mei Terry-Prentice',NULL,NULL,NULL,'3',NULL,'Both','3550102875',NULL,'Sample Data','Mei','','Terry-Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Terry-Prentice',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (128,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Josefa','Josefa Wattson',NULL,NULL,NULL,NULL,NULL,'Both','3075737461',NULL,'Sample Data','Josefa','G','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Wattson',NULL,1,'1993-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (129,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Global Arts Fellowship','Global Arts Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','373712732',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Arts Fellowship',NULL,NULL,NULL,0,NULL,NULL,67,'Global Arts Fellowship',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Elina','Elina Lee',NULL,NULL,NULL,NULL,NULL,'Both','2171390840',NULL,'Sample Data','Elina','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Lee',NULL,NULL,'1972-05-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Maria','Maria Terry',NULL,NULL,NULL,'2',NULL,'Both','258657909',NULL,'Sample Data','Maria','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Terry',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (132,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Rosario','Dr. Rosario Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3904971531',NULL,'Sample Data','Rosario','A','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Dr. Rosario Jensen',NULL,2,'1974-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (133,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,NULL,NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (134,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Sierra Food Services','Sierra Food Services',NULL,NULL,NULL,'1',NULL,'Both','743110705',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sierra Food Services',NULL,NULL,NULL,0,NULL,NULL,NULL,'Sierra Food Services',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Russell','Russell Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3958135330',NULL,'Sample Data','Russell','I','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Samuels',NULL,2,'2004-05-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (136,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Tanya','Ms. Tanya Samuels',NULL,NULL,NULL,NULL,NULL,'Both','147060242',NULL,'Sample Data','Tanya','','Samuels',2,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Ms. Tanya Samuels',NULL,NULL,'1951-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (137,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Kathlyn','Kathlyn Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1165214036',NULL,'Sample Data','Kathlyn','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Jameson',NULL,1,'1990-08-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (138,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Iris','Mrs. Iris Terry',NULL,NULL,NULL,'4',NULL,'Both','2685110672',NULL,'Sample Data','Iris','H','Terry',1,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Mrs. Iris Terry',NULL,NULL,'1997-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (139,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov, Bob','Bob Ivanov II',NULL,NULL,NULL,'1',NULL,'Both','2246956398',NULL,'Sample Data','Bob','H','Ivanov',NULL,3,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Ivanov II',NULL,2,'1991-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (140,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Josefa','Ms. Josefa Terry',NULL,NULL,NULL,'4',NULL,'Both','2483410721',NULL,'Sample Data','Josefa','A','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (141,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Empowerment Partnership','Urban Empowerment Partnership',NULL,NULL,NULL,NULL,NULL,'Both','2325656105',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Empowerment Partnership',NULL,NULL,NULL,0,NULL,NULL,56,'Urban Empowerment Partnership',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Elbert','Mr. Elbert Patel III',NULL,NULL,NULL,'2',NULL,'Both','2164922981',NULL,'Sample Data','Elbert','V','Patel',3,4,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Patel III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (143,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Terrell, Tanya','Tanya Terrell',NULL,NULL,NULL,'5',NULL,'Both','1604022989',NULL,'Sample Data','Tanya','T','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Terrell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Billy','Dr. Billy Jensen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1055811033',NULL,'Sample Data','Billy','','Jensen',4,1,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Jensen Jr.',NULL,2,'1982-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (145,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski-Jameson, Teddy','Teddy ÅÄ…chowski-Jameson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1651965315',NULL,'Sample Data','Teddy','N','ÅÄ…chowski-Jameson',NULL,1,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy ÅÄ…chowski-Jameson Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (146,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Yucca Valley Advocacy Fellowship','Yucca Valley Advocacy Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','521165788',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Yucca Valley Advocacy Fellowship',NULL,NULL,NULL,0,NULL,NULL,195,'Yucca Valley Advocacy Fellowship',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Jackson','Jackson Wagner Sr.',NULL,NULL,NULL,NULL,NULL,'Both','541654999',NULL,'Sample Data','Jackson','D','Wagner',NULL,2,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Wagner Sr.',NULL,2,'2005-04-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (148,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Jacobs family','Olsen-Jacobs family',NULL,NULL,NULL,NULL,NULL,'Both','3630460091',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen-Jacobs family',5,NULL,'Dear Olsen-Jacobs family',2,NULL,'Olsen-Jacobs family',NULL,NULL,NULL,0,NULL,'Olsen-Jacobs family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (149,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Rodrigo','Rodrigo Jensen',NULL,NULL,NULL,'1',NULL,'Both','4133351927',NULL,'Sample Data','Rodrigo','T','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Jensen',NULL,2,'1967-04-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (150,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'cooperc58@example.co.in','cooperc58@example.co.in',NULL,NULL,NULL,'3',NULL,'Both','2347487222',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear cooperc58@example.co.in',1,NULL,'Dear cooperc58@example.co.in',1,NULL,'cooperc58@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (151,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Scarlet','Dr. Scarlet Patel',NULL,NULL,NULL,NULL,NULL,'Both','2187618008',NULL,'Sample Data','Scarlet','G','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet Patel',NULL,NULL,'1984-01-29',0,NULL,NULL,NULL,'Boise Peace Partners',NULL,NULL,87,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Maria','Dr. Maria Müller',NULL,NULL,NULL,'5',NULL,'Both','1779623715',NULL,'Sample Data','Maria','','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Müller',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (153,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Patel, Margaret','Dr. Margaret Patel',NULL,NULL,NULL,'2',NULL,'Both','1725329639',NULL,'Sample Data','Margaret','','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Dr. Margaret Patel',NULL,1,'1991-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (154,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samuels, Sanford','Sanford Samuels',NULL,NULL,NULL,NULL,NULL,'Both','4251375550',NULL,'Sample Data','Sanford','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (155,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Jed','Jed Roberts III',NULL,NULL,NULL,'1',NULL,'Both','1541419664',NULL,'Sample Data','Jed','J','Roberts',NULL,4,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Roberts III',NULL,2,'1980-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Sherman','Dr. Sherman Jameson III',NULL,NULL,NULL,'5',NULL,'Both','3618683282',NULL,'Sample Data','Sherman','R','Jameson',4,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Jameson III',NULL,2,'1981-11-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (157,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Elizabeth','Elizabeth Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','2520947662',NULL,'Sample Data','Elizabeth','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (158,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,'2',NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Ivey','Mrs. Ivey Jensen',NULL,NULL,NULL,'1',NULL,'Both','4078718550',NULL,'Sample Data','Ivey','','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey Jensen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (160,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Jerome','Mr. Jerome Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2369616352',NULL,'Sample Data','Jerome','','Olsen',3,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Mr. Jerome Olsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Jina','Mrs. Jina Jones',NULL,NULL,NULL,NULL,NULL,'Both','1835869309',NULL,'Sample Data','Jina','V','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Mrs. Jina Jones',NULL,NULL,'1988-09-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (162,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski-Jameson family','ÅÄ…chowski-Jameson family',NULL,NULL,NULL,'5',NULL,'Both','279148740',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski-Jameson family',5,NULL,'Dear ÅÄ…chowski-Jameson family',2,NULL,'ÅÄ…chowski-Jameson family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski-Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Valene','Mrs. Valene Grant',NULL,NULL,NULL,NULL,NULL,'Both','309020900',NULL,'Sample Data','Valene','','Grant',1,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Mrs. Valene Grant',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (164,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Samuels, Shad','Shad Samuels III',NULL,NULL,NULL,'5',NULL,'Both','3610852394',NULL,'Sample Data','Shad','','Samuels',NULL,4,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Samuels III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsen.winford55@sample.net','olsen.winford55@sample.net',NULL,NULL,NULL,'3',NULL,'Both','4094685611',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear olsen.winford55@sample.net',1,NULL,'Dear olsen.winford55@sample.net',1,NULL,'olsen.winford55@sample.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (166,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Community Advocacy Solutions','Community Advocacy Solutions',NULL,NULL,NULL,'2',NULL,'Both','1040914150',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Advocacy Solutions',NULL,NULL,NULL,0,NULL,NULL,50,'Community Advocacy Solutions',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (167,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Lincoln Technology Collective','Lincoln Technology Collective',NULL,NULL,NULL,NULL,NULL,'Both','1001606668',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Technology Collective',NULL,NULL,NULL,0,NULL,NULL,7,'Lincoln Technology Collective',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (168,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-Olsen, Herminia','Dr. Herminia Prentice-Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3697608246',NULL,'Sample Data','Herminia','','Prentice-Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Dr. Herminia Prentice-Olsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (169,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Snow Shoe Arts Association','Snow Shoe Arts Association',NULL,NULL,NULL,NULL,NULL,'Both','492788617',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Snow Shoe Arts Association',NULL,NULL,NULL,0,NULL,NULL,58,'Snow Shoe Arts Association',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Terrell, Esta','Esta Samson-Terrell',NULL,NULL,NULL,'1',NULL,'Both','1119370337',NULL,'Sample Data','Esta','','Samson-Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Samson-Terrell',NULL,1,'1975-06-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Russell','Russell Wagner',NULL,NULL,NULL,NULL,NULL,'Both','3304810540',NULL,'Sample Data','Russell','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Wagner',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (172,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Grant, Jed','Dr. Jed Grant',NULL,NULL,NULL,'1',NULL,'Both','2644056120',NULL,'Sample Data','Jed','','Grant',4,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Dr. Jed Grant',NULL,2,'1997-10-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (173,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Miccosukee Cpo Health Network','Miccosukee Cpo Health Network',NULL,NULL,NULL,NULL,NULL,'Both','1901968302',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Miccosukee Cpo Health Network',NULL,NULL,NULL,0,NULL,NULL,NULL,'Miccosukee Cpo Health Network',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (174,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen family','Jensen family',NULL,NULL,NULL,NULL,NULL,'Both','797435572',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jensen family',5,NULL,'Dear Jensen family',2,NULL,'Jensen family',NULL,NULL,NULL,0,NULL,'Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (175,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Prentice, Toby','Dr. Toby Prentice',NULL,NULL,NULL,NULL,NULL,'Both','3734648232',NULL,'Sample Data','Toby','','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Dr. Toby Prentice',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Sanford','Dr. Sanford Olsen',NULL,NULL,NULL,'1',NULL,'Both','2408737591',NULL,'Sample Data','Sanford','Z','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Dr. Sanford Olsen',NULL,2,'1989-06-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (177,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson-Barkley, Sanford','Mr. Sanford Jameson-Barkley',NULL,NULL,NULL,'4',NULL,'Both','276194408',NULL,'Sample Data','Sanford','P','Jameson-Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Jameson-Barkley',NULL,NULL,'1981-09-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (178,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'nielseni@notmail.biz','nielseni@notmail.biz',NULL,NULL,NULL,'5',NULL,'Both','2235054562',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear nielseni@notmail.biz',1,NULL,'Dear nielseni@notmail.biz',1,NULL,'nielseni@notmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wagner.toby@fishmail.org','wagner.toby@fishmail.org',NULL,NULL,NULL,'5',NULL,'Both','252863661',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear wagner.toby@fishmail.org',1,NULL,'Dear wagner.toby@fishmail.org',1,NULL,'wagner.toby@fishmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Ashley','Ashley Cooper',NULL,NULL,NULL,'4',NULL,'Both','495032298',NULL,'Sample Data','Ashley','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Kathlyn','Kathlyn Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2944584126',NULL,'Sample Data','Kathlyn','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (182,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Global Education Systems','Global Education Systems',NULL,NULL,NULL,'4',NULL,'Both','369166162',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Education Systems',NULL,NULL,NULL,0,NULL,NULL,113,'Global Education Systems',NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (183,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'barryjones@infomail.info','barryjones@infomail.info',NULL,NULL,NULL,'5',NULL,'Both','3019916473',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear barryjones@infomail.info',1,NULL,'Dear barryjones@infomail.info',1,NULL,'barryjones@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (184,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Adams family','Adams family',NULL,NULL,NULL,'5',NULL,'Both','1515323104',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams family',5,NULL,'Dear Adams family',2,NULL,'Adams family',NULL,NULL,NULL,0,NULL,'Adams family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Truman','Truman Cooper III',NULL,NULL,NULL,NULL,NULL,'Both','938772676',NULL,'Sample Data','Truman','','Cooper',NULL,4,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Cooper III',NULL,2,'1965-09-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (186,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Troy','Troy Müller',NULL,NULL,NULL,NULL,NULL,'Both','2080888850',NULL,'Sample Data','Troy','H','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Müller',NULL,2,'2002-11-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (187,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Rodrigo','Rodrigo Samuels',NULL,NULL,NULL,NULL,NULL,'Both','1345988157',NULL,'Sample Data','Rodrigo','Q','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Samuels',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'lawerencer92@testmail.co.uk','lawerencer92@testmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','585163192',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear lawerencer92@testmail.co.uk',1,NULL,'Dear lawerencer92@testmail.co.uk',1,NULL,'lawerencer92@testmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (189,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,'2',NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (190,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'bachman.g.rosario26@testmail.co.uk','bachman.g.rosario26@testmail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','3077201033',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear bachman.g.rosario26@testmail.co.uk',1,NULL,'Dear bachman.g.rosario26@testmail.co.uk',1,NULL,'bachman.g.rosario26@testmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Brigette','Brigette Bachman',NULL,NULL,NULL,'2',NULL,'Both','692911964',NULL,'Sample Data','Brigette','C','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Bachman',NULL,1,'1976-03-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (192,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Terrell family','Samson-Terrell family',NULL,NULL,NULL,NULL,NULL,'Both','4200246244',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson-Terrell family',5,NULL,'Dear Samson-Terrell family',2,NULL,'Samson-Terrell family',NULL,NULL,NULL,0,NULL,'Samson-Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (193,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,NULL,NULL,'Both','1144797465',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller family',5,NULL,'Dear Müller family',2,NULL,'Müller family',NULL,NULL,NULL,0,NULL,'Müller family',NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (194,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'olsen.allen@fishmail.co.nz','olsen.allen@fishmail.co.nz',NULL,NULL,NULL,'4',NULL,'Both','616930330',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear olsen.allen@fishmail.co.nz',1,NULL,'Dear olsen.allen@fishmail.co.nz',1,NULL,'olsen.allen@fishmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Ashley','Ashley Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1909485085',NULL,'Sample Data','Ashley','N','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Wilson',NULL,1,NULL,0,NULL,NULL,NULL,'Yucca Valley Advocacy Fellowship',NULL,NULL,146,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Ashley','Ashley Patel',NULL,NULL,NULL,'3',NULL,'Both','3816127456',NULL,'Sample Data','Ashley','E','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Patel',NULL,1,'1964-01-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kathleen','Kathleen Jensen',NULL,NULL,NULL,'3',NULL,'Both','2413791663',NULL,'Sample Data','Kathleen','Q','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Jensen',NULL,1,'1969-02-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (198,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Olsen-Jacobs, Nicole','Nicole Olsen-Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2599520308',NULL,'Sample Data','Nicole','','Olsen-Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Olsen-Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:55'), + (199,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Kenny','Mr. Kenny Olsen II',NULL,NULL,NULL,'4',NULL,'Both','293860292',NULL,'Sample Data','Kenny','K','Olsen',3,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Olsen II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (200,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Kiara','Kiara Smith',NULL,NULL,NULL,NULL,NULL,'Both','550960995',NULL,'Sample Data','Kiara','T','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Smith',NULL,NULL,'1944-07-30',1,'2021-02-16',NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'), + (201,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wagner, Jay','Jay Wagner III',NULL,NULL,NULL,NULL,NULL,'Both','3927011642',NULL,'Sample Data','Jay','','Wagner',NULL,4,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Wagner III',NULL,2,'1960-12-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2021-10-14 04:23:54','2021-10-14 04:23:54'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -2135,86 +2138,86 @@ INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `co (11,43,1,NULL,1,'2009-07-01 12:55:41',0.00,200.00,NULL,NULL,'PL43II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), (12,32,1,NULL,1,'2009-10-01 11:53:50',0.00,200.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), (13,32,1,NULL,1,'2009-12-01 12:55:41',0.00,200.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (14,124,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'265d4a9ad0de9fd2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (15,101,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'f7157b3b3fa5c283',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (16,24,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'57e38d761e59a721',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (17,14,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'88168b573cb3617a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (18,10,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'f00c6d2a40dc2a64',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (19,106,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'b86c8bcd44bc0a1e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (20,47,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'a095a0d306cda22f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (21,17,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'bd9eaeec577b8efc',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (22,18,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'d9d191b9bea2b62e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (23,114,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'339a7db343e94bc2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (24,11,2,NULL,1,'2021-07-26 14:08:49',0.00,1200.00,NULL,NULL,'d329a07dc00e1ca0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (25,168,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'ae8e0c78ac7fc6f3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (26,199,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'6db138fa4b2db889',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (27,25,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'1aade87b8799b7f0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (28,72,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'283aee0df5c8c237',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (29,115,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'9fbafd4b5679a855',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (30,119,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'91ccd804f3b76ec5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (31,67,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'60ab832261bf5c1b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (32,89,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'a3221cb2433d03cd',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (33,148,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'40fbece99ed55b19',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (34,71,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'46c4a6820032e43a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (35,68,2,NULL,1,'2021-07-26 14:08:49',0.00,1200.00,NULL,NULL,'14827126e69c3dd2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (36,62,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'9235a2719cf32e3f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (37,95,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'d42cdfc830be6a93',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (38,69,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'73a6aaa10274b3c1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (39,16,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'faeb1d70680f56d5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (40,171,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'b336bcfd69b8b819',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (41,122,2,NULL,1,'2021-07-26 14:08:49',0.00,50.00,NULL,NULL,'8fc57cfbdd77acd5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (42,111,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'24c041fa93005434',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (43,182,2,NULL,1,'2021-07-26 14:08:49',0.00,100.00,NULL,NULL,'c17dffac419ffdcf',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (45,3,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'9e7be43ff5f873d3',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (46,4,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'be9a3cc452954f73',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (47,6,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'f983f223240219db',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (48,19,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'c2540070bae2289b',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (49,21,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'cd6cd9487ab311f8',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (50,23,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'733de302f9256a05',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (51,25,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'b5c122ed978c1c6f',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (52,27,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'dd90ceb664d90bea',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (53,41,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'a8f60d370111743d',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (54,43,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'3c0eed9086036f19',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (55,49,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'27c59bebfb548249',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (56,53,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'33ba84e7587ebc6c',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (57,54,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'26ed41bc3d4d6c3d',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (58,55,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'c79544d018331a7a',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (59,66,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'c6e7f4e18e693f6f',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (60,68,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'dd83f3d146ff5e8c',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (61,70,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'744c965d085afa74',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (62,75,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'6d14827b0441bfe8',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (63,83,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'10b466c494c963e1',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (64,86,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'349a5c60c0808612',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (65,91,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'e8744fe637a6ba6e',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (66,93,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'014a8b245afaa58c',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (67,98,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'8b323d9a9a19cb07',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (68,102,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'3aafb20b38f0f470',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (69,105,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'019fada0c0e1d439',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (70,110,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'5a759e1e7746035c',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (71,112,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'20bcbdfe99fcda71',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (72,113,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'68e88dd16e0922d0',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (73,116,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'bf733e3bafbde15e',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (74,117,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'fce8ba604a6cec44',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (75,121,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'8a0509d7c745c313',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (76,124,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'271e0a56c2353e1d',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (77,131,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'17df6e7505bf904f',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (78,142,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'6128d1f2f2ef28d2',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (79,144,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'aa15ef80bdb20881',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (80,149,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'e0f26a01d7162233',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (81,152,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'b004479cec4aba24',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (82,158,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'e300b9a6923825d1',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (83,165,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'2082bfc0bf4e9a6e',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (84,166,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'2ea74cf5414ef9e4',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (85,167,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'f9ed2b4c61761269',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (86,170,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'0759cde1834b181e',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (87,173,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'108a57b20490daed',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (88,176,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'5f21e73f191d5cbf',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (89,183,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'466bf29da2613307',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (90,190,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'e79204c85376e81d',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (91,197,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'79d4eebfbb24b666',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (92,199,4,NULL,1,'2021-07-26 14:08:50',0.00,800.00,NULL,NULL,'20fca987b08ebe96',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (93,200,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'365932a74590a754',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (94,201,4,NULL,1,'2021-07-26 14:08:50',0.00,50.00,NULL,NULL,'b20dfffdc357e928',NULL,NULL,'USD',NULL,NULL,'2021-07-26 14:08:50',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); + (14,90,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'336a2be8849c513b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,185,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'b41b63804835db17',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,117,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'30707bdd0036a11d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,63,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'f615441da9d778ad',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,168,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'465dd61e8780c563',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,195,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'46fee5a7a1a4453a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,194,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'a52e614bdf2191c4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,51,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'6aedd8d8c265eb06',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,132,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'08b4b1cead3c903c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,23,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'5581286b492d7f1c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,152,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'16f8ef0cfafa0255',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,17,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'2fc6b73e9113a98b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,44,2,NULL,1,'2021-10-13 21:23:55',0.00,100.00,NULL,NULL,'6deef275e898d941',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,56,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'ea45eaf33f4496a7',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,85,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'a061951fffb181c6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,4,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'3beb1ae16bed4dfc',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,127,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'aba1ebf533a192fb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,30,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'e51f787577a6158d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,180,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'3c218c08992a227d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,107,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'953b38a2fd65aaca',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,113,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'76aab48c99f3cdf4',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,92,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'53fd3ff288a6ac48',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,70,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'ee89eefdbc2b0d17',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,16,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'ac2bb1a3a4f21eae',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (38,201,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'9ddf1f7d015bf77d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (39,5,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'a98fb1fdf1643ccd',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (40,58,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'bf0893884bf6927c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (41,19,2,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'1bbc4d49e4d7e15b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (42,170,2,NULL,1,'2021-10-13 21:23:55',0.00,1200.00,NULL,NULL,'e088fc325e7ced95',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (43,159,2,NULL,1,'2021-10-13 21:23:55',0.00,1200.00,NULL,NULL,'fc96e364fc5260ff',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (45,12,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'89474d05c5f39994',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (46,13,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'2cb5b9ff43ae28cb',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (47,18,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'c94659092628227a',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (48,21,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'5b09c886c3bdf851',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (49,22,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'b5bdcad709c2bfab',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (50,33,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'ae364912ef6a7985',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (51,35,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'44cae8db1b816fc2',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (52,41,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'769b8756d7717132',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (53,46,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'2ab849c71a69961d',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (54,50,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'5a56d33babcf8687',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (55,51,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'b3361ee994d7fa68',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (56,55,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'bf018db8cd3303b4',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (57,60,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'0f9949d2ec3ff270',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (58,64,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'d788f0e3c987ead1',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (59,73,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'f3e5305d70fc5133',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (60,82,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'fccdb9b92972d68e',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (61,84,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'97a7b19fd9d63661',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (62,89,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'b628a833883bcab0',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (63,93,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'fa9e4c3fa2ad6656',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (64,100,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'663cac64e12684f1',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (65,103,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'e4037df9657e1b24',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (66,104,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'b817fae05c14837d',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (67,107,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'bcc16c72b720d2e2',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (68,110,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'095a67c3d040d66b',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (69,114,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'d8e1bc59b753a862',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (70,117,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'84bc4b83a05daf30',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (71,122,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'7853f510147594df',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (72,123,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'882aef032e8bb52e',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (73,125,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'09bf84d91a24d1db',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (74,129,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'6c2825d1a0c88cd7',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (75,133,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'ef76d9d0d293fa6b',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (76,136,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'7841bcf422e3f93c',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (77,142,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'005345d7deb28d36',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (78,143,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'e5f88e7dd97bc6d2',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (79,144,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'027ce2b64fc8841d',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (80,147,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'03214fc447c50a52',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (81,151,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'b8d570025384a9eb',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (82,153,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'6904fcf8eabda81d',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (83,155,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'e70812efd9b41bb2',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (84,157,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'78e6b8f15edc4f0c',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (85,158,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'6520927bc905b26e',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (86,166,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'094887ad144afe0e',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (87,171,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'b66600820dc92da1',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (88,179,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'5b685284348b5b12',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (89,184,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'78485ffadc4f02ab',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (90,185,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'b871a4dcc2ab2f92',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (91,187,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'dfe6d72cceddad1e',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (92,191,4,NULL,1,'2021-10-13 21:23:55',0.00,50.00,NULL,NULL,'96706b843d760190',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (93,196,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'e167222a259f3cc4',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (94,200,4,NULL,1,'2021-10-13 21:23:55',0.00,800.00,NULL,NULL,'25e79f708ae0b0dc',NULL,NULL,'USD',NULL,NULL,'2021-10-13 21:23:55',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */; UNLOCK TABLES; @@ -2256,8 +2259,8 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_soft` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_soft` DISABLE KEYS */; INSERT INTO `civicrm_contribution_soft` (`id`, `contribution_id`, `contact_id`, `amount`, `currency`, `pcp_id`, `pcp_display_in_roll`, `pcp_roll_nickname`, `pcp_personal_note`, `soft_credit_type_id`) VALUES - (1,8,39,10.00,'USD',1,1,'Jones Family','Helping Hands',10), - (2,9,39,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); + (1,8,48,10.00,'USD',1,1,'Jones Family','Helping Hands',10), + (2,9,48,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -2866,7 +2869,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES - (1,'Default Domain Name',NULL,'5.42.1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); + (1,'Default Domain Name',NULL,'5.43.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -2878,207 +2881,192 @@ LOCK TABLES `civicrm_email` WRITE; /*!40000 ALTER TABLE `civicrm_email` DISABLE KEYS */; INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (2,60,1,'russellp@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (3,94,1,'mcreynolds.kenny33@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (4,94,1,'kennymcreynolds@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (5,81,1,'gonzlezm@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (6,81,1,'megang18@testing.info',0,0,0,0,NULL,NULL,NULL,NULL), - (7,195,1,'estat36@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (8,195,1,'terry.esta30@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (9,69,1,'blackwellb@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (10,69,1,'blackwellb40@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (11,6,1,'cruz.n.brittney21@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), - (12,6,1,'brittneycruz@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (13,173,1,'yadav.barry@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (14,173,1,'yadav.v.barry20@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (15,159,1,'daz.g.sharyn@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (16,159,1,'dazs@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (17,185,1,'valenedimitrov@example.info',1,0,0,0,NULL,NULL,NULL,NULL), - (18,185,1,'vdimitrov@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL), - (19,19,1,'wagner.r.landon49@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (20,19,1,'landonwagner@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (21,103,1,'rdaz@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (22,10,1,'jensenm@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (23,119,1,'smith.sherman92@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (24,137,1,'roberts.rodrigo1@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (25,137,1,'robertsr@lol.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (26,52,1,'leek87@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), - (27,30,1,'jacobs.erik34@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), - (28,171,1,'chowskij@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (29,171,1,'juliannchowski@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (30,181,1,'cooper.ashley37@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (31,27,1,'yadav.jackson@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (32,27,1,'jacksonyadav@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), - (33,17,1,'wilson.claudio25@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (34,17,1,'ct.wilson@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (35,115,1,'terryk@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (36,115,1,'terry.kiara@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (37,201,1,'barryz@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), - (38,201,1,'barryzope22@example.com',0,0,0,0,NULL,NULL,NULL,NULL), - (39,166,1,'andrewwattson@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), - (40,138,1,'wagner.margaret11@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (41,138,1,'mwagner35@airmail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (42,61,1,'reynoldss@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), - (43,56,1,'adamsb@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (44,71,1,'lareed@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (45,71,1,'deforest.r.laree79@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (46,32,1,'beulan@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (47,32,1,'bnielsen17@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (48,21,1,'jensen.beula29@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (49,49,1,'kb.jameson@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (50,49,1,'kb.jameson83@sample.com',0,0,0,0,NULL,NULL,NULL,NULL), - (51,11,1,'robertss51@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (52,78,1,'rebekaha78@example.net',1,0,0,0,NULL,NULL,NULL,NULL), - (53,78,1,'rebekaha34@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (54,133,1,'jeromeg3@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (55,133,1,'gonzlez.jerome@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (56,184,1,'ashleymcreynolds@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (57,184,1,'ashleymcreynolds11@lol.org',0,0,0,0,NULL,NULL,NULL,NULL), - (58,198,1,'lawerencemcreynolds39@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (59,55,1,'smith.barry@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (60,111,1,'bachmana@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), - (61,35,1,'jedj1@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (62,50,1,'jjones@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (63,134,1,'ashliebachman@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (64,134,1,'bachmana73@testing.com',0,0,0,0,NULL,NULL,NULL,NULL), - (65,114,1,'jameson.sharyn@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), - (66,175,1,'terry.margaret2@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (67,175,1,'terry.margaret74@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (68,90,1,'wilson.sanford@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (69,90,1,'wilson.sanford27@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (70,80,1,'samuels.laree@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (71,80,1,'samuels.laree8@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (72,193,1,'eleonoradams1@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), - (73,193,1,'adams.eleonor40@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (74,128,1,'lareedeforest@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), - (75,197,1,'shaunag@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (76,169,1,'alidacooper@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), - (77,169,1,'acooper@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (78,126,1,'wattson.z.brigette@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (79,145,1,'ls.jacobs88@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (80,145,1,'jacobsl@sample.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (81,72,1,'norrisjensen@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (82,72,1,'nm.jensen@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (83,192,1,'prentice-terrell.sherman@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (84,192,1,'prentice-terrell.l.sherman@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (85,95,1,'terrelli51@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (86,124,1,'terrell.santina@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (87,96,1,'chowskil68@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (88,96,1,'lawerencechowski92@example.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (89,79,1,'lyadav35@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (90,79,1,'lyadav@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (91,62,1,'maxwell@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (92,62,1,'chowski-yadav.maxwell75@sample.org',0,0,0,0,NULL,NULL,NULL,NULL), - (93,148,1,'chowski-yadav.arlyne@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), - (94,3,1,'mller.rolando66@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (95,150,1,'mllerb@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (96,150,1,'mller.brittney62@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (97,100,1,'nielsenj@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (98,100,1,'nielsen.jackson90@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (99,24,1,'es.nielsen@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (100,117,1,'junkon@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (101,117,1,'nielsen.junko19@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (102,87,1,'olsenr@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (103,82,1,'felishaolsen@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (104,82,1,'felishaolsen11@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (105,104,1,'olsenj@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (106,139,1,'olsenm@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), - (107,12,1,'angelikam@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (108,176,1,'mller.b.ray49@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (109,67,1,'princessp46@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (110,106,1,'parkerj@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (111,106,1,'jx.parker@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (112,59,1,'parker.e.junko@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), - (113,59,1,'junkop96@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (114,116,1,'rosariod@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), - (115,116,1,'rosariod@airmail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (116,189,1,'deforestf@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (117,189,1,'fo.deforest42@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (118,142,1,'deforest.l.eleonor44@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (119,142,1,'eleonord@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (120,140,1,'brzczysawterry@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (121,140,1,'terryb67@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (122,47,1,'rosariot82@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (123,105,1,'heiditerry@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (124,105,1,'terryh35@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (125,118,1,'ashleyterry49@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), - (126,118,1,'ashleyt@spamalot.info',0,0,0,0,NULL,NULL,NULL,NULL), - (127,200,1,'dh.lee-adams89@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (128,51,1,'adams.rebekah@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (129,160,1,'jeromerobertson@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (130,132,1,'arlyner@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (131,132,1,'robertsona83@lol.org',0,0,0,0,NULL,NULL,NULL,NULL), - (132,108,1,'rosarior@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (133,178,1,'robertson.claudio@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (134,178,1,'cn.robertson66@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (135,186,1,'jwagner@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (136,93,1,'delanaivanov-wagner@example.net',1,0,0,0,NULL,NULL,NULL,NULL), - (137,190,1,'samuels.rodrigo@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (138,190,1,'samuels.rodrigo@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (139,68,1,'kandaces84@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (140,40,1,'se.samuels@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (141,180,1,'ashleygrant@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (142,180,1,'ashleygrant15@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (143,136,1,'grant.elizabeth@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), - (144,136,1,'elizabethgrant@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (145,75,1,'maxwellg@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (146,156,1,'grantm@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (147,156,1,'grant.f.merrie@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (148,46,1,'reynolds.miguel46@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (149,123,1,'reynolds.princess@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (150,123,1,'reynolds.princess14@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (151,45,1,'lareereynolds@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (152,23,1,'scottr24@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (153,98,1,'kathleenolsen@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (154,143,1,'bc.wagner-olsen@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (155,143,1,'wagner-olsen.betty42@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL), - (156,5,1,'wagner-olsenb57@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (157,196,1,'meganlee42@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (158,196,1,'meganlee@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), - (159,194,1,'lawerencel@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), - (160,86,1,'lee.p.ashlie@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), - (161,89,1,'samsonr@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (162,89,1,'samson.rebekah@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (163,158,1,'roberts-samson.a.sherman@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (164,77,1,'roberts-samson.i.arlyne20@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (165,84,1,'grants54@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (166,44,1,'shaunaadams@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (167,85,1,'damarissmith-grant-adams@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (168,43,1,'brigettes@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (169,43,1,'brigettesmith-grant-adams@testing.com',0,0,0,0,NULL,NULL,NULL,NULL), - (170,179,3,'feedback@kaneohetrust.org',1,0,0,0,NULL,NULL,NULL,NULL), - (171,86,2,'lee.p.ashlie@kaneohetrust.org',0,0,0,0,NULL,NULL,NULL,NULL), - (172,167,3,'sales@urbancenter.org',1,0,0,0,NULL,NULL,NULL,NULL), - (173,6,2,'cruz.brittney57@urbancenter.org',0,0,0,0,NULL,NULL,NULL,NULL), - (174,154,3,'info@charlotteassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (175,88,3,'feedback@globalsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (176,59,2,'je.parker74@globalsystems.org',0,0,0,0,NULL,NULL,NULL,NULL), - (177,70,3,'contact@dowlentechnology.org',1,0,0,0,NULL,NULL,NULL,NULL), - (178,54,2,'kv.daz@dowlentechnology.org',1,0,0,0,NULL,NULL,NULL,NULL), - (179,191,3,'info@ruralmusic.org',1,0,0,0,NULL,NULL,NULL,NULL), - (180,87,2,'olsen.c.roland5@ruralmusic.org',0,0,0,0,NULL,NULL,NULL,NULL), - (181,188,3,'feedback@jacksoneducation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (182,39,2,'zope.sherman@jacksoneducation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (183,57,3,'info@cornettsvilleliteracy.org',1,0,0,0,NULL,NULL,NULL,NULL), - (184,200,2,'delanal96@cornettsvilleliteracy.org',0,0,0,0,NULL,NULL,NULL,NULL), - (185,109,3,'service@ruralalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), - (186,187,2,'samson.o.rodrigo@ruralalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), - (187,34,3,'sales@ruralsustainability.org',1,0,0,0,NULL,NULL,NULL,NULL), - (188,152,3,'sales@creativeassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (189,76,3,'info@secondpartners.org',1,0,0,0,NULL,NULL,NULL,NULL), - (190,190,2,'samuels.rodrigo@secondpartners.org',0,0,0,0,NULL,NULL,NULL,NULL), - (191,97,3,'sales@sierrasystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (192,38,2,'clintwagner@sierrasystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (193,125,3,'feedback@dawsonassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (194,31,3,'sales@idahocollective.org',1,0,0,0,NULL,NULL,NULL,NULL), - (195,116,2,'@idahocollective.org',0,0,0,0,NULL,NULL,NULL,NULL), - (196,120,3,'contact@parrishadvocacyinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), - (197,104,2,'jacksonolsen@parrishadvocacyinitiative.org',0,0,0,0,NULL,NULL,NULL,NULL), - (198,73,3,'service@dowlenculturetrust.org',1,0,0,0,NULL,NULL,NULL,NULL), - (199,72,2,'jensenn@dowlenculturetrust.org',0,0,0,0,NULL,NULL,NULL,NULL), - (200,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (201,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (202,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); + (2,104,1,'jensen.x.kiara@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (3,4,1,'irvinw@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (4,188,1,'robertson.v.lawerence80@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (5,188,1,'lawerencer92@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (6,130,1,'lee.elina@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (7,107,1,'kterrell@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (8,195,1,'ashleyw7@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (9,121,1,'blackwell.andrew@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (10,121,1,'andrewb81@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (11,172,1,'jedgrant@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (12,172,1,'jgrant@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (13,190,1,'rosariob@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (14,190,1,'bachman.g.rosario26@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (15,138,1,'terryi@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (16,191,1,'bachman.c.brigette75@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (17,7,1,'arlyner@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (18,7,1,'areynolds@lol.info',0,0,0,0,NULL,NULL,NULL,NULL), + (19,67,1,'reynolds.q.alexia@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (20,30,1,'lawerencejacobs@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (21,30,1,'lawerencejacobs@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (22,109,1,'brzczysaww@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (23,109,1,'wattson.brzczysaw59@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (24,98,1,'norriscruz@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (25,94,1,'terrell.rolando@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), + (26,94,1,'rterrell@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (27,116,1,'olsenb@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (28,99,1,'meganb@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (29,36,1,'landond29@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (30,171,1,'wagner.russell@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (31,149,1,'rodrigoj@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (32,149,1,'rodrigoj71@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (33,199,1,'kk.olsen1@sample.com',1,0,0,0,NULL,NULL,NULL,NULL), + (34,199,1,'olsen.kenny@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (35,165,1,'olsen.winford55@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), + (36,27,1,'mller.junko11@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (37,8,1,'terry.barry65@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (38,103,1,'carylonp@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (39,103,1,'cu.patel@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (40,23,1,'samson.bernadette68@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (41,38,1,'iveyp@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (42,122,1,'jones.ivey@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), + (43,55,1,'kiarab27@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (44,55,1,'barkley.kiara62@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (45,72,1,'mller.w.scott33@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (46,72,1,'scottm@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (47,18,1,'wilson.u.teddy@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (48,44,1,'achowski@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (49,179,1,'twagner@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (50,179,1,'wagner.toby@fishmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (51,57,1,'scottl29@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (52,57,1,'lee.v.scott@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (53,114,1,'lterrell14@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (54,15,1,'bx.nielsen@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (55,15,1,'beulanielsen33@notmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (56,128,1,'josefawattson@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (57,85,1,'cruz.maxwell@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (58,139,1,'bobivanov49@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), + (59,139,1,'bobi@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (60,194,1,'olsen.allen@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (61,43,1,'samuels.billy@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (62,26,1,'samuels.jina70@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (63,47,1,'craigwagner25@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (64,47,1,'ct.wagner18@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (65,54,1,'santinadeforest@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (66,70,1,'cruzl@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (67,70,1,'lashawndac46@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (68,24,1,'jacobsb85@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (69,24,1,'br.jacobs@fishmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (70,6,1,'samuelsl20@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (71,41,1,'bachmanb50@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (72,2,1,'barkley.kathleen@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (73,2,1,'barkley.kathleen@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (74,10,1,'bj.wilson@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (75,120,1,'samuels.alexia57@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (76,135,1,'samuels.russell85@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), + (77,135,1,'samuels.i.russell@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (78,118,1,'samuels.norris43@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (79,75,1,'lashawndasamuels@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (80,76,1,'terry.teddy73@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (81,76,1,'terry.teddy@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL), + (82,126,1,'prentice.josefa@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (83,65,1,'erikterry-prentice51@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (84,65,1,'erikt75@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (85,51,1,'adams.ray@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (86,115,1,'angelikaadams@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (87,115,1,'adams.i.angelika@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (88,110,1,'adamsr@example.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (89,110,1,'adams.rebekah45@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), + (90,74,1,'adamsf@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (91,71,1,'samson.roland@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (92,71,1,'samson.l.roland68@testing.com',0,0,0,0,NULL,NULL,NULL,NULL), + (93,143,1,'terrell.t.tanya51@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), + (94,143,1,'terrell.tanya@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (95,170,1,'samson-terrell.esta@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (96,170,1,'esamson-terrell@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (97,50,1,'de.samson-terrell68@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (98,97,1,'amller40@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (99,60,1,'ks.jameson-mller@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (100,186,1,'troymller95@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (101,150,1,'craigc@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (102,150,1,'cooperc58@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (103,185,1,'trumancooper52@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (104,113,1,'wagner.juliann@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (105,17,1,'angelikaw@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (106,9,1,'samsonl@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (107,9,1,'lincolns@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (108,119,1,'wattson.betty@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), + (109,119,1,'wattson.betty@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (110,56,1,'samson-wattson.omar@example.org',1,0,0,0,NULL,NULL,NULL,NULL), + (111,56,1,'omars@sample.org',0,0,0,0,NULL,NULL,NULL,NULL), + (112,19,1,'samson-wattsonr39@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (113,19,1,'rv.samson-wattson@spamalot.info',0,0,0,0,NULL,NULL,NULL,NULL), + (114,178,1,'irvinn@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (115,178,1,'nielseni@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (116,84,1,'troyn83@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (117,84,1,'troynielsen@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (118,117,1,'sm.terry@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (119,117,1,'shermant@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (120,82,1,'ms.terry@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (121,82,1,'terry.s.magan@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (122,89,1,'roberts.sonny3@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (123,89,1,'roberts.sonny@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (124,181,1,'robertsk33@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (125,21,1,'elbertr@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (126,21,1,'roberts.elbert@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (127,155,1,'jj.roberts@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (128,164,1,'samuelss@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (129,164,1,'samuelss@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (130,11,1,'herminias@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (131,29,1,'tz.samuels7@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (132,29,1,'samuels.z.toby@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (133,187,1,'rq.samuels@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (134,176,1,'olsens@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (135,112,1,'tjacobs48@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (136,106,1,'patelj@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), + (137,45,1,'chowski.damaris@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (138,137,1,'kathlynj3@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (139,145,1,'teddy@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (140,59,1,'chowski-jamesonm67@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (141,183,1,'barryjones@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (142,35,1,'im.dimitrov-jones@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (143,35,1,'iveydimitrov-jones@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (144,92,1,'jones.toby79@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (145,92,1,'tobyj54@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (146,161,1,'jinaj@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (147,161,1,'jinaj@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (148,168,1,'herminiap49@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (149,90,1,'olsen.heidi@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (150,90,1,'heidiolsen@example.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (151,101,1,'olsena97@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (152,177,1,'sanfordj@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (153,177,1,'jameson-barkley.p.sanford83@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (154,31,1,'tc.jameson-barkley@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (155,197,1,'jensen.q.kathleen@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (156,197,1,'jensenk69@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (157,167,3,'feedback@lincolncollective.org',1,0,0,0,NULL,NULL,NULL,NULL), + (158,7,2,'reynolds.arlyne8@lincolncollective.org',0,0,0,0,NULL,NULL,NULL,NULL), + (159,95,3,'info@acpoetryassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (160,89,2,'roberts.sonny2@acpoetryassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), + (161,42,3,'service@ruraltrust.org',1,0,0,0,NULL,NULL,NULL,NULL), + (162,39,2,'erikw@ruraltrust.org',1,0,0,0,NULL,NULL,NULL,NULL), + (163,169,3,'service@ssartsassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (164,58,2,'arlynen@ssartsassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (165,81,3,'info@globaltrust.org',1,0,0,0,NULL,NULL,NULL,NULL), + (166,44,2,'allenchowski@globaltrust.org',0,0,0,0,NULL,NULL,NULL,NULL), + (167,134,3,'sales@sierrafoodservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (168,141,3,'service@urbanempowerment.org',1,0,0,0,NULL,NULL,NULL,NULL), + (169,56,2,'os.samson-wattson@urbanempowerment.org',0,0,0,0,NULL,NULL,NULL,NULL), + (170,125,3,'service@lhtechnologycollective.org',1,0,0,0,NULL,NULL,NULL,NULL), + (171,17,2,'37@lhtechnologycollective.org',0,0,0,0,NULL,NULL,NULL,NULL), + (172,68,3,'contact@oklahomaartscollective.org',1,0,0,0,NULL,NULL,NULL,NULL), + (173,26,2,'samuels.jina64@oklahomaartscollective.org',0,0,0,0,NULL,NULL,NULL,NULL), + (174,173,3,'contact@mchealthnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), + (175,100,3,'service@hawaiicenter.org',1,0,0,0,NULL,NULL,NULL,NULL), + (176,35,2,'dimitrov-jones.m.ivey54@hawaiicenter.org',0,0,0,0,NULL,NULL,NULL,NULL), + (177,14,3,'sales@greenassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (178,62,2,'samuels.justina@greenassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (179,87,3,'info@boisepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), + (180,151,2,'scarletpatel80@boisepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), + (181,129,3,'contact@globalfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL), + (182,67,2,'alexiar41@globalfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL), + (183,182,3,'contact@globaleducationsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), + (184,113,2,'wagnerj@globaleducationsystems.org',0,0,0,0,NULL,NULL,NULL,NULL), + (185,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (186,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (187,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -3168,163 +3156,163 @@ INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, (26,'civicrm_financial_item',13,13,200.00), (27,'civicrm_contribution',14,14,100.00), (28,'civicrm_financial_item',14,14,100.00), - (29,'civicrm_contribution',16,15,100.00), + (29,'civicrm_contribution',15,15,100.00), (30,'civicrm_financial_item',15,15,100.00), - (31,'civicrm_contribution',18,16,100.00), + (31,'civicrm_contribution',16,16,100.00), (32,'civicrm_financial_item',16,16,100.00), - (33,'civicrm_contribution',20,17,100.00), + (33,'civicrm_contribution',17,17,100.00), (34,'civicrm_financial_item',17,17,100.00), - (35,'civicrm_contribution',22,18,100.00), + (35,'civicrm_contribution',18,18,100.00), (36,'civicrm_financial_item',18,18,100.00), - (37,'civicrm_contribution',23,19,100.00), + (37,'civicrm_contribution',19,19,100.00), (38,'civicrm_financial_item',19,19,100.00), - (39,'civicrm_contribution',26,20,100.00), + (39,'civicrm_contribution',20,20,100.00), (40,'civicrm_financial_item',20,20,100.00), - (41,'civicrm_contribution',30,21,100.00), + (41,'civicrm_contribution',21,21,100.00), (42,'civicrm_financial_item',21,21,100.00), - (43,'civicrm_contribution',32,22,100.00), + (43,'civicrm_contribution',22,22,100.00), (44,'civicrm_financial_item',22,22,100.00), - (45,'civicrm_contribution',33,23,100.00), + (45,'civicrm_contribution',23,23,100.00), (46,'civicrm_financial_item',23,23,100.00), - (47,'civicrm_contribution',34,24,100.00), + (47,'civicrm_contribution',24,24,100.00), (48,'civicrm_financial_item',24,24,100.00), - (49,'civicrm_contribution',36,25,100.00), + (49,'civicrm_contribution',25,25,100.00), (50,'civicrm_financial_item',25,25,100.00), - (51,'civicrm_contribution',40,26,100.00), + (51,'civicrm_contribution',26,26,100.00), (52,'civicrm_financial_item',26,26,100.00), - (53,'civicrm_contribution',42,27,100.00), - (54,'civicrm_financial_item',27,27,100.00), - (55,'civicrm_contribution',43,28,100.00), - (56,'civicrm_financial_item',28,28,100.00), - (57,'civicrm_contribution',15,29,50.00), + (53,'civicrm_contribution',27,27,50.00), + (54,'civicrm_financial_item',27,27,50.00), + (55,'civicrm_contribution',28,28,50.00), + (56,'civicrm_financial_item',28,28,50.00), + (57,'civicrm_contribution',29,29,50.00), (58,'civicrm_financial_item',29,29,50.00), - (59,'civicrm_contribution',17,30,50.00), + (59,'civicrm_contribution',30,30,50.00), (60,'civicrm_financial_item',30,30,50.00), - (61,'civicrm_contribution',19,31,50.00), + (61,'civicrm_contribution',31,31,50.00), (62,'civicrm_financial_item',31,31,50.00), - (63,'civicrm_contribution',21,32,50.00), + (63,'civicrm_contribution',32,32,50.00), (64,'civicrm_financial_item',32,32,50.00), - (65,'civicrm_contribution',25,33,50.00), + (65,'civicrm_contribution',33,33,50.00), (66,'civicrm_financial_item',33,33,50.00), - (67,'civicrm_contribution',27,34,50.00), + (67,'civicrm_contribution',34,34,50.00), (68,'civicrm_financial_item',34,34,50.00), - (69,'civicrm_contribution',28,35,50.00), + (69,'civicrm_contribution',35,35,50.00), (70,'civicrm_financial_item',35,35,50.00), - (71,'civicrm_contribution',29,36,50.00), + (71,'civicrm_contribution',36,36,50.00), (72,'civicrm_financial_item',36,36,50.00), - (73,'civicrm_contribution',31,37,50.00), + (73,'civicrm_contribution',37,37,50.00), (74,'civicrm_financial_item',37,37,50.00), - (75,'civicrm_contribution',37,38,50.00), + (75,'civicrm_contribution',38,38,50.00), (76,'civicrm_financial_item',38,38,50.00), - (77,'civicrm_contribution',38,39,50.00), + (77,'civicrm_contribution',39,39,50.00), (78,'civicrm_financial_item',39,39,50.00), - (79,'civicrm_contribution',39,40,50.00), + (79,'civicrm_contribution',40,40,50.00), (80,'civicrm_financial_item',40,40,50.00), (81,'civicrm_contribution',41,41,50.00), (82,'civicrm_financial_item',41,41,50.00), - (83,'civicrm_contribution',24,42,1200.00), + (83,'civicrm_contribution',42,42,1200.00), (84,'civicrm_financial_item',42,42,1200.00), - (85,'civicrm_contribution',35,43,1200.00), + (85,'civicrm_contribution',43,43,1200.00), (86,'civicrm_financial_item',43,43,1200.00), - (87,'civicrm_contribution',70,44,50.00), + (87,'civicrm_contribution',51,44,50.00), (88,'civicrm_financial_item',44,44,50.00), - (89,'civicrm_contribution',82,45,50.00), + (89,'civicrm_contribution',64,45,50.00), (90,'civicrm_financial_item',45,45,50.00), - (91,'civicrm_contribution',49,46,50.00), + (91,'civicrm_contribution',63,46,50.00), (92,'civicrm_financial_item',46,46,50.00), - (93,'civicrm_contribution',60,47,50.00), + (93,'civicrm_contribution',74,47,50.00), (94,'civicrm_financial_item',47,47,50.00), - (95,'civicrm_contribution',45,48,50.00), + (95,'civicrm_contribution',80,48,50.00), (96,'civicrm_financial_item',48,48,50.00), - (97,'civicrm_contribution',86,49,50.00), + (97,'civicrm_contribution',50,49,50.00), (98,'civicrm_financial_item',49,49,50.00), - (99,'civicrm_contribution',94,50,50.00), + (99,'civicrm_contribution',76,50,50.00), (100,'civicrm_financial_item',50,50,50.00), - (101,'civicrm_contribution',81,51,50.00), + (101,'civicrm_contribution',77,51,50.00), (102,'civicrm_financial_item',51,51,50.00), (103,'civicrm_contribution',89,52,50.00), (104,'civicrm_financial_item',52,52,50.00), - (105,'civicrm_contribution',48,53,50.00), + (105,'civicrm_contribution',53,53,50.00), (106,'civicrm_financial_item',53,53,50.00), - (107,'civicrm_contribution',59,54,50.00), + (107,'civicrm_contribution',92,54,50.00), (108,'civicrm_financial_item',54,54,50.00), - (109,'civicrm_contribution',71,55,50.00), + (109,'civicrm_contribution',75,55,50.00), (110,'civicrm_financial_item',55,55,50.00), - (111,'civicrm_contribution',47,56,50.00), + (111,'civicrm_contribution',61,56,50.00), (112,'civicrm_financial_item',56,56,50.00), - (113,'civicrm_contribution',78,57,50.00), + (113,'civicrm_contribution',73,57,50.00), (114,'civicrm_financial_item',57,57,50.00), (115,'civicrm_contribution',56,58,50.00), (116,'civicrm_financial_item',58,58,50.00), - (117,'civicrm_contribution',87,59,50.00), + (117,'civicrm_contribution',46,59,50.00), (118,'civicrm_financial_item',59,59,50.00), - (119,'civicrm_contribution',50,60,800.00), + (119,'civicrm_contribution',93,60,800.00), (120,'civicrm_financial_item',60,60,800.00), - (121,'civicrm_contribution',58,61,800.00), + (121,'civicrm_contribution',49,61,800.00), (122,'civicrm_financial_item',61,61,800.00), - (123,'civicrm_contribution',92,62,800.00), + (123,'civicrm_contribution',88,62,800.00), (124,'civicrm_financial_item',62,62,800.00), - (125,'civicrm_contribution',85,63,800.00), + (125,'civicrm_contribution',59,63,800.00), (126,'civicrm_financial_item',63,63,800.00), - (127,'civicrm_contribution',73,64,800.00), + (127,'civicrm_contribution',52,64,800.00), (128,'civicrm_financial_item',64,64,800.00), - (129,'civicrm_contribution',83,65,800.00), + (129,'civicrm_contribution',85,65,800.00), (130,'civicrm_financial_item',65,65,800.00), - (131,'civicrm_contribution',66,66,800.00), + (131,'civicrm_contribution',82,66,800.00), (132,'civicrm_financial_item',66,66,800.00), - (133,'civicrm_contribution',53,67,800.00), + (133,'civicrm_contribution',70,67,800.00), (134,'civicrm_financial_item',67,67,800.00), - (135,'civicrm_contribution',51,68,800.00), + (135,'civicrm_contribution',45,68,800.00), (136,'civicrm_financial_item',68,68,800.00), - (137,'civicrm_contribution',80,69,800.00), + (137,'civicrm_contribution',72,69,800.00), (138,'civicrm_financial_item',69,69,800.00), - (139,'civicrm_contribution',69,70,800.00), + (139,'civicrm_contribution',83,70,800.00), (140,'civicrm_financial_item',70,70,800.00), - (141,'civicrm_contribution',55,71,800.00), + (141,'civicrm_contribution',66,71,800.00), (142,'civicrm_financial_item',71,71,800.00), - (143,'civicrm_contribution',62,72,800.00), + (143,'civicrm_contribution',47,72,800.00), (144,'civicrm_financial_item',72,72,800.00), - (145,'civicrm_contribution',52,73,800.00), + (145,'civicrm_contribution',69,73,800.00), (146,'civicrm_financial_item',73,73,800.00), - (147,'civicrm_contribution',57,74,800.00), + (147,'civicrm_contribution',58,74,800.00), (148,'civicrm_financial_item',74,74,800.00), - (149,'civicrm_contribution',72,75,800.00), + (149,'civicrm_contribution',94,75,800.00), (150,'civicrm_financial_item',75,75,800.00), - (151,'civicrm_contribution',91,76,800.00), + (151,'civicrm_contribution',79,76,800.00), (152,'civicrm_financial_item',76,76,800.00), - (153,'civicrm_contribution',75,77,800.00), + (153,'civicrm_contribution',78,77,800.00), (154,'civicrm_financial_item',77,77,800.00), - (155,'civicrm_contribution',61,78,50.00), + (155,'civicrm_contribution',55,78,50.00), (156,'civicrm_financial_item',78,78,50.00), - (157,'civicrm_contribution',63,79,50.00), + (157,'civicrm_contribution',57,79,50.00), (158,'civicrm_financial_item',79,79,50.00), - (159,'civicrm_contribution',54,80,50.00), + (159,'civicrm_contribution',91,80,50.00), (160,'civicrm_financial_item',80,80,50.00), - (161,'civicrm_contribution',90,81,50.00), + (161,'civicrm_contribution',48,81,50.00), (162,'civicrm_financial_item',81,81,50.00), - (163,'civicrm_contribution',76,82,50.00), + (163,'civicrm_contribution',87,82,50.00), (164,'civicrm_financial_item',82,82,50.00), - (165,'civicrm_contribution',74,83,50.00), + (165,'civicrm_contribution',86,83,50.00), (166,'civicrm_financial_item',83,83,50.00), - (167,'civicrm_contribution',88,84,50.00), + (167,'civicrm_contribution',81,84,50.00), (168,'civicrm_financial_item',84,84,50.00), - (169,'civicrm_contribution',77,85,50.00), + (169,'civicrm_contribution',90,85,50.00), (170,'civicrm_financial_item',85,85,50.00), - (171,'civicrm_contribution',79,86,50.00), + (171,'civicrm_contribution',60,86,50.00), (172,'civicrm_financial_item',86,86,50.00), - (173,'civicrm_contribution',84,87,50.00), + (173,'civicrm_contribution',54,87,50.00), (174,'civicrm_financial_item',87,87,50.00), - (175,'civicrm_contribution',68,88,50.00), + (175,'civicrm_contribution',65,88,50.00), (176,'civicrm_financial_item',88,88,50.00), - (177,'civicrm_contribution',46,89,50.00), + (177,'civicrm_contribution',62,89,50.00), (178,'civicrm_financial_item',89,89,50.00), - (179,'civicrm_contribution',65,90,50.00), + (179,'civicrm_contribution',84,90,50.00), (180,'civicrm_financial_item',90,90,50.00), - (181,'civicrm_contribution',93,91,50.00), + (181,'civicrm_contribution',68,91,50.00), (182,'civicrm_financial_item',91,91,50.00), - (183,'civicrm_contribution',64,92,50.00), + (183,'civicrm_contribution',67,92,50.00), (184,'civicrm_financial_item',92,92,50.00), - (185,'civicrm_contribution',67,93,50.00), + (185,'civicrm_contribution',71,93,50.00), (186,'civicrm_financial_item',93,93,50.00); /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3336,126 +3324,124 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_tag` WRITE; /*!40000 ALTER TABLE `civicrm_entity_tag` DISABLE KEYS */; INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES - (73,'civicrm_contact',3,4), - (74,'civicrm_contact',3,5), - (18,'civicrm_contact',4,4), - (54,'civicrm_contact',13,4), - (75,'civicrm_contact',16,4), - (42,'civicrm_contact',21,4), - (43,'civicrm_contact',21,5), - (32,'civicrm_contact',27,4), - (33,'civicrm_contact',27,5), - (26,'civicrm_contact',30,4), - (27,'civicrm_contact',30,5), - (52,'civicrm_contact',35,5), - (34,'civicrm_contact',37,4), - (112,'civicrm_contact',38,4), - (62,'civicrm_contact',41,5), - (110,'civicrm_contact',45,4), - (111,'civicrm_contact',45,5), - (109,'civicrm_contact',46,4), - (44,'civicrm_contact',49,4), - (94,'civicrm_contact',51,4), - (95,'civicrm_contact',51,5), - (48,'civicrm_contact',54,4), - (49,'civicrm_contact',54,5), - (5,'civicrm_contact',57,2), - (13,'civicrm_contact',58,5), - (86,'civicrm_contact',59,5), - (39,'civicrm_contact',61,5), - (72,'civicrm_contact',62,5), - (12,'civicrm_contact',65,4), - (85,'civicrm_contact',67,4), - (104,'civicrm_contact',68,4), - (16,'civicrm_contact',69,4), - (17,'civicrm_contact',69,5), - (41,'civicrm_contact',71,4), - (66,'civicrm_contact',72,4), - (67,'civicrm_contact',72,5), - (107,'civicrm_contact',75,4), - (108,'civicrm_contact',75,5), - (8,'civicrm_contact',76,1), - (45,'civicrm_contact',78,4), - (46,'civicrm_contact',78,5), - (61,'civicrm_contact',80,5), - (116,'civicrm_contact',83,5), - (118,'civicrm_contact',84,4), - (119,'civicrm_contact',84,5), - (120,'civicrm_contact',85,5), - (79,'civicrm_contact',87,4), - (80,'civicrm_contact',87,5), - (3,'civicrm_contact',88,3), - (59,'civicrm_contact',90,4), - (60,'civicrm_contact',90,5), - (69,'civicrm_contact',95,4), - (70,'civicrm_contact',96,4), - (71,'civicrm_contact',96,5), - (36,'civicrm_contact',99,4), - (37,'civicrm_contact',99,5), - (76,'civicrm_contact',100,5), - (68,'civicrm_contact',101,4), - (22,'civicrm_contact',103,4), - (81,'civicrm_contact',104,4), - (91,'civicrm_contact',105,4), - (92,'civicrm_contact',105,5), - (97,'civicrm_contact',108,4), - (98,'civicrm_contact',108,5), - (6,'civicrm_contact',110,3), - (50,'civicrm_contact',111,4), - (51,'civicrm_contact',111,5), - (55,'civicrm_contact',112,4), - (93,'civicrm_contact',113,5), - (56,'civicrm_contact',114,4), - (57,'civicrm_contact',114,5), - (87,'civicrm_contact',116,5), - (10,'civicrm_contact',120,1), - (11,'civicrm_contact',121,5), - (9,'civicrm_contact',125,1), - (63,'civicrm_contact',128,4), - (82,'civicrm_contact',129,4), - (83,'civicrm_contact',129,5), - (25,'civicrm_contact',137,4), - (90,'civicrm_contact',140,4), - (77,'civicrm_contact',141,4), - (78,'civicrm_contact',141,5), - (113,'civicrm_contact',143,5), - (65,'civicrm_contact',145,5), - (7,'civicrm_contact',152,3), - (23,'civicrm_contact',153,4), - (24,'civicrm_contact',153,5), - (117,'civicrm_contact',158,4), - (19,'civicrm_contact',159,4), - (20,'civicrm_contact',159,5), - (96,'civicrm_contact',160,5), - (28,'civicrm_contact',162,4), - (29,'civicrm_contact',162,5), - (114,'civicrm_contact',163,4), - (14,'civicrm_contact',164,5), - (38,'civicrm_contact',166,4), - (2,'civicrm_contact',167,3), - (64,'civicrm_contact',169,4), - (53,'civicrm_contact',170,4), - (30,'civicrm_contact',171,4), - (31,'civicrm_contact',171,5), - (40,'civicrm_contact',172,5), - (101,'civicrm_contact',174,4), - (102,'civicrm_contact',174,5), - (84,'civicrm_contact',176,4), - (1,'civicrm_contact',179,1), - (105,'civicrm_contact',180,4), - (106,'civicrm_contact',180,5), - (58,'civicrm_contact',182,5), - (47,'civicrm_contact',184,4), - (21,'civicrm_contact',185,5), - (99,'civicrm_contact',186,4), - (100,'civicrm_contact',186,5), - (15,'civicrm_contact',187,4), - (88,'civicrm_contact',189,4), - (89,'civicrm_contact',189,5), - (103,'civicrm_contact',190,4), - (4,'civicrm_contact',191,3), - (115,'civicrm_contact',194,5), - (35,'civicrm_contact',199,5); + (63,'civicrm_contact',2,5), + (14,'civicrm_contact',4,5), + (80,'civicrm_contact',5,4), + (61,'civicrm_contact',6,4), + (62,'civicrm_contact',6,5), + (24,'civicrm_contact',7,5), + (85,'civicrm_contact',9,4), + (86,'civicrm_contact',9,5), + (64,'civicrm_contact',10,4), + (29,'civicrm_contact',12,4), + (30,'civicrm_contact',12,5), + (21,'civicrm_contact',13,4), + (48,'civicrm_contact',18,4), + (49,'civicrm_contact',18,5), + (94,'civicrm_contact',21,4), + (95,'civicrm_contact',21,5), + (39,'civicrm_contact',25,4), + (97,'civicrm_contact',29,5), + (25,'civicrm_contact',30,4), + (26,'civicrm_contact',30,5), + (89,'civicrm_contact',40,5), + (3,'civicrm_contact',42,1), + (55,'civicrm_contact',43,5), + (103,'civicrm_contact',45,4), + (104,'civicrm_contact',45,5), + (112,'civicrm_contact',46,4), + (56,'civicrm_contact',47,4), + (60,'civicrm_contact',49,4), + (71,'civicrm_contact',51,4), + (72,'civicrm_contact',51,5), + (34,'civicrm_contact',53,4), + (57,'civicrm_contact',54,4), + (58,'civicrm_contact',54,5), + (87,'civicrm_contact',56,5), + (45,'civicrm_contact',63,4), + (46,'civicrm_contact',63,5), + (77,'civicrm_contact',64,5), + (7,'civicrm_contact',68,2), + (42,'civicrm_contact',69,4), + (43,'civicrm_contact',69,5), + (59,'civicrm_contact',70,4), + (74,'civicrm_contact',71,5), + (33,'civicrm_contact',73,5), + (69,'civicrm_contact',76,4), + (4,'civicrm_contact',81,1), + (92,'civicrm_contact',82,5), + (6,'civicrm_contact',86,1), + (9,'civicrm_contact',87,1), + (93,'civicrm_contact',89,4), + (110,'civicrm_contact',90,4), + (111,'civicrm_contact',90,5), + (108,'civicrm_contact',92,5), + (115,'civicrm_contact',93,4), + (116,'civicrm_contact',93,5), + (76,'civicrm_contact',97,5), + (27,'civicrm_contact',98,4), + (31,'civicrm_contact',99,4), + (32,'civicrm_contact',99,5), + (8,'civicrm_contact',100,3), + (41,'civicrm_contact',103,4), + (11,'civicrm_contact',104,5), + (12,'civicrm_contact',105,4), + (13,'civicrm_contact',105,5), + (16,'civicrm_contact',107,5), + (73,'civicrm_contact',110,5), + (51,'civicrm_contact',114,4), + (52,'civicrm_contact',114,5), + (28,'civicrm_contact',116,5), + (90,'civicrm_contact',117,4), + (91,'civicrm_contact',117,5), + (68,'civicrm_contact',118,4), + (19,'civicrm_contact',121,4), + (44,'civicrm_contact',122,5), + (70,'civicrm_contact',127,5), + (53,'civicrm_contact',128,4), + (15,'civicrm_contact',130,4), + (35,'civicrm_contact',132,4), + (36,'civicrm_contact',132,5), + (5,'civicrm_contact',134,2), + (65,'civicrm_contact',135,4), + (66,'civicrm_contact',135,5), + (47,'civicrm_contact',136,5), + (22,'civicrm_contact',138,4), + (23,'civicrm_contact',138,5), + (54,'civicrm_contact',139,4), + (117,'civicrm_contact',144,4), + (118,'civicrm_contact',144,5), + (105,'civicrm_contact',145,5), + (2,'civicrm_contact',146,2), + (83,'civicrm_contact',147,4), + (84,'civicrm_contact',147,5), + (78,'civicrm_contact',150,4), + (79,'civicrm_contact',150,5), + (102,'civicrm_contact',151,5), + (37,'civicrm_contact',152,4), + (67,'civicrm_contact',154,4), + (17,'civicrm_contact',156,4), + (18,'civicrm_contact',156,5), + (109,'civicrm_contact',160,5), + (40,'civicrm_contact',163,4), + (96,'civicrm_contact',164,4), + (1,'civicrm_contact',167,1), + (75,'civicrm_contact',170,4), + (20,'civicrm_contact',172,4), + (98,'civicrm_contact',176,4), + (113,'civicrm_contact',177,4), + (114,'civicrm_contact',177,5), + (88,'civicrm_contact',178,5), + (50,'civicrm_contact',179,5), + (10,'civicrm_contact',182,1), + (106,'civicrm_contact',183,4), + (107,'civicrm_contact',183,5), + (101,'civicrm_contact',196,4), + (99,'civicrm_contact',198,4), + (100,'civicrm_contact',198,5), + (38,'civicrm_contact',199,5), + (81,'civicrm_contact',201,4), + (82,'civicrm_contact',201,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -3466,9 +3452,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_event` WRITE; /*!40000 ALTER TABLE `civicrm_event` DISABLE KEYS */; INSERT INTO `civicrm_event` (`id`, `title`, `summary`, `description`, `event_type_id`, `participant_listing_id`, `is_public`, `start_date`, `end_date`, `is_online_registration`, `registration_link_text`, `registration_start_date`, `registration_end_date`, `max_participants`, `event_full_text`, `is_monetary`, `financial_type_id`, `payment_processor`, `is_map`, `is_active`, `fee_label`, `is_show_location`, `loc_block_id`, `default_role_id`, `intro_text`, `footer_text`, `confirm_title`, `confirm_text`, `confirm_footer_text`, `is_email_confirm`, `confirm_email_text`, `confirm_from_name`, `confirm_from_email`, `cc_confirm`, `bcc_confirm`, `default_fee_id`, `default_discount_fee_id`, `thankyou_title`, `thankyou_text`, `thankyou_footer_text`, `is_pay_later`, `pay_later_text`, `pay_later_receipt`, `is_partial_payment`, `initial_amount_label`, `initial_amount_help_text`, `min_initial_amount`, `is_multiple_registrations`, `max_additional_participants`, `allow_same_participant_emails`, `has_waitlist`, `requires_approval`, `expiration_time`, `allow_selfcancelxfer`, `selfcancelxfer_time`, `waitlist_text`, `approval_req_text`, `is_template`, `template_title`, `created_id`, `created_date`, `currency`, `campaign_id`, `is_share`, `is_confirm_enabled`, `parent_event_id`, `slot_label_id`, `dedupe_rule_group_id`, `is_billing_required`) VALUES - (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2022-01-26 17:00:00','2022-01-28 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), - (2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-07-25 12:00:00','2021-07-25 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), - (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-02-26 07:00:00','2022-03-01 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (1,'Fall Fundraiser Dinner','Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!','This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!',3,1,1,'2022-04-13 17:00:00','2022-04-15 17:00:00',1,'Register Now',NULL,NULL,100,'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.',1,4,NULL,1,1,'Dinner Contribution',1,1,1,'Fill in the information below to join as at this wonderful dinner event.',NULL,'Confirm Your Registration Information','Review the information below carefully.',NULL,1,'Contact the Development Department if you need to make any changes to your registration.','Fundraising Dept.','development@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',1,'I will send payment by check','Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110',0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (2,'Summer Solstice Festival Day Concert','Festival Day is coming! Join us and help support your parks.','We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.',5,1,1,'2021-10-12 12:00:00','2021-10-12 17:00:00',1,'Register Now',NULL,NULL,50,'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.',1,2,NULL,NULL,1,'Festival Fee',1,2,1,'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.','','Confirm Your Registration Information','','',1,'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.','Event Dept.','events@example.org','',NULL,NULL,NULL,'Thanks for Your Joining In!','<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-05-13 07:00:00','2022-05-16 17:00:00',1,'Register Now',NULL,NULL,500,'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.',1,4,NULL,NULL,1,'Tournament Fees',1,3,1,'Complete the form below to register your team for this year\'s tournament.','<em>A Soccer Youth Event</em>','Review and Confirm Your Registration Information','','<em>A Soccer Youth Event</em>',1,'Contact our Tournament Director for eligibility details.','Tournament Director','tournament@example.org','',NULL,NULL,NULL,'Thanks for Your Support!','<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>',0,NULL,NULL,0,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), (4,NULL,NULL,NULL,4,1,1,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting without Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), (5,NULL,NULL,NULL,4,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,1,NULL,1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Free Meeting with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), (6,NULL,NULL,NULL,1,1,1,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,1,4,NULL,0,1,'Conference Fee',1,NULL,1,NULL,NULL,'Confirm Your Registration Information',NULL,NULL,1,NULL,'Event Template Dept.','event_templates@example.org',NULL,NULL,NULL,NULL,'Thanks for Registering!',NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,1,NULL,NULL,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); @@ -3507,7 +3493,8 @@ INSERT INTO `civicrm_extension` (`id`, `type`, `full_name`, `name`, `label`, `fi (5,'module','contributioncancelactions','Contribution cancel actions','Contribution cancel actions','contributioncancelactions',NULL,1), (6,'module','recaptcha','reCAPTCHA','reCAPTCHA','recaptcha',NULL,1), (7,'module','ckeditor4','CKEditor4','CKEditor4','ckeditor4',NULL,1), - (8,'module','legacycustomsearches','Custom search framework','Custom search framework','legacycustomsearches',NULL,1); + (8,'module','legacycustomsearches','Custom search framework','Custom search framework','legacycustomsearches',NULL,1), + (9,'module','org.civicrm.flexmailer','FlexMailer','FlexMailer','flexmailer',NULL,1); /*!40000 ALTER TABLE `civicrm_extension` ENABLE KEYS */; UNLOCK TABLES; @@ -3551,99 +3538,99 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_item` WRITE; /*!40000 ALTER TABLE `civicrm_financial_item` DISABLE KEYS */; INSERT INTO `civicrm_financial_item` (`id`, `created_date`, `transaction_date`, `contact_id`, `description`, `amount`, `currency`, `financial_account_id`, `status_id`, `entity_table`, `entity_id`) VALUES - (1,'2021-07-26 14:08:50','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), - (2,'2021-07-26 14:08:50','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), - (3,'2021-07-26 14:08:50','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3), - (4,'2021-07-26 14:08:50','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), - (5,'2021-07-26 14:08:50','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5), - (6,'2021-07-26 14:08:50','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6), - (7,'2021-07-26 14:08:50','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7), - (8,'2021-07-26 14:08:50','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8), - (9,'2021-07-26 14:08:50','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9), - (10,'2021-07-26 14:08:50','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10), - (11,'2021-07-26 14:08:50','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11), - (12,'2021-07-26 14:08:50','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12), - (13,'2021-07-26 14:08:50','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13), - (14,'2021-07-26 14:08:50','2021-07-26 14:08:49',124,'General',100.00,'USD',2,1,'civicrm_line_item',16), - (15,'2021-07-26 14:08:50','2021-07-26 14:08:49',24,'General',100.00,'USD',2,1,'civicrm_line_item',17), - (16,'2021-07-26 14:08:50','2021-07-26 14:08:49',10,'General',100.00,'USD',2,1,'civicrm_line_item',18), - (17,'2021-07-26 14:08:50','2021-07-26 14:08:49',47,'General',100.00,'USD',2,1,'civicrm_line_item',19), - (18,'2021-07-26 14:08:50','2021-07-26 14:08:49',18,'General',100.00,'USD',2,1,'civicrm_line_item',20), - (19,'2021-07-26 14:08:50','2021-07-26 14:08:49',114,'General',100.00,'USD',2,1,'civicrm_line_item',21), - (20,'2021-07-26 14:08:50','2021-07-26 14:08:49',199,'General',100.00,'USD',2,1,'civicrm_line_item',22), - (21,'2021-07-26 14:08:50','2021-07-26 14:08:49',119,'General',100.00,'USD',2,1,'civicrm_line_item',23), - (22,'2021-07-26 14:08:50','2021-07-26 14:08:49',89,'General',100.00,'USD',2,1,'civicrm_line_item',24), - (23,'2021-07-26 14:08:50','2021-07-26 14:08:49',148,'General',100.00,'USD',2,1,'civicrm_line_item',25), - (24,'2021-07-26 14:08:50','2021-07-26 14:08:49',71,'General',100.00,'USD',2,1,'civicrm_line_item',26), - (25,'2021-07-26 14:08:50','2021-07-26 14:08:49',62,'General',100.00,'USD',2,1,'civicrm_line_item',27), - (26,'2021-07-26 14:08:50','2021-07-26 14:08:49',171,'General',100.00,'USD',2,1,'civicrm_line_item',28), - (27,'2021-07-26 14:08:50','2021-07-26 14:08:49',111,'General',100.00,'USD',2,1,'civicrm_line_item',29), - (28,'2021-07-26 14:08:50','2021-07-26 14:08:49',182,'General',100.00,'USD',2,1,'civicrm_line_item',30), - (29,'2021-07-26 14:08:50','2021-07-26 14:08:49',101,'Student',50.00,'USD',2,1,'civicrm_line_item',31), - (30,'2021-07-26 14:08:50','2021-07-26 14:08:49',14,'Student',50.00,'USD',2,1,'civicrm_line_item',32), - (31,'2021-07-26 14:08:50','2021-07-26 14:08:49',106,'Student',50.00,'USD',2,1,'civicrm_line_item',33), - (32,'2021-07-26 14:08:50','2021-07-26 14:08:49',17,'Student',50.00,'USD',2,1,'civicrm_line_item',34), - (33,'2021-07-26 14:08:50','2021-07-26 14:08:49',168,'Student',50.00,'USD',2,1,'civicrm_line_item',35), - (34,'2021-07-26 14:08:50','2021-07-26 14:08:49',25,'Student',50.00,'USD',2,1,'civicrm_line_item',36), - (35,'2021-07-26 14:08:50','2021-07-26 14:08:49',72,'Student',50.00,'USD',2,1,'civicrm_line_item',37), - (36,'2021-07-26 14:08:50','2021-07-26 14:08:49',115,'Student',50.00,'USD',2,1,'civicrm_line_item',38), - (37,'2021-07-26 14:08:50','2021-07-26 14:08:49',67,'Student',50.00,'USD',2,1,'civicrm_line_item',39), - (38,'2021-07-26 14:08:50','2021-07-26 14:08:49',95,'Student',50.00,'USD',2,1,'civicrm_line_item',40), - (39,'2021-07-26 14:08:50','2021-07-26 14:08:49',69,'Student',50.00,'USD',2,1,'civicrm_line_item',41), - (40,'2021-07-26 14:08:50','2021-07-26 14:08:49',16,'Student',50.00,'USD',2,1,'civicrm_line_item',42), - (41,'2021-07-26 14:08:50','2021-07-26 14:08:49',122,'Student',50.00,'USD',2,1,'civicrm_line_item',43), - (42,'2021-07-26 14:08:51','2021-07-26 14:08:49',11,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44), - (43,'2021-07-26 14:08:51','2021-07-26 14:08:49',68,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45), - (44,'2021-07-26 14:08:51','2021-07-26 14:08:50',110,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81), - (45,'2021-07-26 14:08:51','2021-07-26 14:08:50',158,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82), - (46,'2021-07-26 14:08:51','2021-07-26 14:08:50',21,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83), - (47,'2021-07-26 14:08:51','2021-07-26 14:08:50',68,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84), - (48,'2021-07-26 14:08:51','2021-07-26 14:08:50',3,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85), - (49,'2021-07-26 14:08:51','2021-07-26 14:08:50',170,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86), - (50,'2021-07-26 14:08:51','2021-07-26 14:08:50',201,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87), - (51,'2021-07-26 14:08:51','2021-07-26 14:08:50',152,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88), - (52,'2021-07-26 14:08:51','2021-07-26 14:08:50',183,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89), - (53,'2021-07-26 14:08:51','2021-07-26 14:08:50',19,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90), - (54,'2021-07-26 14:08:51','2021-07-26 14:08:50',66,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91), - (55,'2021-07-26 14:08:51','2021-07-26 14:08:50',112,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92), - (56,'2021-07-26 14:08:51','2021-07-26 14:08:50',6,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93), - (57,'2021-07-26 14:08:51','2021-07-26 14:08:50',142,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94), - (58,'2021-07-26 14:08:51','2021-07-26 14:08:50',53,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95), - (59,'2021-07-26 14:08:51','2021-07-26 14:08:50',173,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96), - (60,'2021-07-26 14:08:51','2021-07-26 14:08:50',23,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47), - (61,'2021-07-26 14:08:51','2021-07-26 14:08:50',55,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48), - (62,'2021-07-26 14:08:51','2021-07-26 14:08:50',199,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49), - (63,'2021-07-26 14:08:51','2021-07-26 14:08:50',167,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50), - (64,'2021-07-26 14:08:51','2021-07-26 14:08:50',116,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51), - (65,'2021-07-26 14:08:51','2021-07-26 14:08:50',165,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52), - (66,'2021-07-26 14:08:51','2021-07-26 14:08:50',93,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53), - (67,'2021-07-26 14:08:51','2021-07-26 14:08:50',41,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54), - (68,'2021-07-26 14:08:51','2021-07-26 14:08:50',25,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55), - (69,'2021-07-26 14:08:51','2021-07-26 14:08:50',149,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56), - (70,'2021-07-26 14:08:51','2021-07-26 14:08:50',105,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57), - (71,'2021-07-26 14:08:51','2021-07-26 14:08:50',49,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58), - (72,'2021-07-26 14:08:51','2021-07-26 14:08:50',75,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59), - (73,'2021-07-26 14:08:51','2021-07-26 14:08:50',27,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60), - (74,'2021-07-26 14:08:51','2021-07-26 14:08:50',54,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61), - (75,'2021-07-26 14:08:51','2021-07-26 14:08:50',113,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62), - (76,'2021-07-26 14:08:51','2021-07-26 14:08:50',197,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), - (77,'2021-07-26 14:08:51','2021-07-26 14:08:50',121,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), - (78,'2021-07-26 14:08:51','2021-07-26 14:08:50',70,'Single',50.00,'USD',4,1,'civicrm_line_item',65), - (79,'2021-07-26 14:08:51','2021-07-26 14:08:50',83,'Single',50.00,'USD',4,1,'civicrm_line_item',66), - (80,'2021-07-26 14:08:51','2021-07-26 14:08:50',43,'Single',50.00,'USD',4,1,'civicrm_line_item',67), - (81,'2021-07-26 14:08:51','2021-07-26 14:08:50',190,'Single',50.00,'USD',4,1,'civicrm_line_item',68), - (82,'2021-07-26 14:08:51','2021-07-26 14:08:50',124,'Single',50.00,'USD',4,1,'civicrm_line_item',69), - (83,'2021-07-26 14:08:51','2021-07-26 14:08:50',117,'Single',50.00,'USD',4,1,'civicrm_line_item',70), - (84,'2021-07-26 14:08:51','2021-07-26 14:08:50',176,'Single',50.00,'USD',4,1,'civicrm_line_item',71), - (85,'2021-07-26 14:08:51','2021-07-26 14:08:50',131,'Single',50.00,'USD',4,1,'civicrm_line_item',72), - (86,'2021-07-26 14:08:51','2021-07-26 14:08:50',144,'Single',50.00,'USD',4,1,'civicrm_line_item',73), - (87,'2021-07-26 14:08:51','2021-07-26 14:08:50',166,'Single',50.00,'USD',4,1,'civicrm_line_item',74), - (88,'2021-07-26 14:08:51','2021-07-26 14:08:50',102,'Single',50.00,'USD',4,1,'civicrm_line_item',75), - (89,'2021-07-26 14:08:52','2021-07-26 14:08:50',4,'Single',50.00,'USD',4,1,'civicrm_line_item',76), - (90,'2021-07-26 14:08:52','2021-07-26 14:08:50',91,'Single',50.00,'USD',4,1,'civicrm_line_item',77), - (91,'2021-07-26 14:08:52','2021-07-26 14:08:50',200,'Single',50.00,'USD',4,1,'civicrm_line_item',78), - (92,'2021-07-26 14:08:52','2021-07-26 14:08:50',86,'Single',50.00,'USD',4,1,'civicrm_line_item',79), - (93,'2021-07-26 14:08:52','2021-07-26 14:08:50',98,'Single',50.00,'USD',4,1,'civicrm_line_item',80); + (1,'2021-10-14 04:23:55','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), + (2,'2021-10-14 04:23:55','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), + (3,'2021-10-14 04:23:55','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3), + (4,'2021-10-14 04:23:55','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), + (5,'2021-10-14 04:23:55','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5), + (6,'2021-10-14 04:23:55','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6), + (7,'2021-10-14 04:23:55','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7), + (8,'2021-10-14 04:23:55','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8), + (9,'2021-10-14 04:23:55','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9), + (10,'2021-10-14 04:23:55','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10), + (11,'2021-10-14 04:23:55','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11), + (12,'2021-10-14 04:23:55','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12), + (13,'2021-10-14 04:23:55','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13), + (14,'2021-10-14 04:23:55','2021-10-13 21:23:55',90,'General',100.00,'USD',2,1,'civicrm_line_item',16), + (15,'2021-10-14 04:23:55','2021-10-13 21:23:55',185,'General',100.00,'USD',2,1,'civicrm_line_item',17), + (16,'2021-10-14 04:23:55','2021-10-13 21:23:55',117,'General',100.00,'USD',2,1,'civicrm_line_item',18), + (17,'2021-10-14 04:23:55','2021-10-13 21:23:55',63,'General',100.00,'USD',2,1,'civicrm_line_item',19), + (18,'2021-10-14 04:23:55','2021-10-13 21:23:55',168,'General',100.00,'USD',2,1,'civicrm_line_item',20), + (19,'2021-10-14 04:23:55','2021-10-13 21:23:55',195,'General',100.00,'USD',2,1,'civicrm_line_item',21), + (20,'2021-10-14 04:23:55','2021-10-13 21:23:55',194,'General',100.00,'USD',2,1,'civicrm_line_item',22), + (21,'2021-10-14 04:23:55','2021-10-13 21:23:55',51,'General',100.00,'USD',2,1,'civicrm_line_item',23), + (22,'2021-10-14 04:23:55','2021-10-13 21:23:55',132,'General',100.00,'USD',2,1,'civicrm_line_item',24), + (23,'2021-10-14 04:23:55','2021-10-13 21:23:55',23,'General',100.00,'USD',2,1,'civicrm_line_item',25), + (24,'2021-10-14 04:23:55','2021-10-13 21:23:55',152,'General',100.00,'USD',2,1,'civicrm_line_item',26), + (25,'2021-10-14 04:23:55','2021-10-13 21:23:55',17,'General',100.00,'USD',2,1,'civicrm_line_item',27), + (26,'2021-10-14 04:23:55','2021-10-13 21:23:55',44,'General',100.00,'USD',2,1,'civicrm_line_item',28), + (27,'2021-10-14 04:23:55','2021-10-13 21:23:55',56,'Student',50.00,'USD',2,1,'civicrm_line_item',29), + (28,'2021-10-14 04:23:55','2021-10-13 21:23:55',85,'Student',50.00,'USD',2,1,'civicrm_line_item',30), + (29,'2021-10-14 04:23:55','2021-10-13 21:23:55',4,'Student',50.00,'USD',2,1,'civicrm_line_item',31), + (30,'2021-10-14 04:23:55','2021-10-13 21:23:55',127,'Student',50.00,'USD',2,1,'civicrm_line_item',32), + (31,'2021-10-14 04:23:55','2021-10-13 21:23:55',30,'Student',50.00,'USD',2,1,'civicrm_line_item',33), + (32,'2021-10-14 04:23:55','2021-10-13 21:23:55',180,'Student',50.00,'USD',2,1,'civicrm_line_item',34), + (33,'2021-10-14 04:23:55','2021-10-13 21:23:55',107,'Student',50.00,'USD',2,1,'civicrm_line_item',35), + (34,'2021-10-14 04:23:55','2021-10-13 21:23:55',113,'Student',50.00,'USD',2,1,'civicrm_line_item',36), + (35,'2021-10-14 04:23:55','2021-10-13 21:23:55',92,'Student',50.00,'USD',2,1,'civicrm_line_item',37), + (36,'2021-10-14 04:23:55','2021-10-13 21:23:55',70,'Student',50.00,'USD',2,1,'civicrm_line_item',38), + (37,'2021-10-14 04:23:55','2021-10-13 21:23:55',16,'Student',50.00,'USD',2,1,'civicrm_line_item',39), + (38,'2021-10-14 04:23:55','2021-10-13 21:23:55',201,'Student',50.00,'USD',2,1,'civicrm_line_item',40), + (39,'2021-10-14 04:23:55','2021-10-13 21:23:55',5,'Student',50.00,'USD',2,1,'civicrm_line_item',41), + (40,'2021-10-14 04:23:55','2021-10-13 21:23:55',58,'Student',50.00,'USD',2,1,'civicrm_line_item',42), + (41,'2021-10-14 04:23:55','2021-10-13 21:23:55',19,'Student',50.00,'USD',2,1,'civicrm_line_item',43), + (42,'2021-10-14 04:23:55','2021-10-13 21:23:55',170,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44), + (43,'2021-10-14 04:23:55','2021-10-13 21:23:55',159,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45), + (44,'2021-10-14 04:23:55','2021-10-13 21:23:55',35,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81), + (45,'2021-10-14 04:23:55','2021-10-13 21:23:55',100,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82), + (46,'2021-10-14 04:23:55','2021-10-13 21:23:55',93,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83), + (47,'2021-10-14 04:23:55','2021-10-13 21:23:55',129,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84), + (48,'2021-10-14 04:23:55','2021-10-13 21:23:55',147,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85), + (49,'2021-10-14 04:23:55','2021-10-13 21:23:55',33,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86), + (50,'2021-10-14 04:23:55','2021-10-13 21:23:55',136,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87), + (51,'2021-10-14 04:23:55','2021-10-13 21:23:55',142,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88), + (52,'2021-10-14 04:23:55','2021-10-13 21:23:55',184,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89), + (53,'2021-10-14 04:23:55','2021-10-13 21:23:55',46,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90), + (54,'2021-10-14 04:23:55','2021-10-13 21:23:55',191,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91), + (55,'2021-10-14 04:23:55','2021-10-13 21:23:55',133,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92), + (56,'2021-10-14 04:23:55','2021-10-13 21:23:55',84,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93), + (57,'2021-10-14 04:23:55','2021-10-13 21:23:55',125,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94), + (58,'2021-10-14 04:23:55','2021-10-13 21:23:55',55,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95), + (59,'2021-10-14 04:23:55','2021-10-13 21:23:55',13,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96), + (60,'2021-10-14 04:23:55','2021-10-13 21:23:55',196,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47), + (61,'2021-10-14 04:23:55','2021-10-13 21:23:55',22,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48), + (62,'2021-10-14 04:23:55','2021-10-13 21:23:55',179,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49), + (63,'2021-10-14 04:23:55','2021-10-13 21:23:55',73,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50), + (64,'2021-10-14 04:23:55','2021-10-13 21:23:55',41,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51), + (65,'2021-10-14 04:23:55','2021-10-13 21:23:55',158,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52), + (66,'2021-10-14 04:23:55','2021-10-13 21:23:55',153,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53), + (67,'2021-10-14 04:23:55','2021-10-13 21:23:55',117,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54), + (68,'2021-10-14 04:23:55','2021-10-13 21:23:55',12,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55), + (69,'2021-10-14 04:23:55','2021-10-13 21:23:55',123,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56), + (70,'2021-10-14 04:23:55','2021-10-13 21:23:55',155,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57), + (71,'2021-10-14 04:23:55','2021-10-13 21:23:55',104,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58), + (72,'2021-10-14 04:23:55','2021-10-13 21:23:55',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59), + (73,'2021-10-14 04:23:55','2021-10-13 21:23:55',114,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60), + (74,'2021-10-14 04:23:55','2021-10-13 21:23:55',64,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61), + (75,'2021-10-14 04:23:55','2021-10-13 21:23:55',200,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62), + (76,'2021-10-14 04:23:55','2021-10-13 21:23:55',144,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), + (77,'2021-10-14 04:23:55','2021-10-13 21:23:55',143,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), + (78,'2021-10-14 04:23:55','2021-10-13 21:23:55',51,'Single',50.00,'USD',4,1,'civicrm_line_item',65), + (79,'2021-10-14 04:23:55','2021-10-13 21:23:55',60,'Single',50.00,'USD',4,1,'civicrm_line_item',66), + (80,'2021-10-14 04:23:55','2021-10-13 21:23:55',187,'Single',50.00,'USD',4,1,'civicrm_line_item',67), + (81,'2021-10-14 04:23:55','2021-10-13 21:23:55',21,'Single',50.00,'USD',4,1,'civicrm_line_item',68), + (82,'2021-10-14 04:23:55','2021-10-13 21:23:55',171,'Single',50.00,'USD',4,1,'civicrm_line_item',69), + (83,'2021-10-14 04:23:55','2021-10-13 21:23:55',166,'Single',50.00,'USD',4,1,'civicrm_line_item',70), + (84,'2021-10-14 04:23:55','2021-10-13 21:23:55',151,'Single',50.00,'USD',4,1,'civicrm_line_item',71), + (85,'2021-10-14 04:23:55','2021-10-13 21:23:55',185,'Single',50.00,'USD',4,1,'civicrm_line_item',72), + (86,'2021-10-14 04:23:55','2021-10-13 21:23:55',82,'Single',50.00,'USD',4,1,'civicrm_line_item',73), + (87,'2021-10-14 04:23:55','2021-10-13 21:23:55',50,'Single',50.00,'USD',4,1,'civicrm_line_item',74), + (88,'2021-10-14 04:23:55','2021-10-13 21:23:55',103,'Single',50.00,'USD',4,1,'civicrm_line_item',75), + (89,'2021-10-14 04:23:55','2021-10-13 21:23:55',89,'Single',50.00,'USD',4,1,'civicrm_line_item',76), + (90,'2021-10-14 04:23:55','2021-10-13 21:23:55',157,'Single',50.00,'USD',4,1,'civicrm_line_item',77), + (91,'2021-10-14 04:23:55','2021-10-13 21:23:55',110,'Single',50.00,'USD',4,1,'civicrm_line_item',78), + (92,'2021-10-14 04:23:55','2021-10-13 21:23:55',107,'Single',50.00,'USD',4,1,'civicrm_line_item',79), + (93,'2021-10-14 04:23:55','2021-10-13 21:23:55',122,'Single',50.00,'USD',4,1,'civicrm_line_item',80); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -3667,86 +3654,86 @@ INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_fin (11,NULL,6,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), (12,NULL,6,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), (13,NULL,6,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (14,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'265d4a9ad0de9fd2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (15,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'57e38d761e59a721',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (16,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'f00c6d2a40dc2a64',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (17,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'a095a0d306cda22f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (18,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'d9d191b9bea2b62e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (19,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'339a7db343e94bc2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (20,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'6db138fa4b2db889',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (21,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'91ccd804f3b76ec5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (22,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'a3221cb2433d03cd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (23,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'40fbece99ed55b19',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (24,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'46c4a6820032e43a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (25,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'9235a2719cf32e3f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (26,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'b336bcfd69b8b819',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (27,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'24c041fa93005434',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (28,NULL,6,'2021-07-26 14:08:49',100.00,NULL,NULL,'USD',1,'c17dffac419ffdcf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (29,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'f7157b3b3fa5c283',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (30,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'88168b573cb3617a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (31,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'b86c8bcd44bc0a1e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (32,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'bd9eaeec577b8efc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (33,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'ae8e0c78ac7fc6f3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (34,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'1aade87b8799b7f0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (35,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'283aee0df5c8c237',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (36,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'9fbafd4b5679a855',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (37,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'60ab832261bf5c1b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (38,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'d42cdfc830be6a93',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (39,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'73a6aaa10274b3c1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (40,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'faeb1d70680f56d5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (41,NULL,6,'2021-07-26 14:08:49',50.00,NULL,NULL,'USD',1,'8fc57cfbdd77acd5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (42,NULL,6,'2021-07-26 14:08:49',1200.00,NULL,NULL,'USD',1,'d329a07dc00e1ca0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (43,NULL,6,'2021-07-26 14:08:49',1200.00,NULL,NULL,'USD',1,'14827126e69c3dd2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (44,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'5a759e1e7746035c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (45,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'e300b9a6923825d1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (46,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'cd6cd9487ab311f8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (47,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'dd83f3d146ff5e8c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (48,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'9e7be43ff5f873d3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (49,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'0759cde1834b181e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (50,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'b20dfffdc357e928',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (51,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'b004479cec4aba24',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (52,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'466bf29da2613307',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (53,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'c2540070bae2289b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (54,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'c6e7f4e18e693f6f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (55,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'20bcbdfe99fcda71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (56,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'f983f223240219db',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (57,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'6128d1f2f2ef28d2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (58,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'33ba84e7587ebc6c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (59,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'108a57b20490daed',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (60,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'733de302f9256a05',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (61,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'c79544d018331a7a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (62,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'20fca987b08ebe96',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (63,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'f9ed2b4c61761269',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (64,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'bf733e3bafbde15e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (65,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'2082bfc0bf4e9a6e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (66,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'014a8b245afaa58c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (67,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'a8f60d370111743d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (68,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'b5c122ed978c1c6f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (69,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'e0f26a01d7162233',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (70,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'019fada0c0e1d439',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (71,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'27c59bebfb548249',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (72,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'6d14827b0441bfe8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (73,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'dd90ceb664d90bea',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (74,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'26ed41bc3d4d6c3d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (75,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'68e88dd16e0922d0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (76,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'79d4eebfbb24b666',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (77,NULL,6,'2021-07-26 14:08:50',800.00,NULL,NULL,'USD',1,'8a0509d7c745c313',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (78,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'744c965d085afa74',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (79,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'10b466c494c963e1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (80,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'3c0eed9086036f19',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (81,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'e79204c85376e81d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (82,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'271e0a56c2353e1d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (83,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'fce8ba604a6cec44',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (84,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'5f21e73f191d5cbf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (85,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'17df6e7505bf904f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (86,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'aa15ef80bdb20881',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (87,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'2ea74cf5414ef9e4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (88,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'3aafb20b38f0f470',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (89,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'be9a3cc452954f73',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (90,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'e8744fe637a6ba6e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (91,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'365932a74590a754',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (92,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'349a5c60c0808612',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (93,NULL,6,'2021-07-26 14:08:50',50.00,NULL,NULL,'USD',1,'8b323d9a9a19cb07',NULL,1,NULL,1,NULL,NULL,NULL,NULL); + (14,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'336a2be8849c513b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (15,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'b41b63804835db17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (16,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'30707bdd0036a11d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (17,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'f615441da9d778ad',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (18,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'465dd61e8780c563',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (19,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'46fee5a7a1a4453a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (20,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'a52e614bdf2191c4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (21,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'6aedd8d8c265eb06',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (22,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'08b4b1cead3c903c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (23,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'5581286b492d7f1c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (24,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'16f8ef0cfafa0255',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (25,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'2fc6b73e9113a98b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (26,NULL,6,'2021-10-13 21:23:55',100.00,NULL,NULL,'USD',1,'6deef275e898d941',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (27,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'ea45eaf33f4496a7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (28,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'a061951fffb181c6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (29,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'3beb1ae16bed4dfc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (30,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'aba1ebf533a192fb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (31,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'e51f787577a6158d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (32,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'3c218c08992a227d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (33,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'953b38a2fd65aaca',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (34,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'76aab48c99f3cdf4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (35,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'53fd3ff288a6ac48',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (36,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'ee89eefdbc2b0d17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (37,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'ac2bb1a3a4f21eae',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (38,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'9ddf1f7d015bf77d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (39,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'a98fb1fdf1643ccd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (40,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'bf0893884bf6927c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (41,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'1bbc4d49e4d7e15b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (42,NULL,6,'2021-10-13 21:23:55',1200.00,NULL,NULL,'USD',1,'e088fc325e7ced95',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (43,NULL,6,'2021-10-13 21:23:55',1200.00,NULL,NULL,'USD',1,'fc96e364fc5260ff',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (44,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'44cae8db1b816fc2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (45,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'663cac64e12684f1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (46,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'fa9e4c3fa2ad6656',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (47,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'6c2825d1a0c88cd7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (48,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'03214fc447c50a52',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (49,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'ae364912ef6a7985',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (50,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'7841bcf422e3f93c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (51,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'005345d7deb28d36',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (52,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'78485ffadc4f02ab',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (53,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'2ab849c71a69961d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (54,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'96706b843d760190',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (55,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'ef76d9d0d293fa6b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (56,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'97a7b19fd9d63661',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (57,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'09bf84d91a24d1db',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (58,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'bf018db8cd3303b4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (59,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'2cb5b9ff43ae28cb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (60,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'e167222a259f3cc4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (61,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'b5bdcad709c2bfab',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (62,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'5b685284348b5b12',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (63,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'f3e5305d70fc5133',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (64,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'769b8756d7717132',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (65,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'6520927bc905b26e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (66,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'6904fcf8eabda81d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (67,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'84bc4b83a05daf30',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (68,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'89474d05c5f39994',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (69,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'882aef032e8bb52e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (70,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'e70812efd9b41bb2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (71,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'b817fae05c14837d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (72,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'c94659092628227a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (73,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'d8e1bc59b753a862',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (74,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'d788f0e3c987ead1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (75,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'25e79f708ae0b0dc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (76,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'027ce2b64fc8841d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (77,NULL,6,'2021-10-13 21:23:55',800.00,NULL,NULL,'USD',1,'e5f88e7dd97bc6d2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (78,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'b3361ee994d7fa68',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (79,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'0f9949d2ec3ff270',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (80,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'dfe6d72cceddad1e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (81,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'5b09c886c3bdf851',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (82,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'b66600820dc92da1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (83,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'094887ad144afe0e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (84,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'b8d570025384a9eb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (85,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'b871a4dcc2ab2f92',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (86,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'fccdb9b92972d68e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (87,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'5a56d33babcf8687',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (88,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'e4037df9657e1b24',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (89,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'b628a833883bcab0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (90,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'78e6b8f15edc4f0c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (91,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'095a67c3d040d66b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (92,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'bcc16c72b720d2e2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (93,NULL,6,'2021-10-13 21:23:55',50.00,NULL,NULL,'USD',1,'7853f510147594df',NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3794,89 +3781,89 @@ UNLOCK TABLES; LOCK TABLES `civicrm_group_contact` WRITE; /*!40000 ALTER TABLE `civicrm_group_contact` DISABLE KEYS */; INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES - (1,2,121,'Added',NULL,NULL), - (2,2,60,'Added',NULL,NULL), - (3,2,65,'Added',NULL,NULL), - (4,2,39,'Added',NULL,NULL), - (5,2,58,'Added',NULL,NULL), - (6,2,94,'Added',NULL,NULL), - (7,2,164,'Added',NULL,NULL), - (8,2,81,'Added',NULL,NULL), - (9,2,187,'Added',NULL,NULL), + (1,2,104,'Added',NULL,NULL), + (2,2,111,'Added',NULL,NULL), + (3,2,105,'Added',NULL,NULL), + (4,2,48,'Added',NULL,NULL), + (5,2,4,'Added',NULL,NULL), + (6,2,188,'Added',NULL,NULL), + (7,2,130,'Added',NULL,NULL), + (8,2,200,'Added',NULL,NULL), + (9,2,107,'Added',NULL,NULL), (10,2,195,'Added',NULL,NULL), - (11,2,69,'Added',NULL,NULL), - (12,2,6,'Added',NULL,NULL), - (13,2,4,'Added',NULL,NULL), - (14,2,173,'Added',NULL,NULL), - (15,2,159,'Added',NULL,NULL), - (16,2,33,'Added',NULL,NULL), - (17,2,185,'Added',NULL,NULL), - (18,2,19,'Added',NULL,NULL), - (19,2,103,'Added',NULL,NULL), - (20,2,10,'Added',NULL,NULL), - (21,2,153,'Added',NULL,NULL), - (22,2,119,'Added',NULL,NULL), - (23,2,137,'Added',NULL,NULL), - (24,2,52,'Added',NULL,NULL), - (25,2,30,'Added',NULL,NULL), - (26,2,165,'Added',NULL,NULL), - (27,2,162,'Added',NULL,NULL), - (28,2,131,'Added',NULL,NULL), - (29,2,171,'Added',NULL,NULL), - (30,2,181,'Added',NULL,NULL), - (31,2,27,'Added',NULL,NULL), - (32,2,17,'Added',NULL,NULL), - (33,2,37,'Added',NULL,NULL), - (34,2,149,'Added',NULL,NULL), - (35,2,199,'Added',NULL,NULL), - (36,2,115,'Added',NULL,NULL), - (37,2,99,'Added',NULL,NULL), - (38,2,201,'Added',NULL,NULL), - (39,2,166,'Added',NULL,NULL), - (40,2,138,'Added',NULL,NULL), - (41,2,61,'Added',NULL,NULL), - (42,2,56,'Added',NULL,NULL), - (43,2,172,'Added',NULL,NULL), - (44,2,157,'Added',NULL,NULL), - (45,2,71,'Added',NULL,NULL), - (46,2,32,'Added',NULL,NULL), - (47,2,21,'Added',NULL,NULL), - (48,2,25,'Added',NULL,NULL), - (49,2,49,'Added',NULL,NULL), - (50,2,11,'Added',NULL,NULL), - (51,2,78,'Added',NULL,NULL), - (52,2,133,'Added',NULL,NULL), - (53,2,184,'Added',NULL,NULL), - (54,2,198,'Added',NULL,NULL), - (55,2,54,'Added',NULL,NULL), - (56,2,55,'Added',NULL,NULL), - (57,2,111,'Added',NULL,NULL), - (58,2,146,'Added',NULL,NULL), - (59,2,35,'Added',NULL,NULL), - (60,2,50,'Added',NULL,NULL), - (61,3,170,'Added',NULL,NULL), - (62,3,91,'Added',NULL,NULL), - (63,3,13,'Added',NULL,NULL), - (64,3,134,'Added',NULL,NULL), - (65,3,112,'Added',NULL,NULL), - (66,3,177,'Added',NULL,NULL), - (67,3,114,'Added',NULL,NULL), - (68,3,175,'Added',NULL,NULL), - (69,3,182,'Added',NULL,NULL), - (70,3,2,'Added',NULL,NULL), - (71,3,90,'Added',NULL,NULL), - (72,3,53,'Added',NULL,NULL), - (73,3,80,'Added',NULL,NULL), - (74,3,20,'Added',NULL,NULL), - (75,3,41,'Added',NULL,NULL), - (76,4,121,'Added',NULL,NULL), - (77,4,81,'Added',NULL,NULL), - (78,4,159,'Added',NULL,NULL), - (79,4,119,'Added',NULL,NULL), - (80,4,171,'Added',NULL,NULL), - (81,4,115,'Added',NULL,NULL), - (82,4,172,'Added',NULL,NULL), - (83,4,11,'Added',NULL,NULL); + (11,2,156,'Added',NULL,NULL), + (12,2,157,'Added',NULL,NULL), + (13,2,121,'Added',NULL,NULL), + (14,2,28,'Added',NULL,NULL), + (15,2,172,'Added',NULL,NULL), + (16,2,39,'Added',NULL,NULL), + (17,2,13,'Added',NULL,NULL), + (18,2,190,'Added',NULL,NULL), + (19,2,138,'Added',NULL,NULL), + (20,2,191,'Added',NULL,NULL), + (21,2,7,'Added',NULL,NULL), + (22,2,67,'Added',NULL,NULL), + (23,2,30,'Added',NULL,NULL), + (24,2,109,'Added',NULL,NULL), + (25,2,98,'Added',NULL,NULL), + (26,2,94,'Added',NULL,NULL), + (27,2,116,'Added',NULL,NULL), + (28,2,32,'Added',NULL,NULL), + (29,2,12,'Added',NULL,NULL), + (30,2,88,'Added',NULL,NULL), + (31,2,99,'Added',NULL,NULL), + (32,2,3,'Added',NULL,NULL), + (33,2,73,'Added',NULL,NULL), + (34,2,36,'Added',NULL,NULL), + (35,2,53,'Added',NULL,NULL), + (36,2,83,'Added',NULL,NULL), + (37,2,132,'Added',NULL,NULL), + (38,2,171,'Added',NULL,NULL), + (39,2,152,'Added',NULL,NULL), + (40,2,149,'Added',NULL,NULL), + (41,2,199,'Added',NULL,NULL), + (42,2,165,'Added',NULL,NULL), + (43,2,25,'Added',NULL,NULL), + (44,2,27,'Added',NULL,NULL), + (45,2,163,'Added',NULL,NULL), + (46,2,8,'Added',NULL,NULL), + (47,2,103,'Added',NULL,NULL), + (48,2,23,'Added',NULL,NULL), + (49,2,69,'Added',NULL,NULL), + (50,2,38,'Added',NULL,NULL), + (51,2,122,'Added',NULL,NULL), + (52,2,55,'Added',NULL,NULL), + (53,2,63,'Added',NULL,NULL), + (54,2,72,'Added',NULL,NULL), + (55,2,136,'Added',NULL,NULL), + (56,2,142,'Added',NULL,NULL), + (57,2,18,'Added',NULL,NULL), + (58,2,44,'Added',NULL,NULL), + (59,2,179,'Added',NULL,NULL), + (60,2,57,'Added',NULL,NULL), + (61,3,114,'Added',NULL,NULL), + (62,3,15,'Added',NULL,NULL), + (63,3,128,'Added',NULL,NULL), + (64,3,85,'Added',NULL,NULL), + (65,3,139,'Added',NULL,NULL), + (66,3,194,'Added',NULL,NULL), + (67,3,43,'Added',NULL,NULL), + (68,3,26,'Added',NULL,NULL), + (69,3,47,'Added',NULL,NULL), + (70,3,61,'Added',NULL,NULL), + (71,3,54,'Added',NULL,NULL), + (72,3,175,'Added',NULL,NULL), + (73,3,70,'Added',NULL,NULL), + (74,3,24,'Added',NULL,NULL), + (75,3,49,'Added',NULL,NULL), + (76,4,104,'Added',NULL,NULL), + (77,4,200,'Added',NULL,NULL), + (78,4,172,'Added',NULL,NULL), + (79,4,67,'Added',NULL,NULL), + (80,4,12,'Added',NULL,NULL), + (81,4,83,'Added',NULL,NULL), + (82,4,25,'Added',NULL,NULL), + (83,4,38,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -3973,85 +3960,85 @@ INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contributio (12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL,NULL), (13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL,NULL), (16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (17,'civicrm_membership',3,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (18,'civicrm_membership',5,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (19,'civicrm_membership',7,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (20,'civicrm_membership',9,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (21,'civicrm_membership',10,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (22,'civicrm_membership',13,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (23,'civicrm_membership',17,30,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (24,'civicrm_membership',19,32,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (25,'civicrm_membership',20,33,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (26,'civicrm_membership',21,34,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (27,'civicrm_membership',23,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (28,'civicrm_membership',27,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (29,'civicrm_membership',29,42,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (30,'civicrm_membership',30,43,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (31,'civicrm_membership',2,15,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (32,'civicrm_membership',4,17,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (33,'civicrm_membership',6,19,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (34,'civicrm_membership',8,21,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (35,'civicrm_membership',12,25,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (36,'civicrm_membership',14,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (37,'civicrm_membership',15,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (38,'civicrm_membership',16,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (39,'civicrm_membership',18,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (40,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (41,'civicrm_membership',25,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (42,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (43,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (44,'civicrm_membership',11,24,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), - (45,'civicrm_membership',22,35,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), - (47,'civicrm_participant',3,50,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (48,'civicrm_participant',6,58,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (49,'civicrm_participant',9,92,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (50,'civicrm_participant',12,85,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (51,'civicrm_participant',15,73,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (52,'civicrm_participant',18,83,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (53,'civicrm_participant',21,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (54,'civicrm_participant',24,53,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (55,'civicrm_participant',25,51,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (56,'civicrm_participant',28,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (57,'civicrm_participant',31,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (58,'civicrm_participant',34,55,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (59,'civicrm_participant',37,62,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (60,'civicrm_participant',40,52,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (61,'civicrm_participant',43,57,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (62,'civicrm_participant',46,72,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (63,'civicrm_participant',49,91,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (64,'civicrm_participant',50,75,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), - (65,'civicrm_participant',1,61,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (66,'civicrm_participant',4,63,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (67,'civicrm_participant',7,54,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (68,'civicrm_participant',10,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (69,'civicrm_participant',13,76,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (70,'civicrm_participant',16,74,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (71,'civicrm_participant',19,88,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (72,'civicrm_participant',22,77,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (73,'civicrm_participant',26,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (74,'civicrm_participant',29,84,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (75,'civicrm_participant',32,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (76,'civicrm_participant',35,46,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (77,'civicrm_participant',38,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (78,'civicrm_participant',41,93,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (79,'civicrm_participant',44,64,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (80,'civicrm_participant',47,67,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), - (81,'civicrm_participant',2,70,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (82,'civicrm_participant',5,82,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (83,'civicrm_participant',8,49,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (84,'civicrm_participant',11,60,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (85,'civicrm_participant',14,45,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (86,'civicrm_participant',17,86,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (87,'civicrm_participant',20,94,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (88,'civicrm_participant',23,81,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (18,'civicrm_membership',5,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (19,'civicrm_membership',7,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (20,'civicrm_membership',9,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (21,'civicrm_membership',10,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (22,'civicrm_membership',13,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (23,'civicrm_membership',17,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (24,'civicrm_membership',19,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (25,'civicrm_membership',21,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (26,'civicrm_membership',23,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (27,'civicrm_membership',27,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (28,'civicrm_membership',29,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (29,'civicrm_membership',2,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (30,'civicrm_membership',4,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (31,'civicrm_membership',6,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (32,'civicrm_membership',8,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (33,'civicrm_membership',12,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (34,'civicrm_membership',14,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (35,'civicrm_membership',15,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (36,'civicrm_membership',16,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (37,'civicrm_membership',18,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (38,'civicrm_membership',20,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (39,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (40,'civicrm_membership',25,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (41,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (42,'civicrm_membership',28,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (43,'civicrm_membership',30,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), + (45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), + (47,'civicrm_participant',3,93,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (48,'civicrm_participant',6,49,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (49,'civicrm_participant',9,88,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (50,'civicrm_participant',12,59,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (51,'civicrm_participant',15,52,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (52,'civicrm_participant',18,85,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (53,'civicrm_participant',21,82,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (54,'civicrm_participant',24,70,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (55,'civicrm_participant',25,45,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (56,'civicrm_participant',28,72,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (57,'civicrm_participant',31,83,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (58,'civicrm_participant',34,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (59,'civicrm_participant',37,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (60,'civicrm_participant',40,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (61,'civicrm_participant',43,58,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (62,'civicrm_participant',46,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (63,'civicrm_participant',49,79,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (64,'civicrm_participant',50,78,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL,NULL), + (65,'civicrm_participant',1,55,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (66,'civicrm_participant',4,57,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (67,'civicrm_participant',7,91,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (68,'civicrm_participant',10,48,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (69,'civicrm_participant',13,87,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (70,'civicrm_participant',16,86,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (71,'civicrm_participant',19,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (72,'civicrm_participant',22,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (73,'civicrm_participant',26,60,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (74,'civicrm_participant',29,54,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (75,'civicrm_participant',32,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (76,'civicrm_participant',35,62,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (77,'civicrm_participant',38,84,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (78,'civicrm_participant',41,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (79,'civicrm_participant',44,67,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (80,'civicrm_participant',47,71,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL,NULL), + (81,'civicrm_participant',2,51,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (82,'civicrm_participant',5,64,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (83,'civicrm_participant',8,63,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (84,'civicrm_participant',11,74,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (85,'civicrm_participant',14,80,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (86,'civicrm_participant',17,50,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (87,'civicrm_participant',20,76,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (88,'civicrm_participant',23,77,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), (89,'civicrm_participant',27,89,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (90,'civicrm_participant',30,48,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (91,'civicrm_participant',33,59,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (92,'civicrm_participant',36,71,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (93,'civicrm_participant',39,47,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (94,'civicrm_participant',42,78,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (90,'civicrm_participant',30,53,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (91,'civicrm_participant',33,92,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (92,'civicrm_participant',36,75,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (93,'civicrm_participant',39,61,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), + (94,'civicrm_participant',42,73,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), (95,'civicrm_participant',45,56,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL), - (96,'civicrm_participant',48,87,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL); + (96,'civicrm_participant',48,46,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL,NULL); /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */; UNLOCK TABLES; @@ -4062,9 +4049,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_loc_block` WRITE; /*!40000 ALTER TABLE `civicrm_loc_block` DISABLE KEYS */; INSERT INTO `civicrm_loc_block` (`id`, `address_id`, `email_id`, `phone_id`, `im_id`, `address_2_id`, `email_2_id`, `phone_2_id`, `im_2_id`) VALUES - (1,178,200,141,NULL,NULL,NULL,NULL,NULL), - (2,179,201,142,NULL,NULL,NULL,NULL,NULL), - (3,180,202,143,NULL,NULL,NULL,NULL,NULL); + (1,175,185,159,NULL,NULL,NULL,NULL,NULL), + (2,176,186,160,NULL,NULL,NULL,NULL,NULL), + (3,177,187,161,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -4504,36 +4491,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership` WRITE; /*!40000 ALTER TABLE `civicrm_membership` DISABLE KEYS */; INSERT INTO `civicrm_membership` (`id`, `contact_id`, `membership_type_id`, `join_date`, `start_date`, `end_date`, `source`, `status_id`, `is_override`, `status_override_end_date`, `owner_membership_id`, `max_related`, `is_test`, `is_pay_later`, `contribution_recur_id`, `campaign_id`) VALUES - (1,124,1,'2021-07-26','2021-07-26','2023-07-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (2,101,2,'2021-07-25','2021-07-25','2022-07-24','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (3,24,1,'2021-07-24','2021-07-24','2023-07-23','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (4,14,2,'2021-07-23','2021-07-23','2022-07-22','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (5,10,1,'2019-06-24','2019-06-24','2021-06-23','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (6,106,2,'2021-07-21','2021-07-21','2022-07-20','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (7,47,1,'2021-07-20','2021-07-20','2023-07-19','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (8,17,2,'2021-07-19','2021-07-19','2022-07-18','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (9,18,1,'2021-07-18','2021-07-18','2023-07-17','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (10,114,1,'2019-05-15','2019-05-15','2021-05-14','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (11,11,3,'2021-07-16','2021-07-16',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (12,168,2,'2021-07-15','2021-07-15','2022-07-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (13,199,1,'2021-07-14','2021-07-14','2023-07-13','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (14,25,2,'2021-07-13','2021-07-13','2022-07-12','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (15,72,2,'2020-07-12','2020-07-12','2021-07-11','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (16,115,2,'2021-07-11','2021-07-11','2022-07-10','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (17,119,1,'2021-07-10','2021-07-10','2023-07-09','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (18,67,2,'2021-07-09','2021-07-09','2022-07-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (19,89,1,'2021-07-08','2021-07-08','2023-07-07','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (20,148,1,'2019-02-24','2019-02-24','2021-02-23','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (21,71,1,'2021-07-06','2021-07-06','2023-07-05','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (22,68,3,'2021-07-05','2021-07-05',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (23,62,1,'2021-07-04','2021-07-04','2023-07-03','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (24,95,2,'2021-07-03','2021-07-03','2022-07-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (25,69,2,'2020-07-02','2020-07-02','2021-07-01','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (26,16,2,'2021-07-01','2021-07-01','2022-06-30','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (27,171,1,'2021-06-30','2021-06-30','2023-06-29','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (28,122,2,'2021-06-29','2021-06-29','2022-06-28','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (29,111,1,'2021-06-28','2021-06-28','2023-06-27','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), - (30,182,1,'2018-12-06','2018-12-06','2020-12-05','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL); + (1,90,1,'2021-10-13','2021-10-13','2023-10-12','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (2,56,2,'2021-10-12','2021-10-12','2022-10-11','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (3,185,1,'2021-10-11','2021-10-11','2023-10-10','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (4,85,2,'2021-10-10','2021-10-10','2022-10-09','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (5,117,1,'2019-09-11','2019-09-11','2021-09-10','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (6,4,2,'2021-10-08','2021-10-08','2022-10-07','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (7,63,1,'2021-10-07','2021-10-07','2023-10-06','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (8,127,2,'2021-10-06','2021-10-06','2022-10-05','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (9,168,1,'2021-10-05','2021-10-05','2023-10-04','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (10,195,1,'2019-08-02','2019-08-02','2021-08-01','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (11,170,3,'2021-10-03','2021-10-03',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (12,30,2,'2021-10-02','2021-10-02','2022-10-01','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (13,194,1,'2021-10-01','2021-10-01','2023-09-30','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (14,180,2,'2021-09-30','2021-09-30','2022-09-29','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (15,107,2,'2020-09-29','2020-09-29','2021-09-28','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (16,113,2,'2021-09-28','2021-09-28','2022-09-27','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (17,51,1,'2021-09-27','2021-09-27','2023-09-26','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (18,92,2,'2021-09-26','2021-09-26','2022-09-25','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (19,132,1,'2021-09-25','2021-09-25','2023-09-24','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (20,70,2,'2020-09-24','2020-09-24','2021-09-23','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (21,23,1,'2021-09-23','2021-09-23','2023-09-22','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (22,159,3,'2021-09-22','2021-09-22',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (23,152,1,'2021-09-21','2021-09-21','2023-09-20','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (24,16,2,'2021-09-20','2021-09-20','2022-09-19','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (25,201,2,'2020-09-19','2020-09-19','2021-09-18','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (26,5,2,'2021-09-18','2021-09-18','2022-09-17','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (27,17,1,'2021-09-17','2021-09-17','2023-09-16','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (28,58,2,'2021-09-16','2021-09-16','2022-09-15','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (29,44,1,'2021-09-15','2021-09-15','2023-09-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL), + (30,19,2,'2020-09-14','2020-09-14','2021-09-13','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -4555,36 +4542,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_log` WRITE; /*!40000 ALTER TABLE `civicrm_membership_log` DISABLE KEYS */; INSERT INTO `civicrm_membership_log` (`id`, `membership_id`, `status_id`, `start_date`, `end_date`, `modified_id`, `modified_date`, `membership_type_id`, `max_related`) VALUES - (1,5,3,'2019-06-24','2021-06-23',10,'2021-07-26',1,NULL), - (2,11,1,'2021-07-16',NULL,11,'2021-07-26',3,NULL), - (3,4,1,'2021-07-23','2022-07-22',14,'2021-07-26',2,NULL), - (4,26,1,'2021-07-01','2022-06-30',16,'2021-07-26',2,NULL), - (5,8,1,'2021-07-19','2022-07-18',17,'2021-07-26',2,NULL), - (6,9,1,'2021-07-18','2023-07-17',18,'2021-07-26',1,NULL), - (7,3,1,'2021-07-24','2023-07-23',24,'2021-07-26',1,NULL), - (8,14,1,'2021-07-13','2022-07-12',25,'2021-07-26',2,NULL), - (9,7,1,'2021-07-20','2023-07-19',47,'2021-07-26',1,NULL), - (10,23,1,'2021-07-04','2023-07-03',62,'2021-07-26',1,NULL), - (11,18,1,'2021-07-09','2022-07-08',67,'2021-07-26',2,NULL), - (12,22,1,'2021-07-05',NULL,68,'2021-07-26',3,NULL), - (13,25,4,'2020-07-02','2021-07-01',69,'2021-07-26',2,NULL), - (14,21,1,'2021-07-06','2023-07-05',71,'2021-07-26',1,NULL), - (15,15,4,'2020-07-12','2021-07-11',72,'2021-07-26',2,NULL), - (16,19,1,'2021-07-08','2023-07-07',89,'2021-07-26',1,NULL), - (17,24,1,'2021-07-03','2022-07-02',95,'2021-07-26',2,NULL), - (18,2,1,'2021-07-25','2022-07-24',101,'2021-07-26',2,NULL), - (19,6,1,'2021-07-21','2022-07-20',106,'2021-07-26',2,NULL), - (20,29,1,'2021-06-28','2023-06-27',111,'2021-07-26',1,NULL), - (21,10,3,'2019-05-15','2021-05-14',114,'2021-07-26',1,NULL), - (22,16,1,'2021-07-11','2022-07-10',115,'2021-07-26',2,NULL), - (23,17,1,'2021-07-10','2023-07-09',119,'2021-07-26',1,NULL), - (24,28,1,'2021-06-29','2022-06-28',122,'2021-07-26',2,NULL), - (25,1,1,'2021-07-26','2023-07-25',124,'2021-07-26',1,NULL), - (26,20,3,'2019-02-24','2021-02-23',148,'2021-07-26',1,NULL), - (27,12,1,'2021-07-15','2022-07-14',168,'2021-07-26',2,NULL), - (28,27,1,'2021-06-30','2023-06-29',171,'2021-07-26',1,NULL), - (29,30,3,'2018-12-06','2020-12-05',182,'2021-07-26',1,NULL), - (30,13,1,'2021-07-14','2023-07-13',199,'2021-07-26',1,NULL); + (1,6,1,'2021-10-08','2022-10-07',4,'2021-10-13',2,NULL), + (2,26,1,'2021-09-18','2022-09-17',5,'2021-10-13',2,NULL), + (3,24,1,'2021-09-20','2022-09-19',16,'2021-10-13',2,NULL), + (4,27,1,'2021-09-17','2023-09-16',17,'2021-10-13',1,NULL), + (5,30,4,'2020-09-14','2021-09-13',19,'2021-10-13',2,NULL), + (6,21,1,'2021-09-23','2023-09-22',23,'2021-10-13',1,NULL), + (7,12,1,'2021-10-02','2022-10-01',30,'2021-10-13',2,NULL), + (8,29,1,'2021-09-15','2023-09-14',44,'2021-10-13',1,NULL), + (9,17,1,'2021-09-27','2023-09-26',51,'2021-10-13',1,NULL), + (10,2,1,'2021-10-12','2022-10-11',56,'2021-10-13',2,NULL), + (11,28,1,'2021-09-16','2022-09-15',58,'2021-10-13',2,NULL), + (12,7,1,'2021-10-07','2023-10-06',63,'2021-10-13',1,NULL), + (13,20,4,'2020-09-24','2021-09-23',70,'2021-10-13',2,NULL), + (14,4,1,'2021-10-10','2022-10-09',85,'2021-10-13',2,NULL), + (15,1,1,'2021-10-13','2023-10-12',90,'2021-10-13',1,NULL), + (16,18,1,'2021-09-26','2022-09-25',92,'2021-10-13',2,NULL), + (17,15,4,'2020-09-29','2021-09-28',107,'2021-10-13',2,NULL), + (18,16,1,'2021-09-28','2022-09-27',113,'2021-10-13',2,NULL), + (19,5,3,'2019-09-11','2021-09-10',117,'2021-10-13',1,NULL), + (20,8,1,'2021-10-06','2022-10-05',127,'2021-10-13',2,NULL), + (21,19,1,'2021-09-25','2023-09-24',132,'2021-10-13',1,NULL), + (22,23,1,'2021-09-21','2023-09-20',152,'2021-10-13',1,NULL), + (23,22,1,'2021-09-22',NULL,159,'2021-10-13',3,NULL), + (24,9,1,'2021-10-05','2023-10-04',168,'2021-10-13',1,NULL), + (25,11,1,'2021-10-03',NULL,170,'2021-10-13',3,NULL), + (26,14,1,'2021-09-30','2022-09-29',180,'2021-10-13',2,NULL), + (27,3,1,'2021-10-11','2023-10-10',185,'2021-10-13',1,NULL), + (28,13,1,'2021-10-01','2023-09-30',194,'2021-10-13',1,NULL), + (29,10,3,'2019-08-02','2021-08-01',195,'2021-10-13',1,NULL), + (30,25,4,'2020-09-19','2021-09-18',201,'2021-10-13',2,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -4595,36 +4582,36 @@ UNLOCK TABLES; LOCK TABLES `civicrm_membership_payment` WRITE; /*!40000 ALTER TABLE `civicrm_membership_payment` DISABLE KEYS */; INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES - (25,1,14), - (18,2,15), - (7,3,16), - (3,4,17), - (1,5,18), - (19,6,19), - (9,7,20), - (5,8,21), - (6,9,22), - (21,10,23), - (2,11,24), - (27,12,25), - (30,13,26), - (8,14,27), - (15,15,28), - (22,16,29), - (23,17,30), - (11,18,31), - (16,19,32), - (26,20,33), - (14,21,34), - (12,22,35), - (10,23,36), - (17,24,37), - (13,25,38), - (4,26,39), - (28,27,40), - (24,28,41), - (20,29,42), - (29,30,43); + (1,1,14), + (2,3,15), + (3,5,16), + (4,7,17), + (5,9,18), + (6,10,19), + (7,13,20), + (8,17,21), + (9,19,22), + (10,21,23), + (11,23,24), + (12,27,25), + (13,29,26), + (14,2,27), + (15,4,28), + (16,6,29), + (17,8,30), + (18,12,31), + (19,14,32), + (20,15,33), + (21,16,34), + (22,18,35), + (23,20,36), + (24,24,37), + (25,25,38), + (26,26,39), + (27,28,40), + (28,30,41), + (29,11,42), + (30,22,43); /*!40000 ALTER TABLE `civicrm_membership_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -4665,413 +4652,413 @@ UNLOCK TABLES; LOCK TABLES `civicrm_menu` WRITE; /*!40000 ALTER TABLE `civicrm_menu` DISABLE KEYS */; INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES - (1,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'), - (2,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'), - (3,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (4,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (5,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'), - (6,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'), - (7,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), - (8,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), - (9,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (10,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (11,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'), - (12,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (13,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (14,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (15,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (16,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (17,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'), - (18,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'), - (19,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'), - (20,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'), - (21,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'), - (22,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'), - (23,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (24,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (25,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (26,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (27,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (28,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (29,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (30,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (31,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (32,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (33,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (34,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (35,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (36,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (37,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (38,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (39,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (40,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (41,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (42,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (43,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), - (44,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (45,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (46,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (47,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (48,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (49,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (50,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (51,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (52,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (53,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (54,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (55,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (56,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), - (57,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (58,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), - (59,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (60,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (61,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (62,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (63,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (64,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (65,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (66,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (67,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (68,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (69,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (70,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (71,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (72,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (73,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (74,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (75,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (76,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (77,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (78,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (79,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (80,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (81,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), - (82,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (83,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (84,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), - (85,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), - (86,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'), - (87,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (88,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), - (89,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (90,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), - (91,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'), - (92,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'), - (93,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (94,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (95,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (96,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (97,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), - (98,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (99,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (100,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (101,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (102,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (103,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (104,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (105,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (106,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (107,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (108,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (109,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (110,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (111,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (112,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), - (113,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (114,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (115,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (116,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (117,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (118,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (119,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (120,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (121,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'), - (122,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (123,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (124,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (125,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (126,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (127,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (128,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (129,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (130,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (131,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (132,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (133,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (134,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (135,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (136,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (137,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (138,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (139,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (140,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (141,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (142,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (143,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (144,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (145,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (146,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (147,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (148,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (149,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (150,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (151,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (152,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (153,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (154,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (155,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (156,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (157,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (158,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (159,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), - (160,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'), - (161,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'), - (162,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (163,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (164,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (165,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'), - (166,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'), - (167,1,'civicrm/contact/search/custom',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Legacycustomsearches_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'), - (168,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:8:\"mode=256\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'), - (169,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (170,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (171,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (172,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (173,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (174,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (175,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (176,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (177,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (178,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (179,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (180,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (181,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (182,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (183,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (184,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (185,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (186,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (187,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (188,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (189,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (190,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (191,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (192,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (193,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (194,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (195,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (196,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (197,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (198,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), - (199,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (200,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (201,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), - (202,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (203,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (204,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (205,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (206,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (207,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (208,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (209,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (210,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (211,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (212,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (213,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (214,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (215,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (216,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (217,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), - (218,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (219,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (220,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (221,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (222,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (223,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (224,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (225,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (226,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (227,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (228,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (229,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (230,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (231,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (232,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (233,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (234,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), - (235,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (236,1,'civicrm/tag',NULL,'Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (237,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (238,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (239,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (240,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (241,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (242,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (243,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (244,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (245,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (246,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (247,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), - (248,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), - (249,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (250,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), - (251,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), - (252,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (253,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (254,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (255,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (256,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (257,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (258,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (259,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (260,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (261,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (262,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'), - (263,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'), - (264,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (265,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'), - (266,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), - (267,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'), - (268,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), - (269,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'), - (270,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), - (271,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'), - (272,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), - (273,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'), - (274,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'), - (275,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'), - (276,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'), - (277,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'), - (278,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'), - (279,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (280,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (281,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (282,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'), - (283,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (284,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (285,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (286,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (287,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (288,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'), - (289,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (290,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'), - (291,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'), - (292,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'), - (293,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), - (294,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), - (295,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'), - (296,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'), - (297,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'), - (298,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'), - (299,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (300,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (301,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (302,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (303,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (304,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (305,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (306,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (307,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (308,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (309,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:42:\"/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (310,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'), - (311,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'), - (312,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'), - (313,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'), - (314,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), - (315,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (316,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (317,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (318,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (319,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (320,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (321,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'), - (322,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'), - (323,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'), - (324,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'), - (325,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:32:\"/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'), - (326,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (327,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (328,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (329,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:35:\"/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (330,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (331,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (332,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (333,1,'civicrm/contribute/widget',NULL,'CiviContribute','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contribute_Page_Widget\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (334,1,'civicrm/contribute/task',NULL,'Contribution Task','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contribute_Controller_Task\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (335,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'), - (336,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), - (337,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), - (338,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), - (339,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (340,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (341,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'), - (342,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'), - (343,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'), - (344,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'), - (345,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (346,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (347,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'), - (348,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (349,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (350,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (351,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (352,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), - (353,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), - (354,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), - (355,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'), - (356,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'), - (357,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'), - (358,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'), - (359,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'), - (360,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), - (361,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), - (362,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'), - (363,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'), - (364,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'), - (365,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'), - (366,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'), - (367,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (368,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'), - (369,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'), - (370,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (371,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (372,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (373,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (374,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (375,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), - (376,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), - (377,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'), - (378,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), - (379,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (380,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), - (381,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'), - (382,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'), - (383,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), - (384,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'), - (385,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (386,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), - (387,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), - (388,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'), - (389,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (390,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (391,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (392,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (393,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:30:\"/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (394,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (395,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (396,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (397,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (398,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (399,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (400,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (401,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (402,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:28:\"/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (403,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (404,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), - (405,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (406,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), - (407,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (1,1,'civicrm/custom/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Custom_Form_CustomData\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (2,1,'civicrm/ajax/optionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:13:\"getOptionList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (3,1,'civicrm/ajax/reorder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:11:\"fixOrdering\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (4,1,'civicrm/ajax/multirecordfieldlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Custom_Page_AJAX\";i:1;s:23:\"getMultiRecordFieldList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (5,1,'civicrm',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:0:{}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (6,1,'civicrm/dashboard',NULL,'CiviCRM Home','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,NULL,'a:0:{}'), + (7,1,'civicrm/contact/search',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'), + (8,1,'civicrm/contact/image',NULL,'Process Uploaded Images','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"CRM_Contact_BAO_Contact\";i:1;s:12:\"processImage\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (9,1,'civicrm/contact/imagefile',NULL,'Get Image File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contact_Page_ImageFile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (10,1,'civicrm/contact/search/basic',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (11,1,'civicrm/contact/search/advanced',NULL,'Advanced Search','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=512\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,12,1,1,NULL,'a:0:{}'), + (12,1,'civicrm/contact/search/builder',NULL,'Search Builder','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:9:\"mode=8192\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,14,1,1,NULL,'a:0:{}'), + (13,1,'civicrm/contact/search/custom/list',NULL,'Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Page_CustomSearch\";','s:10:\"mode=16384\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,16,1,1,NULL,'a:0:{}'), + (14,1,'civicrm/contact/add',NULL,'New Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (15,1,'civicrm/contact/add/individual','ct=Individual','New Individual','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (16,1,'civicrm/contact/add/household','ct=Household','New Household','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (17,1,'civicrm/contact/add/organization','ct=Organization','New Organization','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:12:\"add contacts\";}i:1;s:3:\"and\";}','s:24:\"CRM_Contact_Form_Contact\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Contact\";s:3:\"url\";s:28:\"/civicrm/contact/add?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (18,1,'civicrm/contact/relatedcontact',NULL,'Edit Related Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_RelatedContact\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (19,1,'civicrm/contact/merge',NULL,'Merge Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:22:\"CRM_Contact_Form_Merge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (20,1,'civicrm/contact/email',NULL,'Email a Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (21,1,'civicrm/contact/map',NULL,'Map Location(s)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_Map\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (22,1,'civicrm/contact/map/event',NULL,'Map Event Location','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contact_Form_Task_Map_Event\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Map Location(s)\";s:3:\"url\";s:28:\"/civicrm/contact/map?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (23,1,'civicrm/contact/view','cid=%%cid%%','Contact Summary','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Summary\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (24,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (25,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (26,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (27,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (28,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (29,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (30,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (31,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (32,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (33,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (34,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (35,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (36,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (37,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (38,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (39,1,'civicrm/user',NULL,'Contact Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"access Contact Dashboard\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Page_View_UserDashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (40,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (41,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (42,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (43,1,'civicrm/ajax/relation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"relationship\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (44,1,'civicrm/ajax/groupTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"groupTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (45,1,'civicrm/ajax/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:11:\"customField\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (46,1,'civicrm/ajax/customvalue',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:17:\"deleteCustomValue\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (47,1,'civicrm/ajax/cmsuser',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"checkUserName\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (48,1,'civicrm/ajax/checkemail',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactEmail\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (49,1,'civicrm/ajax/checkphone',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:15:\"getContactPhone\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (50,1,'civicrm/ajax/subtype',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"buildSubTypes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (51,1,'civicrm/ajax/signature',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:12:\"getSignature\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (52,1,'civicrm/ajax/pdfFormat',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"pdfFormat\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (53,1,'civicrm/ajax/paperSize',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:9:\"paperSize\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (54,1,'civicrm/ajax/contactref',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:31:\"access contact reference fields\";i:1;s:15:\" access CiviCRM\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"contactReference\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (55,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (56,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (57,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (58,1,'civicrm/contact/deduperules',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer dedupe rules\";i:1;s:24:\"merge duplicate contacts\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Page_DedupeRules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,105,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (59,1,'civicrm/contact/dedupefind',NULL,'Find and Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Page_DedupeFind\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (60,1,'civicrm/ajax/dedupefind',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:10:\"getDedupes\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (61,1,'civicrm/contact/dedupemerge',NULL,'Batch Merge Duplicate Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Page_DedupeMerge\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (62,1,'civicrm/dedupe/exception',NULL,'Dedupe Exceptions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Page_DedupeException\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,110,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), + (63,1,'civicrm/ajax/dedupeRules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:16:\"buildDedupeRules\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (64,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (65,1,'civicrm/ajax/markSelection',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:22:\"selectUnselectContacts\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (66,1,'civicrm/ajax/toggleDedupeSelect',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:18:\"toggleDedupeSelect\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (67,1,'civicrm/ajax/flipDupePairs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:24:\"merge duplicate contacts\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:13:\"flipDupePairs\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (68,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (69,1,'civicrm/ajax/contactrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"view my contact\";}i:1;s:2:\"or\";}','a:2:{i:0;s:21:\"CRM_Contact_Page_AJAX\";i:1;s:23:\"getContactRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (70,1,'civicrm/admin/custom/group',NULL,'Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (71,1,'civicrm/admin/custom/group/field',NULL,'Custom Data Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,11,1,0,0,'a:0:{}'), + (72,1,'civicrm/admin/custom/group/field/option',NULL,'Custom Field - Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:22:\"CRM_Custom_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (73,1,'civicrm/admin/custom/group/field/add',NULL,'Custom Field - Add','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (74,1,'civicrm/admin/custom/group/field/update',NULL,'Custom Field - Edit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (75,1,'civicrm/admin/custom/group/field/move',NULL,'Custom Field - Move','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:25:\"CRM_Custom_Form_MoveField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (76,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (77,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,21,1,0,0,'a:0:{}'), + (78,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,22,1,0,NULL,'a:0:{}'), + (79,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,23,1,0,NULL,'a:0:{}'), + (80,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,24,1,0,NULL,'a:0:{}'), + (81,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,25,1,0,NULL,'a:0:{}'), + (82,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,0,NULL,'a:0:{}'), + (83,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (84,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,35,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (85,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (86,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,45,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (87,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (88,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,55,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (89,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (90,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,65,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (91,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (92,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (93,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (94,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (95,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,95,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (96,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (97,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (98,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (99,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (100,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (101,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (102,1,'civicrm/admin/messageTemplates',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Page_MessageTemplates\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (103,1,'civicrm/admin/messageTemplates/add',NULL,'Message Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:22:\"edit message templates\";i:1;s:34:\"edit user-driven message templates\";i:2;s:38:\"edit system workflow message templates\";}i:1;s:2:\"or\";}','s:31:\"CRM_Admin_Form_MessageTemplates\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Message Templates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,262,1,0,NULL,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), + (104,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (105,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (106,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (107,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (108,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (109,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,75,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (110,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (111,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (112,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (113,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (114,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (115,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (116,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), + (117,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (118,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), + (119,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (120,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (121,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (122,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (123,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (124,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,20,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (125,1,'civicrm/admin/paymentProcessor',NULL,'Settings - Payment Processor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:29:\"administer payment processors\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_PaymentProcessor\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,30,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (126,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,40,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (127,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,50,1,0,NULL,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (128,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,60,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (129,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,70,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (130,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,80,1,0,NULL,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (131,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,90,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (132,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,100,1,0,NULL,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (133,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,105,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (134,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,110,1,0,NULL,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (135,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,120,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (136,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,130,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (137,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,10,1,0,NULL,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (138,1,'civicrm/admin/setting/preferences/event',NULL,'CiviEvent Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (139,1,'civicrm/admin/setting/preferences/mailing',NULL,'CiviMail Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Mailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (140,1,'civicrm/admin/setting/preferences/member',NULL,'CiviMember Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Admin_Form_Preferences_Member\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (141,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), + (142,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1370,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (143,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1380,1,0,NULL,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (144,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), + (145,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), + (146,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,9000,1,1,NULL,'a:0:{}'), + (147,1,'civicrm/ajax/navmenu',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:7:\"navMenu\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (148,1,'civicrm/ajax/menutree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:8:\"menuTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (149,1,'civicrm/ajax/statusmsg',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:12:\"getStatusMsg\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (150,1,'civicrm/admin/price',NULL,'Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), + (151,1,'civicrm/admin/price/add','action=add','New Price Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:1:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";}'), + (152,1,'civicrm/admin/price/field',NULL,'Price Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:20:\"CRM_Price_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,0,'a:0:{}'), + (153,1,'civicrm/admin/price/field/option',NULL,'Price Field Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Price_Page_Option\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:10:\"Price Sets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (154,1,'civicrm/ajax/mapping',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:11:\"mappingList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (155,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (156,1,'civicrm/admin/sms/provider',NULL,'Sms Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Provider\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,500,1,0,NULL,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (157,1,'civicrm/sms/send',NULL,'New Mass SMS','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:23:\"CRM_SMS_Controller_Send\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), + (158,1,'civicrm/sms/callback',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_SMS_Page_Callback\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (159,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,399,1,0,NULL,'a:2:{s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (160,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (161,1,'civicrm/group',NULL,'Manage Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Page_Group\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,30,1,1,NULL,'a:0:{}'), + (162,1,'civicrm/group/search',NULL,'Group Members','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Controller_Search\";','s:8:\"mode=256\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:7:\"comment\";s:164:\"Note: group search already respect ACL, so a strict permission at url level is not required. A simple/basic permission like \'access CiviCRM\' could be used. CRM-5417\";}'), + (163,1,'civicrm/group/add',NULL,'New Group','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:11:\"edit groups\";}i:1;s:3:\"and\";}','s:20:\"CRM_Group_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Manage Groups\";s:3:\"url\";s:22:\"/civicrm/group?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (164,1,'civicrm/ajax/grouplist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Group_Page_AJAX\";i:1;s:12:\"getGroupList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (165,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (166,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (167,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (168,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,362,1,0,NULL,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (169,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (170,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (171,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (172,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (173,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (174,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (175,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (176,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (177,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (178,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (179,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (180,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (181,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (182,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (183,1,'civicrm/custom',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Custom_Form_CustomDataByType\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (184,1,'civicrm/tag',NULL,'Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:16:\"CRM_Tag_Page_Tag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,25,1,0,NULL,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (185,1,'civicrm/tag/edit','action=add','New Tag','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:17:\"CRM_Tag_Form_Edit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (186,1,'civicrm/tag/merge',NULL,'Merge Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','s:18:\"CRM_Tag_Form_Merge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (187,1,'civicrm/ajax/tagTree',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:11:\"manage tags\";}i:1;s:2:\"or\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:10:\"getTagTree\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (188,1,'civicrm/ajax/jqState',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:7:\"jqState\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (189,1,'civicrm/ajax/jqCounty',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:8:\"jqCounty\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (190,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (191,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (192,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (193,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (194,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (195,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (196,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (197,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (198,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (199,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (200,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (201,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,9999,1,1,NULL,'a:0:{}'), + (202,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (203,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (204,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (205,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (206,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (207,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (208,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (209,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (210,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (211,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (212,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (213,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (214,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (215,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (216,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (217,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (218,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (219,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (220,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (221,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (222,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (223,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (224,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (225,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (226,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (227,1,'civicrm/shortcode',NULL,'Insert CiviCRM Content','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Core_Form_ShortCode\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (228,1,'civicrm/task/add-to-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contact_Form_Task_AddToGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (229,1,'civicrm/task/remove-from-group',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contact_Form_Task_RemoveFromGroup\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (230,1,'civicrm/task/add-to-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contact_Form_Task_AddToTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (231,1,'civicrm/task/remove-from-tag',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Contact_Form_Task_RemoveFromTag\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (232,1,'civicrm/task/send-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (233,1,'civicrm/task/make-mailing-label',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Label\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (234,1,'civicrm/task/pick-profile',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contact_Form_Task_PickProfile\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (235,1,'civicrm/task/print-document',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (236,1,'civicrm/task/unhold-email',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Unhold\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (237,1,'civicrm/task/alter-contact-preference',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contact_Form_Task_AlterPreferences\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (238,1,'civicrm/task/delete-contact',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (239,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (240,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (241,1,'civicrm/import',NULL,'Import','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,400,1,1,NULL,'a:0:{}'), + (242,1,'civicrm/import/contact',NULL,'Import Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contact_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,410,1,1,NULL,'a:0:{}'), + (243,1,'civicrm/import/activity',NULL,'Import Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), + (244,1,'civicrm/import/custom','id=%%id%%','Import Multi-value Custom Data','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Custom_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:6:\"Import\";s:3:\"url\";s:23:\"/civicrm/import?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,420,1,1,NULL,'a:0:{}'), + (245,1,'civicrm/ajax/status',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"import contacts\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Contact_Import_Page_AJAX\";i:1;s:6:\"status\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (246,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,800,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (247,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (248,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (249,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), + (250,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), + (251,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (252,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (253,1,'civicrm/event/participant',NULL,'Event Participants List','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"view event participants\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Page_ParticipantListing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (254,1,'civicrm/admin/event',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (255,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,375,1,0,NULL,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (256,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,385,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (257,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (258,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (259,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,398,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (260,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (261,1,'civicrm/event/search',NULL,'Find Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,810,1,1,NULL,'a:0:{}'), + (262,1,'civicrm/event/manage',NULL,'Manage Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:26:\"CRM_Event_Page_ManageEvent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,820,1,1,NULL,'a:0:{}'), + (263,1,'civicrm/event/badge',NULL,'Print Event Name Badge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:25:\"CRM_Event_Form_Task_Badge\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (264,1,'civicrm/event/manage/settings',NULL,'Event Info and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,910,1,0,NULL,'a:0:{}'), + (265,1,'civicrm/event/manage/location',NULL,'Event Location','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:35:\"CRM_Event_Form_ManageEvent_Location\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), + (266,1,'civicrm/event/manage/fee',NULL,'Event Fees','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_ManageEvent_Fee\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,920,1,0,NULL,'a:0:{}'), + (267,1,'civicrm/event/manage/registration',NULL,'Event Online Registration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:39:\"CRM_Event_Form_ManageEvent_Registration\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,930,1,0,NULL,'a:0:{}'), + (268,1,'civicrm/event/manage/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:21:\"CRM_Friend_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,940,1,0,NULL,'a:0:{}'), + (269,1,'civicrm/event/manage/reminder',NULL,'Schedule Reminders','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:44:\"CRM_Event_Form_ManageEvent_ScheduleReminders\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), + (270,1,'civicrm/event/manage/repeat',NULL,'Repeat Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Form_ManageEvent_Repeat\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,960,1,0,NULL,'a:0:{}'), + (271,1,'civicrm/event/manage/conference',NULL,'Conference Slots','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:37:\"CRM_Event_Form_ManageEvent_Conference\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,950,1,0,NULL,'a:0:{}'), + (272,1,'civicrm/event/add','action=add','New Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Event_Form_ManageEvent_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,830,1,0,NULL,'a:0:{}'), + (273,1,'civicrm/event/import',NULL,'Import Participants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:23:\"edit event participants\";}i:1;s:3:\"and\";}','s:27:\"CRM_Event_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,840,1,1,NULL,'a:0:{}'), + (274,1,'civicrm/event/price',NULL,'Manage Price Sets','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Price_Page_Set\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,850,1,1,NULL,'a:0:{}'), + (275,1,'civicrm/event/selfsvcupdate',NULL,'Self-service Registration Update','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Form_SelfSvcUpdate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,880,1,1,NULL,'a:0:{}'), + (276,1,'civicrm/event/selfsvctransfer',NULL,'Self-service Registration Transfer','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:30:\"CRM_Event_Form_SelfSvcTransfer\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,890,1,1,NULL,'a:0:{}'), + (277,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'), + (278,1,'civicrm/ajax/eventFee',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_Page_AJAX\";i:1;s:8:\"eventFee\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (279,1,'civicrm/ajax/locBlock',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:11:\"getLocBlock\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (280,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (281,1,'civicrm/event/manage/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_PCP_Form_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Manage Events\";s:3:\"url\";s:29:\"/civicrm/event/manage?reset=1\";}}',NULL,NULL,1,NULL,NULL,NULL,1,540,1,1,NULL,'a:0:{}'), + (282,1,'civicrm/event/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (283,1,'civicrm/event/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (284,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,450,1,0,NULL,'a:0:{}'), + (285,1,'civicrm/contribute/campaign',NULL,'Setup a Personal Campaign Page - Account Information','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (286,1,'civicrm/contribute',NULL,'CiviContribute Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,500,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (287,1,'civicrm/contribute/add','action=add','New Contribution','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (288,1,'civicrm/contribute/chart',NULL,'Contribution Summary - Chart View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (289,1,'civicrm/contribute/transact',NULL,'CiviContribute','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Controller_Contribution\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,1,0,1,0,NULL,'a:0:{}'), + (290,1,'civicrm/admin/contribute',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,360,1,0,NULL,'a:2:{s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (291,1,'civicrm/admin/contribute/settings',NULL,'Title and Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_Settings\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:0:{}'), + (292,1,'civicrm/admin/contribute/amount',NULL,'Contribution Amounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Amount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:0:{}'), + (293,1,'civicrm/admin/contribute/membership',NULL,'Membership Section','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Member_Form_MembershipBlock\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:0:{}'), + (294,1,'civicrm/admin/contribute/custom',NULL,'Include Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Custom\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), + (295,1,'civicrm/admin/contribute/thankyou',NULL,'Thank-you and Receipting','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Form_ContributionPage_ThankYou\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,430,1,0,NULL,'a:0:{}'), + (296,1,'civicrm/admin/contribute/friend',NULL,'Tell a Friend','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Friend_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,440,1,0,NULL,'a:0:{}'), + (297,1,'civicrm/admin/contribute/widget',NULL,'Configure Widget','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_ContributionPage_Widget\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,460,1,0,NULL,'a:0:{}'), + (298,1,'civicrm/admin/contribute/premium',NULL,'Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:44:\"CRM_Contribute_Form_ContributionPage_Premium\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,470,1,0,NULL,'a:0:{}'), + (299,1,'civicrm/admin/contribute/addProductToPage',NULL,'Add Products to This Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:47:\"CRM_Contribute_Form_ContributionPage_AddProduct\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,480,1,0,NULL,'a:0:{}'), + (300,1,'civicrm/admin/contribute/add','action=add','New Contribution Page','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Contribute_Controller_ContributionPage\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (301,1,'civicrm/admin/contribute/managePremiums',NULL,'Manage Premiums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Page_ManagePremiums\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,365,1,0,NULL,'a:2:{s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (302,1,'civicrm/admin/financial/financialType',NULL,'Financial Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Financial_Page_FinancialType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,580,1,0,NULL,'a:2:{s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (303,1,'civicrm/payment','action=add','New Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Form_AdditionalPayment\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (304,1,'civicrm/admin/financial/financialAccount',NULL,'Financial Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_FinancialAccount\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (305,1,'civicrm/admin/options/payment_instrument',NULL,'Payment Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (306,1,'civicrm/admin/options/accept_creditcard',NULL,'Accepted Credit Cards','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,395,1,0,NULL,'a:2:{s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (307,1,'civicrm/admin/options/soft_credit_type',NULL,'Soft Credit Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (308,1,'civicrm/contact/view/contribution',NULL,'Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:23:\"CRM_Contribute_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (309,1,'civicrm/contact/view/contributionrecur',NULL,'Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:37:\"CRM_Contribute_Page_ContributionRecur\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (310,1,'civicrm/contact/view/contribution/additionalinfo',NULL,'Additional Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:13:\"Contributions\";s:3:\"url\";s:42:\"/civicrm/contact/view/contribution?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (311,1,'civicrm/contribute/search',NULL,'Find Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,510,1,1,NULL,'a:0:{}'), + (312,1,'civicrm/contribute/searchBatch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:37:\"CRM_Contribute_Controller_SearchBatch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,588,1,1,NULL,'a:0:{}'), + (313,1,'civicrm/contribute/import',NULL,'Import Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"edit contributions\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,520,1,1,NULL,'a:0:{}'), + (314,1,'civicrm/contribute/manage',NULL,'Manage Contribution Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:36:\"CRM_Contribute_Page_ContributionPage\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,530,1,1,NULL,'a:0:{}'), + (315,1,'civicrm/contribute/additionalinfo',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:34:\"CRM_Contribute_Form_AdditionalInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (316,1,'civicrm/ajax/permlocation',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','a:2:{i:0;s:27:\"CRM_Core_Page_AJAX_Location\";i:1;s:23:\"getPermissionedLocation\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (317,1,'civicrm/contribute/unsubscribe',NULL,'Cancel Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_CancelSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (318,1,'civicrm/contribute/onbehalf',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:43:\"CRM_Contribute_Form_Contribution_OnBehalfOf\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (319,1,'civicrm/contribute/updatebilling',NULL,'Update Billing Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:33:\"CRM_Contribute_Form_UpdateBilling\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (320,1,'civicrm/contribute/updaterecur',NULL,'Update Subscription','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_UpdateSubscription\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (321,1,'civicrm/contribute/subscriptionstatus',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Page_SubscriptionStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (322,1,'civicrm/admin/financial/financialType/accounts',NULL,'Financial Type Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:39:\"CRM_Financial_Page_FinancialTypeAccount\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:15:\"Financial Types\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,581,1,0,NULL,'a:0:{}'), + (323,1,'civicrm/financial/batch',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:33:\"CRM_Financial_Page_FinancialBatch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,585,1,0,NULL,'a:0:{}'), + (324,1,'civicrm/financial/financialbatches',NULL,'Accounting Batches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Financial_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,586,1,0,NULL,'a:0:{}'), + (325,1,'civicrm/batchtransaction',NULL,'Accounting Batch','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Financial_Page_BatchTransaction\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,600,1,0,NULL,'a:0:{}'), + (326,1,'civicrm/financial/batch/export',NULL,'Accounting Batch Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"create manual batch\";}i:1;s:3:\"and\";}','s:25:\"CRM_Financial_Form_Export\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Accounting Batch\";s:3:\"url\";s:32:\"/civicrm/financial/batch?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,610,1,0,NULL,'a:0:{}'), + (327,1,'civicrm/payment/view','action=view','View Payment','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:31:\"CRM_Contribute_Page_PaymentInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (328,1,'civicrm/admin/setting/preferences/contribute',NULL,'CiviContribute Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:21:\"access CiviContribute\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:37:\"CRM_Admin_Form_Preferences_Contribute\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (329,1,'civicrm/contribute/invoice',NULL,'PDF Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:32:\"CRM_Contribute_Form_Task_Invoice\";i:1;s:11:\"getPrintPDF\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,620,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (330,1,'civicrm/contribute/invoice/email',NULL,'Email Invoice','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:20:\"checkDownloadInvoice\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:32:\"CRM_Contribute_Form_Task_Invoice\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}i:2;a:2:{s:5:\"title\";s:11:\"PDF Invoice\";s:3:\"url\";s:35:\"/civicrm/contribute/invoice?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,630,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (331,1,'civicrm/ajax/softcontributionlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:24:\"CRM_Contribute_Page_AJAX\";i:1;s:23:\"getSoftContributionRows\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (332,1,'civicrm/contribute/contributionrecur-payments',NULL,'Recurring Contribution\'s Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:45:\"CRM_Contribute_Page_ContributionRecurPayments\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (333,1,'civicrm/membership/recurring-contributions',NULL,'Membership Recurring Contributions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:38:\"CRM_Member_Page_RecurringContributions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (334,1,'civicrm/contribute/widget',NULL,'CiviContribute','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contribute_Page_Widget\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'), + (335,1,'civicrm/contribute/task',NULL,'Contribution Task','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contribute_Controller_Task\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (336,1,'civicrm/member',NULL,'CiviMember Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:25:\"CRM_Member_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,700,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (337,1,'civicrm/member/add','action=add','New Membership','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (338,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,370,1,0,NULL,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (339,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (340,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'), + (341,1,'civicrm/membership/view',NULL,'Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipView\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,390,1,0,NULL,'a:0:{}'), + (342,1,'civicrm/member/search',NULL,'Find Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,710,1,1,NULL,'a:0:{}'), + (343,1,'civicrm/member/import',NULL,'Import Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:16:\"edit memberships\";}i:1;s:3:\"and\";}','s:28:\"CRM_Member_Import_Controller\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviMember Dashboard\";s:3:\"url\";s:23:\"/civicrm/member?reset=1\";}}',NULL,NULL,3,NULL,NULL,NULL,0,720,1,1,NULL,'a:0:{}'), + (344,1,'civicrm/ajax/memType',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviMember\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Member_Page_AJAX\";i:1;s:21:\"getMemberTypeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (345,1,'civicrm/admin/member/membershipType/add',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviMember\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Form_MembershipType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:16:\"Membership Types\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (346,1,'civicrm/mailing',NULL,'CiviMail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,600,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'), + (347,1,'civicrm/admin/mail',NULL,'Mailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Mail\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (348,1,'civicrm/admin/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,410,1,0,NULL,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (349,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,415,1,0,NULL,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (350,1,'civicrm/admin/mailSettings',NULL,'Mail Accounts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_MailSettings\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,420,1,0,NULL,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (351,1,'civicrm/mailing/send',NULL,'New Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:27:\"CRM_Mailing_Controller_Send\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,610,1,1,NULL,'a:0:{}'), + (352,1,'civicrm/mailing/browse/scheduled','scheduled=true','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:5:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";i:4;s:8:\"send SMS\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), + (353,1,'civicrm/mailing/browse/unscheduled','scheduled=false','Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";i:2;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,620,1,1,NULL,'a:0:{}'), + (354,1,'civicrm/mailing/browse/archived',NULL,'Find Mailings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,625,1,1,NULL,'a:0:{}'), + (355,1,'civicrm/mailing/component',NULL,'Headers, Footers, and Automated Messages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Page_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,630,1,1,NULL,'a:0:{}'), + (356,1,'civicrm/mailing/unsubscribe',NULL,'Unsubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Form_Unsubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,640,1,0,NULL,'a:0:{}'), + (357,1,'civicrm/mailing/resubscribe',NULL,'Resubscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:28:\"CRM_Mailing_Page_Resubscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,645,1,0,NULL,'a:0:{}'), + (358,1,'civicrm/mailing/optout',NULL,'Opt-out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Form_Optout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,650,1,0,NULL,'a:0:{}'), + (359,1,'civicrm/mailing/confirm',NULL,'Confirm','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:24:\"CRM_Mailing_Page_Confirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), + (360,1,'civicrm/mailing/subscribe',NULL,'Subscribe','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:26:\"CRM_Mailing_Form_Subscribe\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,660,1,0,NULL,'a:0:{}'), + (361,1,'civicrm/mailing/preview',NULL,'Preview Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";i:2;s:15:\"create mailings\";i:3;s:17:\"schedule mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Page_Preview\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,670,1,0,NULL,'a:0:{}'), + (362,1,'civicrm/mailing/report','mid=%%mid%%','Mailing Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:15:\"create mailings\";}i:1;s:2:\"or\";}','s:23:\"CRM_Mailing_Page_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,680,1,0,NULL,'a:0:{}'), + (363,1,'civicrm/mailing/forward',NULL,'Forward Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:43:\"access CiviMail subscribe/unsubscribe pages\";}i:1;s:3:\"and\";}','s:31:\"CRM_Mailing_Form_ForwardMailing\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,685,1,0,NULL,'a:0:{}'), + (364,1,'civicrm/mailing/queue',NULL,'Sending Mail','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:23:\"CRM_Mailing_Page_Browse\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,690,1,0,NULL,'a:0:{}'), + (365,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'), + (366,1,'civicrm/ajax/template',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:8:\"template\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (367,1,'civicrm/mailing/view',NULL,'View Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:28:\"view public CiviMail content\";i:1;s:15:\"access CiviMail\";i:2;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:21:\"CRM_Mailing_Page_View\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,800,1,0,NULL,'a:0:{}'), + (368,1,'civicrm/mailing/approve',NULL,'Approve Mailing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:15:\"access CiviMail\";i:1;s:16:\"approve mailings\";}i:1;s:2:\"or\";}','s:24:\"CRM_Mailing_Form_Approve\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,NULL,NULL,0,850,1,0,NULL,'a:0:{}'), + (369,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (370,1,'civicrm/ajax/contactmailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:18:\"getContactMailings\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (371,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (372,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (373,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), + (374,1,'civicrm/grant',NULL,'CiviGrant Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1000,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), + (375,1,'civicrm/grant/info',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:24:\"CRM_Grant_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,0,1,0,NULL,'a:0:{}'), + (376,1,'civicrm/grant/search',NULL,'Find Grants','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:27:\"CRM_Grant_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1010,1,1,NULL,'a:0:{}'), + (377,1,'civicrm/grant/add','action=add','New Grant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviGrant Dashboard\";s:3:\"url\";s:22:\"/civicrm/grant?reset=1\";}}',NULL,NULL,5,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:9:\"CiviGrant\";}'), + (378,1,'civicrm/contact/view/grant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviGrant\";}i:1;s:3:\"and\";}','s:18:\"CRM_Grant_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (379,1,'civicrm/pledge',NULL,'CiviPledge Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:25:\"CRM_Pledge_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,550,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (380,1,'civicrm/pledge/search',NULL,'Find Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:28:\"CRM_Pledge_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,560,1,1,NULL,'a:0:{}'), + (381,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'), + (382,1,'civicrm/pledge/add','action=add','New Pledge','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (383,1,'civicrm/pledge/payment',NULL,'Pledge Payments','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:23:\"CRM_Pledge_Page_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:20:\"CiviPledge Dashboard\";s:3:\"url\";s:23:\"/civicrm/pledge?reset=1\";}}',NULL,NULL,6,NULL,NULL,NULL,0,580,1,0,NULL,'a:0:{}'), + (384,1,'civicrm/ajax/pledgeAmount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:17:\"access CiviPledge\";i:1;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:20:\"CRM_Pledge_Page_AJAX\";i:1;s:17:\"getPledgeDefaults\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (385,1,'civicrm/case',NULL,'CiviCase Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Case_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,900,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (386,1,'civicrm/case/add',NULL,'Open Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Case_Form_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (387,1,'civicrm/case/search',NULL,'Find Cases','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Controller_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,910,1,1,NULL,'a:0:{}'), + (388,1,'civicrm/case/activity',NULL,'Case Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Case_Form_Activity\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (389,1,'civicrm/case/report',NULL,'Case Activity Audit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:20:\"CRM_Case_Form_Report\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (390,1,'civicrm/case/cd/edit',NULL,'Case Custom Set','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (391,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (392,1,'civicrm/case/activity/view',NULL,'Activity View','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Case_Form_ActivityView\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Case Activity\";s:3:\"url\";s:30:\"/civicrm/case/activity?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (393,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (394,1,'civicrm/case/addToCase',NULL,'File on Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Case_Form_ActivityToCase\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (395,1,'civicrm/case/details',NULL,'Case Details','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Case_Page_CaseDetails\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (396,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,380,1,0,NULL,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (397,1,'civicrm/admin/options/case_type',NULL,'Case Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:24:\"url=civicrm/a/#/caseType\";','a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,390,1,0,NULL,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (398,1,'civicrm/admin/options/redaction_rule',NULL,'Redaction Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (399,1,'civicrm/admin/options/case_status',NULL,'Case Statuses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (400,1,'civicrm/admin/options/encounter_medium',NULL,'Encounter Mediums','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:19:\"administer CiviCase\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,400,1,0,NULL,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (401,1,'civicrm/case/report/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','a:2:{i:0;s:28:\"CRM_Case_XMLProcessor_Report\";i:1;s:15:\"printCaseReport\";}',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}i:2;a:2:{s:5:\"title\";s:19:\"Case Activity Audit\";s:3:\"url\";s:28:\"/civicrm/case/report?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (402,1,'civicrm/case/ajax/addclient',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:9:\"addClient\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (403,1,'civicrm/case/ajax/processtags',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"processCaseTags\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,3,NULL,'a:0:{}'), + (404,1,'civicrm/case/ajax/details',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:11:\"CaseDetails\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (405,1,'civicrm/ajax/delcaserole',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:15:\"deleteCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (406,1,'civicrm/ajax/get-cases',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Case_Page_AJAX\";i:1;s:8:\"getCases\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), + (407,1,'civicrm/case/email/add','action=add,task=email','Email','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Case_Form_Task_Email\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"CiviCase Dashboard\";s:3:\"url\";s:21:\"/civicrm/case?reset=1\";}}',NULL,NULL,7,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), (408,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1200,1,1,NULL,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'), (409,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'), (410,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1220,1,1,NULL,'a:0:{}'), @@ -5107,9 +5094,11 @@ INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title` (440,1,'civicrm/event/cart_checkout',NULL,'Cart Checkout','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Controller_Checkout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,1,1,1,0,NULL,'a:0:{}'), (441,1,'civicrm/event/remove_from_cart',NULL,'Remove From Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:34:\"CRM_Event_Cart_Page_RemoveFromCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), (442,1,'civicrm/event/view_cart',NULL,'View Cart','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Event_Cart_Page_ViewCart\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'), - (443,1,'civicrm/admin/setting/recaptcha',NULL,'reCAPTCHA Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), + (443,1,'civicrm/admin/setting/recaptcha',NULL,'reCAPTCHA Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), (444,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor 4','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:33:\"CRM_Ckeditor4_Form_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'), - (445,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:13:\"{weight}.Tags\";a:6:{s:5:\"title\";s:4:\"Tags\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:18:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:53:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, etc.)\";a:6:{s:5:\"title\";s:44:\"Misc (Undelete, PDFs, Limits, Logging, etc.)\";s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:2:\"id\";s:38:\"Misc_Undelete_PDFs_Limits_Logging_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); + (445,1,'civicrm/contact/search/custom',NULL,'Find Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Legacycustomsearches_Controller_Search\";','s:10:\"mode=16384\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:31:\"/civicrm/contact/search?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,10,1,1,NULL,'a:0:{}'), + (446,1,'civicrm/admin/setting/flexmailer',NULL,'Flexmailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:2:{s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'), + (447,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:13:\"{weight}.Tags\";a:6:{s:5:\"title\";s:4:\"Tags\";s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:2:\"id\";s:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:53:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, etc.)\";a:6:{s:5:\"title\";s:44:\"Misc (Undelete, PDFs, Limits, Logging, etc.)\";s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:2:\"id\";s:38:\"Misc_Undelete_PDFs_Limits_Logging_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.reCAPTCHA Settings\";a:6:{s:5:\"title\";s:18:\"reCAPTCHA Settings\";s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:2:\"id\";s:17:\"reCAPTCHASettings\";s:3:\"url\";s:40:\"/civicrm/admin/setting/recaptcha?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:6:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Flexmailer Settings\";a:6:{s:5:\"title\";s:19:\"Flexmailer Settings\";s:4:\"desc\";N;s:2:\"id\";s:18:\"FlexmailerSettings\";s:3:\"url\";s:41:\"/civicrm/admin/setting/flexmailer?reset=1\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -5120,70 +5109,70 @@ UNLOCK TABLES; LOCK TABLES `civicrm_msg_template` WRITE; /*!40000 ALTER TABLE `civicrm_msg_template` DISABLE KEYS */; INSERT INTO `civicrm_msg_template` (`id`, `msg_title`, `msg_subject`, `msg_text`, `msg_html`, `is_active`, `workflow_id`, `workflow_name`, `is_default`, `is_reserved`, `is_sms`, `pdf_format_id`) VALUES - (1,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role|default:\'\'}\n{if !empty($manageCaseURL)}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if !empty($editActURL)}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if !empty($viewActURL)}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{if !empty($activity.customGroups)}\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role|default:\'\'}\n </td>\n </tr>\n {if !empty($manageCaseURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if !empty($editActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if !empty($viewActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {if !empty($activity.customGroups)}\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n </table>\n </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n',1,823,'case_activity',1,0,0,NULL), - (2,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role|default:\'\'}\n{if !empty($manageCaseURL)}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if !empty($editActURL)}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if !empty($viewActURL)}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{if !empty($activity.customGroups)}\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role|default:\'\'}\n </td>\n </tr>\n {if !empty($manageCaseURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if !empty($editActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if !empty($viewActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {if !empty($activity.customGroups)}\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n </table>\n </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n',1,823,'case_activity',0,1,0,NULL), - (3,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <p>{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}</p>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_dupalert',1,0,0,NULL), - (4,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <p>{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}</p>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,824,'contribution_dupalert',0,1,0,NULL), - (5,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($receipt_date)}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if !empty($fulfilled_date)}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receipt_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if !empty($fulfilled_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_offline_receipt',1,0,0,NULL), - (6,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($receipt_date)}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if !empty($fulfilled_date)}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receipt_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if !empty($fulfilled_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_offline_receipt',0,1,0,NULL), - (7,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_online_receipt',1,0,0,NULL), - (8,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_online_receipt',0,1,0,NULL), - (9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,827,'contribution_invoice_receipt',1,0,0,NULL), - (10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,827,'contribution_invoice_receipt',0,1,0,NULL), - (11,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'contribution_recurring_notify',1,0,0,NULL), - (12,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,828,'contribution_recurring_notify',0,1,0,NULL), - (13,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'contribution_recurring_cancelled',1,0,0,NULL), - (14,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'contribution_recurring_cancelled',0,1,0,NULL), - (15,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'contribution_recurring_billing',1,0,0,NULL), - (16,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'contribution_recurring_billing',0,1,0,NULL), - (17,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,831,'contribution_recurring_edit',1,0,0,NULL), - (18,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,831,'contribution_recurring_edit',0,1,0,NULL), - (19,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,832,'pcp_notify',1,0,0,NULL), - (20,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,832,'pcp_notify',0,1,0,NULL), - (21,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <p>{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}</p>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'pcp_status_change',1,0,0,NULL), - (22,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <p>{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}</p>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'pcp_status_change',0,1,0,NULL), - (23,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <p>{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} {ts}Include this link to your fundraising page in your emails{/ts}: {$pcpInfoURL}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <p>{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}</p>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'pcp_supporter_notify',1,0,0,NULL), - (24,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <p>{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} {ts}Include this link to your fundraising page in your emails{/ts}: {$pcpInfoURL}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <p>{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}</p>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'pcp_supporter_notify',0,1,0,NULL), - (25,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,835,'pcp_owner_notify',1,0,0,NULL), - (26,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,835,'pcp_owner_notify',0,1,0,NULL), - (27,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,836,'payment_or_refund_notification',1,0,0,NULL), - (28,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,836,'payment_or_refund_notification',0,1,0,NULL), - (29,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'event_offline_receipt',1,0,0,NULL), - (30,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,837,'event_offline_receipt',0,1,0,NULL), - (31,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($individual)}{ts}Participant Total{/ts} {$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%29s\"} {$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%33s\"} {$individual.$priceset.totalAmtWithTax|crmMoney:$currency|string_format:\"%12s\"}{/if}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{capture assign=participantTotal}style=\"margin: 0.5em 0 0.5em;padding: 0.5em;background-color: #999999;font-weight: bold;color: #FAFAFA;border-radius: 2px;\"{/capture}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'event_online_receipt',1,0,0,NULL), - (32,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($individual)}{ts}Participant Total{/ts} {$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%29s\"} {$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%33s\"} {$individual.$priceset.totalAmtWithTax|crmMoney:$currency|string_format:\"%12s\"}{/if}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{capture assign=participantTotal}style=\"margin: 0.5em 0 0.5em;padding: 0.5em;background-color: #999999;font-weight: bold;color: #FAFAFA;border-radius: 2px;\"{/capture}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'event_online_receipt',0,1,0,NULL), - (33,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,839,'event_registration_receipt',1,0,0,NULL), - (34,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,839,'event_registration_receipt',0,1,0,NULL), - (35,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if !empty($register_date)}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if !empty($register_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'participant_cancelled',1,0,0,NULL), - (36,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if !empty($register_date)}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if !empty($register_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,840,'participant_cancelled',0,1,0,NULL), - (37,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'participant_confirm',1,0,0,NULL), - (38,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'participant_confirm',0,1,0,NULL), - (39,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'participant_expired',1,0,0,NULL), - (40,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'participant_expired',0,1,0,NULL), - (41,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'participant_transferred',1,0,0,NULL), - (42,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'participant_transferred',0,1,0,NULL), - (43,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'friend',1,0,0,NULL), - (44,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'friend',0,1,0,NULL), - (45,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,845,'membership_offline_receipt',1,0,0,NULL), - (46,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,845,'membership_offline_receipt',0,1,0,NULL), - (47,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$line.description|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {$line.line_total|crmMoney|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'membership_online_receipt',1,0,0,NULL), - (48,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$line.description|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {$line.line_total|crmMoney|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'membership_online_receipt',0,1,0,NULL), - (49,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}</p>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'membership_autorenew_cancelled',1,0,0,NULL), - (50,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}</p>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'membership_autorenew_cancelled',0,1,0,NULL), - (51,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'membership_autorenew_billing',1,0,0,NULL), - (52,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'membership_autorenew_billing',0,1,0,NULL), - (53,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,849,'test_preview',1,0,0,NULL), - (54,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,849,'test_preview',0,1,0,NULL), - (55,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,850,'pledge_acknowledge',1,0,0,NULL), - (56,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,850,'pledge_acknowledge',0,1,0,NULL), - (57,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,851,'pledge_reminder',1,0,0,NULL), - (58,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,851,'pledge_reminder',0,1,0,NULL), - (59,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,852,'uf_notify',1,0,0,NULL), - (60,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,852,'uf_notify',0,1,0,NULL), - (61,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,853,'petition_sign',1,0,0,NULL), - (62,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,853,'petition_sign',0,1,0,NULL), - (63,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,854,'petition_confirmation_needed',1,0,0,NULL), - (64,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,854,'petition_confirmation_needed',0,1,0,NULL), + (1,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role|default:\'\'}\n{if !empty($manageCaseURL)}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if !empty($editActURL)}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if !empty($viewActURL)}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{if !empty($activity.customGroups)}\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role|default:\'\'}\n </td>\n </tr>\n {if !empty($manageCaseURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if !empty($editActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if !empty($viewActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {if !empty($activity.customGroups)}\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n </table>\n </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n',1,824,'case_activity',1,0,0,NULL), + (2,'Cases - Send Copy of an Activity','{if !empty($idHash)}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if !empty($isCaseActivity)}\n{ts}Your Case Role(s){/ts} : {$contact.role|default:\'\'}\n{if !empty($manageCaseURL)}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if !empty($editActURL)}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if !empty($viewActURL)}\n{ts}View activity{/ts} : {$viewActURL}\n{/if}\n\n{foreach from=$activity.fields item=field}\n{if $field.type eq \'Date\'}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if !empty($field.category)}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\n{if !empty($activity.customGroups)}\n{foreach from=$activity.customGroups key=customGroupName item=customGroup}\n==========================================================\n{$customGroupName}\n==========================================================\n{foreach from=$customGroup item=field}\n{if $field.type eq \'Date\'}\n{$field.label} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label} : {$field.value}\n{/if}\n{/foreach}\n\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n <center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Activity Summary{/ts} - {$activityTypeName}\n </th>\n </tr>\n {if !empty($isCaseActivity)}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role|default:\'\'}\n </td>\n </tr>\n {if !empty($manageCaseURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$manageCaseURL}\" title=\"{ts}Manage Case{/ts}\">{ts}Manage Case{/ts}</a>\n </td>\n </tr>\n {/if}\n {/if}\n {if !empty($editActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$editActURL}\" title=\"{ts}Edit activity{/ts}\">{ts}Edit activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {if !empty($viewActURL)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <a href=\"{$viewActURL}\" title=\"{ts}View activity{/ts}\">{ts}View activity{/ts}</a>\n </td>\n </tr>\n {/if}\n {foreach from=$activity.fields item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}{if !empty($field.category)}({$field.category}){/if}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n\n {if !empty($activity.customGroups)}\n {foreach from=$activity.customGroups key=customGroupName item=customGroup}\n <tr>\n <th {$headerStyle}>\n {$customGroupName}\n </th>\n </tr>\n {foreach from=$customGroup item=field}\n <tr>\n <td {$labelStyle}>\n {$field.label}\n </td>\n <td {$valueStyle}>\n {if $field.type eq \'Date\'}\n {$field.value|crmDate:$config->dateformatDatetime}\n {else}\n {$field.value}\n {/if}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n </table>\n </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n',1,824,'case_activity',0,1,0,NULL), + (3,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <p>{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}</p>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_dupalert',1,0,0,NULL), + (4,'Contributions - Duplicate Organization Alert','{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} - {contact.display_name}\n','{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}\n{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}\n\n{ts}Organization Name{/ts}: {$onBehalfName}\n{ts}Organization Email{/ts}: {$onBehalfEmail}\n{ts}Organization Contact ID{/ts}: {$onBehalfID}\n\n{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}\n\n{if $receiptMessage}\n###########################################################\n{ts}Copy of Contribution Receipt{/ts}\n\n###########################################################\n{$receiptMessage}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p>\n <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Organization Name{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Email{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfEmail}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Organization Contact ID{/ts}\n </td>\n <td {$valueStyle}>\n {$onBehalfID}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <p>{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to \"Contacts >> Find and Merge Duplicate Contacts\". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}</p>\n </td>\n </tr>\n {if $receiptMessage}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Copy of Contribution Receipt{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {* FIXME: the below is most probably not HTML-ised *}\n {$receiptMessage}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,825,'contribution_dupalert',0,1,0,NULL), + (5,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($receipt_date)}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if !empty($fulfilled_date)}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receipt_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if !empty($fulfilled_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_offline_receipt',1,0,0,NULL), + (6,'Contributions - Receipt (off-line)','{ts}Contribution Receipt{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text)}\n{$formValues.receipt_text}\n{else}{ts}Below you will find a receipt for this contribution.{/ts}{/if}\n\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{ts}Contributor{/ts}: {contact.display_name}\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if $lineItem}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($getTaxDetails)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($getTaxDetails)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($getTaxDetails)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($getTaxDetails) && !empty($dataArray)}\n{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0 || $value != \'\'}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if} : {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($receipt_date)}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if !empty($formValues.trxn_id)}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if !empty($ccContribution)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($formValues.product_name)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$formValues.product_name}\n{if $formValues.product_option}\n{ts}Option{/ts}: {$formValues.product_option}\n{/if}\n{if $formValues.product_sku}\n{ts}SKU{/ts}: {$formValues.product_sku}\n{/if}\n{if !empty($fulfilled_date)}\n{ts}Sent{/ts}: {$fulfilled_date|crmDate}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text)}\n <p>{$formValues.receipt_text|htmlize}</p>\n {else}\n <p>{ts}Below you will find a receipt for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contributor Name{/ts}\n </td>\n <td {$valueStyle}>\n {contact.display_name}\n </td>\n </tr>\n <tr>\n {if !empty($formValues.contributionType_name)}\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n {/if}\n </tr>\n\n {if !empty($lineItem) and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($getTaxDetails)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {/if}\n {if !empty($getTaxDetails) && !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0 || $value != \'\'}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount) && $totalTaxAmount !== \'null\'}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney:$currency}\n </td>\n </tr>\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receipt_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Receipt Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receipt_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($formValues.paidBy) and empty($formValues.hidden_CreditCard)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($formValues.trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction ID{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($ccContribution)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($formValues.product_name)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$formValues.product_name}\n </td>\n </tr>\n {if $formValues.product_option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_option}\n </td>\n </tr>\n {/if}\n {if $formValues.product_sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.product_sku}\n </td>\n </tr>\n {/if}\n {if !empty($fulfilled_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Sent{/ts}\n </td>\n <td {$valueStyle}>\n {$fulfilled_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,826,'contribution_offline_receipt',0,1,0,NULL), + (7,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_online_receipt',1,0,0,NULL), + (8,'Contributions - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney:$currency}\n{else}\n{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{/if}\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if !empty($is_recur)}\n{ts}This is a recurring contribution.{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts}You can cancel future contributions at:{/ts}\n\n{$cancelSubscriptionUrl}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts}You can update billing details for this recurring contribution at:{/ts}\n\n{$updateSubscriptionBillingUrl}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts}\n\n{$updateSubscriptionUrl}\n\n{/if}\n{/if}\n\n{if $honor_block_is_active}\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n{elseif !empty($softCreditTypes) and !empty($softCredits)}\n{foreach from=$softCreditTypes item=softCreditType key=n}\n===========================================================\n{$softCreditType}\n===========================================================\n{foreach from=$softCredits.$n item=value key=label}\n{$label}: {$value}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium )}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $amount}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Contribution Information{/ts}\n </th>\n </tr>\n\n {if !empty($lineItem) and !empty($priceSetID) and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}Subtotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($getTaxDetails)}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney:$currency}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount before Tax : {/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n\n {else}\n\n {if !empty($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This is a recurring contribution.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel future contributions by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {elseif !empty($softCreditTypes) and !empty($softCredits)}\n {foreach from=$softCreditTypes item=softCreditType key=n}\n <tr>\n <th {$headerStyle}>\n {$softCreditType}\n </th>\n </tr>\n {foreach from=$softCredits.$n item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($isShare)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contributionPageId`\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,827,'contribution_online_receipt',0,1,0,NULL), + (9,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,828,'contribution_invoice_receipt',1,0,0,NULL), + (10,'Contributions - Invoice','{if $title}\n {if $component}\n {if $component == \'event\'}\n {ts 1=$title}Event Registration Invoice: %1{/ts}\n {else}\n {ts 1=$title}Contribution Invoice: %1{/ts}\n {/if}\n {/if}\n{else}\n {ts}Invoice{/ts}\n{/if}\n - {contact.display_name}\n','{ts}Contribution Invoice{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n <div style=\"padding-top:100px;margin-right:50px;border-style: none;\">\n {if $config->empoweredBy}\n <table style=\"margin-top:5px;padding-bottom:50px;\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n <table style=\"font-family: Arial, Verdana, sans-serif;\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <td width=\"30%\"><b><font size=\"4\" align=\"center\">{ts}INVOICE{/ts}</font></b></td>\n <td width=\"50%\" valign=\"bottom\"><b><font size=\"1\" align=\"center\">{ts}Invoice Date:{/ts}</font></b></td>\n <td valign=\"bottom\" style=\"white-space: nowrap\"><b><font size=\"1\" align=\"right\">{$domain_organization}</font></b></td>\n </tr>\n <tr>\n {if $organization_name}\n <td><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td><b><font size=\"1\" align=\"right\">{ts}Invoice Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n <td style=\"white-space: nowrap\">\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{if $domain_country}{$domain_country}{/if}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\"> {$country}</font></td>\n <td><font size=\"1\" align=\"right\">{if !empty($source)}{$source}{/if}</font></td>\n <td valign=\"top\" style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td valign=\"top\"><font size=\"1\" align=\"right\">{if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n </table>\n\n <table style=\"padding-top:75px;font-family: Arial, Verdana, sans-serif;\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">\n <tr>\n <th style=\"text-align:left;font-weight:bold;width:100%\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"text-align:right;font-weight:bold;white-space: nowrap\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=taxpricevalue}\n {if $smarty.foreach.taxpricevalue.index eq 0}\n {else}\n {/if}\n <tr>\n <td style=\"text-align:left;nowrap\"><font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}-{/ts}{/if}</font></td>\n {/if}\n <td style=\"text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL %1{/ts}{/if}</font></td>\n <td style=\"text-align:right\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\"><font size=\"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}Amount Credited{/ts}\n {else}\n {ts}Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style=\"text-align:right;\"><font size=\"1\">{$amountPaid|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"text-align:right;white-space: nowrap\" ><b><font size=\"1\">{ts}AMOUNT DUE:{/ts}</font></b></td>\n <td style=\"text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n </tr>\n\n <br/><br/><br/>\n <tr>\n <td colspan=\"5\"></td>\n </tr>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td colspan=\"3\"><b><font size=\"1\" align=\"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan=\"2\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style=\"margin-top:5px;\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:5px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\" id=\"desc\">\n <tr>\n <td width=\"60%\"><b><font size=\"4\" align=\"right\">{ts}PAYMENT ADVICE{/ts}</font></b><br/><br/><font size=\"1\" align=\"left\"><b>{ts}To:{/ts}</b><div style=\"width:24em;word-wrap:break-word;\">\n {$domain_organization}<br />\n {$domain_street_address} {$domain_supplemental_address_1}<br />\n {$domain_supplemental_address_2} {$domain_state}<br />\n {$domain_city} {$domain_postal_code}<br />\n {$domain_country}<br />\n {$domain_email}</div>\n {$domain_phone}<br />\n </font><br/><br/><font size=\"1\" align=\"left\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding=\"5\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n <tr>\n <td width=\"100%\"><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td style=\"white-space: nowrap\"><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Invoice Number:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$invoice_number}</font></td>\n </tr>\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {else}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Amount Due:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amountDue|crmMoney:$currency}</font></td>\n </tr>\n {/if}\n <tr>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Due Date:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$dueDate}</font></td>\n </tr>\n <tr>\n <td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\n {if $config->empoweredBy}\n <table style=\"margin-top:2px;padding-left:7px;page-break-before: always;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/civi99.png\" height=\"34px\" width=\"99px\"></td>\n </tr>\n </table>\n {/if}\n\n <center>\n <table style=\"font-family: Arial, Verdana, sans-serif\" width=\"100%\" height=\"100\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\">\n <tr>\n <td style=\"padding-left:15px;\"><b><font size=\"4\" align=\"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Date:{/ts}</font></b></td>\n <td><font size=\"1\" align=\"right\">{$domain_organization}</font></td>\n </tr>\n <tr>\n {if $organization_name}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name} ({$organization_name})</font></td>\n {else}\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{contact.display_name}</font></td>\n {/if}\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$invoice_date}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_street_address }{$domain_street_address}{/if}\n {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$street_address} {$supplemental_address_1}</font></td>\n <td style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Credit Note Number:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if}\n {if $domain_state }{$domain_state}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_city}{$domain_city}{/if}\n {if $domain_postal_code }{$domain_postal_code}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td style=\"padding-left:17px;\"><font size=\"1\" align=\"right\">{$city} {$postal_code}</font></td>\n <td height=\"10\" style=\"padding-left:30px;\"><b><font size=\"1\" align=\"right\">{ts}Reference:{/ts}</font></b></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_country}{$domain_country}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td style=\"padding-left:30px;\"><font size=\"1\" align=\"right\">{$source}</font></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td>\n <font size=\"1\" align=\"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style=\"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th style=\"padding-right:28px;text-align:left;font-weight:bold;width:200px;\"><font size=\"1\">{ts}Description{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Quantity{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts}Unit Price{/ts}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{if isset($taxTerm)}{$taxTerm}{/if}</font></th>\n <th style=\"padding-left:28px;text-align:right;font-weight:bold;\"><font size=\"1\">{ts 1=$currency}Amount %1{/ts}</font></th>\n </tr>\n {foreach from=$lineItem item=value key=priceset name=pricevalue}\n {if $smarty.foreach.pricevalue.index eq 0}\n <tr><td colspan=\"5\"><hr size=\"3\" style=\"color:#000;\"></hr></td></tr>\n {else}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n {/if}\n <tr>\n <td style =\"text-align:left;\" >\n <font size=\"1\">\n {if $value.html_type eq \'Text\'}\n {$value.label}\n {else}\n {$value.field_title} - {$value.label}\n {/if}\n {if $value.description}\n <div>{$value.description|truncate:30:\"...\"}</div>\n {/if}\n </font>\n </td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.qty}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($value.tax_rate)}{$value.tax_rate}%{/if}</font></td>\n {else}\n <td style=\"padding-left:28px;text-align:right\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}No %1{/ts}{/if}</font></td>\n {/if}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$value.subTotal|crmMoney:$currency}</font></td>\n </tr>\n {/foreach}\n <tr><td colspan=\"5\" style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}Sub Total{/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {if !empty($dataArray)}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n <td colspan=\"3\"></td>\n {if $priceset}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{if isset($taxTerm)}{ts 1=$taxTerm}TOTAL NO %1{/ts}{/if}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\" align=\"right\">{$value|crmMoney:$currency}</font> </td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts 1=$currency}TOTAL %1{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{ts}LESS Credit to invoice(s){/ts}</font></td>\n <td style=\"padding-left:28px;text-align:right;\"><font size=\"1\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td colspan=\"2\"><hr></hr></td>\n </tr>\n <tr>\n <td colspan=\"3\"></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{ts}REMAINING CREDIT{/ts}</font></b></td>\n <td style=\"padding-left:28px;text-align:right;\"><b><font size=\"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style=\"padding-left:28px;\"><font size=\"1\" align=\"right\"></font></td>\n </tr>\n {/if}\n <br/><br/><br/>\n <tr>\n <td colspan=\"3\"></td>\n </tr>\n <tr>\n <td></td>\n <td colspan=\"3\"></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n\n <table width=\"100%\" style=\"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src=\"{$resourceBase}/i/contribute/cut_line.png\" height=\"15\" width=\"100%\"></td>\n </tr>\n </table>\n\n <table style=\"margin-top:6px;font-family: Arial, Verdana, sans-serif\" width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"5\" id=\"desc\">\n <tr>\n <td width=\"60%\"><font size=\"4\" align=\"right\"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style=\"font-size:10px;max-width:300px;\">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td>\n <td width=\"40%\">\n <table align=\"right\">\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Customer:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{contact.display_name}</font></td>\n </tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Note#:{/ts}</font></td>\n <td><font size=\"1\" align=\"right\">{$creditnote_id}</font></td>\n </tr>\n <tr><td colspan=\"5\"style=\"color:#F5F5F5;\"><hr></hr></td></tr>\n <tr>\n <td colspan=\"2\"></td>\n <td><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{ts}Credit Amount:{/ts}</font></td>\n <td width=\'50px\'><font size=\"1\" align=\"right\" style=\"font-weight:bold;\">{$amount|crmMoney:$currency}</font></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n </center>\n\n </div>\n </body>\n</html>\n',1,828,'contribution_invoice_receipt',0,1,0,NULL), + (11,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'contribution_recurring_notify',1,0,0,NULL), + (12,'Contributions - Recurring Start and End Notification','{ts}Recurring Contribution Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $recur_txnType eq \'START\'}\n{if $auto_renew_membership}\n{ts}Thanks for your auto renew membership sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{else}\n{ts}Thanks for your recurring contribution sign-up.{/ts}\n\n\n{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.\n\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{if $cancelSubscriptionUrl}\n{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n\n{if $updateSubscriptionUrl}\n{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n\n{/if}\n{/if}\n\n{elseif $recur_txnType eq \'END\'}\n{if $auto_renew_membership}\n{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}\n\n\n{else}\n{ts}Your recurring contribution term has ended.{/ts}\n\n\n{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}\n\n\n==================================================\n{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n\n==================================================\n{ts}Start Date{/ts}: {$recur_start_date|crmDate}\n\n{ts}End Date{/ts}: {$recur_end_date|crmDate}\n\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n </td>\n </tr>\n\n <tr>\n <td> </td>\n </tr>\n\n {if $recur_txnType eq \'START\'}\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {else}\n <tr>\n <td>\n <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p>\n <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p>\n <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p>\n </td>\n </tr>\n {if $cancelSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {if $updateSubscriptionUrl}\n <tr>\n <td {$labelStyle}>\n {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {elseif $recur_txnType eq \'END\'}\n\n {if $auto_renew_membership}\n <tr>\n <td>\n <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p>\n </td>\n </tr>\n {else}\n <tr>\n <td>\n <p>{ts}Your recurring contribution term has ended.{/ts}</p>\n <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_start_date|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$recur_end_date|crmDate}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n {/if}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,829,'contribution_recurring_notify',0,1,0,NULL), + (13,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'contribution_recurring_cancelled',1,0,0,NULL), + (14,'Contributions - Recurring Cancellation Notification','{ts}Recurring Contribution Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,830,'contribution_recurring_cancelled',0,1,0,NULL), + (15,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,831,'contribution_recurring_billing',1,0,0,NULL), + (16,'Contributions - Recurring Billing Updates','{ts}Recurring Contribution Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,831,'contribution_recurring_billing',0,1,0,NULL), + (17,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,832,'contribution_recurring_edit',1,0,0,NULL), + (18,'Contributions - Recurring Updates','{ts}Recurring Contribution Update Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your recurring contribution has been updated as requested:{/ts}\n\n{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}\n{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if}\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your recurring contribution has been updated as requested:{/ts}\n <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p>\n\n <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,832,'contribution_recurring_edit',0,1,0,NULL), + (19,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'pcp_notify',1,0,0,NULL), + (20,'Personal Campaign Pages - Admin Notification','{ts}Personal Campaign Page Notification{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Notification{/ts}\n\n===========================================================\n{ts}Action{/ts}: {if $mode EQ \'Update\'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if}\n{ts}Personal Campaign Page Title{/ts}: {$pcpTitle}\n{ts}Current Status{/ts}: {$pcpStatus}\n{capture assign=pcpURL}{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n{ts}View Page{/ts}:\n>> {$pcpURL}\n\n{ts}Supporter{/ts}: {$supporterName}\n>> {$supporterUrl}\n\n{ts}Linked to Contribution Page{/ts}: {$contribPageTitle}\n>> {$contribPageUrl}\n\n{ts}Manage Personal Campaign Pages{/ts}:\n>> {$managePCPUrl}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=pcpURL }{crmURL p=\"civicrm/pcp/info\" q=\"reset=1&id=`$pcpId`\" h=0 a=1 fe=1}{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page Notification{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Action{/ts}:\n </td>\n <td {$valueStyle}>\n {if $mode EQ \'Update\'}\n {ts}Updated personal campaign page{/ts}\n {else}\n {ts}New personal campaign page{/ts}\n {/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Personal Campaign Page Title{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpTitle}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Current Status{/ts}\n </td>\n <td {$valueStyle}>\n {$pcpStatus}\n </td>\n </tr>\n\n <tr>\n <td {$labelStyle}>\n <a href=\"{$pcpURL}\">{ts}View Page{/ts}</a>\n </td>\n <td></td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Supporter{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$supporterUrl}\">{$supporterName}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Linked to Contribution Page{/ts}\n </td>\n <td {$valueStyle}>\n <a href=\"{$contribPageUrl}\">{$contribPageTitle}</a>\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n <a href=\"{$managePCPUrl}\">{ts}Manage Personal Campaign Pages{/ts}</a>\n </td>\n <td></td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,833,'pcp_notify',0,1,0,NULL), + (21,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <p>{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}</p>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'pcp_status_change',1,0,0,NULL), + (22,'Personal Campaign Pages - Supporter Status Change Notification','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{if $pcpStatus eq \'Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been approved and is now live.{/ts}\n\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n{if $isTellFriendEnabled}\n\n{ts}After logging in, you can use this form to promote your fundraising page{/ts}:\n{$pcpTellFriendURL}\n\n{/if}\n\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{* Rejected message *}\n{elseif $pcpStatus eq \'Not Approved\'}\n============================\n{ts}Your Personal Campaign Page{/ts}\n\n============================\n\n{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}\n\n{if $pcpNotifyEmailAddress}\n\n{ts}Please contact our site administrator for more information{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n\n <h1>{ts}Your Personal Campaign Page{/ts}</h1>\n\n {if $pcpStatus eq \'Approved\'}\n\n <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n\n {if $isTellFriendEnabled}\n <p><a href=\"{$pcpTellFriendURL}\">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p>\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {elseif $pcpStatus eq \'Not Approved\'}\n\n <p>{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}</p>\n {if $pcpNotifyEmailAddress}\n <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p>\n {/if}\n\n {/if}\n\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,834,'pcp_status_change',0,1,0,NULL), + (23,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <p>{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} {ts}Include this link to your fundraising page in your emails{/ts}: {$pcpInfoURL}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <p>{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}</p>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,835,'pcp_supporter_notify',1,0,0,NULL), + (24,'Personal Campaign Pages - Supporter Welcome','{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}\n\n{if $pcpStatus eq \'Approved\'}\n====================\n{ts}Promoting Your Page{/ts}\n\n====================\n{if $isTellFriendEnabled}\n\n{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:\n\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser and follow the prompts{/ts}:\n{$pcpTellFriendURL}\n{else}\n\n{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts}\n{ts}Include this link to your fundraising page in your emails{/ts}:\n{$pcpInfoURL}\n{/if}\n\n===================\n{ts}Managing Your Page{/ts}\n\n===================\n{ts}Whenever you want to preview, update or promote your page{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser to go to your page{/ts}:\n{$pcpInfoURL}\n\n{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}\n\n\n{elseif $pcpStatus EQ \'Waiting Review\'}\n{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}\n\n\n{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}\n\n\n{ts}You can still preview your page prior to approval{/ts}:\n1. {ts}Login to your account at{/ts}:\n{$loginUrl}\n\n2. {ts}Click or paste this link into your browser{/ts}:\n{$pcpInfoURL}\n\n{/if}\n{if $pcpNotifyEmailAddress}\n{ts}Questions? Send email to{/ts}:\n{$pcpNotifyEmailAddress}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=\"$contribPageTitle\"}Thanks for creating a personal campaign page in support of %1.{/ts}</p>\n </td>\n </tr>\n\n {if $pcpStatus eq \'Approved\'}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Promoting Your Page{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if $isTellFriendEnabled}\n <p>{ts}You can begin your fundraising efforts using our \"Tell a Friend\" form{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpTellFriendURL}\">{ts}Click this link and follow the prompts{/ts}</a></li>\n </ol>\n {else}\n <p>{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} {ts}Include this link to your fundraising page in your emails{/ts}: {$pcpInfoURL}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Managing Your Page{/ts}\n </th>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Go to your page{/ts}</a></li>\n </ol>\n <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p>\n </td>\n </tr>\n </tr>\n </table>\n </td>\n </tr>\n\n {elseif $pcpStatus EQ \'Waiting Review\'}\n\n <tr>\n <td>\n <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p>\n <p>{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}</p>\n <p>{ts}You can still preview your page prior to approval{/ts}:</p>\n <ol>\n <li><a href=\"{$loginUrl}\">{ts}Login to your account{/ts}</a></li>\n <li><a href=\"{$pcpInfoURL}\">{ts}Click this link{/ts}</a></li>\n </ol>\n </td>\n </tr>\n\n {/if}\n\n {if $pcpNotifyEmailAddress}\n <tr>\n <td>\n <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,835,'pcp_supporter_notify',0,1,0,NULL), + (25,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,836,'pcp_owner_notify',1,0,0,NULL), + (26,'Personal Campaign Pages - Owner Notification','{ts}Someone has just donated to your personal campaign page{/ts} - {contact.display_name}\n','===========================================================\n{ts}Personal Campaign Page Owner Notification{/ts}\n\n===========================================================\n{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}You have received a donation at your personal page{/ts}: {$page_title}\n>> {$pcpInfoURL}\n\n{ts}Your fundraising total has been updated.{/ts}\n{ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts}\n{if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}\n{/if}\n\n{ts}Received{/ts}: {$receive_date|crmDate}\n\n{ts}Amount{/ts}: {$total_amount|crmMoney:$currency}\n\n{ts}Name{/ts}: {$donors_display_name}\n\n{ts}Email{/ts}: {$donors_email}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}You have received a donation at your personal page{/ts}: <a href=\"{$pcpInfoURL}\">{$page_title}</a></p>\n <p>{ts}Your fundraising total has been updated.{/ts}<br/>\n {ts}The donor\'s information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/>\n {if $is_honor_roll_enabled}\n {ts}The donor\'s name has been added to your honor roll unless they asked not to be included.{/ts}<br/>\n {/if}\n </p>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr>\n <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr>\n <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr>\n <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr>\n </table>\n</body>\n</html>\n',1,836,'pcp_owner_notify',0,1,0,NULL), + (27,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,837,'payment_or_refund_notification',1,0,0,NULL), + (28,'Additional Payment Receipt or Refund Notification','{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if}{if $component eq \'event\'} - {$event.title}{/if} - {contact.display_name}\n','{if $emailGreeting}{$emailGreeting},\n{/if}\n\n{if $isRefund}\n{ts}A refund has been issued based on changes in your registration selections.{/ts}\n{else}\n{ts}Below you will find a receipt for this payment.{/ts}\n{/if}\n{if $paymentsComplete}\n{ts}Thank you for completing this payment.{/ts}\n{/if}\n\n{if $isRefund}\n===============================================================================\n\n{ts}Refund Details{/ts}\n\n===============================================================================\n{ts}This Refund Amount{/ts}: {$refundAmount|crmMoney}\n------------------------------------------------------------------------------------\n\n{else}\n===============================================================================\n\n{ts}Payment Details{/ts}\n\n===============================================================================\n{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney}\n------------------------------------------------------------------------------------\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{if isset($totalAmount)}\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{/if}\n{if isset($totalPaid)}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{/if}\n{if isset($amountOwed)}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n{/if}\n\n\n{if !empty($billingName) || !empty($address)}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n{if !empty($billingName)}\n{$billingName}\n{/if}\n{if !empty($address)}\n{$address}\n{/if}\n{/if}\n\n{if !empty($credit_card_number)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===============================================================================\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{if $component eq \'event\'}\n===============================================================================\n\n{ts}Event Information and Location{/ts}\n\n===============================================================================\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=emptyBlockStyle }style=\"padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;\"{/capture}\n{capture assign=emptyBlockValueStyle }style=\"padding: 10px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $isRefund}\n <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p>\n {else}\n <p>{ts}Below you will find a receipt for this payment.{/ts}</p>\n {if $paymentsComplete}\n <p>{ts}Thank you for completing this contribution.{/ts}</p>\n {/if}\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if $isRefund}\n <tr>\n <th {$headerStyle}>{ts}Refund Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Refund Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$refundAmount|crmMoney}\n </td>\n </tr>\n {else}\n <tr>\n <th {$headerStyle}>{ts}Payment Details{/ts}</th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}This Payment Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$paymentAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if $receive_date}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n <tr>\n <th {$headerStyle}>{ts}Contribution Details{/ts}</th>\n </tr>\n {if isset($totalAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($totalPaid)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\n {/if}\n {if isset($amountOwed)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance Owed{/ts}\n </td>\n <td {$valueStyle}>\n {$amountOwed|crmMoney}\n </td> {* This will be zero after final payment. *}\n </tr>\n {/if}\n </table>\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if !empty($billingName) || !empty($address)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {if !empty($billingName)}{$billingName}{/if}<br />\n {if !empty($address)}{$address|nl2br}{/if}\n </td>\n </tr>\n {/if}\n {if !empty($credit_card_number)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if $component eq \'event\'}\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if} {*phone block close*}\n {/if}\n </table>\n </td>\n </tr>\n\n </table>\n </center>\n\n </body>\n</html>\n',1,837,'payment_or_refund_notification',0,1,0,NULL), + (29,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'event_offline_receipt',1,0,0,NULL), + (30,'Events - Registration Confirmation and Receipt (off-line)','{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{elseif !empty($is_pay_later)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($email)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$email}\n{/if}\n{if !empty($event.is_monetary)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts}\n{/if}\n{/if}\n---------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{capture assign=ts_participant_total}{if !empty($pricesetFieldsCount) }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n{/if}\n{/foreach}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amount) && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary)}\n\n{if !empty($balanceAmount)}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($balanceAmount)}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if !empty($is_pay_later) }\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=val key=field}\n{if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\' }\n{if $field eq \'additionalCustomPre\' }\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if !empty($pricesetFieldsCount) }--------------------{/if}\n\n{/if}\n{foreach from=$val item=v key=f}\n{$f}: {$v}\n{/foreach}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customGroup)}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{$customName}\n=========================================================={if !empty($pricesetFieldsCount) }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n\n {if !empty($event.is_monetary)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {if !empty($pricesetFieldsCount) }\n <td>\n {$line.participant_count}\n </td>\n {/if}\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amount) && !$lineItem}\n {foreach from=$amount item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {if isset($balanceAmount)}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if isset($balanceAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Balance{/ts}\n </td>\n <td {$valueStyle}>\n {$balanceAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td>\n </tr>\n {/if}\n {if !empty($is_pay_later)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customProfile)}\n {foreach from=$customProfile item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {ts 1=$customName+1}Participant Information - Participant %1{/ts}\n </th>\n </tr>\n {foreach from=$value item=val key=field}\n {if $field eq \'additionalCustomPre\' or $field eq \'additionalCustomPost\'}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {if $field eq \'additionalCustomPre\'}\n {$additionalCustomPre_grouptitle}\n {else}\n {$additionalCustomPost_grouptitle}\n {/if}\n </td>\n </tr>\n {foreach from=$val item=v key=f}\n <tr>\n <td {$labelStyle}>\n {$f}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/if}\n {/foreach}\n {/foreach}\n {/if}\n\n {if !empty($customGroup)}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,838,'event_offline_receipt',0,1,0,NULL), + (31,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($individual)}{ts}Participant Total{/ts} {$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%29s\"} {$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%33s\"} {$individual.$priceset.totalAmtWithTax|crmMoney:$currency|string_format:\"%12s\"}{/if}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{capture assign=participantTotal}style=\"margin: 0.5em 0 0.5em;padding: 0.5em;background-color: #999999;font-weight: bold;color: #FAFAFA;border-radius: 2px;\"{/capture}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'event_online_receipt',1,0,0,NULL), + (32,'Events - Registration Confirmation and Receipt (on-line)','{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n{$event.confirm_email_text}\n\n{else}\n {ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to %1.{/ts}\n {else}{if !empty($isOnWaitlist)}{ts}This is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if}\n {/if}\n{/if}\n\n{if !empty($isOnWaitlist)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if !empty($isPrimary)}\n{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($isRequireApproval)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if !empty($isPrimary)}\n{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}\n\n{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{/if}\n\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$event.event_title}\n{$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n{if !empty($conference_sessions)}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n{if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if !empty($isShowLocation)}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n{/foreach}\n{foreach from=$location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if !empty($event.is_public)}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if !empty($payer.name)}\nYou were registered by: {$payer.name}\n{/if}\n{if !empty($event.is_monetary) and empty($isRequireApproval)} {* This section for Paid events only.*}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty ($event.fee_label)}{$event.fee_label}{/if}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{if !empty($lineItem)}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if !empty($isPrimary)}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{/if}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {if !empty($ts_participant_total)}{$ts_participant_total|string_format:\"%10s\"}{/if}\n-----------------------------------------------------------{if !empty($pricesetFieldsCount)}-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if !empty($pricesetFieldsCount) }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney:$currency|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"}{if !empty($ts_participant_count)}{$ts_participant_count|string_format:\"%10s\"}{/if}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if !empty($individual)}{ts}Participant Total{/ts} {$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%29s\"} {$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:\"%33s\"} {$individual.$priceset.totalAmtWithTax|crmMoney:$currency|string_format:\"%12s\"}{/if}\n{/if}\n{\"\"|string_format:\"%120s\"}\n{/foreach}\n{\"\"|string_format:\"%120s\"}\n\n{if !empty($dataArray)}\n{if isset($totalAmount) and isset($totalTaxAmount)}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if !empty($amounts) && empty($lineItem)}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if !empty($isPrimary) }\n\n{ts}Total Amount{/ts}: {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n\n{if !empty($pricesetFieldsCount) }\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n\n{ts}Total Participants{/ts}: {$count}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$register_date|crmDate}\n{/if}\n{if !empty($receive_date)}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($financialTypeName)}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if !empty($paidBy)}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if !empty($checkNumber)}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if !empty($billingName)}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n{/if} {* End of conditional section for Paid events *}\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if !empty($customProfile)}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if !empty($pricesetFieldsCount)}===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if !empty($pricesetFieldsCount)}--------------------{/if}\n\n{foreach from=$eachProfile item=val key=field}\n{foreach from=$val item=v key=f}\n{$field}: {$v}\n{/foreach}\n{/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($event.allow_selfcancelxfer) }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n{capture assign=tdfirstStyle}style=\"width: 180px; padding-bottom: 15px;\"{/capture}\n{capture assign=tdStyle}style=\"width: 100px;\"{/capture}\n{capture assign=participantTotal}style=\"margin: 0.5em 0 0.5em;padding: 0.5em;background-color: #999999;font-weight: bold;color: #FAFAFA;border-radius: 2px;\"{/capture}\n\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n {if !empty($event.confirm_email_text) AND (empty($isOnWaitlist) AND empty($isRequireApproval))}\n <p>{$event.confirm_email_text|htmlize}</p>\n\n {else}\n <p>{ts}Thank you for your registration.{/ts}\n {if $participant_status}{ts 1=$participant_status}This is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts}\n {else}{if $isOnWaitlist}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}</p>\n\n {/if}\n\n <p>\n {if !empty($isOnWaitlist)}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p>\n {/if}\n {elseif !empty($isRequireApproval)}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if !empty($isPrimary)}\n <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p>\n {/if}\n {elseif !empty($is_pay_later) && empty($isAmountzero) && empty($isAdditionalParticipant)}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"width:100%; max-width:700px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|date_format:\"%A\"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:\"%A\"} {$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n\n\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.participant_role) and $event.participant_role neq \'Attendee\' and !empty($defaultRole)}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}\n </td>\n <td {$valueStyle}>\n {$event.participant_role}\n </td>\n </tr>\n {/if}\n\n {if !empty($isShowLocation)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($location.phone.1.phone) || !empty($location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}\n {$phone.phone_type_display}\n {else}\n {ts}Phone{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($event.is_public)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if !empty($event.is_share)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=eventUrl}{crmURL p=\'civicrm/event/info\' q=\"id=`$event.id`&reset=1\" a=true fe=1 h=1}{/capture}\n {include file=\"CRM/common/SocialNetwork.tpl\" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl}\n </td>\n </tr>\n {/if}\n {if !empty($payer.name)}\n <tr>\n <th {$headerStyle}>\n {ts}You were registered by:{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$payer.name}\n </td>\n </tr>\n {/if}\n {if !empty($event.is_monetary) and empty($isRequireApproval)}\n\n <tr>\n <th {$headerStyle}>\n {if !empty($event.fee_label)}{$event.fee_label}{/if}\n </th>\n </tr>\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if !empty($isPrimary)}\n {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$priceset+1}Participant %1{/ts} {if !empty($part.$priceset)}{$part.$priceset.info}{/if}\n </td>\n </tr>\n {/if}\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n {/if}\n <th>{ts}Total{/ts}</th>\n {if !empty($pricesetFieldsCount) }<th>{ts}Total Participants{/ts}</th>{/if}\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td {$tdfirstStyle}>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td {$tdStyle} align=\"middle\">\n {$line.qty}\n </td>\n <td {$tdStyle}>\n {$line.unit_price|crmMoney:$currency}\n </td>\n {if !empty($dataArray)}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td {$tdStyle}>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td {$tdStyle}>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n {/if}\n <td {$tdStyle}>\n {$line.line_total+$line.tax_amount|crmMoney:$currency}\n </td>\n {if !empty($pricesetFieldsCount) }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if !empty($individual)}\n <tr {$participantTotal}>\n <td colspan=3>{ts}Participant Total{/ts}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td>\n <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n {/if}\n {/foreach}\n {if !empty($dataArray)}\n {if isset($totalAmount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts} Amount Before Tax: {/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if !empty($amounts) && empty($lineItem)}\n {foreach from=$amounts item=amnt key=level}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$amnt.amount|crmMoney:$currency} {$amnt.label}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n {if !empty($isPrimary)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {if !empty($totalAmount)}{$totalAmount|crmMoney:$currency}{/if} {if !empty($hookDiscount.message)}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if !empty($pricesetFieldsCount) }\n <tr>\n <td {$labelStyle}>\n {ts}Total Participants{/ts}</td>\n <td {$valueStyle}>\n {assign var=\"count\" value= 0}\n {foreach from=$lineItem item=pcount}\n {assign var=\"lineItemCount\" value=0}\n {if $pcount neq \'skip\'}\n {foreach from=$pcount item=p_count}\n {assign var=\"lineItemCount\" value=$lineItemCount+$p_count.participant_count}\n {/foreach}\n {if $lineItemCount < 1 }\n {assign var=\"lineItemCount\" value=1}\n {/if}\n {assign var=\"count\" value=$count+$lineItemCount}\n {/if}\n {/foreach}\n {$count}\n </td> </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($financialTypeName)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$financialTypeName}\n </td>\n </tr>\n {/if}\n\n {if !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$paidBy}\n </td>\n </tr>\n {/if}\n\n {if !empty($checkNumber)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$checkNumber}\n </td>\n </tr>\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n {/if}\n\n {/if} {* End of conditional section for Paid events *}\n\n\n{if !empty($customPre)}\n{foreach from=$customPre item=customPr key=i}\n <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr>\n {foreach from=$customPr item=customValue key=customName}\n {if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n {/if}\n {/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customPost)}\n{foreach from=$customPost item=customPos key=j}\n <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr>\n {foreach from=$customPos item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>{$customName}</td>\n <td {$valueStyle}>{$customValue}</td>\n </tr>\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if !empty($customProfile)}\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr>\n {foreach from=$eachParticipant item=eachProfile key=pid}\n <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr>\n {foreach from=$eachProfile item=val key=field}\n <tr>{foreach from=$val item=v key=f}\n <td {$labelStyle}>{$field}</td>\n <td {$valueStyle}>{$v}</td>\n {/foreach}\n </tr>\n {/foreach}\n{/foreach}\n{/foreach}\n{/if}\n\n </table>\n {if !empty($event.allow_selfcancelxfer) }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if !empty($totalAmount)}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n </table>\n</center>\n\n</body>\n</html>\n',1,839,'event_online_receipt',0,1,0,NULL), + (33,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,840,'event_registration_receipt',1,0,0,NULL), + (34,'Events - Receipt only','Receipt for {if $events_in_cart} Event Registration{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if $is_pay_later}\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n{else}\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n{/if}\n\n{if $is_pay_later}\n {if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n{/if}\n\n Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:\n\n{if $billing_name}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billing_name}\n\n{$billing_street_address}\n\n{$billing_city}, {$billing_state} {$billing_postal_code}\n\n{$email}\n{/if}\n\n{if !empty($source)}\n{$source}\n{/if}\n\n\n{foreach from=$line_items item=line_item}\n{$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})\n{if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n{$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n\n Quantity: {$line_item.num_participants}\n\n{if $line_item.num_participants > 0}\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\n{if $line_item.num_waiting_participants > 0}\n Waitlisted:\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}\n {/foreach}\n{/if}\nCost: {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\nTotal For This Event: {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n\n{/foreach}\n\n{if $discounts}\nSubtotal: {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n--------------------------------------\nDiscounts\n{foreach from=$discounts key=myId item=i}\n {$i.title}: -{$i.amount|crmMoney:$currency|string_format:\"%10s\"}\n{/foreach}\n{/if}\n======================================\nTotal: {$total|crmMoney:$currency|string_format:\"%10s\"}\n\n{if $credit_card_type}\n===========================================================\n{ts}Payment Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n{/if}\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n </head>\n <body>\n {capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n {capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n {capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if $is_pay_later}\n <p>\n This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received.\n </p>\n {else}\n <p>\n This is being sent to you as a {if !empty($is_refund)}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase.\n </p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if !empty($line_items) && empty($is_refund)} Information about the workshops will be sent separately to each participant.{/if}\n Here\'s a summary of your transaction placed on {$transaction_date|date_format:\"%D %I:%M %p %Z\"}:</p>\n\n{if $billing_name}\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$billing_name}<br />\n {$billing_street_address}<br />\n {$billing_city}, {$billing_state} {$billing_postal_code}<br/>\n <br/>\n {$email}\n </td>\n </tr>\n </table>\n{/if}\n{if $credit_card_type}\n <p> </p>\n <table class=\"billing-info\">\n <tr>\n <th style=\"text-align: left;\">\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y}\n </td>\n </tr>\n </table>\n{/if}\n{if !empty($source)}\n <p> </p>\n {$source}\n{/if}\n <p> </p>\n <table width=\"700\">\n <thead>\n <tr>\n{if $line_items}\n <th style=\"text-align: left;\">\n Event\n </th>\n <th style=\"text-align: left;\">\n Participants\n </th>\n{/if}\n <th style=\"text-align: left;\">\n Price\n </th>\n <th style=\"text-align: left;\">\n Total\n </th>\n </tr>\n </thead>\n <tbody>\n {foreach from=$line_items item=line_item}\n <tr>\n <td style=\"width: 220px\">\n {$line_item.event->title} ({$line_item.event->start_date|date_format:\"%D\"})<br />\n {if $line_item.event->is_show_location}\n {$line_item.location.address.1.display|nl2br}\n {/if}{*End of isShowLocation condition*}<br /><br />\n {$line_item.event->start_date|date_format:\"%D %I:%M %p\"} - {$line_item.event->end_date|date_format:\"%I:%M %p\"}\n </td>\n <td style=\"width: 180px\">\n {$line_item.num_participants}\n {if $line_item.num_participants > 0}\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n {if $line_item.num_waiting_participants > 0}\n Waitlisted:<br/>\n <div class=\"participants\" style=\"padding-left: 10px;\">\n {foreach from=$line_item.waiting_participants item=participant}\n {$participant.display_name}<br />\n {/foreach}\n </div>\n {/if}\n </td>\n <td style=\"width: 100px\">\n {$line_item.cost|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n <td style=\"width: 100px\">\n {$line_item.amount|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {/foreach}\n </tbody>\n <tfoot>\n {if $discounts}\n <tr>\n <td>\n </td>\n <td>\n </td>\n <td>\n Subtotal:\n </td>\n <td>\n {$sub_total|crmMoney:$currency|string_format:\"%10s\"}\n </td>\n </tr>\n {foreach from=$discounts key=myId item=i}\n <tr>\n <td>\n {$i.title}\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n -{$i.amount}\n </td>\n </tr>\n {/foreach}\n {/if}\n <tr>\n{if $line_items}\n <td>\n </td>\n <td>\n </td>\n{/if}\n <td>\n <strong>Total:</strong>\n </td>\n <td>\n <strong> {$total|crmMoney:$currency|string_format:\"%10s\"}</strong>\n </td>\n </tr>\n </tfoot>\n </table>\n\n If you have questions about the status of your registration or purchase please feel free to contact us.\n </body>\n</html>\n',1,840,'event_registration_receipt',0,1,0,NULL), + (35,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if !empty($register_date)}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if !empty($register_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'participant_cancelled',1,0,0,NULL), + (36,'Events - Registration Cancellation Notice','{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}Your Event Registration has been cancelled.{/ts}\n\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if !empty($register_date)}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Your Event Registration has been cancelled.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if !empty($register_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,841,'participant_cancelled',0,1,0,NULL), + (37,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'participant_confirm',1,0,0,NULL), + (38,'Events - Registration Confirmation Invite','{ts 1=$event.event_title}Confirm your registration for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}\n\n{if !$isAdditional and $participant.id}\n\n===========================================================\n{ts}Confirm Your Registration{/ts}\n\n===========================================================\n{capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can confirm your registration online:\n{$confirmUrl}\n{/if}\n{if $event.allow_selfcancelxfer }\n{ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n{ts}Transfer or cancel your registration:{/ts} {$selfService}\n{/if}\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n{if $conference_sessions}\n\n\n{ts}Your schedule:{/ts}\n{assign var=\'group_by_day\' value=\'NA\'}\n{foreach from=$conference_sessions item=session}\n{if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n{assign var=\'group_by_day\' value=$session.start_date}\n\n{$group_by_day|date_format:\"%m/%d/%Y\"}\n\n\n{/if}\n{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}\n{if $session.location} {$session.location}{/if}\n{/foreach}\n{/if}\n\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $event.location.phone.1.phone || $event.location.email.1.email}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $event.is_public}\n{capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n{ts}Download iCalendar File:{/ts} {$icalFeed}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}This is an invitation to complete your registration that was initially waitlisted.{/ts}</p>\n </td>\n </tr>\n {if !$isAdditional and $participant.id}\n <tr>\n <th {$headerStyle}>\n {ts}Confirm Your Registration{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=confirmUrl}{crmURL p=\'civicrm/event/confirm\' q=\"reset=1&participantId=`$participant.id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <a href=\"{$confirmUrl}\">{ts}Click here to confirm and complete your registration{/ts}</a>\n </td>\n </tr>\n {/if}\n {if $event.allow_selfcancelxfer }\n {ts}This event allows for{/ts}\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\"> {ts}self service cancel or transfer{/ts}</a>\n {/if}\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n {if $conference_sessions}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Your schedule:{/ts}\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {assign var=\'group_by_day\' value=\'NA\'}\n {foreach from=$conference_sessions item=session}\n {if $session.start_date|date_format:\"%Y/%m/%d\" != $group_by_day|date_format:\"%Y/%m/%d\"}\n {assign var=\'group_by_day\' value=$session.start_date}\n <em>{$group_by_day|date_format:\"%m/%d/%Y\"}</em><br />\n {/if}\n {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br />\n {if $session.location} {$session.location}<br />{/if}\n {/foreach}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $event.location.phone.1.phone || $event.location.email.1.email}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $event.is_public}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {capture assign=icalFeed}{crmURL p=\'civicrm/event/ical\' q=\"reset=1&id=`$event.id`\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$icalFeed}\">{ts}Download iCalendar File{/ts}</a>\n </td>\n </tr>\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$selfcancelxfer_time 2=$selfservice_preposition}You may transfer your registration to another participant or cancel your registration up to %1 hours %2 the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br />\n {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q=\"reset=1&pid=`$participant.id`&{contact.checksum}\" h=0 a=1 fe=1}{/capture}\n <a href=\"{$selfService}\">{ts}Click here to transfer or cancel your registration.{/ts}</a>\n </td>\n </tr>\n {/if}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,842,'participant_confirm',0,1,0,NULL), + (39,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'participant_expired',1,0,0,NULL), + (40,'Events - Pending Registration Expiration Notice','{ts 1=$event.event_title}Event registration has expired for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired\nbecause you did not confirm your registration.{/ts}</p>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor want to inquire about reinstating your registration for this event.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,843,'participant_expired',0,1,0,NULL), + (41,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'participant_transferred',1,0,0,NULL), + (42,'Events - Registration Transferred Notice','{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts}\n\n===========================================================\n{ts}Event Information and Location{/ts}\n\n===========================================================\n{$event.event_title}\n{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n\n{ts}Participant Role{/ts}: {$participant.role}\n\n{if $isShowLocation}\n{$event.location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n\n{ts}Event Contacts:{/ts}\n{foreach from=$event.location.phone item=phone}\n{if $phone.phone}\n\n{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if}\n{/foreach}\n{foreach from=$event.location.email item=eventEmail}\n{if $eventEmail.email}\n\n{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach}\n{/if}\n\n{if $contact.email}\n\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$contact.email}\n{/if}\n\n{if $register_date}\n{ts}Registration Date{/ts}: {$participant.register_date|crmDate}\n{/if}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Event Information and Location{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.event_title}<br />\n {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:\"%Y%m%d\" == $event.event_start_date|date_format:\"%Y%m%d\"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Participant Role{/ts}:\n </td>\n <td {$valueStyle}>\n {$participant.role}\n </td>\n </tr>\n\n {if $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$event.location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if !empty($event.location.phone.1.phone) || !empty($event.location.email.1.email)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}Event Contacts:{/ts}\n </td>\n </tr>\n {foreach from=$event.location.phone item=phone}\n {if $phone.phone}\n <tr>\n <td {$labelStyle}>\n {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}\n </td>\n <td {$valueStyle}>\n {$phone.phone}\n </td>\n </tr>\n {/if}\n {/foreach}\n {foreach from=$event.location.email item=eventEmail}\n {if $eventEmail.email}\n <tr>\n <td {$labelStyle}>\n {ts}Email{/ts}\n </td>\n <td {$valueStyle}>\n {$eventEmail.email}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if $contact.email}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$contact.email}\n </td>\n </tr>\n {/if}\n\n {if $register_date}\n <tr>\n <td {$labelStyle}>\n {ts}Registration Date{/ts}\n </td>\n <td {$valueStyle}>\n {$participant.register_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,844,'participant_transferred',0,1,0,NULL), + (43,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,845,'friend',1,0,0,NULL), + (44,'Tell-a-Friend Email','{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts}\n','{$senderMessage}\n\n{if $generalLink}{ts}For more information, visit:{/ts}\n>> {$generalLink}\n\n{/if}\n{if $contribute}{ts}To make a contribution, go to:{/ts}\n>> {$pageURL}\n\n{/if}\n{if $event}{ts}To find out more about this event, go to:{/ts}\n>> {$pageURL}\n{/if}\n\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <p>{$senderMessage}</p>\n {if $generalLink}\n <p><a href=\"{$generalLink}\">{ts}More information{/ts}</a></p>\n {/if}\n {if $contribute}\n <p><a href=\"{$pageURL}\">{ts}Make a contribution{/ts}</a></p>\n {/if}\n {if $event}\n <p><a href=\"{$pageURL}\">{ts}Find out more about this event{/ts}</a></p>\n {/if}\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,845,'friend',0,1,0,NULL), + (45,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'membership_offline_receipt',1,0,0,NULL), + (46,'Memberships - Signup and Renewal Receipts (off-line)','{if $receiptType EQ \'membership signup\'}\n{ts}Membership Confirmation and Receipt{/ts}\n{elseif $receiptType EQ \'membership renewal\'}\n{ts}Membership Renewal Confirmation and Receipt{/ts}\n{/if} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{if !empty($formValues.receipt_text_signup)}\n{$formValues.receipt_text_signup}\n{elseif !empty($formValues.receipt_text_renewal)}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if empty($lineItem)}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if empty($cancelled)}\n{if empty($lineItem)}\n{ts}Membership Start Date{/ts}: {$mem_start_date}\n{ts}Membership End Date{/ts}: {$mem_end_date}\n{/if}\n\n{if $formValues.total_amount OR $formValues.total_amount eq 0 }\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !empty($formValues.contributionType_name)}\n{ts}Financial Type{/ts}: {$formValues.contributionType_name}\n{/if}\n{if !empty($lineItem)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$formValues.total_amount|crmMoney}\n{if !empty($receive_date)}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if !empty($formValues.paidBy)}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if !empty($formValues.check_number)}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if !empty($isPrimary) }\n{if !empty($billingName)}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if !empty($credit_card_type)}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n{/if}\n\n{if !empty($customValues)}\n===========================================================\n{ts}Membership Options{/ts}\n\n===========================================================\n{foreach from=$customValues item=value key=customName}\n {$customName} : {$value}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\"\n style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($formValues.receipt_text_signup)}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif !empty($formValues.receipt_text_renewal)}\n <p>{$formValues.receipt_text_renewal|htmlize}</p>\n {else}\n <p>{ts}Thank you for this contribution.{/ts}</p>\n {/if}\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n {if empty($lineItem)}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {/if}\n {if empty($cancelled)}\n {if empty($lineItem)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date}\n </td>\n </tr>\n {/if}\n {if $formValues.total_amount OR $formValues.total_amount eq 0 }\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n {if !empty($formValues.contributionType_name)}\n <tr>\n <td {$labelStyle}>\n {ts}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n {/if}\n\n {if !empty($lineItem)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}\n <div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n {if isset($formValues.total_amount) and isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {/if}\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.total_amount|crmMoney}\n </td>\n </tr>\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date Received{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($formValues.paidBy)}\n <tr>\n <td {$labelStyle}>\n {ts}Paid By{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.paidBy}\n </td>\n </tr>\n {if !empty($formValues.check_number)}\n <tr>\n <td {$labelStyle}>\n {ts}Check Number{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.check_number}\n </td>\n </tr>\n {/if}\n {/if}\n {/if}\n {/if}\n </table>\n </td>\n </tr>\n\n {if !empty($isPrimary)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {$billingName}<br/>\n {$address}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$valueStyle}>\n {$credit_card_type}<br/>\n {$credit_card_number}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Expires{/ts}\n </td>\n <td {$valueStyle}>\n {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n </td>\n </tr>\n {/if}\n\n {if !empty($customValues)}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Membership Options{/ts}\n </th>\n </tr>\n {foreach from=$customValues item=value key=customName}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,846,'membership_offline_receipt',0,1,0,NULL), + (47,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$line.description|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {$line.line_total|crmMoney|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'membership_online_receipt',1,0,0,NULL), + (48,'Memberships - Receipt (on-line)','{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n{if !empty($receipt_text)}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}\n===========================================================\n{/if}\n\n{if $membership_assign && !$useForMember}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n{/if}\n{if $amount}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{if !$useForMember && isset($membership_amount) && !empty($is_quick_config)}\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{if $amount && !$is_separate_payment }\n{ts}Contribution Amount{/ts}: {$amount|crmMoney}\n-------------------------------------------\n{ts}Total{/ts}: {$amount+$membership_amount|crmMoney}\n{/if}\n{elseif !$useForMember && !empty($lineItem) and !empty($priceSetID) & empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n---------------------------------------------------------\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_qty}{ts}Qty{/ts}{/capture}\n{capture assign=ts_each}{ts}Each{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"}\n----------------------------------------------------------\n{foreach from=$value item=line}\n{$line.description|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.qty|string_format:\"%5s\"} {$line.unit_price|crmMoney|string_format:\"%10s\"} {$line.line_total|crmMoney|string_format:\"%10s\"}\n{/foreach}\n{/foreach}\n\n{ts}Total Amount{/ts}: {$amount|crmMoney}\n{else}\n{if $useForMember && $lineItem && empty($is_quick_config)}\n{foreach from=$lineItem item=value key=priceset}\n{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if !empty($dataArray)}\n{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture}\n{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture}\n{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture}\n{capture assign=ts_total}{ts}Total{/ts}{/capture}\n{/if}\n{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture}\n{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_total|string_format:\"%10s\"} {if !empty($dataArray)} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {$ts_total|string_format:\"%10s\"} {/if} {$ts_start_date|string_format:\"%20s\"} {$ts_end_date|string_format:\"%20s\"}\n--------------------------------------------------------------------------------------------------\n\n{foreach from=$value item=line}\n{capture assign=ts_item}{if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:\"...\"|string_format:\"%-30s\"} {$line.line_total|crmMoney|string_format:\"%10s\"} {if !empty($dataArray)} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")} {$line.tax_rate|string_format:\"%.2f\"} % {$line.tax_amount|crmMoney:$currency|string_format:\"%10s\"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:\"%10s\"} {/if} {$line.start_date|string_format:\"%20s\"} {$line.end_date|string_format:\"%20s\"}\n{/foreach}\n{/foreach}\n\n{if !empty($dataArray)}\n{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {if isset($taxTerm)}{$taxTerm}{/if}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if isset($totalTaxAmount)}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if isset($amount_level) } - {$amount_level} {/if}\n{/if}\n{elseif isset($membership_amount)}\n===========================================================\n{ts}Membership Fee{/ts}\n\n===========================================================\n{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney}\n{/if}\n\n{if !empty($receive_date)}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if !empty($is_monetary) and !empty($trxn_id)}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if !empty($membership_trx_id)}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if !empty($is_recur)}\n{ts}This membership will be renewed automatically.{/ts}\n{if $cancelSubscriptionUrl}\n\n{ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by visiting this web page: %1.{/ts}\n\n{/if}\n\n{if $updateSubscriptionBillingUrl}\n\n{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n{/if}\n{/if}\n\n{if $honor_block_is_active }\n===========================================================\n{$soft_credit_type}\n===========================================================\n{foreach from=$honoreeProfile item=value key=label}\n{$label}: {$value}\n{/foreach}\n\n{/if}\n{if !empty($pcpBlock)}\n===========================================================\n{ts}Personal Campaign Page{/ts}\n\n===========================================================\n{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n\n{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if}\n\n{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if}\n\n{/if}\n{if !empty($onBehalfProfile)}\n===========================================================\n{ts}On Behalf Of{/ts}\n\n===========================================================\n{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n{$onBehalfName}: {$onBehalfValue}\n{/foreach}\n{/if}\n\n{if !empty($billingName)}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif !empty($email)}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if !empty($credit_card_type)}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n{/if}\n\n{if !empty($selectPremium)}\n===========================================================\n{ts}Premium Information{/ts}\n\n===========================================================\n{$product_name}\n{if $option}\n{ts}Option{/ts}: {$option}\n{/if}\n{if $sku}\n{ts}SKU{/ts}: {$sku}\n{/if}\n{if $start_date}\n{ts}Start Date{/ts}: {$start_date|crmDate}\n{/if}\n{if $end_date}\n{ts}End Date{/ts}: {$end_date|crmDate}\n{/if}\n{if !empty($contact_email) OR !empty($contact_phone)}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if !empty($contact_email)}\n {$contact_email}\n{/if}\n{if !empty($contact_phone)}\n {$contact_phone}\n{/if}\n{/if}\n{if !empty($is_deductible) AND !empty($price)}\n\n{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if}\n{/if}\n\n{if !empty($customPre)}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if !empty($customPost)}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( !empty($trackingFields) and ! in_array( $customName, $trackingFields ) ) or empty($trackingFields)}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n {if !empty($receipt_text)}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{if isset($pay_later_receipt)}{$pay_later_receipt}{/if}</p> {* FIXME: this might be text rather than HTML *}\n {/if}\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n {if $membership_assign && !$useForMember}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Type{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_name}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n {/if}\n\n\n {if $amount}\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n\n {if !$useForMember and isset($membership_amount) and !empty($is_quick_config)}\n\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n {if $amount && !$is_separate_payment }\n <tr>\n <td {$labelStyle}>\n {ts}Contribution Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total{/ts}\n </td>\n <td {$valueStyle}>\n {$amount+$membership_amount|crmMoney}\n </td>\n </tr>\n {/if}\n\n {elseif empty($useForMember) && !empty($lineItem) and $priceSetID and empty($is_quick_config)}\n\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Qty{/ts}</th>\n <th>{ts}Each{/ts}</th>\n <th>{ts}Total{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {$line.description|truncate:30:\"...\"}\n </td>\n <td>\n {$line.qty}\n </td>\n <td>\n {$line.unit_price|crmMoney}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney}\n </td>\n </tr>\n\n {else}\n {if $useForMember && $lineItem and empty($is_quick_config)}\n {foreach from=$lineItem item=value key=priceset}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *}\n <tr>\n <th>{ts}Item{/ts}</th>\n <th>{ts}Fee{/ts}</th>\n {if !empty($dataArray)}\n <th>{ts}SubTotal{/ts}</th>\n <th>{ts}Tax Rate{/ts}</th>\n <th>{ts}Tax Amount{/ts}</th>\n <th>{ts}Total{/ts}</th>\n {/if}\n <th>{ts}Membership Start Date{/ts}</th>\n <th>{ts}Membership End Date{/ts}</th>\n </tr>\n {foreach from=$value item=line}\n <tr>\n <td>\n {if $line.html_type eq \'Text\'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:\"...\"}</div>{/if}\n </td>\n <td>\n {$line.line_total|crmMoney}\n </td>\n {if !empty($dataArray)}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if isset($line.tax_rate) and ($line.tax_rate != \"\" || $line.tax_amount != \"\")}\n <td>\n {$line.tax_rate|string_format:\"%.2f\"}%\n </td>\n <td>\n {$line.tax_amount|crmMoney}\n </td>\n {else}\n <td></td>\n <td></td>\n {/if}\n <td>\n {$line.line_total+$line.tax_amount|crmMoney}\n </td>\n {/if}\n <td>\n {$line.start_date}\n </td>\n <td>\n {$line.end_date}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n {/foreach}\n {if !empty($dataArray)}\n <tr>\n <td {$labelStyle}>\n {ts}Amount Before Tax:{/ts}\n </td>\n <td {$valueStyle}>\n {$amount-$totalTaxAmount|crmMoney}\n </td>\n </tr>\n {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {if isset($taxTerm)}{$taxTerm}{/if} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {if isset($taxTerm)}{$taxTerm}{/if}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if isset($totalTaxAmount)}\n <tr>\n <td {$labelStyle}>\n {ts}Total Tax Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalTaxAmount|crmMoney:$currency}\n </td>\n </tr>\n {/if}\n <tr>\n <td {$labelStyle}>\n {ts}Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney} {if isset($amount_level)} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif isset($membership_amount)}\n\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Fee{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$membership_name}%1 Membership{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_amount|crmMoney}\n </td>\n </tr>\n\n\n {/if}\n\n {if !empty($receive_date)}\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$receive_date|crmDate}\n </td>\n </tr>\n {/if}\n\n {if !empty($is_monetary) and !empty($trxn_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$trxn_id}\n </td>\n </tr>\n {/if}\n\n {if !empty($membership_trx_id)}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Transaction #{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_trx_id}\n </td>\n </tr>\n {/if}\n {if !empty($is_recur)}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts}This membership will be renewed automatically.{/ts}\n {if $cancelSubscriptionUrl}\n {ts 1=$cancelSubscriptionUrl}You can cancel the auto-renewal option by <a href=\"%1\">visiting this web page</a>.{/ts}\n {/if}\n </td>\n </tr>\n {if $updateSubscriptionBillingUrl}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href=\"%1\">visiting this web page</a>.{/ts}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if $honor_block_is_active}\n <tr>\n <th {$headerStyle}>\n {$soft_credit_type}\n </th>\n </tr>\n {foreach from=$honoreeProfile item=value key=label}\n <tr>\n <td {$labelStyle}>\n {$label}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($pcpBlock)}\n <tr>\n <th {$headerStyle}>\n {ts}Personal Campaign Page{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Display In Honor Roll{/ts}\n </td>\n <td {$valueStyle}>\n {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}\n </td>\n </tr>\n {if $pcp_roll_nickname}\n <tr>\n <td {$labelStyle}>\n {ts}Nickname{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_roll_nickname}\n </td>\n </tr>\n {/if}\n {if $pcp_personal_note}\n <tr>\n <td {$labelStyle}>\n {ts}Personal Note{/ts}\n </td>\n <td {$valueStyle}>\n {$pcp_personal_note}\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($onBehalfProfile)}\n <tr>\n <th {$headerStyle}>\n {$onBehalfProfile_grouptitle}\n </th>\n </tr>\n {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName}\n <tr>\n <td {$labelStyle}>\n {$onBehalfName}\n </td>\n <td {$valueStyle}>\n {$onBehalfValue}\n </td>\n </tr>\n {/foreach}\n {/if}\n\n {if !empty($billingName)}\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n {elseif !empty($email)}\n <tr>\n <th {$headerStyle}>\n {ts}Registered Email{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$email}\n </td>\n </tr>\n {/if}\n\n {if !empty($credit_card_type)}\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n {/if}\n\n {if !empty($selectPremium)}\n <tr>\n <th {$headerStyle}>\n {ts}Premium Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$product_name}\n </td>\n </tr>\n {if $option}\n <tr>\n <td {$labelStyle}>\n {ts}Option{/ts}\n </td>\n <td {$valueStyle}>\n {$option}\n </td>\n </tr>\n {/if}\n {if $sku}\n <tr>\n <td {$labelStyle}>\n {ts}SKU{/ts}\n </td>\n <td {$valueStyle}>\n {$sku}\n </td>\n </tr>\n {/if}\n {if $start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $end_date}\n <tr>\n <td {$labelStyle}>\n {ts}End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$end_date|crmDate}\n </td>\n </tr>\n {/if}\n {if !empty($contact_email) OR !empty($contact_phone)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if !empty($contact_email)}\n <p>{$contact_email}</p>\n {/if}\n {if !empty($contact_phone)}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if !empty($is_deductible) AND !empty($price)}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p>\n </td>\n </tr>\n {/if}\n {/if}\n\n {if !empty($customPre)}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n {if !empty($customPost)}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if (!empty($trackingFields) and ! in_array($customName, $trackingFields)) or empty($trackingFields)}\n <tr>\n <td {$labelStyle}>\n {$customName}\n </td>\n <td {$valueStyle}>\n {$customValue}\n </td>\n </tr>\n {/if}\n {/foreach}\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,847,'membership_online_receipt',0,1,0,NULL), + (49,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}</p>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'membership_autorenew_cancelled',1,0,0,NULL), + (50,'Memberships - Auto-renew Cancellation Notification','{ts}Autorenew Membership Cancellation Notification{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}\n\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Status{/ts}: {$membership_status}\n{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate}\n{/if}\n{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate}\n{/if}\n\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}</p>\n\n </td>\n </tr>\n </table>\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n\n <tr>\n <th {$headerStyle}>\n {ts}Membership Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Membership Status{/ts}\n </td>\n <td {$valueStyle}>\n {$membership_status}\n </td>\n </tr>\n {if $mem_start_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership Start Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_start_date|crmDate}\n </td>\n </tr>\n {/if}\n {if $mem_end_date}\n <tr>\n <td {$labelStyle}>\n {ts}Membership End Date{/ts}\n </td>\n <td {$valueStyle}>\n {$mem_end_date|crmDate}\n </td>\n </tr>\n {/if}\n\n </table>\n</center>\n\n</body>\n</html>\n',1,848,'membership_autorenew_cancelled',0,1,0,NULL), + (51,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,849,'membership_autorenew_billing',1,0,0,NULL), + (52,'Memberships - Auto-renew Billing Updates','{ts}Membership Autorenewal Billing Updates{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n\n===========================================================\n{ts}Credit Card Information{/ts}\n\n===========================================================\n{$credit_card_type}\n{$credit_card_number}\n{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}\n\n\n{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p>\n </td>\n </tr>\n <tr>\n </table>\n\n <table style=\"width:100%; max-width:500px; border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;\">\n <tr>\n <th {$headerStyle}>\n {ts}Billing Name and Address{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$billingName}<br />\n {$address|nl2br}<br />\n {$email}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Credit Card Information{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$credit_card_type}<br />\n {$credit_card_number}<br />\n {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:\'\'|crmDate}<br />\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts}\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,849,'membership_autorenew_billing',0,1,0,NULL), + (53,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,850,'test_preview',1,0,0,NULL), + (54,'Test-drive - Receipt Header','[TEST]\n','***********************************************************\n\n{ts}Test-drive Email / Receipt{/ts}\n\n{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}\n\n***********************************************************\n','<center>\n <table id=\"crm-event_receipt_test\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n <tr>\n <td>\n <p>{ts}Test-drive Email / Receipt{/ts}</p>\n <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p>\n </td>\n </tr>\n </table>\n</center>\n',1,850,'test_preview',0,1,0,NULL), + (55,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,851,'pledge_acknowledge',1,0,0,NULL), + (56,'Pledges - Acknowledgement','{ts}Thank you for your Pledge{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n{ts}Thank you for your generous pledge.{/ts}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency}\n\n===========================================================\n{ts}Payment Schedule{/ts}\n\n===========================================================\n{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}\n\n{if $frequency_day}\n\n{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}\n{/if}\n\n{if $payments}\n{assign var=\"count\" value=\"1\"}\n{foreach from=$payments item=payment}\n\n{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n{assign var=\"count\" value=`$count+1`}\n{/foreach}\n{/if}\n\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n===========================================================\n{$customName}\n===========================================================\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts}Thank you for your generous pledge.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$total_pledge_amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <th {$headerStyle}>\n {ts}Payment Schedule{/ts}\n </th>\n </tr>\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p>\n\n {if $frequency_day}\n <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p>\n {/if}\n </td>\n </tr>\n\n {if $payments}\n {assign var=\"count\" value=\"1\"}\n {foreach from=$payments item=payment}\n <tr>\n <td {$labelStyle}>\n {ts 1=$count}Payment %1{/ts}\n </td>\n <td {$valueStyle}>\n {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:\'\'|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:\'\'|crmDate}{/if}\n </td>\n </tr>\n {assign var=\"count\" value=`$count+1`}\n {/foreach}\n {/if}\n\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n </td>\n </tr>\n\n {if $customGroup}\n {foreach from=$customGroup item=value key=customName}\n <tr>\n <th {$headerStyle}>\n {$customName}\n </th>\n </tr>\n {foreach from=$value item=v key=n}\n <tr>\n <td {$labelStyle}>\n {$n}\n </td>\n <td {$valueStyle}>\n {$v}\n </td>\n </tr>\n {/foreach}\n {/foreach}\n {/if}\n\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,851,'pledge_acknowledge',0,1,0,NULL), + (57,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,852,'pledge_reminder',1,0,0,NULL), + (58,'Pledges - Payment Reminder','{ts}Pledge Payment Reminder{/ts} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\n{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}\n\n===========================================================\n{ts}Payment Due{/ts}\n\n===========================================================\n{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency}\n{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:\'\'|crmDate}\n\n{if $contribution_page_id}\n{capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\nClick this link to go to a web page where you can make your payment online:\n{$contributionUrl}\n{else}\n{ts}Please mail your payment to{/ts}:\n{$domain.address}\n{/if}\n\n===========================================================\n{ts}Pledge Information{/ts}\n\n===========================================================\n{ts}Pledge Received{/ts}: {$create_date|truncate:10:\'\'|crmDate}\n{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency}\n{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency}\n\n{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}\n\n\n{ts}Thank your for your generous support.{/ts}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n {assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n <p>{ts 1=$next_payment|truncate:10:\'\'|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}</p>\n </td>\n </tr>\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Payment Due{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Amount Due{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_due|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n {if $contribution_page_id}\n {capture assign=contributionUrl}{crmURL p=\'civicrm/contribute/transact\' q=\"reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`\" a=true h=0 fe=1}{/capture}\n <p><a href=\"{$contributionUrl}\">{ts}Go to a web page where you can make your payment online{/ts}</a></p>\n {else}\n <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p>\n {/if}\n </td>\n </tr>\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <th {$headerStyle}>\n {ts}Pledge Information{/ts}\n </th>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Pledge Received{/ts}\n </td>\n <td {$valueStyle}>\n {$create_date|truncate:10:\'\'|crmDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Pledge Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$amount|crmMoney:$currency}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$amount_paid|crmMoney:$currency}\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td>\n <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions\nor need to modify your payment schedule.{/ts}</p>\n <p>{ts}Thank your for your generous support.{/ts}</p>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,852,'pledge_reminder',0,1,0,NULL), + (59,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,853,'uf_notify',1,0,0,NULL), + (60,'Profiles - Admin Notification','{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} - {contact.display_name}\n','{ts}Submitted For:{/ts} {$displayName}\n{ts}Date:{/ts} {$currentDate}\n{ts}Contact Summary:{/ts} {$contactLink}\n\n===========================================================\n{$grouptitle}\n\n===========================================================\n{foreach from=$values item=value key=valueName}\n{$valueName}: {$value}\n{/foreach}\n','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n{capture assign=headerStyle}colspan=\"2\" style=\"text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;\"{/capture}\n{capture assign=labelStyle }style=\"padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;\"{/capture}\n{capture assign=valueStyle }style=\"padding: 4px; border-bottom: 1px solid #999;\"{/capture}\n\n<center>\n <table id=\"crm-event_receipt\" style=\"font-family: Arial, Verdana, sans-serif; text-align: left; width:100%; max-width:700px; padding:0; margin:0; border:0px;\">\n\n <!-- BEGIN HEADER -->\n <!-- You can add table row(s) here with logo or other header elements -->\n <!-- END HEADER -->\n\n <!-- BEGIN CONTENT -->\n\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n <tr>\n <td {$labelStyle}>\n {ts}Submitted For{/ts}\n </td>\n <td {$valueStyle}>\n {$displayName}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Date{/ts}\n </td>\n <td {$valueStyle}>\n {$currentDate}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Contact Summary{/ts}\n </td>\n <td {$valueStyle}>\n {$contactLink}\n </td>\n </tr>\n\n <tr>\n <th {$headerStyle}>\n {$grouptitle}\n </th>\n </tr>\n\n {foreach from=$values item=value key=valueName}\n <tr>\n <td {$labelStyle}>\n {$valueName}\n </td>\n <td {$valueStyle}>\n {$value}\n </td>\n </tr>\n {/foreach}\n </table>\n </td>\n </tr>\n\n </table>\n</center>\n\n</body>\n</html>\n',1,853,'uf_notify',0,1,0,NULL), + (61,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,854,'petition_sign',1,0,0,NULL), + (62,'Petition - signature added','Thank you for signing {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n{include file=\"CRM/Campaign/Page/Petition/SocialNetwork.tpl\" petition_id=$survey_id noscript=true emailMode=true}\n',1,854,'petition_sign',0,1,0,NULL), + (63,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,855,'petition_confirmation_needed',1,0,0,NULL), + (64,'Petition - need verification','Confirmation of signature needed for {$petition.title} - {contact.display_name}\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}{$greeting},{/if}\n\nThank you for signing {$petition.title}.\n\nIn order to complete your signature, we must confirm your e-mail.\nPlease do so by visiting the following email confirmation web page:\n\n{$petition.confirmUrlPlainText}\n\nIf you did not sign this petition, please ignore this message.\n','{assign var=\"greeting\" value=\"{contact.email_greeting}\"}{if $greeting}<p>{$greeting},</p>{/if}\n\n<p>Thank you for signing {$petition.title}.</p>\n\n<p>In order to <b>complete your signature</b>, we must confirm your e-mail.\n<br />\nPlease do so by visiting the following web page by clicking\non the link below or pasting the link into your browser.\n<br /><br />\nEmail confirmation page: <a href=\"{$petition.confirmUrl}\">{$petition.confirmUrl}</a></p>\n\n<p>If you did not sign this petition, please ignore this message.</p>\n',1,855,'petition_confirmation_needed',0,1,0,NULL), (65,'Sample CiviMail Newsletter Template','Sample CiviMail Newsletter','','<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <title></title>\n</head>\n<body>\n\n<table width=612 cellpadding=0 cellspacing=0 bgcolor=\"#ffffff\">\n <tr>\n <td colspan=\"2\" bgcolor=\"#ffffff\" valign=\"middle\" >\n <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >\n <tr>\n <td>\n <a href=\"https://civicrm.org\"><img src=\"https://civicrm.org/sites/civicrm.org/files/top-logo_2.png\" border=0 alt=\"Replace this logo with the URL to your own\"></a>\n </td>\n <td> </td>\n <td>\n <a href=\"https://civicrm.org\" style=\"text-decoration: none;\"><font size=5 face=\"Arial, Verdana, sans-serif\" color=\"#8bc539\">Your Newsletter Title</font></a>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td valign=\"top\" width=\"70%\">\n <!-- left column -->\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td style=\"font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n Greetings {contact.display_name},\n <br /><br />\n This is a sample template designed to help you get started creating and sending your own CiviMail messages. This template uses an HTML layout that is generally compatible with the wide variety of email clients that your recipients might be using (e.g. Gmail, Outlook, Yahoo, etc.).\n <br /><br />You can select this \"Sample CiviMail Newsletter Template\" from the \"Use Template\" drop-down in Step 3 of creating a mailing, and customize it to your needs. Then check the \"Save as New Template\" box on the bottom the page to save your customized version for use in future mailings.\n <br /><br />The logo you use must be uploaded to your server. Copy and paste the URL path to the logo into the <img src= tag in the HTML at the top. Click \"Source\" or the Image button if you are using the text editor.\n <br /><br />\n Edit the color of the links and headers using the color button or by editing the HTML.\n <br /><br />\n Your newsletter message and donation appeal can go here. Click the link button to <a href=\"#\">create links</a> - remember to use a fully qualified URL starting with http:// in all your links!\n <br /><br />\n To use CiviMail:\n <ul>\n <li><a href=\"http://book.civicrm.org/user/advanced-configuration/email-system-configuration/\">Configure your Email System</a>.</li>\n <li>Make sure your web hosting provider allows outgoing bulk mail, and see if they have a restriction on quantity. If they don\'t allow bulk mail, consider <a href=\"https://civicrm.org/providers/hosting\">finding a new host</a>.</li>\n </ul>\n Sincerely,\n <br /><br />\n Your Team\n <br /><br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n\n <td valign=\"top\" width=\"30%\" bgcolor=\"#ffffff\" style=\"border: 1px solid #056085;\">\n <!-- right column -->\n <table cellpadding=10 cellspacing=0 border=0>\n <tr>\n <td bgcolor=\"#056085\"><font face=\"Arial, Verdana, sans-serif\" size=\"4\" color=\"#ffffff\">News and Events</font></td>\n </tr>\n <tr>\n <td style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 12px;\" >\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#056085\"><strong>Featured Events</strong> </font><br />\n Fundraising Dinner<br />\n Training Meeting<br />\n Board of Directors Annual Meeting<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Community Events</strong></font><br />\n Bake Sale<br />\n Charity Auction<br />\n Art Exhibit<br />\n\n <br /><br />\n <font color=\"#056085\"><strong>Important Dates</strong></font><br />\n Tuesday August 27<br />\n Wednesday September 8<br />\n Thursday September 29<br />\n Saturday October 1<br />\n Sunday October 20<br />\n </font>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr>\n <td colspan=\"2\">\n <table cellpadding=\"10\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td>\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <font color=\"#7dc857\"><strong>Helpful Tips</strong></font>\n <br /><br />\n <font color=\"#3b5187\">Tokens</font><br />\n Click \"Insert Tokens\" to dynamically insert names, addresses, and other contact data of your recipients.\n <br /><br />\n <font color=\"#3b5187\">Plain Text Version</font><br />\n Some people refuse HTML emails altogether. We recommend sending a plain-text version of your important communications to accommodate them. Luckily, CiviCRM accommodates for this! Just click \"Plain Text\" and copy and paste in some text. Line breaks (carriage returns) and fully qualified URLs like http://www.example.com are all you get, no HTML here!\n <br /><br />\n <font color=\"#3b5187\">Play by the Rules</font><br />\n The address of the sender is required by the Can Spam Act law. This is an available token called domain.address. An unsubscribe or opt-out link is also required. There are several available tokens for this. <em>{action.optOutUrl}</em> creates a link for recipients to click if they want to opt out of receiving emails from your organization. <em>{action.unsubscribeUrl}</em> creates a link to unsubscribe from the specific mailing list used to send this message. Click on \"Insert Tokens\" to find these and look for tokens named \"Domain\" or \"Unsubscribe\". This sample template includes both required tokens at the bottom of the message. You can also configure a default Mailing Footer containing these tokens.\n <br /><br />\n <font color=\"#3b5187\">Composing Offline</font><br />\n If you prefer to compose an HTML email offline in your own text editor, you can upload this HTML content into CiviMail or simply click \"Source\" and then copy and paste the HTML in.\n <br /><br />\n <font color=\"#3b5187\">Images</font><br />\n Most email clients these days (Outlook, Gmail, etc) block image loading by default. This is to protect their users from annoying or harmful email. Not much we can do about this, so encourage recipients to add you to their contacts or \"whitelist\". Also use images sparingly, do not rely on images to convey vital information, and always use HTML \"alt\" tags which describe the image content.\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" style=\"color: #000; font-family: Arial, Verdana, sans-serif; font-size: 10px;\">\n <font face=\"Arial, Verdana, sans-serif\" size=\"2\" >\n <hr />\n <a href=\"{action.unsubscribeUrl}\" title=\"click to unsubscribe\">Click here</a> to unsubscribe from this mailing list.<br /><br />\n Our mailing address is:<br />\n {domain.address}\n </td>\n </tr>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL), (66,'Sample Responsive Design Newsletter - Single Column Template','Sample Responsive Design Newsletter - Single Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n\n <style type=\"text/css\">\n {literal}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {text-decoration: none;text-decoration:none;}\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color:#136388;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 416px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 416px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #136388;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: none;color:#136388;pointer-events: auto;cursor: default;}\n\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {\n .devicewidthmob {font-size:16px;}\n }\n\n @media only screen and (max-width: 640px) {\n .desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n\n<body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"310\">\n <tbody>\n <tr>\n <td align=\"left\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height:120%; color: #f8f8f8;padding-left:15px; padding-bottom:5px;\" valign=\"middle\">Organization or Program Name Here</td>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"310\">\n <tbody>\n <tr>\n <td align=\"right\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px; text-align:right;\" valign=\"middle\">Month and Year</td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of main-banner-->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <td rowspan=\"2\" style=\"padding-top:10px; padding-bottom:10px;\" width=\"38%\"><img src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png\" alt=\"Replace with your own logo\" width=\"220\" border=\"0\" /></td>\n <td align=\"right\" width=\"62%\">\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n <h5 style=\"font-family: Gill Sans, Gill Sans MT, Myriad Pro, DejaVu Sans Condensed, Helvetica, Arial, sans-serif; color:#136388;\"> </h5>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- /Spacing -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 23px; color:#f8f8f8; text-align:left; line-height: 32px; padding:5px 15px; background-color:#136388;\">Headline Here</td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- hero story -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <div class=\"imgpop\"><a href=\"#\"><img alt=\"\" border=\"0\" class=\"blog\" height=\"auto\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/650x396.png\" style=\"display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;\" width=\"650\" /></a></div>\n </td>\n </tr>\n <!-- /hero image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px; color:#89c66b;\"><a href=\"#\" style=\"color:#89c66b;\">Your Heading Here</a></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;\">{contact.email_greeting}, </p>\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></p>\n </td>\n </tr>\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;\"><a href=\"#\" style=\"color:#136388;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"read more\">Read More</a></td>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of hero image and story --><!-- story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" class=\"blog\" height=\"250\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png\" style=\"display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;\" width=\"650\" /></a></div>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;\"><a href=\"#\" style=\"color:#89c66b;\">Your Heading Here</a></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td style=\"padding:0 15px;\">\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p>\n </td>\n </tr>\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;\"><a href=\"#\" style=\"color:#136388;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"read more\">Read More</a></td>\n </tr>\n <!-- /button --><!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story 2--><!-- banner1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" class=\"blog\" height=\"auto\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png\" style=\"display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;\" width=\"650\" /></a></div>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding:15px;\">\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner 1--><!-- banner 2 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#136388\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"650\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" class=\"blog\" height=\"auto\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png\" style=\"display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;\" width=\"650\" /></a></div>\n </td>\n </tr>\n <!-- /image --><!-- content --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;\">Remember to link the facebook and twitter links below to your pages!</p>\n </td>\n </tr>\n <!-- /button --><!-- white button -->\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-bottom:10px; padding-left:15px;\"><a href=\"#\" style=\"color:#ffffff;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"read more\">Read More</a></td>\n </tr>\n <!-- /button --><!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /banner2 --><!-- footer -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"650\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <td align=\"left\" height=\"40\" width=\"250\"><span style=\"font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;\"><a href=\"{action.unsubscribeUrl}\" style=\"color: #f0f0f0; \">Unsubscribe | </a><a href=\"{action.subscribeUrl}\" style=\"color: #f0f0f0;\">Subscribe |</a> <a href=\"{action.optOutUrl}\" style=\"color: #f0f0f0;\">Opt out</a></span></td>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <td align=\"left\" height=\"40\" width=\"250\"><span style=\"font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;\">{domain.address}</span></td>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" height=\"22\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png\" style=\"display:block; border:none; outline:none; text-decoration:none;\" width=\"22\" /> </a></div>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" height=\"22\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png\" style=\"display:block; border:none; outline:none; text-decoration:none;\" width=\"22\" /> </a></div>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n\n</body>\n</html>\n',1,NULL,NULL,1,0,0,NULL), (67,'Sample Responsive Design Newsletter - Two Column Template','Sample Responsive Design Newsletter - Two Column','','<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\n <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" />\n <title></title>\n <style type=\"text/css\">\n {literal}\n img {height: auto !important;}\n /* Client-specific Styles */\n #outlook a {padding:0;} /* Force Outlook to provide a \"view in browser\" menu link. */\n body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;}\n\n /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */\n .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */\n .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */\n #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;}\n img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;}\n a img {border:none;}\n .image_fix {display:block;}\n p {margin: 0px 0px !important;}\n table td {border-collapse: collapse;}\n table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }\n a {/*color: #33b9ff;*/text-decoration: none;text-decoration:none!important;}\n\n\n /*STYLES*/\n table[class=full] { width: 100%; clear: both; }\n\n /*IPAD STYLES*/\n @media only screen and (max-width: 640px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important;pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 440px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 414px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 414px!important;text-align:center!important;}\n img[class=banner] {width: 440px!important;auto!important;}\n img[class=col2img] {width: 440px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 100px!important;}\n table[class=\"col3img\"] {width: 131px!important;}\n img[class=\"col3img\"] {width: 131px!important;height: auto!important;}\n table[class=\"removeMobile\"]{width:10px!important;}\n img[class=\"blog\"] {width: 440px!important;height: auto!important;}\n }\n\n /*IPHONE STYLES*/\n @media only screen and (max-width: 480px) {\n a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;}\n .mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration: default;color: #0a8cce !important; pointer-events: auto;cursor: default;}\n table[class=devicewidth] {width: 280px!important;text-align:center!important;}\n table[class=devicewidthmob] {width: 260px!important;text-align:center!important;}\n table[class=devicewidthinner] {width: 260px!important;text-align:center!important;}\n img[class=banner] {width: 280px!important;height:100px!important;}\n img[class=col2img] {width: 280px!important;height:auto!important;}\n table[class=\"cols3inner\"] {width: 260px!important;}\n img[class=\"col3img\"] {width: 280px!important;height: auto!important;}\n table[class=\"col3img\"] {width: 280px!important;}\n img[class=\"blog\"] {width: 280px!important;auto!important;}\n td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}\n }\n\n @media only screen and (max-device-width: 800px)\n {td[class=\"padding-top-right15\"]{padding:15px 15px 0 0 !important;}\n td[class=\"padding-right15\"]{padding-right:15px !important;}}\n @media only screen and (max-device-width: 769px) {.devicewidthmob {font-size:14px;}}\n\n @media only screen and (max-width: 640px) {.desktop-spacer {display:none !important;}\n }\n {/literal}\n </style>\n <body>\n <!-- Start of preheader --><!-- Start of preheader -->\n <table bgcolor=\"#0B4151\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"360\">\n <tbody>\n <tr>\n <td align=\"left\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height:120%; color: #f8f8f8;padding-left:15px;\" valign=\"middle\">Organization or Program Name Here</td>\n </tr>\n </tbody>\n </table>\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"emhide\" width=\"320\">\n <tbody>\n <tr>\n <td align=\"right\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px;\" valign=\"middle\">Month Year</td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of preheader --><!-- start of logo -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"20\" width=\"100%\">\n <table align=\"center\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"93%\">\n <tbody>\n <tr>\n <td rowspan=\"2\" width=\"330\"><a href=\"#\"> <div class=\"imgpop\"><img src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png\" alt=\"Replace with your own logo\" width=\"220\" border=\"0\" style=\"display:block;\"/></div></a></td>\n <td align=\"right\" >\n <h6 class=\"collapse\"> </h6>\n </td>\n </tr>\n <tr>\n <td align=\"right\">\n\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --> <!-- hero story 1 -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"101%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#f8f8f8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- /Spacing -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457\">Hero Story Heading</td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthinner\" width=\"700\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidthinner\" width=\"100%\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" class=\"blog\" height=\"396\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/700x396.png\" style=\"display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;\" width=\"700\" /></a></div>\n </td>\n </tr>\n <!-- /image --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- hero story -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;\"><a href=\"#\" style=\"color:#076187; text-decoration:none; \" target=\"_blank\">Subheading Here</a></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 26px; padding:0 15px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></td>\n </tr>\n\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr><!-- /Spacing -->\n\n <!-- /Spacing --><!-- /hero story -->\n\n <!-- Spacing --> <!-- Spacing -->\n\n\n\n <!-- Spacing --><!-- end of content -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Section Heading -->\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457\">Section Heading Here</td>\n </tr>\n <!-- /Section Heading -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /hero story 1 --><!-- story one -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidth\" height=\"150\" valign=\"top\" width=\"330\"><a href=\"#\"><img alt=\"\" border=\"0\" class=\"col2img\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png\" style=\"display:block; border:none; outline:none; text-decoration:none; display:block;\" width=\"330\" /></a></td>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <td class=\"padding-top-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;\"><a href=\"#\" style=\"color:#076187; text-decoration:none; \" target=\"_blank\">Heading Here</a><a href=\"#\" style=\"color:#076187; text-decoration:none;\" target=\"_blank\" title=\"CiviCRM helps keep the “City Beautiful†Movementâ€going strong\"></a></td>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;\"><a href=\"#\" style=\"color:#80C457;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"CiviCRM helps keep the “City Beautiful†Movementâ€going strong\">Read More</a></td>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story one -->\n <!-- story two -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidth\" height=\"150\" valign=\"top\" width=\"330\"><a href=\"#\"><img alt=\"\" border=\"0\" class=\"col2img\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png\" style=\"display:block; border:none; outline:none; text-decoration:none; display:block;\" width=\"330\" /></a></td>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <td class=\"padding-top-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;\"><a href=\"#\" style=\"color:#076187; text-decoration:none; \" target=\"_blank\">Heading Here</a><a href=\"#\" style=\"color:#076187; text-decoration:none;\" target=\"_blank\" title=\"How CiviCRM will take Tribodar Eco Learning Center to another level\"></a></td>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;\"><a href=\"#\" style=\"color:#80C457;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"How CiviCRM will take Tribodar Eco Learning Center to another level\">Read More</a></td>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story two --><!-- story three -->\n\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing --><!-- Spacing -->\n <tr>\n <td height=\"20\" class=\"desktop-spacer\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidth\" height=\"150\" valign=\"top\" width=\"330\"><a href=\"#\"><img alt=\"\" border=\"0\" class=\"col2img\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png\" style=\"display:block; border:none; outline:none; text-decoration:none; display:block;\" width=\"330\" /></a></td>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <td class=\"padding-top-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;\"><a href=\"#\" style=\"color:#076187; text-decoration:none; \" target=\"_blank\">Heading Here</a><a href=\"#\" style=\"color:#076187; text-decoration:none;\" target=\"_blank\" title=\"CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River\"></a></td>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;\"><a href=\"#\" style=\"color:#80C457;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River\">Read More</a></td>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story three -->\n\n\n\n\n\n <!-- story four -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"left-image\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#ffffff\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#076187\" height=\"0\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <!-- Spacing -->\n <tr>\n <td class=\"desktop-spacer\" height=\"20\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"660\">\n <tbody>\n <tr>\n <td><!-- Start of left column -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"330\">\n <tbody><!-- image -->\n <tr>\n <td align=\"center\" class=\"devicewidth\" height=\"150\" valign=\"top\" width=\"330\"><a href=\"#\"><img alt=\"\" border=\"0\" class=\"col2img\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png\" style=\"display:block; border:none; outline:none; text-decoration:none; display:block;\" width=\"330\" /></a></td>\n </tr>\n <!-- /image -->\n </tbody>\n </table>\n <!-- end of left column --><!-- spacing for mobile devices-->\n\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"mobilespacing\">\n <tbody>\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of for mobile devices--><!-- start of right column -->\n\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidthmob\" width=\"310\">\n <tbody>\n <tr>\n <td class=\"padding-top-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 18px;text-align:left; line-height: 24px;\"><a href=\"#\" style=\"color:#076187; text-decoration:none; \" target=\"_blank\">Heading Here</a><a href=\"#\" style=\"color:#076187; text-decoration:none;\" target=\"_blank\" title=\"Google Summer of Code\"></a></td>\n </tr>\n <!-- end of title --><!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing --><!-- content -->\n <tr>\n <td class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\"><span class=\"padding-right15\" style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna </span></td>\n </tr>\n <tr>\n <td style=\"font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;\"><a href=\"#\" style=\"color:#80C457;text-decoration:none;font-weight:bold;\" target=\"_blank\" title=\"Google Summer of Code\">Read More</a></td>\n </tr>\n <!-- /button --><!-- end of content -->\n </tbody>\n </table>\n <!-- end of right column --></td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"15\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\" width=\"100%\"> </td>\n </tr>\n <!-- /Spacing -->\n <tr>\n <td style=\"padding: 15px;\">\n <p style=\"font-family: Helvetica, arial, sans-serif; font-size: 16px; color:#076187; text-align:left; line-height: 26px; padding-bottom:10px;\">Remember to link the facebook and twitter links below to your pages!</p>\n </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- /story four -->\n\n <!-- footer -->\n\n <!-- End of footer --><!-- Start of postfooter -->\n <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"backgroundTable\" st-sortable=\"footer\" width=\"100%\">\n <tbody>\n <tr>\n <td>\n <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody>\n <tr>\n <td width=\"100%\">\n <table align=\"center\" bgcolor=\"#89c66b\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"devicewidth\" width=\"700\">\n <tbody><!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td><!-- logo -->\n <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"250\">\n <tbody>\n <tr>\n <td width=\"20\"> </td>\n <td align=\"left\" height=\"40\" width=\"250\"><span style=\"font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;\"><a href=\"{action.unsubscribeUrl}\" style=\"color: #f0f0f0;\">Unsubscribe | </a><a href=\"{action.subscribeUrl}\" style=\"color: #f0f0f0;\">Subscribe |</a> <a href=\"{action.optOutUrl}\" style=\"color: #f0f0f0;\">Opt out</a></span></td>\n </tr>\n <tr>\n <td width=\"20\"> </td>\n <td align=\"left\" height=\"40\" width=\"250\"><span style=\"font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;\">{domain.address}</span></td>\n </tr>\n </tbody>\n </table>\n <!-- end of logo --><!-- start of social icons -->\n <table align=\"right\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\" vaalign=\"middle\" width=\"60\">\n <tbody>\n <tr>\n <td align=\"left\" height=\"22\" width=\"22\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" height=\"22\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png\" style=\"display:block; border:none; outline:none; text-decoration:none;\" width=\"22\" /> </a></div> </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"10\"> </td>\n <td align=\"right\" height=\"22\" width=\"22\">\n <div class=\"imgpop\"><a href=\"#\" target=\"_blank\"><img alt=\"\" border=\"0\" height=\"22\" src=\"https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png\" style=\"display:block; border:none; outline:none; text-decoration:none;\" width=\"22\" /> </a></div>\n </td>\n <td align=\"left\" style=\"font-size:1px; line-height:1px;\" width=\"20\"> </td>\n </tr>\n </tbody>\n </table>\n <!-- end of social icons --></td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td height=\"10\" style=\"font-size:1px; line-height:1px; mso-line-height-rule: exactly;\"> </td>\n </tr>\n <!-- Spacing -->\n <tr>\n <td bgcolor=\"#80C457\" height=\"10\" width=\"100%\"> </td>\n </tr>\n <!-- Spacing -->\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- End of footer -->\n </body>\n</html>\n',1,NULL,NULL,1,0,0,NULL); @@ -5470,26 +5459,26 @@ UNLOCK TABLES; LOCK TABLES `civicrm_note` WRITE; /*!40000 ALTER TABLE `civicrm_note` DISABLE KEYS */; INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `note_date`, `created_date`, `modified_date`, `subject`, `privacy`) VALUES - (1,'civicrm_contact',194,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-12-27 23:23:15',NULL,'0'), - (2,'civicrm_contact',26,'Reminder screening of \"Black\" on next Friday',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-01-02 13:23:19',NULL,'0'), - (3,'civicrm_contact',3,'Send reminder for annual dinner',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-02-14 14:56:25',NULL,'0'), - (4,'civicrm_contact',43,'Send newsletter for April 2005',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-02-01 15:58:06',NULL,'0'), - (5,'civicrm_contact',186,'Reminder screening of \"Black\" on next Friday',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-02-19 21:02:20',NULL,'0'), - (6,'civicrm_contact',179,'Organize the Terry Fox run',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-06-30 04:00:57',NULL,'0'), - (7,'civicrm_contact',66,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-07-24 12:11:13',NULL,'0'), - (8,'civicrm_contact',83,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-05-24 19:51:31',NULL,'0'), - (9,'civicrm_contact',14,'Invite members for the Steve Prefontaine 10k dream run',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-03-30 19:37:15',NULL,'0'), - (10,'civicrm_contact',79,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-07-31 10:03:05',NULL,'0'), - (11,'civicrm_contact',160,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-11-24 03:25:25',NULL,'0'), - (12,'civicrm_contact',185,'Contact the Commissioner of Charities',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-09-04 14:23:15',NULL,'0'), - (13,'civicrm_contact',48,'Organize the Terry Fox run',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-03-22 22:56:36',NULL,'0'), - (14,'civicrm_contact',137,'Organize the Terry Fox run',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-08-09 17:54:40',NULL,'0'), - (15,'civicrm_contact',122,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-10-25 13:39:32',NULL,'0'), - (16,'civicrm_contact',57,'Connect for presentation',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-09-22 00:20:50',NULL,'0'), - (17,'civicrm_contact',121,'Send reminder for annual dinner',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-02-09 04:01:29',NULL,'0'), - (18,'civicrm_contact',145,'Arrange for cricket match with Sunil Gavaskar',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2020-10-31 05:43:28',NULL,'0'), - (19,'civicrm_contact',170,'Get the registration done for NGO status',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-03-24 22:13:51',NULL,'0'), - (20,'civicrm_contact',74,'Reminder screening of \"Black\" on next Friday',1,'2021-07-26 14:08:45','2021-07-26 14:08:45','2021-06-06 19:17:45',NULL,'0'); + (1,'civicrm_contact',142,'Reminder screening of \"Black\" on next Friday',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-04-21 22:15:46',NULL,'0'), + (2,'civicrm_contact',131,'Get the registration done for NGO status',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-11-21 08:29:07',NULL,'0'), + (3,'civicrm_contact',92,'Get the registration done for NGO status',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-02-02 08:12:03',NULL,'0'), + (4,'civicrm_contact',199,'Send reminder for annual dinner',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-10-18 18:39:43',NULL,'0'), + (5,'civicrm_contact',34,'Connect for presentation',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-07-07 23:57:11',NULL,'0'), + (6,'civicrm_contact',14,'Send reminder for annual dinner',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-12-02 15:07:44',NULL,'0'), + (7,'civicrm_contact',182,'Get the registration done for NGO status',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-08-29 21:28:19',NULL,'0'), + (8,'civicrm_contact',113,'Organize the Terry Fox run',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-02-22 11:28:36',NULL,'0'), + (9,'civicrm_contact',183,'Arrange collection of funds from members',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-06-28 20:59:41',NULL,'0'), + (10,'civicrm_contact',72,'Chart out route map for next 10k run',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-11-25 20:12:23',NULL,'0'), + (11,'civicrm_contact',60,'Arrange collection of funds from members',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-08-28 00:17:23',NULL,'0'), + (12,'civicrm_contact',50,'Chart out route map for next 10k run',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-05-28 10:59:33',NULL,'0'), + (13,'civicrm_contact',156,'Contact the Commissioner of Charities',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-07-29 09:17:41',NULL,'0'), + (14,'civicrm_contact',54,'Contact the Commissioner of Charities',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-01-24 11:47:34',NULL,'0'), + (15,'civicrm_contact',43,'Arrange collection of funds from members',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-08-05 12:07:05',NULL,'0'), + (16,'civicrm_contact',103,'Reminder screening of \"Black\" on next Friday',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-10-25 05:13:17',NULL,'0'), + (17,'civicrm_contact',151,'Send newsletter for April 2005',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-05-20 15:31:21',NULL,'0'), + (18,'civicrm_contact',53,'Organize the Terry Fox run',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2020-12-02 05:04:24',NULL,'0'), + (19,'civicrm_contact',184,'Chart out route map for next 10k run',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-04-29 12:23:17',NULL,'0'), + (20,'civicrm_contact',24,'Send reminder for annual dinner',1,'2021-10-14 04:23:55','2021-10-14 04:23:55','2021-01-22 22:40:34',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -5966,16 +5955,16 @@ INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, ` (348,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), (349,40,'/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/','date_','date_',NULL,1,NULL,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL), (350,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), - (351,42,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), - (352,42,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (351,42,'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}','2','Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (352,42,'Dear {contact.prefix_id:label} {contact.last_name}','3','Dear {contact.prefix_id:label} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (353,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), (354,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (355,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), - (356,43,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), - (357,43,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (356,43,'Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}','2','Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (357,43,'Dear {contact.prefix_id:label} {contact.last_name}','3','Dear {contact.prefix_id:label} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (358,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), (359,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), - (360,44,'{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}','1','}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), + (360,44,'{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}','1','{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (361,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (362,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL), (363,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL), @@ -6493,56 +6482,56 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant` WRITE; /*!40000 ALTER TABLE `civicrm_participant` DISABLE KEYS */; INSERT INTO `civicrm_participant` (`id`, `contact_id`, `event_id`, `status_id`, `role_id`, `register_date`, `source`, `fee_level`, `is_test`, `is_pay_later`, `fee_amount`, `registered_by_id`, `discount_id`, `fee_currency`, `campaign_id`, `discount_amount`, `cart_id`, `must_wait`, `transferred_to_contact_id`) VALUES - (1,70,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (2,110,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (3,23,3,3,'3','2008-05-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (4,83,1,4,'4','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (5,158,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (6,55,3,2,'2','2008-03-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (7,43,1,3,'3','2009-07-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (8,21,2,4,'4','2009-03-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (9,199,3,1,'1','2008-02-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (10,190,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (11,68,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (12,167,3,4,'4','2009-03-06 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (13,124,1,1,'2','2008-06-04 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (14,3,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (15,116,3,4,'1','2008-07-04 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (16,117,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (17,170,2,2,'3','2008-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (18,165,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (19,176,1,2,'1','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (20,201,2,4,'1','2009-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (21,93,3,1,'4','2008-03-25 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (22,131,1,2,'3','2009-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (23,152,2,4,'1','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (24,41,3,3,'1','2008-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (25,25,3,2,'2','2008-04-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (26,144,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (27,183,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (28,149,3,3,'3','2009-12-12 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (29,166,1,4,'4','2009-12-13 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (30,19,2,1,'1','2009-12-14 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (31,105,3,2,'2','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (32,102,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (33,66,2,4,'4','2009-03-07 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (34,49,3,1,'1','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (35,4,1,2,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (36,112,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (37,75,3,4,'4','2009-03-06 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (38,91,1,1,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (39,6,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (40,27,3,4,'1','2009-12-14 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (41,200,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (42,142,2,2,'3','2009-12-15 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (43,54,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (44,86,1,2,'1','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (45,53,2,4,'1','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (46,113,3,1,'4','2009-12-13 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (47,98,1,2,'3','2009-10-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (48,173,2,4,'1','2009-12-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (49,197,3,3,'1','2009-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (50,121,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); + (1,51,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (2,35,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (3,196,3,3,'3','2008-05-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (4,60,1,4,'4','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (5,100,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (6,22,3,2,'2','2008-03-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (7,187,1,3,'3','2009-07-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (8,93,2,4,'4','2009-03-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (9,179,3,1,'1','2008-02-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (10,21,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (11,129,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (12,73,3,4,'4','2009-03-06 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (13,171,1,1,'2','2008-06-04 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (14,147,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (15,41,3,4,'1','2008-07-04 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (16,166,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (17,33,2,2,'3','2008-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (18,158,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (19,151,1,2,'1','2008-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (20,136,2,4,'1','2009-01-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (21,153,3,1,'4','2008-03-25 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (22,185,1,2,'3','2009-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (23,142,2,4,'1','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (24,117,3,3,'1','2008-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (25,12,3,2,'2','2008-04-05 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (26,82,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (27,184,2,2,'2','2008-05-07 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (28,123,3,3,'3','2009-12-12 00:00:00','Direct Transfer','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (29,50,1,4,'4','2009-12-13 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (30,46,2,1,'1','2009-12-14 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (31,155,3,2,'2','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (32,103,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (33,191,2,4,'4','2009-03-07 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (34,104,3,1,'1','2009-12-15 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (35,89,1,2,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (36,133,2,3,'3','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (37,18,3,4,'4','2009-03-06 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (38,157,1,1,'2','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (39,84,2,2,'3','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (40,114,3,4,'1','2009-12-14 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (41,110,1,4,'2','2009-01-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (42,125,2,2,'3','2009-12-15 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (43,64,3,3,'1','2009-03-05 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (44,107,1,2,'1','2009-12-13 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (45,55,2,4,'1','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (46,200,3,1,'4','2009-12-13 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (47,122,1,2,'3','2009-10-21 00:00:00','Credit Card','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (48,13,2,4,'1','2009-12-10 00:00:00','Credit Card','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (49,144,3,3,'1','2009-03-11 00:00:00','Credit Card','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (50,143,3,2,'2','2009-04-05 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_participant` ENABLE KEYS */; UNLOCK TABLES; @@ -6553,56 +6542,56 @@ UNLOCK TABLES; LOCK TABLES `civicrm_participant_payment` WRITE; /*!40000 ALTER TABLE `civicrm_participant_payment` DISABLE KEYS */; INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES - (1,14,45), - (2,35,46), - (3,39,47), - (4,30,48), - (5,8,49), - (6,3,50), - (7,25,51), - (8,40,52), - (9,24,53), - (10,7,54), - (11,34,55), + (1,25,45), + (2,48,46), + (3,37,47), + (4,10,48), + (5,6,49), + (6,17,50), + (7,2,51), + (8,15,52), + (9,30,53), + (10,29,54), + (11,1,55), (12,45,56), - (13,43,57), - (14,6,58), - (15,33,59), - (16,11,60), - (17,1,61), - (18,37,62), - (19,4,63), - (20,44,64), - (21,38,65), - (22,21,66), - (23,47,67), - (24,32,68), - (25,31,69), - (26,2,70), - (27,36,71), - (28,46,72), - (29,15,73), - (30,16,74), - (31,50,75), - (32,13,76), - (33,22,77), - (34,42,78), - (35,26,79), - (36,28,80), - (37,23,81), - (38,5,82), - (39,18,83), - (40,29,84), - (41,12,85), - (42,17,86), - (43,48,87), - (44,19,88), + (13,4,57), + (14,43,58), + (15,12,59), + (16,26,60), + (17,39,61), + (18,35,62), + (19,8,63), + (20,5,64), + (21,32,65), + (22,34,66), + (23,44,67), + (24,41,68), + (25,40,69), + (26,24,70), + (27,47,71), + (28,28,72), + (29,42,73), + (30,11,74), + (31,36,75), + (32,20,76), + (33,23,77), + (34,50,78), + (35,49,79), + (36,14,80), + (37,19,81), + (38,21,82), + (39,31,83), + (40,38,84), + (41,18,85), + (42,16,86), + (43,13,87), + (44,9,88), (45,27,89), - (46,10,90), - (47,49,91), - (48,9,92), - (49,41,93), - (50,20,94); + (46,22,90), + (47,7,91), + (48,33,92), + (49,3,93), + (50,46,94); /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -6676,7 +6665,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_pcp` WRITE; /*!40000 ALTER TABLE `civicrm_pcp` DISABLE KEYS */; INSERT INTO `civicrm_pcp` (`id`, `contact_id`, `status_id`, `title`, `intro_text`, `page_text`, `donate_link_text`, `page_id`, `page_type`, `pcp_block_id`, `is_thermometer`, `is_honor_roll`, `goal_amount`, `currency`, `is_active`, `is_notify`) VALUES - (1,39,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); + (1,48,2,'My Personal Civi Fundraiser','I\'m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.','<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>','Contribute Now',1,'contribute',1,1,1,5000.00,'USD',1,1); /*!40000 ALTER TABLE `civicrm_pcp` ENABLE KEYS */; UNLOCK TABLES; @@ -6698,149 +6687,167 @@ UNLOCK TABLES; LOCK TABLES `civicrm_phone` WRITE; /*!40000 ALTER TABLE `civicrm_phone` DISABLE KEYS */; INSERT INTO `civicrm_phone` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `mobile_provider_id`, `phone`, `phone_ext`, `phone_numeric`, `phone_type_id`) VALUES - (1,60,1,1,0,NULL,'(631) 502-7632',NULL,'6315027632',2), - (2,60,1,0,0,NULL,'306-5286',NULL,'3065286',1), - (3,65,1,1,0,NULL,'(664) 556-8449',NULL,'6645568449',1), - (4,39,1,1,0,NULL,'(666) 804-7672',NULL,'6668047672',1), - (5,58,1,1,0,NULL,'490-2731',NULL,'4902731',2), - (6,58,1,0,0,NULL,'(752) 434-5094',NULL,'7524345094',1), - (7,94,1,1,0,NULL,'(598) 531-1150',NULL,'5985311150',2), - (8,164,1,1,0,NULL,'470-6150',NULL,'4706150',1), - (9,81,1,1,0,NULL,'(268) 413-2738',NULL,'2684132738',2), - (10,81,1,0,0,NULL,'675-7787',NULL,'6757787',1), - (11,187,1,1,0,NULL,'340-8178',NULL,'3408178',1), - (12,195,1,1,0,NULL,'396-5598',NULL,'3965598',1), - (13,69,1,1,0,NULL,'(468) 419-5582',NULL,'4684195582',2), - (14,69,1,0,0,NULL,'547-4732',NULL,'5474732',2), - (15,4,1,1,0,NULL,'596-6699',NULL,'5966699',1), - (16,4,1,0,0,NULL,'(253) 898-2469',NULL,'2538982469',1), - (17,19,1,1,0,NULL,'(246) 206-4702',NULL,'2462064702',1), - (18,19,1,0,0,NULL,'416-7576',NULL,'4167576',1), - (19,10,1,1,0,NULL,'(556) 694-1060',NULL,'5566941060',1), - (20,10,1,0,0,NULL,'713-4496',NULL,'7134496',2), - (21,137,1,1,0,NULL,'(346) 672-4375',NULL,'3466724375',1), - (22,137,1,0,0,NULL,'257-2955',NULL,'2572955',2), - (23,30,1,1,0,NULL,'558-1911',NULL,'5581911',2), - (24,165,1,1,0,NULL,'(393) 816-3318',NULL,'3938163318',1), - (25,165,1,0,0,NULL,'(536) 353-9891',NULL,'5363539891',1), - (26,162,1,1,0,NULL,'(341) 622-9484',NULL,'3416229484',2), - (27,131,1,1,0,NULL,'896-4973',NULL,'8964973',2), - (28,27,1,1,0,NULL,'593-8180',NULL,'5938180',1), - (29,17,1,1,0,NULL,'(746) 514-3812',NULL,'7465143812',2), - (30,17,1,0,0,NULL,'826-8525',NULL,'8268525',1), - (31,149,1,1,0,NULL,'(324) 894-7558',NULL,'3248947558',1), - (32,149,1,0,0,NULL,'544-2102',NULL,'5442102',2), - (33,199,1,1,0,NULL,'(582) 370-7412',NULL,'5823707412',2), - (34,199,1,0,0,NULL,'564-1332',NULL,'5641332',2), - (35,115,1,1,0,NULL,'306-7021',NULL,'3067021',1), - (36,201,1,1,0,NULL,'706-2312',NULL,'7062312',1), - (37,201,1,0,0,NULL,'(706) 523-7684',NULL,'7065237684',2), - (38,166,1,1,0,NULL,'(605) 337-9231',NULL,'6053379231',1), - (39,61,1,1,0,NULL,'819-7845',NULL,'8197845',2), - (40,56,1,1,0,NULL,'588-3229',NULL,'5883229',2), - (41,56,1,0,0,NULL,'(327) 507-5826',NULL,'3275075826',1), - (42,172,1,1,0,NULL,'(851) 529-4920',NULL,'8515294920',1), - (43,157,1,1,0,NULL,'799-5820',NULL,'7995820',1), - (44,157,1,0,0,NULL,'(336) 496-9949',NULL,'3364969949',1), - (45,71,1,1,0,NULL,'(708) 838-9081',NULL,'7088389081',2), - (46,71,1,0,0,NULL,'(796) 724-1136',NULL,'7967241136',2), - (47,21,1,1,0,NULL,'(702) 243-8648',NULL,'7022438648',2), - (48,21,1,0,0,NULL,'(314) 656-6957',NULL,'3146566957',1), - (49,25,1,1,0,NULL,'(304) 431-5590',NULL,'3044315590',2), - (50,49,1,1,0,NULL,'(668) 732-7307',NULL,'6687327307',1), - (51,11,1,1,0,NULL,'(552) 484-3091',NULL,'5524843091',1), - (52,78,1,1,0,NULL,'670-5669',NULL,'6705669',1), - (53,133,1,1,0,NULL,'(331) 367-5236',NULL,'3313675236',1), - (54,133,1,0,0,NULL,'471-5778',NULL,'4715778',2), - (55,184,1,1,0,NULL,'235-2266',NULL,'2352266',1), - (56,184,1,0,0,NULL,'717-3709',NULL,'7173709',1), - (57,55,1,1,0,NULL,'(857) 412-1949',NULL,'8574121949',2), - (58,55,1,0,0,NULL,'342-4560',NULL,'3424560',1), - (59,146,1,1,0,NULL,'489-6363',NULL,'4896363',2), - (60,146,1,0,0,NULL,'(255) 263-6254',NULL,'2552636254',2), - (61,170,1,1,0,NULL,'(690) 507-8377',NULL,'6905078377',2), - (62,112,1,1,0,NULL,'793-8784',NULL,'7938784',2), - (63,112,1,0,0,NULL,'463-3338',NULL,'4633338',1), - (64,177,1,1,0,NULL,'(728) 225-4864',NULL,'7282254864',1), - (65,177,1,0,0,NULL,'814-8256',NULL,'8148256',1), - (66,175,1,1,0,NULL,'452-8819',NULL,'4528819',1), - (67,175,1,0,0,NULL,'(747) 596-4923',NULL,'7475964923',1), - (68,182,1,1,0,NULL,'(234) 265-3675',NULL,'2342653675',2), - (69,182,1,0,0,NULL,'(401) 457-9782',NULL,'4014579782',2), - (70,2,1,1,0,NULL,'(373) 769-9145',NULL,'3737699145',2), - (71,90,1,1,0,NULL,'794-1366',NULL,'7941366',2), - (72,80,1,1,0,NULL,'666-4673',NULL,'6664673',1), - (73,80,1,0,0,NULL,'856-1567',NULL,'8561567',1), - (74,20,1,1,0,NULL,'(549) 886-3510',NULL,'5498863510',1), - (75,41,1,1,0,NULL,'397-4218',NULL,'3974218',1), - (76,41,1,0,0,NULL,'(791) 269-2479',NULL,'7912692479',2), - (77,128,1,1,0,NULL,'428-1343',NULL,'4281343',2), - (78,128,1,0,0,NULL,'550-4730',NULL,'5504730',1), - (79,197,1,1,0,NULL,'(570) 794-3005',NULL,'5707943005',2), - (80,197,1,0,0,NULL,'795-8612',NULL,'7958612',2), - (81,126,1,1,0,NULL,'(369) 871-4787',NULL,'3698714787',1), - (82,72,1,1,0,NULL,'(787) 404-4255',NULL,'7874044255',1), - (83,18,1,1,0,NULL,'(536) 839-8282',NULL,'5368398282',2), - (84,18,1,0,0,NULL,'808-4380',NULL,'8084380',2), - (85,101,1,1,0,NULL,'442-6300',NULL,'4426300',2), - (86,192,1,1,0,NULL,'(394) 775-9196',NULL,'3947759196',2), - (87,95,1,1,0,NULL,'879-4781',NULL,'8794781',2), - (88,96,1,1,0,NULL,'591-6861',NULL,'5916861',1), - (89,96,1,0,0,NULL,'(897) 862-7708',NULL,'8978627708',2), - (90,79,1,1,0,NULL,'(688) 535-7384',NULL,'6885357384',1), - (91,62,1,1,0,NULL,'249-4663',NULL,'2494663',1), - (92,62,1,0,0,NULL,'749-1849',NULL,'7491849',2), - (93,148,1,1,0,NULL,'(782) 613-9828',NULL,'7826139828',2), - (94,3,1,1,0,NULL,'(747) 402-8360',NULL,'7474028360',1), - (95,150,1,1,0,NULL,'(337) 475-4791',NULL,'3374754791',1), - (96,16,1,1,0,NULL,'(824) 616-5301',NULL,'8246165301',1), - (97,141,1,1,0,NULL,'376-2523',NULL,'3762523',2), - (98,82,1,1,0,NULL,'881-3072',NULL,'8813072',1), - (99,104,1,1,0,NULL,'473-2993',NULL,'4732993',1), - (100,12,1,1,0,NULL,'391-1408',NULL,'3911408',2), - (101,12,1,0,0,NULL,'(312) 884-9568',NULL,'3128849568',1), - (102,14,1,1,0,NULL,'626-1697',NULL,'6261697',2), - (103,14,1,0,0,NULL,'519-4702',NULL,'5194702',2), - (104,59,1,1,0,NULL,'398-7690',NULL,'3987690',2), - (105,64,1,1,0,NULL,'(687) 630-8229',NULL,'6876308229',1), - (106,116,1,1,0,NULL,'(306) 437-7083',NULL,'3064377083',1), - (107,47,1,1,0,NULL,'(204) 719-6897',NULL,'2047196897',1), - (108,47,1,0,0,NULL,'840-9262',NULL,'8409262',2), - (109,113,1,1,0,NULL,'(623) 892-8608',NULL,'6238928608',2), - (110,113,1,0,0,NULL,'410-4853',NULL,'4104853',1), - (111,200,1,1,0,NULL,'(698) 679-4101',NULL,'6986794101',2), - (112,51,1,1,0,NULL,'(554) 694-1265',NULL,'5546941265',1), - (113,51,1,0,0,NULL,'(774) 530-8718',NULL,'7745308718',1), - (114,132,1,1,0,NULL,'(868) 578-3362',NULL,'8685783362',1), - (115,132,1,0,0,NULL,'(402) 843-3905',NULL,'4028433905',2), - (116,108,1,1,0,NULL,'596-1254',NULL,'5961254',2), - (117,108,1,0,0,NULL,'(710) 430-3209',NULL,'7104303209',2), - (118,178,1,1,0,NULL,'230-3227',NULL,'2303227',2), - (119,93,1,1,0,NULL,'294-1346',NULL,'2941346',2), - (120,93,1,0,0,NULL,'(520) 593-1333',NULL,'5205931333',2), - (121,92,1,1,0,NULL,'(323) 643-5508',NULL,'3236435508',2), - (122,68,1,1,0,NULL,'(709) 699-7261',NULL,'7096997261',1), - (123,68,1,0,0,NULL,'(533) 556-7878',NULL,'5335567878',1), - (124,136,1,1,0,NULL,'519-5572',NULL,'5195572',2), - (125,75,1,1,0,NULL,'(756) 531-4898',NULL,'7565314898',1), - (126,75,1,0,0,NULL,'(222) 894-8530',NULL,'2228948530',2), - (127,156,1,1,0,NULL,'539-9453',NULL,'5399453',1), - (128,156,1,0,0,NULL,'(564) 560-4185',NULL,'5645604185',1), - (129,46,1,1,0,NULL,'(856) 628-3123',NULL,'8566283123',1), - (130,123,1,1,0,NULL,'(651) 524-6464',NULL,'6515246464',2), - (131,45,1,1,0,NULL,'403-4431',NULL,'4034431',2), - (132,45,1,0,0,NULL,'(729) 351-3727',NULL,'7293513727',1), - (133,23,1,1,0,NULL,'(375) 371-2517',NULL,'3753712517',1), - (134,163,1,1,0,NULL,'814-7804',NULL,'8147804',1), - (135,194,1,1,0,NULL,'511-8371',NULL,'5118371',2), - (136,86,1,1,0,NULL,'239-8049',NULL,'2398049',2), - (137,86,1,0,0,NULL,'(526) 278-3701',NULL,'5262783701',2), - (138,77,1,1,0,NULL,'358-6653',NULL,'3586653',2), - (139,44,1,1,0,NULL,'613-6975',NULL,'6136975',1), - (140,43,1,1,0,NULL,'(764) 278-9077',NULL,'7642789077',1), - (141,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), - (142,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), - (143,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); + (1,111,1,1,0,NULL,'718-8327',NULL,'7188327',2), + (2,105,1,1,0,NULL,'810-5338',NULL,'8105338',2), + (3,105,1,0,0,NULL,'(880) 315-3802',NULL,'8803153802',1), + (4,188,1,1,0,NULL,'707-8755',NULL,'7078755',1), + (5,188,1,0,0,NULL,'445-4834',NULL,'4454834',1), + (6,200,1,1,0,NULL,'840-4466',NULL,'8404466',1), + (7,200,1,0,0,NULL,'(599) 223-4032',NULL,'5992234032',2), + (8,107,1,1,0,NULL,'(599) 396-4976',NULL,'5993964976',2), + (9,156,1,1,0,NULL,'806-2840',NULL,'8062840',1), + (10,121,1,1,0,NULL,'537-6151',NULL,'5376151',2), + (11,121,1,0,0,NULL,'(772) 789-7268',NULL,'7727897268',1), + (12,28,1,1,0,NULL,'(785) 582-1113',NULL,'7855821113',1), + (13,28,1,0,0,NULL,'324-3836',NULL,'3243836',1), + (14,172,1,1,0,NULL,'(798) 299-4019',NULL,'7982994019',1), + (15,172,1,0,0,NULL,'(785) 658-5377',NULL,'7856585377',1), + (16,39,1,1,0,NULL,'(862) 669-8365',NULL,'8626698365',1), + (17,39,1,0,0,NULL,'(541) 612-6073',NULL,'5416126073',1), + (18,190,1,1,0,NULL,'427-8905',NULL,'4278905',2), + (19,190,1,0,0,NULL,'(723) 386-5373',NULL,'7233865373',1), + (20,138,1,1,0,NULL,'737-1587',NULL,'7371587',2), + (21,138,1,0,0,NULL,'254-6474',NULL,'2546474',1), + (22,7,1,1,0,NULL,'371-9316',NULL,'3719316',2), + (23,7,1,0,0,NULL,'(417) 753-5113',NULL,'4177535113',2), + (24,67,1,1,0,NULL,'(229) 290-4659',NULL,'2292904659',2), + (25,116,1,1,0,NULL,'(414) 566-8879',NULL,'4145668879',2), + (26,32,1,1,0,NULL,'698-5689',NULL,'6985689',1), + (27,12,1,1,0,NULL,'(648) 357-7492',NULL,'6483577492',1), + (28,12,1,0,0,NULL,'453-3313',NULL,'4533313',2), + (29,88,1,1,0,NULL,'(385) 629-9159',NULL,'3856299159',2), + (30,88,1,0,0,NULL,'(384) 715-4406',NULL,'3847154406',2), + (31,99,1,1,0,NULL,'651-8247',NULL,'6518247',2), + (32,99,1,0,0,NULL,'(691) 810-9320',NULL,'6918109320',1), + (33,73,1,1,0,NULL,'293-7928',NULL,'2937928',1), + (34,132,1,1,0,NULL,'(505) 532-1975',NULL,'5055321975',1), + (35,171,1,1,0,NULL,'839-7071',NULL,'8397071',2), + (36,152,1,1,0,NULL,'661-5784',NULL,'6615784',1), + (37,149,1,1,0,NULL,'828-1875',NULL,'8281875',1), + (38,8,1,1,0,NULL,'316-9181',NULL,'3169181',2), + (39,103,1,1,0,NULL,'258-4439',NULL,'2584439',1), + (40,103,1,0,0,NULL,'(780) 783-5044',NULL,'7807835044',1), + (41,23,1,1,0,NULL,'426-8695',NULL,'4268695',2), + (42,23,1,0,0,NULL,'704-7417',NULL,'7047417',1), + (43,69,1,1,0,NULL,'(480) 672-9034',NULL,'4806729034',1), + (44,69,1,0,0,NULL,'654-5488',NULL,'6545488',1), + (45,38,1,1,0,NULL,'748-3239',NULL,'7483239',1), + (46,38,1,0,0,NULL,'294-7300',NULL,'2947300',2), + (47,122,1,1,0,NULL,'(305) 666-9127',NULL,'3056669127',2), + (48,122,1,0,0,NULL,'480-8849',NULL,'4808849',2), + (49,55,1,1,0,NULL,'421-3245',NULL,'4213245',2), + (50,142,1,1,0,NULL,'785-6319',NULL,'7856319',2), + (51,18,1,1,0,NULL,'(714) 718-6772',NULL,'7147186772',1), + (52,18,1,0,0,NULL,'(381) 361-4988',NULL,'3813614988',1), + (53,44,1,1,0,NULL,'600-2285',NULL,'6002285',1), + (54,57,1,1,0,NULL,'(856) 835-4384',NULL,'8568354384',2), + (55,57,1,0,0,NULL,'511-1010',NULL,'5111010',1), + (56,114,1,1,0,NULL,'(787) 729-7934',NULL,'7877297934',2), + (57,15,1,1,0,NULL,'753-3887',NULL,'7533887',2), + (58,15,1,0,0,NULL,'(739) 293-8878',NULL,'7392938878',2), + (59,194,1,1,0,NULL,'(455) 484-9167',NULL,'4554849167',1), + (60,194,1,0,0,NULL,'418-5045',NULL,'4185045',2), + (61,43,1,1,0,NULL,'(707) 612-4695',NULL,'7076124695',2), + (62,43,1,0,0,NULL,'(663) 789-3427',NULL,'6637893427',1), + (63,26,1,1,0,NULL,'(309) 627-1147',NULL,'3096271147',1), + (64,47,1,1,0,NULL,'(642) 688-2943',NULL,'6426882943',2), + (65,49,1,1,0,NULL,'(447) 433-4142',NULL,'4474334142',2), + (66,49,1,0,0,NULL,'(866) 645-1422',NULL,'8666451422',1), + (67,108,1,1,0,NULL,'641-3393',NULL,'6413393',2), + (68,108,1,0,0,NULL,'(564) 851-4988',NULL,'5648514988',1), + (69,6,1,1,0,NULL,'(658) 582-9878',NULL,'6585829878',1), + (70,41,1,1,0,NULL,'(652) 656-9886',NULL,'6526569886',2), + (71,2,1,1,0,NULL,'828-5357',NULL,'8285357',2), + (72,58,1,1,0,NULL,'251-1360',NULL,'2511360',1), + (73,135,1,1,0,NULL,'(495) 674-9964',NULL,'4956749964',2), + (74,80,1,1,0,NULL,'772-3601',NULL,'7723601',1), + (75,80,1,0,0,NULL,'809-1027',NULL,'8091027',1), + (76,154,1,1,0,NULL,'252-2492',NULL,'2522492',2), + (77,154,1,0,0,NULL,'870-8493',NULL,'8708493',2), + (78,62,1,1,0,NULL,'650-7739',NULL,'6507739',1), + (79,62,1,0,0,NULL,'(427) 340-8107',NULL,'4273408107',1), + (80,118,1,1,0,NULL,'(470) 738-3752',NULL,'4707383752',2), + (81,75,1,1,0,NULL,'823-7712',NULL,'8237712',1), + (82,75,1,0,0,NULL,'(868) 354-1311',NULL,'8683541311',2), + (83,76,1,1,0,NULL,'(828) 478-2269',NULL,'8284782269',2), + (84,126,1,1,0,NULL,'(492) 420-5988',NULL,'4924205988',1), + (85,126,1,0,0,NULL,'260-7791',NULL,'2607791',2), + (86,65,1,1,0,NULL,'482-5795',NULL,'4825795',1), + (87,51,1,1,0,NULL,'244-5193',NULL,'2445193',2), + (88,110,1,1,0,NULL,'590-2937',NULL,'5902937',1), + (89,71,1,1,0,NULL,'(558) 253-3817',NULL,'5582533817',2), + (90,143,1,1,0,NULL,'(891) 382-6419',NULL,'8913826419',2), + (91,143,1,0,0,NULL,'636-9447',NULL,'6369447',2), + (92,170,1,1,0,NULL,'(790) 506-5718',NULL,'7905065718',1), + (93,170,1,0,0,NULL,'702-7150',NULL,'7027150',1), + (94,50,1,1,0,NULL,'660-3014',NULL,'6603014',2), + (95,50,1,0,0,NULL,'(782) 654-5982',NULL,'7826545982',1), + (96,97,1,1,0,NULL,'(384) 693-3280',NULL,'3846933280',1), + (97,60,1,1,0,NULL,'682-4919',NULL,'6824919',1), + (98,64,1,1,0,NULL,'(735) 487-9999',NULL,'7354879999',2), + (99,186,1,1,0,NULL,'493-8511',NULL,'4938511',1), + (100,186,1,0,0,NULL,'433-9361',NULL,'4339361',2), + (101,150,1,1,0,NULL,'360-4596',NULL,'3604596',2), + (102,5,1,1,0,NULL,'(638) 785-6912',NULL,'6387856912',1), + (103,201,1,1,0,NULL,'(760) 819-8922',NULL,'7608198922',2), + (104,201,1,0,0,NULL,'(494) 728-8846',NULL,'4947288846',1), + (105,113,1,1,0,NULL,'247-1431',NULL,'2471431',1), + (106,113,1,0,0,NULL,'611-3033',NULL,'6113033',2), + (107,19,1,1,0,NULL,'860-9848',NULL,'8609848',1), + (108,19,1,0,0,NULL,'(848) 430-7570',NULL,'8484307570',1), + (109,178,1,1,0,NULL,'459-2661',NULL,'4592661',1), + (110,178,1,0,0,NULL,'894-7318',NULL,'8947318',1), + (111,52,1,1,0,NULL,'(231) 690-1801',NULL,'2316901801',2), + (112,40,1,1,0,NULL,'(791) 321-6272',NULL,'7913216272',2), + (113,117,1,1,0,NULL,'459-1946',NULL,'4591946',1), + (114,140,1,1,0,NULL,'338-2426',NULL,'3382426',1), + (115,82,1,1,0,NULL,'(595) 428-8192',NULL,'5954288192',2), + (116,89,1,1,0,NULL,'473-4488',NULL,'4734488',1), + (117,181,1,1,0,NULL,'897-2913',NULL,'8972913',2), + (118,181,1,0,0,NULL,'(504) 873-7390',NULL,'5048737390',2), + (119,21,1,1,0,NULL,'(740) 460-8963',NULL,'7404608963',1), + (120,21,1,0,0,NULL,'(645) 799-9388',NULL,'6457999388',2), + (121,155,1,1,0,NULL,'(857) 672-6525',NULL,'8576726525',1), + (122,164,1,1,0,NULL,'(737) 457-3013',NULL,'7374573013',1), + (123,164,1,0,0,NULL,'703-4273',NULL,'7034273',1), + (124,11,1,1,0,NULL,'502-7650',NULL,'5027650',1), + (125,11,1,0,0,NULL,'763-9525',NULL,'7639525',1), + (126,29,1,1,0,NULL,'(810) 529-9427',NULL,'8105299427',2), + (127,187,1,1,0,NULL,'344-6848',NULL,'3446848',1), + (128,187,1,0,0,NULL,'282-5921',NULL,'2825921',2), + (129,112,1,1,0,NULL,'(359) 861-5146',NULL,'3598615146',1), + (130,112,1,0,0,NULL,'(331) 840-3846',NULL,'3318403846',1), + (131,198,1,1,0,NULL,'649-7056',NULL,'6497056',2), + (132,198,1,0,0,NULL,'355-6048',NULL,'3556048',2), + (133,196,1,1,0,NULL,'(816) 302-6487',NULL,'8163026487',2), + (134,196,1,0,0,NULL,'263-6330',NULL,'2636330',1), + (135,151,1,1,0,NULL,'(628) 382-1932',NULL,'6283821932',2), + (136,151,1,0,0,NULL,'508-1410',NULL,'5081410',2), + (137,106,1,1,0,NULL,'(702) 360-4503',NULL,'7023604503',2), + (138,106,1,0,0,NULL,'(449) 717-3937',NULL,'4497173937',1), + (139,45,1,1,0,NULL,'(438) 344-7110',NULL,'4383447110',2), + (140,137,1,1,0,NULL,'(869) 754-1264',NULL,'8697541264',2), + (141,137,1,0,0,NULL,'726-4449',NULL,'7264449',2), + (142,145,1,1,0,NULL,'(875) 541-8563',NULL,'8755418563',1), + (143,92,1,1,0,NULL,'730-3859',NULL,'7303859',2), + (144,92,1,0,0,NULL,'874-2521',NULL,'8742521',2), + (145,161,1,1,0,NULL,'248-3399',NULL,'2483399',2), + (146,160,1,1,0,NULL,'(302) 633-4648',NULL,'3026334648',1), + (147,160,1,0,0,NULL,'316-7107',NULL,'3167107',1), + (148,168,1,1,0,NULL,'470-7329',NULL,'4707329',1), + (149,101,1,1,0,NULL,'653-1218',NULL,'6531218',1), + (150,46,1,1,0,NULL,'(405) 577-4146',NULL,'4055774146',2), + (151,22,1,1,0,NULL,'730-3580',NULL,'7303580',2), + (152,177,1,1,0,NULL,'(636) 424-8033',NULL,'6364248033',1), + (153,177,1,0,0,NULL,'305-9079',NULL,'3059079',2), + (154,31,1,1,0,NULL,'(410) 239-4812',NULL,'4102394812',1), + (155,93,1,1,0,NULL,'(772) 745-3128',NULL,'7727453128',2), + (156,197,1,1,0,NULL,'(307) 595-2871',NULL,'3075952871',1), + (157,144,1,1,0,NULL,'(798) 645-5347',NULL,'7986455347',2), + (158,159,1,1,0,NULL,'(808) 423-9146',NULL,'8084239146',1), + (159,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), + (160,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), + (161,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -7026,7 +7033,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_print_label` WRITE; /*!40000 ALTER TABLE `civicrm_print_label` DISABLE KEYS */; INSERT INTO `civicrm_print_label` (`id`, `title`, `name`, `description`, `label_format_name`, `label_type_id`, `data`, `is_default`, `is_active`, `is_reserved`, `created_id`) VALUES - (1,'Annual Conference Hanging Badge (Avery 5395)','Annual_Conference_Hanging_Badge','For our annual conference','Avery 5395',1,'{\"title\":\"Annual Conference Hanging Badge (Avery 5395)\",\"label_format_name\":\"Avery 5395\",\"description\":\"For our annual conference\",\"token\":{\"1\":\"{event.title}\",\"2\":\"{contact.display_name}\",\"3\":\"{contact.current_employer}\",\"4\":\"{event.start_date}\"},\"font_name\":{\"1\":\"dejavusans\",\"2\":\"dejavusans\",\"3\":\"dejavusans\",\"4\":\"dejavusans\"},\"font_size\":{\"1\":\"9\",\"2\":\"20\",\"3\":\"15\",\"4\":\"9\"},\"font_style\":{\"1\":\"\",\"2\":\"\",\"3\":\"\",\"4\":\"\"},\"text_alignment\":{\"1\":\"L\",\"2\":\"C\",\"3\":\"C\",\"4\":\"R\"},\"barcode_type\":\"barcode\",\"barcode_alignment\":\"R\",\"image_1\":\"\",\"image_2\":\"\",\"is_default\":\"1\",\"is_active\":\"1\",\"is_reserved\":\"1\",\"_qf_default\":\"Layout:next\",\"_qf_Layout_refresh\":\"Save and Preview\"}',1,1,1,NULL); + (1,'Annual Conference Hanging Badge (Avery 5395)','Annual_Conference_Hanging_Badge','For our annual conference','Avery 5395',1,'{\"title\":\"Annual Conference Hanging Badge (Avery 5395)\",\"label_format_name\":\"Avery 5395\",\"description\":\"For our annual conference\",\"token\":{\"1\":\"{event.title}\",\"2\":\"{contact.display_name}\",\"3\":\"{contact.current_employer}\",\"4\":\"{event.start_date|crmDate:\"%B %E%f\"}\"},\"font_name\":{\"1\":\"dejavusans\",\"2\":\"dejavusans\",\"3\":\"dejavusans\",\"4\":\"dejavusans\"},\"font_size\":{\"1\":\"9\",\"2\":\"20\",\"3\":\"15\",\"4\":\"9\"},\"font_style\":{\"1\":\"\",\"2\":\"\",\"3\":\"\",\"4\":\"\"},\"text_alignment\":{\"1\":\"L\",\"2\":\"C\",\"3\":\"C\",\"4\":\"R\"},\"barcode_type\":\"barcode\",\"barcode_alignment\":\"R\",\"image_1\":\"\",\"image_2\":\"\",\"is_default\":\"1\",\"is_active\":\"1\",\"is_reserved\":\"1\",\"_qf_default\":\"Layout:next\",\"_qf_Layout_refresh\":\"Save and Preview\"}',1,1,1,NULL); /*!40000 ALTER TABLE `civicrm_print_label` ENABLE KEYS */; UNLOCK TABLES; @@ -7066,221 +7073,223 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship` WRITE; /*!40000 ALTER TABLE `civicrm_relationship` DISABLE KEYS */; INSERT INTO `civicrm_relationship` (`id`, `contact_id_a`, `contact_id_b`, `relationship_type_id`, `start_date`, `end_date`, `is_active`, `description`, `is_permission_a_b`, `is_permission_b_a`, `case_id`) VALUES - (1,72,145,1,NULL,NULL,1,NULL,0,0,NULL), - (2,18,145,1,NULL,NULL,1,NULL,0,0,NULL), - (3,72,161,1,NULL,NULL,1,NULL,0,0,NULL), - (4,18,161,1,NULL,NULL,1,NULL,0,0,NULL), - (5,18,72,4,NULL,NULL,1,NULL,0,0,NULL), - (6,161,26,8,NULL,NULL,1,NULL,0,0,NULL), - (7,72,26,8,NULL,NULL,1,NULL,0,0,NULL), - (8,18,26,8,NULL,NULL,1,NULL,0,0,NULL), - (9,145,26,7,NULL,NULL,1,NULL,0,0,NULL), - (10,161,145,2,NULL,NULL,1,NULL,0,0,NULL), - (11,95,101,1,NULL,NULL,1,NULL,0,0,NULL), - (12,124,101,1,NULL,NULL,1,NULL,0,0,NULL), - (13,95,192,1,NULL,NULL,1,NULL,0,0,NULL), - (14,124,192,1,NULL,NULL,1,NULL,0,0,NULL), - (15,124,95,4,NULL,NULL,1,NULL,0,0,NULL), - (16,192,135,8,NULL,NULL,1,NULL,0,0,NULL), - (17,95,135,8,NULL,NULL,1,NULL,0,0,NULL), - (18,124,135,8,NULL,NULL,1,NULL,0,0,NULL), - (19,101,135,7,NULL,NULL,1,NULL,0,0,NULL), - (20,192,101,2,NULL,NULL,1,NULL,0,0,NULL), - (21,62,96,1,NULL,NULL,1,NULL,0,0,NULL), - (22,148,96,1,NULL,NULL,1,NULL,0,0,NULL), - (23,62,79,1,NULL,NULL,1,NULL,0,0,NULL), - (24,148,79,1,NULL,NULL,1,NULL,0,0,NULL), - (25,148,62,4,NULL,NULL,1,NULL,0,0,NULL), - (26,79,28,8,NULL,NULL,1,NULL,0,0,NULL), - (27,62,28,8,NULL,NULL,1,NULL,0,0,NULL), - (28,148,28,8,NULL,NULL,1,NULL,0,0,NULL), - (29,96,28,7,NULL,NULL,0,NULL,0,0,NULL), - (30,79,96,2,NULL,NULL,0,NULL,0,0,NULL), - (31,16,3,1,NULL,NULL,1,NULL,0,0,NULL), - (32,122,3,1,NULL,NULL,1,NULL,0,0,NULL), - (33,16,150,1,NULL,NULL,1,NULL,0,0,NULL), - (34,122,150,1,NULL,NULL,1,NULL,0,0,NULL), - (35,122,16,4,NULL,NULL,1,NULL,0,0,NULL), - (36,150,7,8,NULL,NULL,1,NULL,0,0,NULL), - (37,16,7,8,NULL,NULL,1,NULL,0,0,NULL), - (38,122,7,8,NULL,NULL,1,NULL,0,0,NULL), - (39,3,7,7,NULL,NULL,0,NULL,0,0,NULL), - (40,150,3,2,NULL,NULL,0,NULL,0,0,NULL), - (41,141,100,1,NULL,NULL,1,NULL,0,0,NULL), - (42,117,100,1,NULL,NULL,1,NULL,0,0,NULL), - (43,141,24,1,NULL,NULL,1,NULL,0,0,NULL), - (44,117,24,1,NULL,NULL,1,NULL,0,0,NULL), - (45,117,141,4,NULL,NULL,1,NULL,0,0,NULL), - (46,24,36,8,NULL,NULL,1,NULL,0,0,NULL), - (47,141,36,8,NULL,NULL,1,NULL,0,0,NULL), - (48,117,36,8,NULL,NULL,1,NULL,0,0,NULL), - (49,100,36,7,NULL,NULL,0,NULL,0,0,NULL), - (50,24,100,2,NULL,NULL,0,NULL,0,0,NULL), - (51,104,87,1,NULL,NULL,1,NULL,0,0,NULL), - (52,139,87,1,NULL,NULL,1,NULL,0,0,NULL), - (53,104,82,1,NULL,NULL,1,NULL,0,0,NULL), - (54,139,82,1,NULL,NULL,1,NULL,0,0,NULL), - (55,139,104,4,NULL,NULL,1,NULL,0,0,NULL), - (56,82,155,8,NULL,NULL,1,NULL,0,0,NULL), - (57,104,155,8,NULL,NULL,1,NULL,0,0,NULL), - (58,139,155,8,NULL,NULL,1,NULL,0,0,NULL), - (59,87,155,7,NULL,NULL,1,NULL,0,0,NULL), - (60,82,87,2,NULL,NULL,1,NULL,0,0,NULL), - (61,176,129,1,NULL,NULL,1,NULL,0,0,NULL), - (62,14,129,1,NULL,NULL,1,NULL,0,0,NULL), - (63,176,12,1,NULL,NULL,1,NULL,0,0,NULL), - (64,14,12,1,NULL,NULL,1,NULL,0,0,NULL), - (65,14,176,4,NULL,NULL,1,NULL,0,0,NULL), - (66,12,102,8,NULL,NULL,1,NULL,0,0,NULL), - (67,176,102,8,NULL,NULL,1,NULL,0,0,NULL), - (68,14,102,8,NULL,NULL,1,NULL,0,0,NULL), - (69,129,102,7,NULL,NULL,0,NULL,0,0,NULL), - (70,12,129,2,NULL,NULL,0,NULL,0,0,NULL), - (71,59,67,1,NULL,NULL,1,NULL,0,0,NULL), - (72,64,67,1,NULL,NULL,1,NULL,0,0,NULL), - (73,59,106,1,NULL,NULL,1,NULL,0,0,NULL), - (74,64,106,1,NULL,NULL,1,NULL,0,0,NULL), - (75,64,59,4,NULL,NULL,1,NULL,0,0,NULL), - (76,106,9,8,NULL,NULL,1,NULL,0,0,NULL), - (77,59,9,8,NULL,NULL,1,NULL,0,0,NULL), - (78,64,9,8,NULL,NULL,1,NULL,0,0,NULL), - (79,67,9,7,NULL,NULL,0,NULL,0,0,NULL), - (80,106,67,2,NULL,NULL,0,NULL,0,0,NULL), - (81,189,116,1,NULL,NULL,1,NULL,0,0,NULL), - (82,142,116,1,NULL,NULL,1,NULL,0,0,NULL), - (83,189,168,1,NULL,NULL,1,NULL,0,0,NULL), - (84,142,168,1,NULL,NULL,1,NULL,0,0,NULL), - (85,142,189,4,NULL,NULL,1,NULL,0,0,NULL), - (86,168,130,8,NULL,NULL,1,NULL,0,0,NULL), - (87,189,130,8,NULL,NULL,1,NULL,0,0,NULL), - (88,142,130,8,NULL,NULL,1,NULL,0,0,NULL), - (89,116,130,7,NULL,NULL,0,NULL,0,0,NULL), - (90,168,116,2,NULL,NULL,0,NULL,0,0,NULL), - (91,105,140,1,NULL,NULL,1,NULL,0,0,NULL), - (92,118,140,1,NULL,NULL,1,NULL,0,0,NULL), - (93,105,47,1,NULL,NULL,1,NULL,0,0,NULL), - (94,118,47,1,NULL,NULL,1,NULL,0,0,NULL), - (95,118,105,4,NULL,NULL,1,NULL,0,0,NULL), - (96,47,144,8,NULL,NULL,1,NULL,0,0,NULL), - (97,105,144,8,NULL,NULL,1,NULL,0,0,NULL), - (98,118,144,8,NULL,NULL,1,NULL,0,0,NULL), - (99,140,144,7,NULL,NULL,1,NULL,0,0,NULL), - (100,47,140,2,NULL,NULL,1,NULL,0,0,NULL), - (101,51,113,1,NULL,NULL,1,NULL,0,0,NULL), - (102,22,113,1,NULL,NULL,1,NULL,0,0,NULL), - (103,51,200,1,NULL,NULL,1,NULL,0,0,NULL), - (104,22,200,1,NULL,NULL,1,NULL,0,0,NULL), - (105,22,51,4,NULL,NULL,1,NULL,0,0,NULL), - (106,200,29,8,NULL,NULL,1,NULL,0,0,NULL), - (107,51,29,8,NULL,NULL,1,NULL,0,0,NULL), - (108,22,29,8,NULL,NULL,1,NULL,0,0,NULL), - (109,113,29,7,NULL,NULL,1,NULL,0,0,NULL), - (110,200,113,2,NULL,NULL,1,NULL,0,0,NULL), - (111,108,160,1,NULL,NULL,1,NULL,0,0,NULL), - (112,178,160,1,NULL,NULL,1,NULL,0,0,NULL), - (113,108,132,1,NULL,NULL,1,NULL,0,0,NULL), - (114,178,132,1,NULL,NULL,1,NULL,0,0,NULL), - (115,178,108,4,NULL,NULL,1,NULL,0,0,NULL), - (116,132,48,8,NULL,NULL,1,NULL,0,0,NULL), - (117,108,48,8,NULL,NULL,1,NULL,0,0,NULL), - (118,178,48,8,NULL,NULL,1,NULL,0,0,NULL), - (119,160,48,7,NULL,NULL,1,NULL,0,0,NULL), - (120,132,160,2,NULL,NULL,1,NULL,0,0,NULL), - (121,174,186,1,NULL,NULL,1,NULL,0,0,NULL), - (122,92,186,1,NULL,NULL,1,NULL,0,0,NULL), - (123,174,93,1,NULL,NULL,1,NULL,0,0,NULL), - (124,92,93,1,NULL,NULL,1,NULL,0,0,NULL), - (125,92,174,4,NULL,NULL,1,NULL,0,0,NULL), - (126,93,15,8,NULL,NULL,1,NULL,0,0,NULL), - (127,174,15,8,NULL,NULL,1,NULL,0,0,NULL), - (128,92,15,8,NULL,NULL,1,NULL,0,0,NULL), - (129,186,15,7,NULL,NULL,1,NULL,0,0,NULL), - (130,93,186,2,NULL,NULL,1,NULL,0,0,NULL), - (131,68,190,1,NULL,NULL,1,NULL,0,0,NULL), - (132,40,190,1,NULL,NULL,1,NULL,0,0,NULL), - (133,68,147,1,NULL,NULL,1,NULL,0,0,NULL), - (134,40,147,1,NULL,NULL,1,NULL,0,0,NULL), - (135,40,68,4,NULL,NULL,1,NULL,0,0,NULL), - (136,147,183,8,NULL,NULL,1,NULL,0,0,NULL), - (137,68,183,8,NULL,NULL,1,NULL,0,0,NULL), - (138,40,183,8,NULL,NULL,1,NULL,0,0,NULL), - (139,190,183,7,NULL,NULL,0,NULL,0,0,NULL), - (140,147,190,2,NULL,NULL,0,NULL,0,0,NULL), - (141,75,180,1,NULL,NULL,1,NULL,0,0,NULL), - (142,156,180,1,NULL,NULL,1,NULL,0,0,NULL), - (143,75,136,1,NULL,NULL,1,NULL,0,0,NULL), - (144,156,136,1,NULL,NULL,1,NULL,0,0,NULL), - (145,156,75,4,NULL,NULL,1,NULL,0,0,NULL), - (146,136,63,8,NULL,NULL,1,NULL,0,0,NULL), - (147,75,63,8,NULL,NULL,1,NULL,0,0,NULL), - (148,156,63,8,NULL,NULL,1,NULL,0,0,NULL), - (149,180,63,7,NULL,NULL,1,NULL,0,0,NULL), - (150,136,180,2,NULL,NULL,1,NULL,0,0,NULL), - (151,45,46,1,NULL,NULL,1,NULL,0,0,NULL), - (152,23,46,1,NULL,NULL,1,NULL,0,0,NULL), - (153,45,123,1,NULL,NULL,1,NULL,0,0,NULL), - (154,23,123,1,NULL,NULL,1,NULL,0,0,NULL), - (155,23,45,4,NULL,NULL,1,NULL,0,0,NULL), - (156,123,151,8,NULL,NULL,1,NULL,0,0,NULL), - (157,45,151,8,NULL,NULL,1,NULL,0,0,NULL), - (158,23,151,8,NULL,NULL,1,NULL,0,0,NULL), - (159,46,151,7,NULL,NULL,1,NULL,0,0,NULL), - (160,123,46,2,NULL,NULL,1,NULL,0,0,NULL), - (161,143,38,1,NULL,NULL,1,NULL,0,0,NULL), - (162,5,38,1,NULL,NULL,1,NULL,0,0,NULL), - (163,143,98,1,NULL,NULL,1,NULL,0,0,NULL), - (164,5,98,1,NULL,NULL,1,NULL,0,0,NULL), - (165,5,143,4,NULL,NULL,1,NULL,0,0,NULL), - (166,98,127,8,NULL,NULL,1,NULL,0,0,NULL), - (167,143,127,8,NULL,NULL,1,NULL,0,0,NULL), - (168,5,127,8,NULL,NULL,1,NULL,0,0,NULL), - (169,38,127,7,NULL,NULL,1,NULL,0,0,NULL), - (170,98,38,2,NULL,NULL,1,NULL,0,0,NULL), - (171,194,163,1,NULL,NULL,1,NULL,0,0,NULL), - (172,86,163,1,NULL,NULL,1,NULL,0,0,NULL), - (173,194,196,1,NULL,NULL,1,NULL,0,0,NULL), - (174,86,196,1,NULL,NULL,1,NULL,0,0,NULL), - (175,86,194,4,NULL,NULL,1,NULL,0,0,NULL), - (176,196,8,8,NULL,NULL,1,NULL,0,0,NULL), - (177,194,8,8,NULL,NULL,1,NULL,0,0,NULL), - (178,86,8,8,NULL,NULL,1,NULL,0,0,NULL), - (179,163,8,7,NULL,NULL,1,NULL,0,0,NULL), - (180,196,163,2,NULL,NULL,1,NULL,0,0,NULL), - (181,158,83,1,NULL,NULL,1,NULL,0,0,NULL), - (182,77,83,1,NULL,NULL,1,NULL,0,0,NULL), - (183,158,89,1,NULL,NULL,1,NULL,0,0,NULL), - (184,77,89,1,NULL,NULL,1,NULL,0,0,NULL), - (185,77,158,4,NULL,NULL,1,NULL,0,0,NULL), - (186,89,66,8,NULL,NULL,1,NULL,0,0,NULL), - (187,158,66,8,NULL,NULL,1,NULL,0,0,NULL), - (188,77,66,8,NULL,NULL,1,NULL,0,0,NULL), - (189,83,66,7,NULL,NULL,1,NULL,0,0,NULL), - (190,89,83,2,NULL,NULL,1,NULL,0,0,NULL), - (191,85,84,1,NULL,NULL,1,NULL,0,0,NULL), - (192,43,84,1,NULL,NULL,1,NULL,0,0,NULL), - (193,85,44,1,NULL,NULL,1,NULL,0,0,NULL), - (194,43,44,1,NULL,NULL,1,NULL,0,0,NULL), - (195,43,85,4,NULL,NULL,1,NULL,0,0,NULL), - (196,44,74,8,NULL,NULL,1,NULL,0,0,NULL), - (197,85,74,8,NULL,NULL,1,NULL,0,0,NULL), - (198,43,74,8,NULL,NULL,1,NULL,0,0,NULL), - (199,84,74,7,NULL,NULL,0,NULL,0,0,NULL), - (200,44,84,2,NULL,NULL,0,NULL,0,0,NULL), - (201,116,31,5,NULL,NULL,1,NULL,0,0,NULL), - (202,200,57,5,NULL,NULL,1,NULL,0,0,NULL), - (203,54,70,5,NULL,NULL,1,NULL,0,0,NULL), - (204,72,73,5,NULL,NULL,1,NULL,0,0,NULL), - (205,190,76,5,NULL,NULL,1,NULL,0,0,NULL), - (206,59,88,5,NULL,NULL,1,NULL,0,0,NULL), - (207,38,97,5,NULL,NULL,1,NULL,0,0,NULL), - (208,106,107,5,NULL,NULL,1,NULL,0,0,NULL), - (209,187,109,5,NULL,NULL,1,NULL,0,0,NULL), - (210,18,110,5,NULL,NULL,1,NULL,0,0,NULL), - (211,104,120,5,NULL,NULL,1,NULL,0,0,NULL), - (212,6,167,5,NULL,NULL,1,NULL,0,0,NULL), - (213,86,179,5,NULL,NULL,1,NULL,0,0,NULL), - (214,39,188,5,NULL,NULL,1,NULL,0,0,NULL), - (215,87,191,5,NULL,NULL,1,NULL,0,0,NULL); + (1,135,10,1,NULL,NULL,1,NULL,0,0,NULL), + (2,80,10,1,NULL,NULL,1,NULL,0,0,NULL), + (3,135,120,1,NULL,NULL,1,NULL,0,0,NULL), + (4,80,120,1,NULL,NULL,1,NULL,0,0,NULL), + (5,80,135,4,NULL,NULL,1,NULL,0,0,NULL), + (6,120,133,8,NULL,NULL,1,NULL,0,0,NULL), + (7,135,133,8,NULL,NULL,1,NULL,0,0,NULL), + (8,80,133,8,NULL,NULL,1,NULL,0,0,NULL), + (9,10,133,7,NULL,NULL,1,NULL,0,0,NULL), + (10,120,10,2,NULL,NULL,1,NULL,0,0,NULL), + (11,118,154,1,NULL,NULL,1,NULL,0,0,NULL), + (12,75,154,1,NULL,NULL,1,NULL,0,0,NULL), + (13,118,62,1,NULL,NULL,1,NULL,0,0,NULL), + (14,75,62,1,NULL,NULL,1,NULL,0,0,NULL), + (15,75,118,4,NULL,NULL,1,NULL,0,0,NULL), + (16,62,124,8,NULL,NULL,1,NULL,0,0,NULL), + (17,118,124,8,NULL,NULL,1,NULL,0,0,NULL), + (18,75,124,8,NULL,NULL,1,NULL,0,0,NULL), + (19,154,124,7,NULL,NULL,0,NULL,0,0,NULL), + (20,62,154,2,NULL,NULL,0,NULL,0,0,NULL), + (21,127,76,1,NULL,NULL,1,NULL,0,0,NULL), + (22,65,76,1,NULL,NULL,1,NULL,0,0,NULL), + (23,127,126,1,NULL,NULL,1,NULL,0,0,NULL), + (24,65,126,1,NULL,NULL,1,NULL,0,0,NULL), + (25,65,127,4,NULL,NULL,1,NULL,0,0,NULL), + (26,126,96,8,NULL,NULL,1,NULL,0,0,NULL), + (27,127,96,8,NULL,NULL,1,NULL,0,0,NULL), + (28,65,96,8,NULL,NULL,1,NULL,0,0,NULL), + (29,76,96,7,NULL,NULL,0,NULL,0,0,NULL), + (30,126,76,2,NULL,NULL,0,NULL,0,0,NULL), + (31,110,51,1,NULL,NULL,1,NULL,0,0,NULL), + (32,74,51,1,NULL,NULL,1,NULL,0,0,NULL), + (33,110,115,1,NULL,NULL,1,NULL,0,0,NULL), + (34,74,115,1,NULL,NULL,1,NULL,0,0,NULL), + (35,74,110,4,NULL,NULL,1,NULL,0,0,NULL), + (36,115,184,8,NULL,NULL,1,NULL,0,0,NULL), + (37,110,184,8,NULL,NULL,1,NULL,0,0,NULL), + (38,74,184,8,NULL,NULL,1,NULL,0,0,NULL), + (39,51,184,7,NULL,NULL,0,NULL,0,0,NULL), + (40,115,51,2,NULL,NULL,0,NULL,0,0,NULL), + (41,170,71,1,NULL,NULL,1,NULL,0,0,NULL), + (42,50,71,1,NULL,NULL,1,NULL,0,0,NULL), + (43,170,143,1,NULL,NULL,1,NULL,0,0,NULL), + (44,50,143,1,NULL,NULL,1,NULL,0,0,NULL), + (45,50,170,4,NULL,NULL,1,NULL,0,0,NULL), + (46,143,192,8,NULL,NULL,1,NULL,0,0,NULL), + (47,170,192,8,NULL,NULL,1,NULL,0,0,NULL), + (48,50,192,8,NULL,NULL,1,NULL,0,0,NULL), + (49,71,192,7,NULL,NULL,1,NULL,0,0,NULL), + (50,143,71,2,NULL,NULL,1,NULL,0,0,NULL), + (51,64,97,1,NULL,NULL,1,NULL,0,0,NULL), + (52,186,97,1,NULL,NULL,1,NULL,0,0,NULL), + (53,64,60,1,NULL,NULL,1,NULL,0,0,NULL), + (54,186,60,1,NULL,NULL,1,NULL,0,0,NULL), + (55,186,64,4,NULL,NULL,1,NULL,0,0,NULL), + (56,60,193,8,NULL,NULL,1,NULL,0,0,NULL), + (57,64,193,8,NULL,NULL,1,NULL,0,0,NULL), + (58,186,193,8,NULL,NULL,1,NULL,0,0,NULL), + (59,97,193,7,NULL,NULL,1,NULL,0,0,NULL), + (60,60,97,2,NULL,NULL,1,NULL,0,0,NULL), + (61,5,150,1,NULL,NULL,1,NULL,0,0,NULL), + (62,180,150,1,NULL,NULL,1,NULL,0,0,NULL), + (63,5,185,1,NULL,NULL,1,NULL,0,0,NULL), + (64,180,185,1,NULL,NULL,1,NULL,0,0,NULL), + (65,180,5,4,NULL,NULL,1,NULL,0,0,NULL), + (66,185,189,8,NULL,NULL,1,NULL,0,0,NULL), + (67,5,189,8,NULL,NULL,1,NULL,0,0,NULL), + (68,180,189,8,NULL,NULL,1,NULL,0,0,NULL), + (69,150,189,7,NULL,NULL,1,NULL,0,0,NULL), + (70,185,150,2,NULL,NULL,1,NULL,0,0,NULL), + (71,147,201,1,NULL,NULL,1,NULL,0,0,NULL), + (72,17,201,1,NULL,NULL,1,NULL,0,0,NULL), + (73,147,113,1,NULL,NULL,1,NULL,0,0,NULL), + (74,17,113,1,NULL,NULL,1,NULL,0,0,NULL), + (75,17,147,4,NULL,NULL,1,NULL,0,0,NULL), + (76,113,33,8,NULL,NULL,1,NULL,0,0,NULL), + (77,147,33,8,NULL,NULL,1,NULL,0,0,NULL), + (78,17,33,8,NULL,NULL,1,NULL,0,0,NULL), + (79,201,33,7,NULL,NULL,1,NULL,0,0,NULL), + (80,113,201,2,NULL,NULL,1,NULL,0,0,NULL), + (81,56,9,1,NULL,NULL,1,NULL,0,0,NULL), + (82,19,9,1,NULL,NULL,1,NULL,0,0,NULL), + (83,56,119,1,NULL,NULL,1,NULL,0,0,NULL), + (84,19,119,1,NULL,NULL,1,NULL,0,0,NULL), + (85,19,56,4,NULL,NULL,1,NULL,0,0,NULL), + (86,119,66,8,NULL,NULL,1,NULL,0,0,NULL), + (87,56,66,8,NULL,NULL,1,NULL,0,0,NULL), + (88,19,66,8,NULL,NULL,1,NULL,0,0,NULL), + (89,9,66,7,NULL,NULL,1,NULL,0,0,NULL), + (90,119,9,2,NULL,NULL,1,NULL,0,0,NULL), + (91,40,178,1,NULL,NULL,1,NULL,0,0,NULL), + (92,84,178,1,NULL,NULL,1,NULL,0,0,NULL), + (93,40,52,1,NULL,NULL,1,NULL,0,0,NULL), + (94,84,52,1,NULL,NULL,1,NULL,0,0,NULL), + (95,84,40,4,NULL,NULL,1,NULL,0,0,NULL), + (96,52,158,8,NULL,NULL,1,NULL,0,0,NULL), + (97,40,158,8,NULL,NULL,1,NULL,0,0,NULL), + (98,84,158,8,NULL,NULL,1,NULL,0,0,NULL), + (99,178,158,7,NULL,NULL,1,NULL,0,0,NULL), + (100,52,178,2,NULL,NULL,1,NULL,0,0,NULL), + (101,82,117,1,NULL,NULL,1,NULL,0,0,NULL), + (102,131,117,1,NULL,NULL,1,NULL,0,0,NULL), + (103,82,140,1,NULL,NULL,1,NULL,0,0,NULL), + (104,131,140,1,NULL,NULL,1,NULL,0,0,NULL), + (105,131,82,4,NULL,NULL,1,NULL,0,0,NULL), + (106,140,77,8,NULL,NULL,1,NULL,0,0,NULL), + (107,82,77,8,NULL,NULL,1,NULL,0,0,NULL), + (108,131,77,8,NULL,NULL,1,NULL,0,0,NULL), + (109,117,77,7,NULL,NULL,1,NULL,0,0,NULL), + (110,140,117,2,NULL,NULL,1,NULL,0,0,NULL), + (111,21,89,1,NULL,NULL,1,NULL,0,0,NULL), + (112,155,89,1,NULL,NULL,1,NULL,0,0,NULL), + (113,21,181,1,NULL,NULL,1,NULL,0,0,NULL), + (114,155,181,1,NULL,NULL,1,NULL,0,0,NULL), + (115,155,21,4,NULL,NULL,1,NULL,0,0,NULL), + (116,181,34,8,NULL,NULL,1,NULL,0,0,NULL), + (117,21,34,8,NULL,NULL,1,NULL,0,0,NULL), + (118,155,34,8,NULL,NULL,1,NULL,0,0,NULL), + (119,89,34,7,NULL,NULL,1,NULL,0,0,NULL), + (120,181,89,2,NULL,NULL,1,NULL,0,0,NULL), + (121,29,164,1,NULL,NULL,1,NULL,0,0,NULL), + (122,187,164,1,NULL,NULL,1,NULL,0,0,NULL), + (123,29,11,1,NULL,NULL,1,NULL,0,0,NULL), + (124,187,11,1,NULL,NULL,1,NULL,0,0,NULL), + (125,187,29,4,NULL,NULL,1,NULL,0,0,NULL), + (126,11,20,8,NULL,NULL,1,NULL,0,0,NULL), + (127,29,20,8,NULL,NULL,1,NULL,0,0,NULL), + (128,187,20,8,NULL,NULL,1,NULL,0,0,NULL), + (129,164,20,7,NULL,NULL,1,NULL,0,0,NULL), + (130,11,164,2,NULL,NULL,1,NULL,0,0,NULL), + (131,198,176,1,NULL,NULL,1,NULL,0,0,NULL), + (132,16,176,1,NULL,NULL,1,NULL,0,0,NULL), + (133,198,112,1,NULL,NULL,1,NULL,0,0,NULL), + (134,16,112,1,NULL,NULL,1,NULL,0,0,NULL), + (135,16,198,4,NULL,NULL,1,NULL,0,0,NULL), + (136,112,148,8,NULL,NULL,1,NULL,0,0,NULL), + (137,198,148,8,NULL,NULL,1,NULL,0,0,NULL), + (138,16,148,8,NULL,NULL,1,NULL,0,0,NULL), + (139,176,148,7,NULL,NULL,1,NULL,0,0,NULL), + (140,112,176,2,NULL,NULL,1,NULL,0,0,NULL), + (141,151,196,1,NULL,NULL,1,NULL,0,0,NULL), + (142,106,196,1,NULL,NULL,1,NULL,0,0,NULL), + (143,151,153,1,NULL,NULL,1,NULL,0,0,NULL), + (144,106,153,1,NULL,NULL,1,NULL,0,0,NULL), + (145,106,151,4,NULL,NULL,1,NULL,0,0,NULL), + (146,153,79,8,NULL,NULL,1,NULL,0,0,NULL), + (147,151,79,8,NULL,NULL,1,NULL,0,0,NULL), + (148,106,79,8,NULL,NULL,1,NULL,0,0,NULL), + (149,196,79,7,NULL,NULL,1,NULL,0,0,NULL), + (150,153,196,2,NULL,NULL,1,NULL,0,0,NULL), + (151,145,45,1,NULL,NULL,1,NULL,0,0,NULL), + (152,59,45,1,NULL,NULL,1,NULL,0,0,NULL), + (153,145,137,1,NULL,NULL,1,NULL,0,0,NULL), + (154,59,137,1,NULL,NULL,1,NULL,0,0,NULL), + (155,59,145,4,NULL,NULL,1,NULL,0,0,NULL), + (156,137,162,8,NULL,NULL,1,NULL,0,0,NULL), + (157,145,162,8,NULL,NULL,1,NULL,0,0,NULL), + (158,59,162,8,NULL,NULL,1,NULL,0,0,NULL), + (159,45,162,7,NULL,NULL,0,NULL,0,0,NULL), + (160,137,45,2,NULL,NULL,0,NULL,0,0,NULL), + (161,92,183,1,NULL,NULL,1,NULL,0,0,NULL), + (162,161,183,1,NULL,NULL,1,NULL,0,0,NULL), + (163,92,35,1,NULL,NULL,1,NULL,0,0,NULL), + (164,161,35,1,NULL,NULL,1,NULL,0,0,NULL), + (165,161,92,4,NULL,NULL,1,NULL,0,0,NULL), + (166,35,123,8,NULL,NULL,1,NULL,0,0,NULL), + (167,92,123,8,NULL,NULL,1,NULL,0,0,NULL), + (168,161,123,8,NULL,NULL,1,NULL,0,0,NULL), + (169,183,123,7,NULL,NULL,1,NULL,0,0,NULL), + (170,35,183,2,NULL,NULL,1,NULL,0,0,NULL), + (171,90,160,1,NULL,NULL,1,NULL,0,0,NULL), + (172,101,160,1,NULL,NULL,1,NULL,0,0,NULL), + (173,90,168,1,NULL,NULL,1,NULL,0,0,NULL), + (174,101,168,1,NULL,NULL,1,NULL,0,0,NULL), + (175,101,90,4,NULL,NULL,1,NULL,0,0,NULL), + (176,168,37,8,NULL,NULL,1,NULL,0,0,NULL), + (177,90,37,8,NULL,NULL,1,NULL,0,0,NULL), + (178,101,37,8,NULL,NULL,1,NULL,0,0,NULL), + (179,160,37,7,NULL,NULL,0,NULL,0,0,NULL), + (180,168,160,2,NULL,NULL,0,NULL,0,0,NULL), + (181,177,46,1,NULL,NULL,1,NULL,0,0,NULL), + (182,31,46,1,NULL,NULL,1,NULL,0,0,NULL), + (183,177,22,1,NULL,NULL,1,NULL,0,0,NULL), + (184,31,22,1,NULL,NULL,1,NULL,0,0,NULL), + (185,31,177,4,NULL,NULL,1,NULL,0,0,NULL), + (186,22,91,8,NULL,NULL,1,NULL,0,0,NULL), + (187,177,91,8,NULL,NULL,1,NULL,0,0,NULL), + (188,31,91,8,NULL,NULL,1,NULL,0,0,NULL), + (189,46,91,7,NULL,NULL,0,NULL,0,0,NULL), + (190,22,46,2,NULL,NULL,0,NULL,0,0,NULL), + (191,144,93,1,NULL,NULL,1,NULL,0,0,NULL), + (192,159,93,1,NULL,NULL,1,NULL,0,0,NULL), + (193,144,197,1,NULL,NULL,1,NULL,0,0,NULL), + (194,159,197,1,NULL,NULL,1,NULL,0,0,NULL), + (195,159,144,4,NULL,NULL,1,NULL,0,0,NULL), + (196,197,174,8,NULL,NULL,1,NULL,0,0,NULL), + (197,144,174,8,NULL,NULL,1,NULL,0,0,NULL), + (198,159,174,8,NULL,NULL,1,NULL,0,0,NULL), + (199,93,174,7,NULL,NULL,1,NULL,0,0,NULL), + (200,197,93,2,NULL,NULL,1,NULL,0,0,NULL), + (201,62,14,5,NULL,NULL,1,NULL,0,0,NULL), + (202,39,42,5,NULL,NULL,1,NULL,0,0,NULL), + (203,26,68,5,NULL,NULL,1,NULL,0,0,NULL), + (204,13,78,5,NULL,NULL,1,NULL,0,0,NULL), + (205,44,81,5,NULL,NULL,1,NULL,0,0,NULL), + (206,110,86,5,NULL,NULL,1,NULL,0,0,NULL), + (207,151,87,5,NULL,NULL,1,NULL,0,0,NULL), + (208,89,95,5,NULL,NULL,1,NULL,0,0,NULL), + (209,35,100,5,NULL,NULL,1,NULL,0,0,NULL), + (210,17,125,5,NULL,NULL,1,NULL,0,0,NULL), + (211,67,129,5,NULL,NULL,1,NULL,0,0,NULL), + (212,56,141,5,NULL,NULL,1,NULL,0,0,NULL), + (213,195,146,5,NULL,NULL,1,NULL,0,0,NULL), + (214,50,166,5,NULL,NULL,1,NULL,0,0,NULL), + (215,7,167,5,NULL,NULL,1,NULL,0,0,NULL), + (216,58,169,5,NULL,NULL,1,NULL,0,0,NULL), + (217,113,182,5,NULL,NULL,1,NULL,0,0,NULL); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -7291,436 +7300,440 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship_cache` WRITE; /*!40000 ALTER TABLE `civicrm_relationship_cache` DISABLE KEYS */; INSERT INTO `civicrm_relationship_cache` (`id`, `relationship_id`, `relationship_type_id`, `orientation`, `near_contact_id`, `near_relation`, `far_contact_id`, `far_relation`, `is_active`, `start_date`, `end_date`) VALUES - (1,1,1,'a_b',72,'Child of',145,'Parent of',1,NULL,NULL), - (2,1,1,'b_a',145,'Parent of',72,'Child of',1,NULL,NULL), - (3,2,1,'a_b',18,'Child of',145,'Parent of',1,NULL,NULL), - (4,2,1,'b_a',145,'Parent of',18,'Child of',1,NULL,NULL), - (5,3,1,'a_b',72,'Child of',161,'Parent of',1,NULL,NULL), - (6,3,1,'b_a',161,'Parent of',72,'Child of',1,NULL,NULL), - (7,4,1,'a_b',18,'Child of',161,'Parent of',1,NULL,NULL), - (8,4,1,'b_a',161,'Parent of',18,'Child of',1,NULL,NULL), - (9,5,4,'a_b',18,'Sibling of',72,'Sibling of',1,NULL,NULL), - (10,5,4,'b_a',72,'Sibling of',18,'Sibling of',1,NULL,NULL), - (11,6,8,'a_b',161,'Household Member of',26,'Household Member is',1,NULL,NULL), - (12,6,8,'b_a',26,'Household Member is',161,'Household Member of',1,NULL,NULL), - (13,7,8,'a_b',72,'Household Member of',26,'Household Member is',1,NULL,NULL), - (14,7,8,'b_a',26,'Household Member is',72,'Household Member of',1,NULL,NULL), - (15,8,8,'a_b',18,'Household Member of',26,'Household Member is',1,NULL,NULL), - (16,8,8,'b_a',26,'Household Member is',18,'Household Member of',1,NULL,NULL), - (17,9,7,'a_b',145,'Head of Household for',26,'Head of Household is',1,NULL,NULL), - (18,9,7,'b_a',26,'Head of Household is',145,'Head of Household for',1,NULL,NULL), - (19,10,2,'a_b',161,'Spouse of',145,'Spouse of',1,NULL,NULL), - (20,10,2,'b_a',145,'Spouse of',161,'Spouse of',1,NULL,NULL), - (21,11,1,'a_b',95,'Child of',101,'Parent of',1,NULL,NULL), - (22,11,1,'b_a',101,'Parent of',95,'Child of',1,NULL,NULL), - (23,12,1,'a_b',124,'Child of',101,'Parent of',1,NULL,NULL), - (24,12,1,'b_a',101,'Parent of',124,'Child of',1,NULL,NULL), - (25,13,1,'a_b',95,'Child of',192,'Parent of',1,NULL,NULL), - (26,13,1,'b_a',192,'Parent of',95,'Child of',1,NULL,NULL), - (27,14,1,'a_b',124,'Child of',192,'Parent of',1,NULL,NULL), - (28,14,1,'b_a',192,'Parent of',124,'Child of',1,NULL,NULL), - (29,15,4,'a_b',124,'Sibling of',95,'Sibling of',1,NULL,NULL), - (30,15,4,'b_a',95,'Sibling of',124,'Sibling of',1,NULL,NULL), - (31,16,8,'a_b',192,'Household Member of',135,'Household Member is',1,NULL,NULL), - (32,16,8,'b_a',135,'Household Member is',192,'Household Member of',1,NULL,NULL), - (33,17,8,'a_b',95,'Household Member of',135,'Household Member is',1,NULL,NULL), - (34,17,8,'b_a',135,'Household Member is',95,'Household Member of',1,NULL,NULL), - (35,18,8,'a_b',124,'Household Member of',135,'Household Member is',1,NULL,NULL), - (36,18,8,'b_a',135,'Household Member is',124,'Household Member of',1,NULL,NULL), - (37,19,7,'a_b',101,'Head of Household for',135,'Head of Household is',1,NULL,NULL), - (38,19,7,'b_a',135,'Head of Household is',101,'Head of Household for',1,NULL,NULL), - (39,20,2,'a_b',192,'Spouse of',101,'Spouse of',1,NULL,NULL), - (40,20,2,'b_a',101,'Spouse of',192,'Spouse of',1,NULL,NULL), - (41,21,1,'a_b',62,'Child of',96,'Parent of',1,NULL,NULL), - (42,21,1,'b_a',96,'Parent of',62,'Child of',1,NULL,NULL), - (43,22,1,'a_b',148,'Child of',96,'Parent of',1,NULL,NULL), - (44,22,1,'b_a',96,'Parent of',148,'Child of',1,NULL,NULL), - (45,23,1,'a_b',62,'Child of',79,'Parent of',1,NULL,NULL), - (46,23,1,'b_a',79,'Parent of',62,'Child of',1,NULL,NULL), - (47,24,1,'a_b',148,'Child of',79,'Parent of',1,NULL,NULL), - (48,24,1,'b_a',79,'Parent of',148,'Child of',1,NULL,NULL), - (49,25,4,'a_b',148,'Sibling of',62,'Sibling of',1,NULL,NULL), - (50,25,4,'b_a',62,'Sibling of',148,'Sibling of',1,NULL,NULL), - (51,26,8,'a_b',79,'Household Member of',28,'Household Member is',1,NULL,NULL), - (52,26,8,'b_a',28,'Household Member is',79,'Household Member of',1,NULL,NULL), - (53,27,8,'a_b',62,'Household Member of',28,'Household Member is',1,NULL,NULL), - (54,27,8,'b_a',28,'Household Member is',62,'Household Member of',1,NULL,NULL), - (55,28,8,'a_b',148,'Household Member of',28,'Household Member is',1,NULL,NULL), - (56,28,8,'b_a',28,'Household Member is',148,'Household Member of',1,NULL,NULL), - (57,29,7,'a_b',96,'Head of Household for',28,'Head of Household is',0,NULL,NULL), - (58,29,7,'b_a',28,'Head of Household is',96,'Head of Household for',0,NULL,NULL), - (59,30,2,'a_b',79,'Spouse of',96,'Spouse of',0,NULL,NULL), - (60,30,2,'b_a',96,'Spouse of',79,'Spouse of',0,NULL,NULL), - (61,31,1,'a_b',16,'Child of',3,'Parent of',1,NULL,NULL), - (62,31,1,'b_a',3,'Parent of',16,'Child of',1,NULL,NULL), - (63,32,1,'a_b',122,'Child of',3,'Parent of',1,NULL,NULL), - (64,32,1,'b_a',3,'Parent of',122,'Child of',1,NULL,NULL), - (65,33,1,'a_b',16,'Child of',150,'Parent of',1,NULL,NULL), - (66,33,1,'b_a',150,'Parent of',16,'Child of',1,NULL,NULL), - (67,34,1,'a_b',122,'Child of',150,'Parent of',1,NULL,NULL), - (68,34,1,'b_a',150,'Parent of',122,'Child of',1,NULL,NULL), - (69,35,4,'a_b',122,'Sibling of',16,'Sibling of',1,NULL,NULL), - (70,35,4,'b_a',16,'Sibling of',122,'Sibling of',1,NULL,NULL), - (71,36,8,'a_b',150,'Household Member of',7,'Household Member is',1,NULL,NULL), - (72,36,8,'b_a',7,'Household Member is',150,'Household Member of',1,NULL,NULL), - (73,37,8,'a_b',16,'Household Member of',7,'Household Member is',1,NULL,NULL), - (74,37,8,'b_a',7,'Household Member is',16,'Household Member of',1,NULL,NULL), - (75,38,8,'a_b',122,'Household Member of',7,'Household Member is',1,NULL,NULL), - (76,38,8,'b_a',7,'Household Member is',122,'Household Member of',1,NULL,NULL), - (77,39,7,'a_b',3,'Head of Household for',7,'Head of Household is',0,NULL,NULL), - (78,39,7,'b_a',7,'Head of Household is',3,'Head of Household for',0,NULL,NULL), - (79,40,2,'a_b',150,'Spouse of',3,'Spouse of',0,NULL,NULL), - (80,40,2,'b_a',3,'Spouse of',150,'Spouse of',0,NULL,NULL), - (81,41,1,'a_b',141,'Child of',100,'Parent of',1,NULL,NULL), - (82,41,1,'b_a',100,'Parent of',141,'Child of',1,NULL,NULL), - (83,42,1,'a_b',117,'Child of',100,'Parent of',1,NULL,NULL), - (84,42,1,'b_a',100,'Parent of',117,'Child of',1,NULL,NULL), - (85,43,1,'a_b',141,'Child of',24,'Parent of',1,NULL,NULL), - (86,43,1,'b_a',24,'Parent of',141,'Child of',1,NULL,NULL), - (87,44,1,'a_b',117,'Child of',24,'Parent of',1,NULL,NULL), - (88,44,1,'b_a',24,'Parent of',117,'Child of',1,NULL,NULL), - (89,45,4,'a_b',117,'Sibling of',141,'Sibling of',1,NULL,NULL), - (90,45,4,'b_a',141,'Sibling of',117,'Sibling of',1,NULL,NULL), - (91,46,8,'a_b',24,'Household Member of',36,'Household Member is',1,NULL,NULL), - (92,46,8,'b_a',36,'Household Member is',24,'Household Member of',1,NULL,NULL), - (93,47,8,'a_b',141,'Household Member of',36,'Household Member is',1,NULL,NULL), - (94,47,8,'b_a',36,'Household Member is',141,'Household Member of',1,NULL,NULL), - (95,48,8,'a_b',117,'Household Member of',36,'Household Member is',1,NULL,NULL), - (96,48,8,'b_a',36,'Household Member is',117,'Household Member of',1,NULL,NULL), - (97,49,7,'a_b',100,'Head of Household for',36,'Head of Household is',0,NULL,NULL), - (98,49,7,'b_a',36,'Head of Household is',100,'Head of Household for',0,NULL,NULL), - (99,50,2,'a_b',24,'Spouse of',100,'Spouse of',0,NULL,NULL), - (100,50,2,'b_a',100,'Spouse of',24,'Spouse of',0,NULL,NULL), - (101,51,1,'a_b',104,'Child of',87,'Parent of',1,NULL,NULL), - (102,51,1,'b_a',87,'Parent of',104,'Child of',1,NULL,NULL), - (103,52,1,'a_b',139,'Child of',87,'Parent of',1,NULL,NULL), - (104,52,1,'b_a',87,'Parent of',139,'Child of',1,NULL,NULL), - (105,53,1,'a_b',104,'Child of',82,'Parent of',1,NULL,NULL), - (106,53,1,'b_a',82,'Parent of',104,'Child of',1,NULL,NULL), - (107,54,1,'a_b',139,'Child of',82,'Parent of',1,NULL,NULL), - (108,54,1,'b_a',82,'Parent of',139,'Child of',1,NULL,NULL), - (109,55,4,'a_b',139,'Sibling of',104,'Sibling of',1,NULL,NULL), - (110,55,4,'b_a',104,'Sibling of',139,'Sibling of',1,NULL,NULL), - (111,56,8,'a_b',82,'Household Member of',155,'Household Member is',1,NULL,NULL), - (112,56,8,'b_a',155,'Household Member is',82,'Household Member of',1,NULL,NULL), - (113,57,8,'a_b',104,'Household Member of',155,'Household Member is',1,NULL,NULL), - (114,57,8,'b_a',155,'Household Member is',104,'Household Member of',1,NULL,NULL), - (115,58,8,'a_b',139,'Household Member of',155,'Household Member is',1,NULL,NULL), - (116,58,8,'b_a',155,'Household Member is',139,'Household Member of',1,NULL,NULL), - (117,59,7,'a_b',87,'Head of Household for',155,'Head of Household is',1,NULL,NULL), - (118,59,7,'b_a',155,'Head of Household is',87,'Head of Household for',1,NULL,NULL), - (119,60,2,'a_b',82,'Spouse of',87,'Spouse of',1,NULL,NULL), - (120,60,2,'b_a',87,'Spouse of',82,'Spouse of',1,NULL,NULL), - (121,61,1,'a_b',176,'Child of',129,'Parent of',1,NULL,NULL), - (122,61,1,'b_a',129,'Parent of',176,'Child of',1,NULL,NULL), - (123,62,1,'a_b',14,'Child of',129,'Parent of',1,NULL,NULL), - (124,62,1,'b_a',129,'Parent of',14,'Child of',1,NULL,NULL), - (125,63,1,'a_b',176,'Child of',12,'Parent of',1,NULL,NULL), - (126,63,1,'b_a',12,'Parent of',176,'Child of',1,NULL,NULL), - (127,64,1,'a_b',14,'Child of',12,'Parent of',1,NULL,NULL), - (128,64,1,'b_a',12,'Parent of',14,'Child of',1,NULL,NULL), - (129,65,4,'a_b',14,'Sibling of',176,'Sibling of',1,NULL,NULL), - (130,65,4,'b_a',176,'Sibling of',14,'Sibling of',1,NULL,NULL), - (131,66,8,'a_b',12,'Household Member of',102,'Household Member is',1,NULL,NULL), - (132,66,8,'b_a',102,'Household Member is',12,'Household Member of',1,NULL,NULL), - (133,67,8,'a_b',176,'Household Member of',102,'Household Member is',1,NULL,NULL), - (134,67,8,'b_a',102,'Household Member is',176,'Household Member of',1,NULL,NULL), - (135,68,8,'a_b',14,'Household Member of',102,'Household Member is',1,NULL,NULL), - (136,68,8,'b_a',102,'Household Member is',14,'Household Member of',1,NULL,NULL), - (137,69,7,'a_b',129,'Head of Household for',102,'Head of Household is',0,NULL,NULL), - (138,69,7,'b_a',102,'Head of Household is',129,'Head of Household for',0,NULL,NULL), - (139,70,2,'a_b',12,'Spouse of',129,'Spouse of',0,NULL,NULL), - (140,70,2,'b_a',129,'Spouse of',12,'Spouse of',0,NULL,NULL), - (141,71,1,'a_b',59,'Child of',67,'Parent of',1,NULL,NULL), - (142,71,1,'b_a',67,'Parent of',59,'Child of',1,NULL,NULL), - (143,72,1,'a_b',64,'Child of',67,'Parent of',1,NULL,NULL), - (144,72,1,'b_a',67,'Parent of',64,'Child of',1,NULL,NULL), - (145,73,1,'a_b',59,'Child of',106,'Parent of',1,NULL,NULL), - (146,73,1,'b_a',106,'Parent of',59,'Child of',1,NULL,NULL), - (147,74,1,'a_b',64,'Child of',106,'Parent of',1,NULL,NULL), - (148,74,1,'b_a',106,'Parent of',64,'Child of',1,NULL,NULL), - (149,75,4,'a_b',64,'Sibling of',59,'Sibling of',1,NULL,NULL), - (150,75,4,'b_a',59,'Sibling of',64,'Sibling of',1,NULL,NULL), - (151,76,8,'a_b',106,'Household Member of',9,'Household Member is',1,NULL,NULL), - (152,76,8,'b_a',9,'Household Member is',106,'Household Member of',1,NULL,NULL), - (153,77,8,'a_b',59,'Household Member of',9,'Household Member is',1,NULL,NULL), - (154,77,8,'b_a',9,'Household Member is',59,'Household Member of',1,NULL,NULL), - (155,78,8,'a_b',64,'Household Member of',9,'Household Member is',1,NULL,NULL), - (156,78,8,'b_a',9,'Household Member is',64,'Household Member of',1,NULL,NULL), - (157,79,7,'a_b',67,'Head of Household for',9,'Head of Household is',0,NULL,NULL), - (158,79,7,'b_a',9,'Head of Household is',67,'Head of Household for',0,NULL,NULL), - (159,80,2,'a_b',106,'Spouse of',67,'Spouse of',0,NULL,NULL), - (160,80,2,'b_a',67,'Spouse of',106,'Spouse of',0,NULL,NULL), - (161,81,1,'a_b',189,'Child of',116,'Parent of',1,NULL,NULL), - (162,81,1,'b_a',116,'Parent of',189,'Child of',1,NULL,NULL), - (163,82,1,'a_b',142,'Child of',116,'Parent of',1,NULL,NULL), - (164,82,1,'b_a',116,'Parent of',142,'Child of',1,NULL,NULL), - (165,83,1,'a_b',189,'Child of',168,'Parent of',1,NULL,NULL), - (166,83,1,'b_a',168,'Parent of',189,'Child of',1,NULL,NULL), - (167,84,1,'a_b',142,'Child of',168,'Parent of',1,NULL,NULL), - (168,84,1,'b_a',168,'Parent of',142,'Child of',1,NULL,NULL), - (169,85,4,'a_b',142,'Sibling of',189,'Sibling of',1,NULL,NULL), - (170,85,4,'b_a',189,'Sibling of',142,'Sibling of',1,NULL,NULL), - (171,86,8,'a_b',168,'Household Member of',130,'Household Member is',1,NULL,NULL), - (172,86,8,'b_a',130,'Household Member is',168,'Household Member of',1,NULL,NULL), - (173,87,8,'a_b',189,'Household Member of',130,'Household Member is',1,NULL,NULL), - (174,87,8,'b_a',130,'Household Member is',189,'Household Member of',1,NULL,NULL), - (175,88,8,'a_b',142,'Household Member of',130,'Household Member is',1,NULL,NULL), - (176,88,8,'b_a',130,'Household Member is',142,'Household Member of',1,NULL,NULL), - (177,89,7,'a_b',116,'Head of Household for',130,'Head of Household is',0,NULL,NULL), - (178,89,7,'b_a',130,'Head of Household is',116,'Head of Household for',0,NULL,NULL), - (179,90,2,'a_b',168,'Spouse of',116,'Spouse of',0,NULL,NULL), - (180,90,2,'b_a',116,'Spouse of',168,'Spouse of',0,NULL,NULL), - (181,91,1,'a_b',105,'Child of',140,'Parent of',1,NULL,NULL), - (182,91,1,'b_a',140,'Parent of',105,'Child of',1,NULL,NULL), - (183,92,1,'a_b',118,'Child of',140,'Parent of',1,NULL,NULL), - (184,92,1,'b_a',140,'Parent of',118,'Child of',1,NULL,NULL), - (185,93,1,'a_b',105,'Child of',47,'Parent of',1,NULL,NULL), - (186,93,1,'b_a',47,'Parent of',105,'Child of',1,NULL,NULL), - (187,94,1,'a_b',118,'Child of',47,'Parent of',1,NULL,NULL), - (188,94,1,'b_a',47,'Parent of',118,'Child of',1,NULL,NULL), - (189,95,4,'a_b',118,'Sibling of',105,'Sibling of',1,NULL,NULL), - (190,95,4,'b_a',105,'Sibling of',118,'Sibling of',1,NULL,NULL), - (191,96,8,'a_b',47,'Household Member of',144,'Household Member is',1,NULL,NULL), - (192,96,8,'b_a',144,'Household Member is',47,'Household Member of',1,NULL,NULL), - (193,97,8,'a_b',105,'Household Member of',144,'Household Member is',1,NULL,NULL), - (194,97,8,'b_a',144,'Household Member is',105,'Household Member of',1,NULL,NULL), - (195,98,8,'a_b',118,'Household Member of',144,'Household Member is',1,NULL,NULL), - (196,98,8,'b_a',144,'Household Member is',118,'Household Member of',1,NULL,NULL), - (197,99,7,'a_b',140,'Head of Household for',144,'Head of Household is',1,NULL,NULL), - (198,99,7,'b_a',144,'Head of Household is',140,'Head of Household for',1,NULL,NULL), - (199,100,2,'a_b',47,'Spouse of',140,'Spouse of',1,NULL,NULL), - (200,100,2,'b_a',140,'Spouse of',47,'Spouse of',1,NULL,NULL), - (201,101,1,'a_b',51,'Child of',113,'Parent of',1,NULL,NULL), - (202,101,1,'b_a',113,'Parent of',51,'Child of',1,NULL,NULL), - (203,102,1,'a_b',22,'Child of',113,'Parent of',1,NULL,NULL), - (204,102,1,'b_a',113,'Parent of',22,'Child of',1,NULL,NULL), - (205,103,1,'a_b',51,'Child of',200,'Parent of',1,NULL,NULL), - (206,103,1,'b_a',200,'Parent of',51,'Child of',1,NULL,NULL), - (207,104,1,'a_b',22,'Child of',200,'Parent of',1,NULL,NULL), - (208,104,1,'b_a',200,'Parent of',22,'Child of',1,NULL,NULL), - (209,105,4,'a_b',22,'Sibling of',51,'Sibling of',1,NULL,NULL), - (210,105,4,'b_a',51,'Sibling of',22,'Sibling of',1,NULL,NULL), - (211,106,8,'a_b',200,'Household Member of',29,'Household Member is',1,NULL,NULL), - (212,106,8,'b_a',29,'Household Member is',200,'Household Member of',1,NULL,NULL), - (213,107,8,'a_b',51,'Household Member of',29,'Household Member is',1,NULL,NULL), - (214,107,8,'b_a',29,'Household Member is',51,'Household Member of',1,NULL,NULL), - (215,108,8,'a_b',22,'Household Member of',29,'Household Member is',1,NULL,NULL), - (216,108,8,'b_a',29,'Household Member is',22,'Household Member of',1,NULL,NULL), - (217,109,7,'a_b',113,'Head of Household for',29,'Head of Household is',1,NULL,NULL), - (218,109,7,'b_a',29,'Head of Household is',113,'Head of Household for',1,NULL,NULL), - (219,110,2,'a_b',200,'Spouse of',113,'Spouse of',1,NULL,NULL), - (220,110,2,'b_a',113,'Spouse of',200,'Spouse of',1,NULL,NULL), - (221,111,1,'a_b',108,'Child of',160,'Parent of',1,NULL,NULL), - (222,111,1,'b_a',160,'Parent of',108,'Child of',1,NULL,NULL), - (223,112,1,'a_b',178,'Child of',160,'Parent of',1,NULL,NULL), - (224,112,1,'b_a',160,'Parent of',178,'Child of',1,NULL,NULL), - (225,113,1,'a_b',108,'Child of',132,'Parent of',1,NULL,NULL), - (226,113,1,'b_a',132,'Parent of',108,'Child of',1,NULL,NULL), - (227,114,1,'a_b',178,'Child of',132,'Parent of',1,NULL,NULL), - (228,114,1,'b_a',132,'Parent of',178,'Child of',1,NULL,NULL), - (229,115,4,'a_b',178,'Sibling of',108,'Sibling of',1,NULL,NULL), - (230,115,4,'b_a',108,'Sibling of',178,'Sibling of',1,NULL,NULL), - (231,116,8,'a_b',132,'Household Member of',48,'Household Member is',1,NULL,NULL), - (232,116,8,'b_a',48,'Household Member is',132,'Household Member of',1,NULL,NULL), - (233,117,8,'a_b',108,'Household Member of',48,'Household Member is',1,NULL,NULL), - (234,117,8,'b_a',48,'Household Member is',108,'Household Member of',1,NULL,NULL), - (235,118,8,'a_b',178,'Household Member of',48,'Household Member is',1,NULL,NULL), - (236,118,8,'b_a',48,'Household Member is',178,'Household Member of',1,NULL,NULL), - (237,119,7,'a_b',160,'Head of Household for',48,'Head of Household is',1,NULL,NULL), - (238,119,7,'b_a',48,'Head of Household is',160,'Head of Household for',1,NULL,NULL), - (239,120,2,'a_b',132,'Spouse of',160,'Spouse of',1,NULL,NULL), - (240,120,2,'b_a',160,'Spouse of',132,'Spouse of',1,NULL,NULL), - (241,121,1,'a_b',174,'Child of',186,'Parent of',1,NULL,NULL), - (242,121,1,'b_a',186,'Parent of',174,'Child of',1,NULL,NULL), - (243,122,1,'a_b',92,'Child of',186,'Parent of',1,NULL,NULL), - (244,122,1,'b_a',186,'Parent of',92,'Child of',1,NULL,NULL), - (245,123,1,'a_b',174,'Child of',93,'Parent of',1,NULL,NULL), - (246,123,1,'b_a',93,'Parent of',174,'Child of',1,NULL,NULL), - (247,124,1,'a_b',92,'Child of',93,'Parent of',1,NULL,NULL), - (248,124,1,'b_a',93,'Parent of',92,'Child of',1,NULL,NULL), - (249,125,4,'a_b',92,'Sibling of',174,'Sibling of',1,NULL,NULL), - (250,125,4,'b_a',174,'Sibling of',92,'Sibling of',1,NULL,NULL), - (251,126,8,'a_b',93,'Household Member of',15,'Household Member is',1,NULL,NULL), - (252,126,8,'b_a',15,'Household Member is',93,'Household Member of',1,NULL,NULL), - (253,127,8,'a_b',174,'Household Member of',15,'Household Member is',1,NULL,NULL), - (254,127,8,'b_a',15,'Household Member is',174,'Household Member of',1,NULL,NULL), - (255,128,8,'a_b',92,'Household Member of',15,'Household Member is',1,NULL,NULL), - (256,128,8,'b_a',15,'Household Member is',92,'Household Member of',1,NULL,NULL), - (257,129,7,'a_b',186,'Head of Household for',15,'Head of Household is',1,NULL,NULL), - (258,129,7,'b_a',15,'Head of Household is',186,'Head of Household for',1,NULL,NULL), - (259,130,2,'a_b',93,'Spouse of',186,'Spouse of',1,NULL,NULL), - (260,130,2,'b_a',186,'Spouse of',93,'Spouse of',1,NULL,NULL), - (261,131,1,'a_b',68,'Child of',190,'Parent of',1,NULL,NULL), - (262,131,1,'b_a',190,'Parent of',68,'Child of',1,NULL,NULL), - (263,132,1,'a_b',40,'Child of',190,'Parent of',1,NULL,NULL), - (264,132,1,'b_a',190,'Parent of',40,'Child of',1,NULL,NULL), - (265,133,1,'a_b',68,'Child of',147,'Parent of',1,NULL,NULL), - (266,133,1,'b_a',147,'Parent of',68,'Child of',1,NULL,NULL), - (267,134,1,'a_b',40,'Child of',147,'Parent of',1,NULL,NULL), - (268,134,1,'b_a',147,'Parent of',40,'Child of',1,NULL,NULL), - (269,135,4,'a_b',40,'Sibling of',68,'Sibling of',1,NULL,NULL), - (270,135,4,'b_a',68,'Sibling of',40,'Sibling of',1,NULL,NULL), - (271,136,8,'a_b',147,'Household Member of',183,'Household Member is',1,NULL,NULL), - (272,136,8,'b_a',183,'Household Member is',147,'Household Member of',1,NULL,NULL), - (273,137,8,'a_b',68,'Household Member of',183,'Household Member is',1,NULL,NULL), - (274,137,8,'b_a',183,'Household Member is',68,'Household Member of',1,NULL,NULL), - (275,138,8,'a_b',40,'Household Member of',183,'Household Member is',1,NULL,NULL), - (276,138,8,'b_a',183,'Household Member is',40,'Household Member of',1,NULL,NULL), - (277,139,7,'a_b',190,'Head of Household for',183,'Head of Household is',0,NULL,NULL), - (278,139,7,'b_a',183,'Head of Household is',190,'Head of Household for',0,NULL,NULL), - (279,140,2,'a_b',147,'Spouse of',190,'Spouse of',0,NULL,NULL), - (280,140,2,'b_a',190,'Spouse of',147,'Spouse of',0,NULL,NULL), - (281,141,1,'a_b',75,'Child of',180,'Parent of',1,NULL,NULL), - (282,141,1,'b_a',180,'Parent of',75,'Child of',1,NULL,NULL), - (283,142,1,'a_b',156,'Child of',180,'Parent of',1,NULL,NULL), - (284,142,1,'b_a',180,'Parent of',156,'Child of',1,NULL,NULL), - (285,143,1,'a_b',75,'Child of',136,'Parent of',1,NULL,NULL), - (286,143,1,'b_a',136,'Parent of',75,'Child of',1,NULL,NULL), - (287,144,1,'a_b',156,'Child of',136,'Parent of',1,NULL,NULL), - (288,144,1,'b_a',136,'Parent of',156,'Child of',1,NULL,NULL), - (289,145,4,'a_b',156,'Sibling of',75,'Sibling of',1,NULL,NULL), - (290,145,4,'b_a',75,'Sibling of',156,'Sibling of',1,NULL,NULL), - (291,146,8,'a_b',136,'Household Member of',63,'Household Member is',1,NULL,NULL), - (292,146,8,'b_a',63,'Household Member is',136,'Household Member of',1,NULL,NULL), - (293,147,8,'a_b',75,'Household Member of',63,'Household Member is',1,NULL,NULL), - (294,147,8,'b_a',63,'Household Member is',75,'Household Member of',1,NULL,NULL), - (295,148,8,'a_b',156,'Household Member of',63,'Household Member is',1,NULL,NULL), - (296,148,8,'b_a',63,'Household Member is',156,'Household Member of',1,NULL,NULL), - (297,149,7,'a_b',180,'Head of Household for',63,'Head of Household is',1,NULL,NULL), - (298,149,7,'b_a',63,'Head of Household is',180,'Head of Household for',1,NULL,NULL), - (299,150,2,'a_b',136,'Spouse of',180,'Spouse of',1,NULL,NULL), - (300,150,2,'b_a',180,'Spouse of',136,'Spouse of',1,NULL,NULL), - (301,151,1,'a_b',45,'Child of',46,'Parent of',1,NULL,NULL), - (302,151,1,'b_a',46,'Parent of',45,'Child of',1,NULL,NULL), - (303,152,1,'a_b',23,'Child of',46,'Parent of',1,NULL,NULL), - (304,152,1,'b_a',46,'Parent of',23,'Child of',1,NULL,NULL), - (305,153,1,'a_b',45,'Child of',123,'Parent of',1,NULL,NULL), - (306,153,1,'b_a',123,'Parent of',45,'Child of',1,NULL,NULL), - (307,154,1,'a_b',23,'Child of',123,'Parent of',1,NULL,NULL), - (308,154,1,'b_a',123,'Parent of',23,'Child of',1,NULL,NULL), - (309,155,4,'a_b',23,'Sibling of',45,'Sibling of',1,NULL,NULL), - (310,155,4,'b_a',45,'Sibling of',23,'Sibling of',1,NULL,NULL), - (311,156,8,'a_b',123,'Household Member of',151,'Household Member is',1,NULL,NULL), - (312,156,8,'b_a',151,'Household Member is',123,'Household Member of',1,NULL,NULL), - (313,157,8,'a_b',45,'Household Member of',151,'Household Member is',1,NULL,NULL), - (314,157,8,'b_a',151,'Household Member is',45,'Household Member of',1,NULL,NULL), - (315,158,8,'a_b',23,'Household Member of',151,'Household Member is',1,NULL,NULL), - (316,158,8,'b_a',151,'Household Member is',23,'Household Member of',1,NULL,NULL), - (317,159,7,'a_b',46,'Head of Household for',151,'Head of Household is',1,NULL,NULL), - (318,159,7,'b_a',151,'Head of Household is',46,'Head of Household for',1,NULL,NULL), - (319,160,2,'a_b',123,'Spouse of',46,'Spouse of',1,NULL,NULL), - (320,160,2,'b_a',46,'Spouse of',123,'Spouse of',1,NULL,NULL), - (321,161,1,'a_b',143,'Child of',38,'Parent of',1,NULL,NULL), - (322,161,1,'b_a',38,'Parent of',143,'Child of',1,NULL,NULL), - (323,162,1,'a_b',5,'Child of',38,'Parent of',1,NULL,NULL), - (324,162,1,'b_a',38,'Parent of',5,'Child of',1,NULL,NULL), - (325,163,1,'a_b',143,'Child of',98,'Parent of',1,NULL,NULL), - (326,163,1,'b_a',98,'Parent of',143,'Child of',1,NULL,NULL), - (327,164,1,'a_b',5,'Child of',98,'Parent of',1,NULL,NULL), - (328,164,1,'b_a',98,'Parent of',5,'Child of',1,NULL,NULL), - (329,165,4,'a_b',5,'Sibling of',143,'Sibling of',1,NULL,NULL), - (330,165,4,'b_a',143,'Sibling of',5,'Sibling of',1,NULL,NULL), - (331,166,8,'a_b',98,'Household Member of',127,'Household Member is',1,NULL,NULL), - (332,166,8,'b_a',127,'Household Member is',98,'Household Member of',1,NULL,NULL), - (333,167,8,'a_b',143,'Household Member of',127,'Household Member is',1,NULL,NULL), - (334,167,8,'b_a',127,'Household Member is',143,'Household Member of',1,NULL,NULL), - (335,168,8,'a_b',5,'Household Member of',127,'Household Member is',1,NULL,NULL), - (336,168,8,'b_a',127,'Household Member is',5,'Household Member of',1,NULL,NULL), - (337,169,7,'a_b',38,'Head of Household for',127,'Head of Household is',1,NULL,NULL), - (338,169,7,'b_a',127,'Head of Household is',38,'Head of Household for',1,NULL,NULL), - (339,170,2,'a_b',98,'Spouse of',38,'Spouse of',1,NULL,NULL), - (340,170,2,'b_a',38,'Spouse of',98,'Spouse of',1,NULL,NULL), - (341,171,1,'a_b',194,'Child of',163,'Parent of',1,NULL,NULL), - (342,171,1,'b_a',163,'Parent of',194,'Child of',1,NULL,NULL), - (343,172,1,'a_b',86,'Child of',163,'Parent of',1,NULL,NULL), - (344,172,1,'b_a',163,'Parent of',86,'Child of',1,NULL,NULL), - (345,173,1,'a_b',194,'Child of',196,'Parent of',1,NULL,NULL), - (346,173,1,'b_a',196,'Parent of',194,'Child of',1,NULL,NULL), - (347,174,1,'a_b',86,'Child of',196,'Parent of',1,NULL,NULL), - (348,174,1,'b_a',196,'Parent of',86,'Child of',1,NULL,NULL), - (349,175,4,'a_b',86,'Sibling of',194,'Sibling of',1,NULL,NULL), - (350,175,4,'b_a',194,'Sibling of',86,'Sibling of',1,NULL,NULL), - (351,176,8,'a_b',196,'Household Member of',8,'Household Member is',1,NULL,NULL), - (352,176,8,'b_a',8,'Household Member is',196,'Household Member of',1,NULL,NULL), - (353,177,8,'a_b',194,'Household Member of',8,'Household Member is',1,NULL,NULL), - (354,177,8,'b_a',8,'Household Member is',194,'Household Member of',1,NULL,NULL), - (355,178,8,'a_b',86,'Household Member of',8,'Household Member is',1,NULL,NULL), - (356,178,8,'b_a',8,'Household Member is',86,'Household Member of',1,NULL,NULL), - (357,179,7,'a_b',163,'Head of Household for',8,'Head of Household is',1,NULL,NULL), - (358,179,7,'b_a',8,'Head of Household is',163,'Head of Household for',1,NULL,NULL), - (359,180,2,'a_b',196,'Spouse of',163,'Spouse of',1,NULL,NULL), - (360,180,2,'b_a',163,'Spouse of',196,'Spouse of',1,NULL,NULL), - (361,181,1,'a_b',158,'Child of',83,'Parent of',1,NULL,NULL), - (362,181,1,'b_a',83,'Parent of',158,'Child of',1,NULL,NULL), - (363,182,1,'a_b',77,'Child of',83,'Parent of',1,NULL,NULL), - (364,182,1,'b_a',83,'Parent of',77,'Child of',1,NULL,NULL), - (365,183,1,'a_b',158,'Child of',89,'Parent of',1,NULL,NULL), - (366,183,1,'b_a',89,'Parent of',158,'Child of',1,NULL,NULL), - (367,184,1,'a_b',77,'Child of',89,'Parent of',1,NULL,NULL), - (368,184,1,'b_a',89,'Parent of',77,'Child of',1,NULL,NULL), - (369,185,4,'a_b',77,'Sibling of',158,'Sibling of',1,NULL,NULL), - (370,185,4,'b_a',158,'Sibling of',77,'Sibling of',1,NULL,NULL), - (371,186,8,'a_b',89,'Household Member of',66,'Household Member is',1,NULL,NULL), - (372,186,8,'b_a',66,'Household Member is',89,'Household Member of',1,NULL,NULL), - (373,187,8,'a_b',158,'Household Member of',66,'Household Member is',1,NULL,NULL), - (374,187,8,'b_a',66,'Household Member is',158,'Household Member of',1,NULL,NULL), - (375,188,8,'a_b',77,'Household Member of',66,'Household Member is',1,NULL,NULL), - (376,188,8,'b_a',66,'Household Member is',77,'Household Member of',1,NULL,NULL), - (377,189,7,'a_b',83,'Head of Household for',66,'Head of Household is',1,NULL,NULL), - (378,189,7,'b_a',66,'Head of Household is',83,'Head of Household for',1,NULL,NULL), - (379,190,2,'a_b',89,'Spouse of',83,'Spouse of',1,NULL,NULL), - (380,190,2,'b_a',83,'Spouse of',89,'Spouse of',1,NULL,NULL), - (381,191,1,'a_b',85,'Child of',84,'Parent of',1,NULL,NULL), - (382,191,1,'b_a',84,'Parent of',85,'Child of',1,NULL,NULL), - (383,192,1,'a_b',43,'Child of',84,'Parent of',1,NULL,NULL), - (384,192,1,'b_a',84,'Parent of',43,'Child of',1,NULL,NULL), - (385,193,1,'a_b',85,'Child of',44,'Parent of',1,NULL,NULL), - (386,193,1,'b_a',44,'Parent of',85,'Child of',1,NULL,NULL), - (387,194,1,'a_b',43,'Child of',44,'Parent of',1,NULL,NULL), - (388,194,1,'b_a',44,'Parent of',43,'Child of',1,NULL,NULL), - (389,195,4,'a_b',43,'Sibling of',85,'Sibling of',1,NULL,NULL), - (390,195,4,'b_a',85,'Sibling of',43,'Sibling of',1,NULL,NULL), - (391,196,8,'a_b',44,'Household Member of',74,'Household Member is',1,NULL,NULL), - (392,196,8,'b_a',74,'Household Member is',44,'Household Member of',1,NULL,NULL), - (393,197,8,'a_b',85,'Household Member of',74,'Household Member is',1,NULL,NULL), - (394,197,8,'b_a',74,'Household Member is',85,'Household Member of',1,NULL,NULL), - (395,198,8,'a_b',43,'Household Member of',74,'Household Member is',1,NULL,NULL), - (396,198,8,'b_a',74,'Household Member is',43,'Household Member of',1,NULL,NULL), - (397,199,7,'a_b',84,'Head of Household for',74,'Head of Household is',0,NULL,NULL), - (398,199,7,'b_a',74,'Head of Household is',84,'Head of Household for',0,NULL,NULL), - (399,200,2,'a_b',44,'Spouse of',84,'Spouse of',0,NULL,NULL), - (400,200,2,'b_a',84,'Spouse of',44,'Spouse of',0,NULL,NULL), - (401,201,5,'a_b',116,'Employee of',31,'Employer of',1,NULL,NULL), - (402,201,5,'b_a',31,'Employer of',116,'Employee of',1,NULL,NULL), - (403,202,5,'a_b',200,'Employee of',57,'Employer of',1,NULL,NULL), - (404,202,5,'b_a',57,'Employer of',200,'Employee of',1,NULL,NULL), - (405,203,5,'a_b',54,'Employee of',70,'Employer of',1,NULL,NULL), - (406,203,5,'b_a',70,'Employer of',54,'Employee of',1,NULL,NULL), - (407,204,5,'a_b',72,'Employee of',73,'Employer of',1,NULL,NULL), - (408,204,5,'b_a',73,'Employer of',72,'Employee of',1,NULL,NULL), - (409,205,5,'a_b',190,'Employee of',76,'Employer of',1,NULL,NULL), - (410,205,5,'b_a',76,'Employer of',190,'Employee of',1,NULL,NULL), - (411,206,5,'a_b',59,'Employee of',88,'Employer of',1,NULL,NULL), - (412,206,5,'b_a',88,'Employer of',59,'Employee of',1,NULL,NULL), - (413,207,5,'a_b',38,'Employee of',97,'Employer of',1,NULL,NULL), - (414,207,5,'b_a',97,'Employer of',38,'Employee of',1,NULL,NULL), - (415,208,5,'a_b',106,'Employee of',107,'Employer of',1,NULL,NULL), - (416,208,5,'b_a',107,'Employer of',106,'Employee of',1,NULL,NULL), - (417,209,5,'a_b',187,'Employee of',109,'Employer of',1,NULL,NULL), - (418,209,5,'b_a',109,'Employer of',187,'Employee of',1,NULL,NULL), - (419,210,5,'a_b',18,'Employee of',110,'Employer of',1,NULL,NULL), - (420,210,5,'b_a',110,'Employer of',18,'Employee of',1,NULL,NULL), - (421,211,5,'a_b',104,'Employee of',120,'Employer of',1,NULL,NULL), - (422,211,5,'b_a',120,'Employer of',104,'Employee of',1,NULL,NULL), - (423,212,5,'a_b',6,'Employee of',167,'Employer of',1,NULL,NULL), - (424,212,5,'b_a',167,'Employer of',6,'Employee of',1,NULL,NULL), - (425,213,5,'a_b',86,'Employee of',179,'Employer of',1,NULL,NULL), - (426,213,5,'b_a',179,'Employer of',86,'Employee of',1,NULL,NULL), - (427,214,5,'a_b',39,'Employee of',188,'Employer of',1,NULL,NULL), - (428,214,5,'b_a',188,'Employer of',39,'Employee of',1,NULL,NULL), - (429,215,5,'a_b',87,'Employee of',191,'Employer of',1,NULL,NULL), - (430,215,5,'b_a',191,'Employer of',87,'Employee of',1,NULL,NULL); + (1,1,1,'a_b',135,'Child of',10,'Parent of',1,NULL,NULL), + (2,1,1,'b_a',10,'Parent of',135,'Child of',1,NULL,NULL), + (3,2,1,'a_b',80,'Child of',10,'Parent of',1,NULL,NULL), + (4,2,1,'b_a',10,'Parent of',80,'Child of',1,NULL,NULL), + (5,3,1,'a_b',135,'Child of',120,'Parent of',1,NULL,NULL), + (6,3,1,'b_a',120,'Parent of',135,'Child of',1,NULL,NULL), + (7,4,1,'a_b',80,'Child of',120,'Parent of',1,NULL,NULL), + (8,4,1,'b_a',120,'Parent of',80,'Child of',1,NULL,NULL), + (9,5,4,'a_b',80,'Sibling of',135,'Sibling of',1,NULL,NULL), + (10,5,4,'b_a',135,'Sibling of',80,'Sibling of',1,NULL,NULL), + (11,6,8,'a_b',120,'Household Member of',133,'Household Member is',1,NULL,NULL), + (12,6,8,'b_a',133,'Household Member is',120,'Household Member of',1,NULL,NULL), + (13,7,8,'a_b',135,'Household Member of',133,'Household Member is',1,NULL,NULL), + (14,7,8,'b_a',133,'Household Member is',135,'Household Member of',1,NULL,NULL), + (15,8,8,'a_b',80,'Household Member of',133,'Household Member is',1,NULL,NULL), + (16,8,8,'b_a',133,'Household Member is',80,'Household Member of',1,NULL,NULL), + (17,9,7,'a_b',10,'Head of Household for',133,'Head of Household is',1,NULL,NULL), + (18,9,7,'b_a',133,'Head of Household is',10,'Head of Household for',1,NULL,NULL), + (19,10,2,'a_b',120,'Spouse of',10,'Spouse of',1,NULL,NULL), + (20,10,2,'b_a',10,'Spouse of',120,'Spouse of',1,NULL,NULL), + (21,11,1,'a_b',118,'Child of',154,'Parent of',1,NULL,NULL), + (22,11,1,'b_a',154,'Parent of',118,'Child of',1,NULL,NULL), + (23,12,1,'a_b',75,'Child of',154,'Parent of',1,NULL,NULL), + (24,12,1,'b_a',154,'Parent of',75,'Child of',1,NULL,NULL), + (25,13,1,'a_b',118,'Child of',62,'Parent of',1,NULL,NULL), + (26,13,1,'b_a',62,'Parent of',118,'Child of',1,NULL,NULL), + (27,14,1,'a_b',75,'Child of',62,'Parent of',1,NULL,NULL), + (28,14,1,'b_a',62,'Parent of',75,'Child of',1,NULL,NULL), + (29,15,4,'a_b',75,'Sibling of',118,'Sibling of',1,NULL,NULL), + (30,15,4,'b_a',118,'Sibling of',75,'Sibling of',1,NULL,NULL), + (31,16,8,'a_b',62,'Household Member of',124,'Household Member is',1,NULL,NULL), + (32,16,8,'b_a',124,'Household Member is',62,'Household Member of',1,NULL,NULL), + (33,17,8,'a_b',118,'Household Member of',124,'Household Member is',1,NULL,NULL), + (34,17,8,'b_a',124,'Household Member is',118,'Household Member of',1,NULL,NULL), + (35,18,8,'a_b',75,'Household Member of',124,'Household Member is',1,NULL,NULL), + (36,18,8,'b_a',124,'Household Member is',75,'Household Member of',1,NULL,NULL), + (37,19,7,'a_b',154,'Head of Household for',124,'Head of Household is',0,NULL,NULL), + (38,19,7,'b_a',124,'Head of Household is',154,'Head of Household for',0,NULL,NULL), + (39,20,2,'a_b',62,'Spouse of',154,'Spouse of',0,NULL,NULL), + (40,20,2,'b_a',154,'Spouse of',62,'Spouse of',0,NULL,NULL), + (41,21,1,'a_b',127,'Child of',76,'Parent of',1,NULL,NULL), + (42,21,1,'b_a',76,'Parent of',127,'Child of',1,NULL,NULL), + (43,22,1,'a_b',65,'Child of',76,'Parent of',1,NULL,NULL), + (44,22,1,'b_a',76,'Parent of',65,'Child of',1,NULL,NULL), + (45,23,1,'a_b',127,'Child of',126,'Parent of',1,NULL,NULL), + (46,23,1,'b_a',126,'Parent of',127,'Child of',1,NULL,NULL), + (47,24,1,'a_b',65,'Child of',126,'Parent of',1,NULL,NULL), + (48,24,1,'b_a',126,'Parent of',65,'Child of',1,NULL,NULL), + (49,25,4,'a_b',65,'Sibling of',127,'Sibling of',1,NULL,NULL), + (50,25,4,'b_a',127,'Sibling of',65,'Sibling of',1,NULL,NULL), + (51,26,8,'a_b',126,'Household Member of',96,'Household Member is',1,NULL,NULL), + (52,26,8,'b_a',96,'Household Member is',126,'Household Member of',1,NULL,NULL), + (53,27,8,'a_b',127,'Household Member of',96,'Household Member is',1,NULL,NULL), + (54,27,8,'b_a',96,'Household Member is',127,'Household Member of',1,NULL,NULL), + (55,28,8,'a_b',65,'Household Member of',96,'Household Member is',1,NULL,NULL), + (56,28,8,'b_a',96,'Household Member is',65,'Household Member of',1,NULL,NULL), + (57,29,7,'a_b',76,'Head of Household for',96,'Head of Household is',0,NULL,NULL), + (58,29,7,'b_a',96,'Head of Household is',76,'Head of Household for',0,NULL,NULL), + (59,30,2,'a_b',126,'Spouse of',76,'Spouse of',0,NULL,NULL), + (60,30,2,'b_a',76,'Spouse of',126,'Spouse of',0,NULL,NULL), + (61,31,1,'a_b',110,'Child of',51,'Parent of',1,NULL,NULL), + (62,31,1,'b_a',51,'Parent of',110,'Child of',1,NULL,NULL), + (63,32,1,'a_b',74,'Child of',51,'Parent of',1,NULL,NULL), + (64,32,1,'b_a',51,'Parent of',74,'Child of',1,NULL,NULL), + (65,33,1,'a_b',110,'Child of',115,'Parent of',1,NULL,NULL), + (66,33,1,'b_a',115,'Parent of',110,'Child of',1,NULL,NULL), + (67,34,1,'a_b',74,'Child of',115,'Parent of',1,NULL,NULL), + (68,34,1,'b_a',115,'Parent of',74,'Child of',1,NULL,NULL), + (69,35,4,'a_b',74,'Sibling of',110,'Sibling of',1,NULL,NULL), + (70,35,4,'b_a',110,'Sibling of',74,'Sibling of',1,NULL,NULL), + (71,36,8,'a_b',115,'Household Member of',184,'Household Member is',1,NULL,NULL), + (72,36,8,'b_a',184,'Household Member is',115,'Household Member of',1,NULL,NULL), + (73,37,8,'a_b',110,'Household Member of',184,'Household Member is',1,NULL,NULL), + (74,37,8,'b_a',184,'Household Member is',110,'Household Member of',1,NULL,NULL), + (75,38,8,'a_b',74,'Household Member of',184,'Household Member is',1,NULL,NULL), + (76,38,8,'b_a',184,'Household Member is',74,'Household Member of',1,NULL,NULL), + (77,39,7,'a_b',51,'Head of Household for',184,'Head of Household is',0,NULL,NULL), + (78,39,7,'b_a',184,'Head of Household is',51,'Head of Household for',0,NULL,NULL), + (79,40,2,'a_b',115,'Spouse of',51,'Spouse of',0,NULL,NULL), + (80,40,2,'b_a',51,'Spouse of',115,'Spouse of',0,NULL,NULL), + (81,41,1,'a_b',170,'Child of',71,'Parent of',1,NULL,NULL), + (82,41,1,'b_a',71,'Parent of',170,'Child of',1,NULL,NULL), + (83,42,1,'a_b',50,'Child of',71,'Parent of',1,NULL,NULL), + (84,42,1,'b_a',71,'Parent of',50,'Child of',1,NULL,NULL), + (85,43,1,'a_b',170,'Child of',143,'Parent of',1,NULL,NULL), + (86,43,1,'b_a',143,'Parent of',170,'Child of',1,NULL,NULL), + (87,44,1,'a_b',50,'Child of',143,'Parent of',1,NULL,NULL), + (88,44,1,'b_a',143,'Parent of',50,'Child of',1,NULL,NULL), + (89,45,4,'a_b',50,'Sibling of',170,'Sibling of',1,NULL,NULL), + (90,45,4,'b_a',170,'Sibling of',50,'Sibling of',1,NULL,NULL), + (91,46,8,'a_b',143,'Household Member of',192,'Household Member is',1,NULL,NULL), + (92,46,8,'b_a',192,'Household Member is',143,'Household Member of',1,NULL,NULL), + (93,47,8,'a_b',170,'Household Member of',192,'Household Member is',1,NULL,NULL), + (94,47,8,'b_a',192,'Household Member is',170,'Household Member of',1,NULL,NULL), + (95,48,8,'a_b',50,'Household Member of',192,'Household Member is',1,NULL,NULL), + (96,48,8,'b_a',192,'Household Member is',50,'Household Member of',1,NULL,NULL), + (97,49,7,'a_b',71,'Head of Household for',192,'Head of Household is',1,NULL,NULL), + (98,49,7,'b_a',192,'Head of Household is',71,'Head of Household for',1,NULL,NULL), + (99,50,2,'a_b',143,'Spouse of',71,'Spouse of',1,NULL,NULL), + (100,50,2,'b_a',71,'Spouse of',143,'Spouse of',1,NULL,NULL), + (101,51,1,'a_b',64,'Child of',97,'Parent of',1,NULL,NULL), + (102,51,1,'b_a',97,'Parent of',64,'Child of',1,NULL,NULL), + (103,52,1,'a_b',186,'Child of',97,'Parent of',1,NULL,NULL), + (104,52,1,'b_a',97,'Parent of',186,'Child of',1,NULL,NULL), + (105,53,1,'a_b',64,'Child of',60,'Parent of',1,NULL,NULL), + (106,53,1,'b_a',60,'Parent of',64,'Child of',1,NULL,NULL), + (107,54,1,'a_b',186,'Child of',60,'Parent of',1,NULL,NULL), + (108,54,1,'b_a',60,'Parent of',186,'Child of',1,NULL,NULL), + (109,55,4,'a_b',186,'Sibling of',64,'Sibling of',1,NULL,NULL), + (110,55,4,'b_a',64,'Sibling of',186,'Sibling of',1,NULL,NULL), + (111,56,8,'a_b',60,'Household Member of',193,'Household Member is',1,NULL,NULL), + (112,56,8,'b_a',193,'Household Member is',60,'Household Member of',1,NULL,NULL), + (113,57,8,'a_b',64,'Household Member of',193,'Household Member is',1,NULL,NULL), + (114,57,8,'b_a',193,'Household Member is',64,'Household Member of',1,NULL,NULL), + (115,58,8,'a_b',186,'Household Member of',193,'Household Member is',1,NULL,NULL), + (116,58,8,'b_a',193,'Household Member is',186,'Household Member of',1,NULL,NULL), + (117,59,7,'a_b',97,'Head of Household for',193,'Head of Household is',1,NULL,NULL), + (118,59,7,'b_a',193,'Head of Household is',97,'Head of Household for',1,NULL,NULL), + (119,60,2,'a_b',60,'Spouse of',97,'Spouse of',1,NULL,NULL), + (120,60,2,'b_a',97,'Spouse of',60,'Spouse of',1,NULL,NULL), + (121,61,1,'a_b',5,'Child of',150,'Parent of',1,NULL,NULL), + (122,61,1,'b_a',150,'Parent of',5,'Child of',1,NULL,NULL), + (123,62,1,'a_b',180,'Child of',150,'Parent of',1,NULL,NULL), + (124,62,1,'b_a',150,'Parent of',180,'Child of',1,NULL,NULL), + (125,63,1,'a_b',5,'Child of',185,'Parent of',1,NULL,NULL), + (126,63,1,'b_a',185,'Parent of',5,'Child of',1,NULL,NULL), + (127,64,1,'a_b',180,'Child of',185,'Parent of',1,NULL,NULL), + (128,64,1,'b_a',185,'Parent of',180,'Child of',1,NULL,NULL), + (129,65,4,'a_b',180,'Sibling of',5,'Sibling of',1,NULL,NULL), + (130,65,4,'b_a',5,'Sibling of',180,'Sibling of',1,NULL,NULL), + (131,66,8,'a_b',185,'Household Member of',189,'Household Member is',1,NULL,NULL), + (132,66,8,'b_a',189,'Household Member is',185,'Household Member of',1,NULL,NULL), + (133,67,8,'a_b',5,'Household Member of',189,'Household Member is',1,NULL,NULL), + (134,67,8,'b_a',189,'Household Member is',5,'Household Member of',1,NULL,NULL), + (135,68,8,'a_b',180,'Household Member of',189,'Household Member is',1,NULL,NULL), + (136,68,8,'b_a',189,'Household Member is',180,'Household Member of',1,NULL,NULL), + (137,69,7,'a_b',150,'Head of Household for',189,'Head of Household is',1,NULL,NULL), + (138,69,7,'b_a',189,'Head of Household is',150,'Head of Household for',1,NULL,NULL), + (139,70,2,'a_b',185,'Spouse of',150,'Spouse of',1,NULL,NULL), + (140,70,2,'b_a',150,'Spouse of',185,'Spouse of',1,NULL,NULL), + (141,71,1,'a_b',147,'Child of',201,'Parent of',1,NULL,NULL), + (142,71,1,'b_a',201,'Parent of',147,'Child of',1,NULL,NULL), + (143,72,1,'a_b',17,'Child of',201,'Parent of',1,NULL,NULL), + (144,72,1,'b_a',201,'Parent of',17,'Child of',1,NULL,NULL), + (145,73,1,'a_b',147,'Child of',113,'Parent of',1,NULL,NULL), + (146,73,1,'b_a',113,'Parent of',147,'Child of',1,NULL,NULL), + (147,74,1,'a_b',17,'Child of',113,'Parent of',1,NULL,NULL), + (148,74,1,'b_a',113,'Parent of',17,'Child of',1,NULL,NULL), + (149,75,4,'a_b',17,'Sibling of',147,'Sibling of',1,NULL,NULL), + (150,75,4,'b_a',147,'Sibling of',17,'Sibling of',1,NULL,NULL), + (151,76,8,'a_b',113,'Household Member of',33,'Household Member is',1,NULL,NULL), + (152,76,8,'b_a',33,'Household Member is',113,'Household Member of',1,NULL,NULL), + (153,77,8,'a_b',147,'Household Member of',33,'Household Member is',1,NULL,NULL), + (154,77,8,'b_a',33,'Household Member is',147,'Household Member of',1,NULL,NULL), + (155,78,8,'a_b',17,'Household Member of',33,'Household Member is',1,NULL,NULL), + (156,78,8,'b_a',33,'Household Member is',17,'Household Member of',1,NULL,NULL), + (157,79,7,'a_b',201,'Head of Household for',33,'Head of Household is',1,NULL,NULL), + (158,79,7,'b_a',33,'Head of Household is',201,'Head of Household for',1,NULL,NULL), + (159,80,2,'a_b',113,'Spouse of',201,'Spouse of',1,NULL,NULL), + (160,80,2,'b_a',201,'Spouse of',113,'Spouse of',1,NULL,NULL), + (161,81,1,'a_b',56,'Child of',9,'Parent of',1,NULL,NULL), + (162,81,1,'b_a',9,'Parent of',56,'Child of',1,NULL,NULL), + (163,82,1,'a_b',19,'Child of',9,'Parent of',1,NULL,NULL), + (164,82,1,'b_a',9,'Parent of',19,'Child of',1,NULL,NULL), + (165,83,1,'a_b',56,'Child of',119,'Parent of',1,NULL,NULL), + (166,83,1,'b_a',119,'Parent of',56,'Child of',1,NULL,NULL), + (167,84,1,'a_b',19,'Child of',119,'Parent of',1,NULL,NULL), + (168,84,1,'b_a',119,'Parent of',19,'Child of',1,NULL,NULL), + (169,85,4,'a_b',19,'Sibling of',56,'Sibling of',1,NULL,NULL), + (170,85,4,'b_a',56,'Sibling of',19,'Sibling of',1,NULL,NULL), + (171,86,8,'a_b',119,'Household Member of',66,'Household Member is',1,NULL,NULL), + (172,86,8,'b_a',66,'Household Member is',119,'Household Member of',1,NULL,NULL), + (173,87,8,'a_b',56,'Household Member of',66,'Household Member is',1,NULL,NULL), + (174,87,8,'b_a',66,'Household Member is',56,'Household Member of',1,NULL,NULL), + (175,88,8,'a_b',19,'Household Member of',66,'Household Member is',1,NULL,NULL), + (176,88,8,'b_a',66,'Household Member is',19,'Household Member of',1,NULL,NULL), + (177,89,7,'a_b',9,'Head of Household for',66,'Head of Household is',1,NULL,NULL), + (178,89,7,'b_a',66,'Head of Household is',9,'Head of Household for',1,NULL,NULL), + (179,90,2,'a_b',119,'Spouse of',9,'Spouse of',1,NULL,NULL), + (180,90,2,'b_a',9,'Spouse of',119,'Spouse of',1,NULL,NULL), + (181,91,1,'a_b',40,'Child of',178,'Parent of',1,NULL,NULL), + (182,91,1,'b_a',178,'Parent of',40,'Child of',1,NULL,NULL), + (183,92,1,'a_b',84,'Child of',178,'Parent of',1,NULL,NULL), + (184,92,1,'b_a',178,'Parent of',84,'Child of',1,NULL,NULL), + (185,93,1,'a_b',40,'Child of',52,'Parent of',1,NULL,NULL), + (186,93,1,'b_a',52,'Parent of',40,'Child of',1,NULL,NULL), + (187,94,1,'a_b',84,'Child of',52,'Parent of',1,NULL,NULL), + (188,94,1,'b_a',52,'Parent of',84,'Child of',1,NULL,NULL), + (189,95,4,'a_b',84,'Sibling of',40,'Sibling of',1,NULL,NULL), + (190,95,4,'b_a',40,'Sibling of',84,'Sibling of',1,NULL,NULL), + (191,96,8,'a_b',52,'Household Member of',158,'Household Member is',1,NULL,NULL), + (192,96,8,'b_a',158,'Household Member is',52,'Household Member of',1,NULL,NULL), + (193,97,8,'a_b',40,'Household Member of',158,'Household Member is',1,NULL,NULL), + (194,97,8,'b_a',158,'Household Member is',40,'Household Member of',1,NULL,NULL), + (195,98,8,'a_b',84,'Household Member of',158,'Household Member is',1,NULL,NULL), + (196,98,8,'b_a',158,'Household Member is',84,'Household Member of',1,NULL,NULL), + (197,99,7,'a_b',178,'Head of Household for',158,'Head of Household is',1,NULL,NULL), + (198,99,7,'b_a',158,'Head of Household is',178,'Head of Household for',1,NULL,NULL), + (199,100,2,'a_b',52,'Spouse of',178,'Spouse of',1,NULL,NULL), + (200,100,2,'b_a',178,'Spouse of',52,'Spouse of',1,NULL,NULL), + (201,101,1,'a_b',82,'Child of',117,'Parent of',1,NULL,NULL), + (202,101,1,'b_a',117,'Parent of',82,'Child of',1,NULL,NULL), + (203,102,1,'a_b',131,'Child of',117,'Parent of',1,NULL,NULL), + (204,102,1,'b_a',117,'Parent of',131,'Child of',1,NULL,NULL), + (205,103,1,'a_b',82,'Child of',140,'Parent of',1,NULL,NULL), + (206,103,1,'b_a',140,'Parent of',82,'Child of',1,NULL,NULL), + (207,104,1,'a_b',131,'Child of',140,'Parent of',1,NULL,NULL), + (208,104,1,'b_a',140,'Parent of',131,'Child of',1,NULL,NULL), + (209,105,4,'a_b',131,'Sibling of',82,'Sibling of',1,NULL,NULL), + (210,105,4,'b_a',82,'Sibling of',131,'Sibling of',1,NULL,NULL), + (211,106,8,'a_b',140,'Household Member of',77,'Household Member is',1,NULL,NULL), + (212,106,8,'b_a',77,'Household Member is',140,'Household Member of',1,NULL,NULL), + (213,107,8,'a_b',82,'Household Member of',77,'Household Member is',1,NULL,NULL), + (214,107,8,'b_a',77,'Household Member is',82,'Household Member of',1,NULL,NULL), + (215,108,8,'a_b',131,'Household Member of',77,'Household Member is',1,NULL,NULL), + (216,108,8,'b_a',77,'Household Member is',131,'Household Member of',1,NULL,NULL), + (217,109,7,'a_b',117,'Head of Household for',77,'Head of Household is',1,NULL,NULL), + (218,109,7,'b_a',77,'Head of Household is',117,'Head of Household for',1,NULL,NULL), + (219,110,2,'a_b',140,'Spouse of',117,'Spouse of',1,NULL,NULL), + (220,110,2,'b_a',117,'Spouse of',140,'Spouse of',1,NULL,NULL), + (221,111,1,'a_b',21,'Child of',89,'Parent of',1,NULL,NULL), + (222,111,1,'b_a',89,'Parent of',21,'Child of',1,NULL,NULL), + (223,112,1,'a_b',155,'Child of',89,'Parent of',1,NULL,NULL), + (224,112,1,'b_a',89,'Parent of',155,'Child of',1,NULL,NULL), + (225,113,1,'a_b',21,'Child of',181,'Parent of',1,NULL,NULL), + (226,113,1,'b_a',181,'Parent of',21,'Child of',1,NULL,NULL), + (227,114,1,'a_b',155,'Child of',181,'Parent of',1,NULL,NULL), + (228,114,1,'b_a',181,'Parent of',155,'Child of',1,NULL,NULL), + (229,115,4,'a_b',155,'Sibling of',21,'Sibling of',1,NULL,NULL), + (230,115,4,'b_a',21,'Sibling of',155,'Sibling of',1,NULL,NULL), + (231,116,8,'a_b',181,'Household Member of',34,'Household Member is',1,NULL,NULL), + (232,116,8,'b_a',34,'Household Member is',181,'Household Member of',1,NULL,NULL), + (233,117,8,'a_b',21,'Household Member of',34,'Household Member is',1,NULL,NULL), + (234,117,8,'b_a',34,'Household Member is',21,'Household Member of',1,NULL,NULL), + (235,118,8,'a_b',155,'Household Member of',34,'Household Member is',1,NULL,NULL), + (236,118,8,'b_a',34,'Household Member is',155,'Household Member of',1,NULL,NULL), + (237,119,7,'a_b',89,'Head of Household for',34,'Head of Household is',1,NULL,NULL), + (238,119,7,'b_a',34,'Head of Household is',89,'Head of Household for',1,NULL,NULL), + (239,120,2,'a_b',181,'Spouse of',89,'Spouse of',1,NULL,NULL), + (240,120,2,'b_a',89,'Spouse of',181,'Spouse of',1,NULL,NULL), + (241,121,1,'a_b',29,'Child of',164,'Parent of',1,NULL,NULL), + (242,121,1,'b_a',164,'Parent of',29,'Child of',1,NULL,NULL), + (243,122,1,'a_b',187,'Child of',164,'Parent of',1,NULL,NULL), + (244,122,1,'b_a',164,'Parent of',187,'Child of',1,NULL,NULL), + (245,123,1,'a_b',29,'Child of',11,'Parent of',1,NULL,NULL), + (246,123,1,'b_a',11,'Parent of',29,'Child of',1,NULL,NULL), + (247,124,1,'a_b',187,'Child of',11,'Parent of',1,NULL,NULL), + (248,124,1,'b_a',11,'Parent of',187,'Child of',1,NULL,NULL), + (249,125,4,'a_b',187,'Sibling of',29,'Sibling of',1,NULL,NULL), + (250,125,4,'b_a',29,'Sibling of',187,'Sibling of',1,NULL,NULL), + (251,126,8,'a_b',11,'Household Member of',20,'Household Member is',1,NULL,NULL), + (252,126,8,'b_a',20,'Household Member is',11,'Household Member of',1,NULL,NULL), + (253,127,8,'a_b',29,'Household Member of',20,'Household Member is',1,NULL,NULL), + (254,127,8,'b_a',20,'Household Member is',29,'Household Member of',1,NULL,NULL), + (255,128,8,'a_b',187,'Household Member of',20,'Household Member is',1,NULL,NULL), + (256,128,8,'b_a',20,'Household Member is',187,'Household Member of',1,NULL,NULL), + (257,129,7,'a_b',164,'Head of Household for',20,'Head of Household is',1,NULL,NULL), + (258,129,7,'b_a',20,'Head of Household is',164,'Head of Household for',1,NULL,NULL), + (259,130,2,'a_b',11,'Spouse of',164,'Spouse of',1,NULL,NULL), + (260,130,2,'b_a',164,'Spouse of',11,'Spouse of',1,NULL,NULL), + (261,131,1,'a_b',198,'Child of',176,'Parent of',1,NULL,NULL), + (262,131,1,'b_a',176,'Parent of',198,'Child of',1,NULL,NULL), + (263,132,1,'a_b',16,'Child of',176,'Parent of',1,NULL,NULL), + (264,132,1,'b_a',176,'Parent of',16,'Child of',1,NULL,NULL), + (265,133,1,'a_b',198,'Child of',112,'Parent of',1,NULL,NULL), + (266,133,1,'b_a',112,'Parent of',198,'Child of',1,NULL,NULL), + (267,134,1,'a_b',16,'Child of',112,'Parent of',1,NULL,NULL), + (268,134,1,'b_a',112,'Parent of',16,'Child of',1,NULL,NULL), + (269,135,4,'a_b',16,'Sibling of',198,'Sibling of',1,NULL,NULL), + (270,135,4,'b_a',198,'Sibling of',16,'Sibling of',1,NULL,NULL), + (271,136,8,'a_b',112,'Household Member of',148,'Household Member is',1,NULL,NULL), + (272,136,8,'b_a',148,'Household Member is',112,'Household Member of',1,NULL,NULL), + (273,137,8,'a_b',198,'Household Member of',148,'Household Member is',1,NULL,NULL), + (274,137,8,'b_a',148,'Household Member is',198,'Household Member of',1,NULL,NULL), + (275,138,8,'a_b',16,'Household Member of',148,'Household Member is',1,NULL,NULL), + (276,138,8,'b_a',148,'Household Member is',16,'Household Member of',1,NULL,NULL), + (277,139,7,'a_b',176,'Head of Household for',148,'Head of Household is',1,NULL,NULL), + (278,139,7,'b_a',148,'Head of Household is',176,'Head of Household for',1,NULL,NULL), + (279,140,2,'a_b',112,'Spouse of',176,'Spouse of',1,NULL,NULL), + (280,140,2,'b_a',176,'Spouse of',112,'Spouse of',1,NULL,NULL), + (281,141,1,'a_b',151,'Child of',196,'Parent of',1,NULL,NULL), + (282,141,1,'b_a',196,'Parent of',151,'Child of',1,NULL,NULL), + (283,142,1,'a_b',106,'Child of',196,'Parent of',1,NULL,NULL), + (284,142,1,'b_a',196,'Parent of',106,'Child of',1,NULL,NULL), + (285,143,1,'a_b',151,'Child of',153,'Parent of',1,NULL,NULL), + (286,143,1,'b_a',153,'Parent of',151,'Child of',1,NULL,NULL), + (287,144,1,'a_b',106,'Child of',153,'Parent of',1,NULL,NULL), + (288,144,1,'b_a',153,'Parent of',106,'Child of',1,NULL,NULL), + (289,145,4,'a_b',106,'Sibling of',151,'Sibling of',1,NULL,NULL), + (290,145,4,'b_a',151,'Sibling of',106,'Sibling of',1,NULL,NULL), + (291,146,8,'a_b',153,'Household Member of',79,'Household Member is',1,NULL,NULL), + (292,146,8,'b_a',79,'Household Member is',153,'Household Member of',1,NULL,NULL), + (293,147,8,'a_b',151,'Household Member of',79,'Household Member is',1,NULL,NULL), + (294,147,8,'b_a',79,'Household Member is',151,'Household Member of',1,NULL,NULL), + (295,148,8,'a_b',106,'Household Member of',79,'Household Member is',1,NULL,NULL), + (296,148,8,'b_a',79,'Household Member is',106,'Household Member of',1,NULL,NULL), + (297,149,7,'a_b',196,'Head of Household for',79,'Head of Household is',1,NULL,NULL), + (298,149,7,'b_a',79,'Head of Household is',196,'Head of Household for',1,NULL,NULL), + (299,150,2,'a_b',153,'Spouse of',196,'Spouse of',1,NULL,NULL), + (300,150,2,'b_a',196,'Spouse of',153,'Spouse of',1,NULL,NULL), + (301,151,1,'a_b',145,'Child of',45,'Parent of',1,NULL,NULL), + (302,151,1,'b_a',45,'Parent of',145,'Child of',1,NULL,NULL), + (303,152,1,'a_b',59,'Child of',45,'Parent of',1,NULL,NULL), + (304,152,1,'b_a',45,'Parent of',59,'Child of',1,NULL,NULL), + (305,153,1,'a_b',145,'Child of',137,'Parent of',1,NULL,NULL), + (306,153,1,'b_a',137,'Parent of',145,'Child of',1,NULL,NULL), + (307,154,1,'a_b',59,'Child of',137,'Parent of',1,NULL,NULL), + (308,154,1,'b_a',137,'Parent of',59,'Child of',1,NULL,NULL), + (309,155,4,'a_b',59,'Sibling of',145,'Sibling of',1,NULL,NULL), + (310,155,4,'b_a',145,'Sibling of',59,'Sibling of',1,NULL,NULL), + (311,156,8,'a_b',137,'Household Member of',162,'Household Member is',1,NULL,NULL), + (312,156,8,'b_a',162,'Household Member is',137,'Household Member of',1,NULL,NULL), + (313,157,8,'a_b',145,'Household Member of',162,'Household Member is',1,NULL,NULL), + (314,157,8,'b_a',162,'Household Member is',145,'Household Member of',1,NULL,NULL), + (315,158,8,'a_b',59,'Household Member of',162,'Household Member is',1,NULL,NULL), + (316,158,8,'b_a',162,'Household Member is',59,'Household Member of',1,NULL,NULL), + (317,159,7,'a_b',45,'Head of Household for',162,'Head of Household is',0,NULL,NULL), + (318,159,7,'b_a',162,'Head of Household is',45,'Head of Household for',0,NULL,NULL), + (319,160,2,'a_b',137,'Spouse of',45,'Spouse of',0,NULL,NULL), + (320,160,2,'b_a',45,'Spouse of',137,'Spouse of',0,NULL,NULL), + (321,161,1,'a_b',92,'Child of',183,'Parent of',1,NULL,NULL), + (322,161,1,'b_a',183,'Parent of',92,'Child of',1,NULL,NULL), + (323,162,1,'a_b',161,'Child of',183,'Parent of',1,NULL,NULL), + (324,162,1,'b_a',183,'Parent of',161,'Child of',1,NULL,NULL), + (325,163,1,'a_b',92,'Child of',35,'Parent of',1,NULL,NULL), + (326,163,1,'b_a',35,'Parent of',92,'Child of',1,NULL,NULL), + (327,164,1,'a_b',161,'Child of',35,'Parent of',1,NULL,NULL), + (328,164,1,'b_a',35,'Parent of',161,'Child of',1,NULL,NULL), + (329,165,4,'a_b',161,'Sibling of',92,'Sibling of',1,NULL,NULL), + (330,165,4,'b_a',92,'Sibling of',161,'Sibling of',1,NULL,NULL), + (331,166,8,'a_b',35,'Household Member of',123,'Household Member is',1,NULL,NULL), + (332,166,8,'b_a',123,'Household Member is',35,'Household Member of',1,NULL,NULL), + (333,167,8,'a_b',92,'Household Member of',123,'Household Member is',1,NULL,NULL), + (334,167,8,'b_a',123,'Household Member is',92,'Household Member of',1,NULL,NULL), + (335,168,8,'a_b',161,'Household Member of',123,'Household Member is',1,NULL,NULL), + (336,168,8,'b_a',123,'Household Member is',161,'Household Member of',1,NULL,NULL), + (337,169,7,'a_b',183,'Head of Household for',123,'Head of Household is',1,NULL,NULL), + (338,169,7,'b_a',123,'Head of Household is',183,'Head of Household for',1,NULL,NULL), + (339,170,2,'a_b',35,'Spouse of',183,'Spouse of',1,NULL,NULL), + (340,170,2,'b_a',183,'Spouse of',35,'Spouse of',1,NULL,NULL), + (341,171,1,'a_b',90,'Child of',160,'Parent of',1,NULL,NULL), + (342,171,1,'b_a',160,'Parent of',90,'Child of',1,NULL,NULL), + (343,172,1,'a_b',101,'Child of',160,'Parent of',1,NULL,NULL), + (344,172,1,'b_a',160,'Parent of',101,'Child of',1,NULL,NULL), + (345,173,1,'a_b',90,'Child of',168,'Parent of',1,NULL,NULL), + (346,173,1,'b_a',168,'Parent of',90,'Child of',1,NULL,NULL), + (347,174,1,'a_b',101,'Child of',168,'Parent of',1,NULL,NULL), + (348,174,1,'b_a',168,'Parent of',101,'Child of',1,NULL,NULL), + (349,175,4,'a_b',101,'Sibling of',90,'Sibling of',1,NULL,NULL), + (350,175,4,'b_a',90,'Sibling of',101,'Sibling of',1,NULL,NULL), + (351,176,8,'a_b',168,'Household Member of',37,'Household Member is',1,NULL,NULL), + (352,176,8,'b_a',37,'Household Member is',168,'Household Member of',1,NULL,NULL), + (353,177,8,'a_b',90,'Household Member of',37,'Household Member is',1,NULL,NULL), + (354,177,8,'b_a',37,'Household Member is',90,'Household Member of',1,NULL,NULL), + (355,178,8,'a_b',101,'Household Member of',37,'Household Member is',1,NULL,NULL), + (356,178,8,'b_a',37,'Household Member is',101,'Household Member of',1,NULL,NULL), + (357,179,7,'a_b',160,'Head of Household for',37,'Head of Household is',0,NULL,NULL), + (358,179,7,'b_a',37,'Head of Household is',160,'Head of Household for',0,NULL,NULL), + (359,180,2,'a_b',168,'Spouse of',160,'Spouse of',0,NULL,NULL), + (360,180,2,'b_a',160,'Spouse of',168,'Spouse of',0,NULL,NULL), + (361,181,1,'a_b',177,'Child of',46,'Parent of',1,NULL,NULL), + (362,181,1,'b_a',46,'Parent of',177,'Child of',1,NULL,NULL), + (363,182,1,'a_b',31,'Child of',46,'Parent of',1,NULL,NULL), + (364,182,1,'b_a',46,'Parent of',31,'Child of',1,NULL,NULL), + (365,183,1,'a_b',177,'Child of',22,'Parent of',1,NULL,NULL), + (366,183,1,'b_a',22,'Parent of',177,'Child of',1,NULL,NULL), + (367,184,1,'a_b',31,'Child of',22,'Parent of',1,NULL,NULL), + (368,184,1,'b_a',22,'Parent of',31,'Child of',1,NULL,NULL), + (369,185,4,'a_b',31,'Sibling of',177,'Sibling of',1,NULL,NULL), + (370,185,4,'b_a',177,'Sibling of',31,'Sibling of',1,NULL,NULL), + (371,186,8,'a_b',22,'Household Member of',91,'Household Member is',1,NULL,NULL), + (372,186,8,'b_a',91,'Household Member is',22,'Household Member of',1,NULL,NULL), + (373,187,8,'a_b',177,'Household Member of',91,'Household Member is',1,NULL,NULL), + (374,187,8,'b_a',91,'Household Member is',177,'Household Member of',1,NULL,NULL), + (375,188,8,'a_b',31,'Household Member of',91,'Household Member is',1,NULL,NULL), + (376,188,8,'b_a',91,'Household Member is',31,'Household Member of',1,NULL,NULL), + (377,189,7,'a_b',46,'Head of Household for',91,'Head of Household is',0,NULL,NULL), + (378,189,7,'b_a',91,'Head of Household is',46,'Head of Household for',0,NULL,NULL), + (379,190,2,'a_b',22,'Spouse of',46,'Spouse of',0,NULL,NULL), + (380,190,2,'b_a',46,'Spouse of',22,'Spouse of',0,NULL,NULL), + (381,191,1,'a_b',144,'Child of',93,'Parent of',1,NULL,NULL), + (382,191,1,'b_a',93,'Parent of',144,'Child of',1,NULL,NULL), + (383,192,1,'a_b',159,'Child of',93,'Parent of',1,NULL,NULL), + (384,192,1,'b_a',93,'Parent of',159,'Child of',1,NULL,NULL), + (385,193,1,'a_b',144,'Child of',197,'Parent of',1,NULL,NULL), + (386,193,1,'b_a',197,'Parent of',144,'Child of',1,NULL,NULL), + (387,194,1,'a_b',159,'Child of',197,'Parent of',1,NULL,NULL), + (388,194,1,'b_a',197,'Parent of',159,'Child of',1,NULL,NULL), + (389,195,4,'a_b',159,'Sibling of',144,'Sibling of',1,NULL,NULL), + (390,195,4,'b_a',144,'Sibling of',159,'Sibling of',1,NULL,NULL), + (391,196,8,'a_b',197,'Household Member of',174,'Household Member is',1,NULL,NULL), + (392,196,8,'b_a',174,'Household Member is',197,'Household Member of',1,NULL,NULL), + (393,197,8,'a_b',144,'Household Member of',174,'Household Member is',1,NULL,NULL), + (394,197,8,'b_a',174,'Household Member is',144,'Household Member of',1,NULL,NULL), + (395,198,8,'a_b',159,'Household Member of',174,'Household Member is',1,NULL,NULL), + (396,198,8,'b_a',174,'Household Member is',159,'Household Member of',1,NULL,NULL), + (397,199,7,'a_b',93,'Head of Household for',174,'Head of Household is',1,NULL,NULL), + (398,199,7,'b_a',174,'Head of Household is',93,'Head of Household for',1,NULL,NULL), + (399,200,2,'a_b',197,'Spouse of',93,'Spouse of',1,NULL,NULL), + (400,200,2,'b_a',93,'Spouse of',197,'Spouse of',1,NULL,NULL), + (401,201,5,'a_b',62,'Employee of',14,'Employer of',1,NULL,NULL), + (402,201,5,'b_a',14,'Employer of',62,'Employee of',1,NULL,NULL), + (403,202,5,'a_b',39,'Employee of',42,'Employer of',1,NULL,NULL), + (404,202,5,'b_a',42,'Employer of',39,'Employee of',1,NULL,NULL), + (405,203,5,'a_b',26,'Employee of',68,'Employer of',1,NULL,NULL), + (406,203,5,'b_a',68,'Employer of',26,'Employee of',1,NULL,NULL), + (407,204,5,'a_b',13,'Employee of',78,'Employer of',1,NULL,NULL), + (408,204,5,'b_a',78,'Employer of',13,'Employee of',1,NULL,NULL), + (409,205,5,'a_b',44,'Employee of',81,'Employer of',1,NULL,NULL), + (410,205,5,'b_a',81,'Employer of',44,'Employee of',1,NULL,NULL), + (411,206,5,'a_b',110,'Employee of',86,'Employer of',1,NULL,NULL), + (412,206,5,'b_a',86,'Employer of',110,'Employee of',1,NULL,NULL), + (413,207,5,'a_b',151,'Employee of',87,'Employer of',1,NULL,NULL), + (414,207,5,'b_a',87,'Employer of',151,'Employee of',1,NULL,NULL), + (415,208,5,'a_b',89,'Employee of',95,'Employer of',1,NULL,NULL), + (416,208,5,'b_a',95,'Employer of',89,'Employee of',1,NULL,NULL), + (417,209,5,'a_b',35,'Employee of',100,'Employer of',1,NULL,NULL), + (418,209,5,'b_a',100,'Employer of',35,'Employee of',1,NULL,NULL), + (419,210,5,'a_b',17,'Employee of',125,'Employer of',1,NULL,NULL), + (420,210,5,'b_a',125,'Employer of',17,'Employee of',1,NULL,NULL), + (421,211,5,'a_b',67,'Employee of',129,'Employer of',1,NULL,NULL), + (422,211,5,'b_a',129,'Employer of',67,'Employee of',1,NULL,NULL), + (423,212,5,'a_b',56,'Employee of',141,'Employer of',1,NULL,NULL), + (424,212,5,'b_a',141,'Employer of',56,'Employee of',1,NULL,NULL), + (425,213,5,'a_b',195,'Employee of',146,'Employer of',1,NULL,NULL), + (426,213,5,'b_a',146,'Employer of',195,'Employee of',1,NULL,NULL), + (427,214,5,'a_b',50,'Employee of',166,'Employer of',1,NULL,NULL), + (428,214,5,'b_a',166,'Employer of',50,'Employee of',1,NULL,NULL), + (429,215,5,'a_b',7,'Employee of',167,'Employer of',1,NULL,NULL), + (430,215,5,'b_a',167,'Employer of',7,'Employee of',1,NULL,NULL), + (431,216,5,'a_b',58,'Employee of',169,'Employer of',1,NULL,NULL), + (432,216,5,'b_a',169,'Employer of',58,'Employee of',1,NULL,NULL), + (433,217,5,'a_b',113,'Employee of',182,'Employer of',1,NULL,NULL), + (434,217,5,'b_a',182,'Employer of',113,'Employee of',1,NULL,NULL); /*!40000 ALTER TABLE `civicrm_relationship_cache` ENABLE KEYS */; UNLOCK TABLES; @@ -11877,89 +11890,89 @@ UNLOCK TABLES; LOCK TABLES `civicrm_subscription_history` WRITE; /*!40000 ALTER TABLE `civicrm_subscription_history` DISABLE KEYS */; INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES - (1,121,2,'2020-11-18 01:06:09','Email','Added',NULL), - (2,60,2,'2021-03-20 07:12:36','Email','Added',NULL), - (3,65,2,'2020-10-05 11:10:54','Admin','Added',NULL), - (4,39,2,'2021-03-08 10:49:20','Email','Added',NULL), - (5,58,2,'2021-01-13 21:08:36','Admin','Added',NULL), - (6,94,2,'2021-01-14 13:14:51','Admin','Added',NULL), - (7,164,2,'2020-08-24 01:27:36','Email','Added',NULL), - (8,81,2,'2021-03-17 07:21:16','Email','Added',NULL), - (9,187,2,'2021-03-04 00:10:47','Email','Added',NULL), - (10,195,2,'2020-10-25 02:01:03','Email','Added',NULL), - (11,69,2,'2021-02-02 11:00:37','Admin','Added',NULL), - (12,6,2,'2021-06-08 10:51:36','Admin','Added',NULL), - (13,4,2,'2021-07-02 18:33:00','Email','Added',NULL), - (14,173,2,'2021-03-16 00:43:35','Admin','Added',NULL), - (15,159,2,'2020-08-15 02:46:59','Email','Added',NULL), - (16,33,2,'2021-01-28 01:18:10','Email','Added',NULL), - (17,185,2,'2020-08-13 19:56:27','Admin','Added',NULL), - (18,19,2,'2020-08-27 20:46:44','Email','Added',NULL), - (19,103,2,'2021-02-20 11:20:02','Email','Added',NULL), - (20,10,2,'2021-04-05 01:54:11','Email','Added',NULL), - (21,153,2,'2020-12-13 01:03:09','Admin','Added',NULL), - (22,119,2,'2020-12-08 04:13:16','Email','Added',NULL), - (23,137,2,'2021-03-28 20:21:40','Admin','Added',NULL), - (24,52,2,'2021-06-15 09:10:39','Admin','Added',NULL), - (25,30,2,'2021-05-07 07:55:07','Admin','Added',NULL), - (26,165,2,'2021-06-17 23:10:46','Admin','Added',NULL), - (27,162,2,'2020-09-22 13:47:16','Admin','Added',NULL), - (28,131,2,'2021-03-23 15:24:02','Admin','Added',NULL), - (29,171,2,'2020-10-20 14:38:33','Email','Added',NULL), - (30,181,2,'2021-04-20 19:53:25','Email','Added',NULL), - (31,27,2,'2020-09-19 04:43:41','Email','Added',NULL), - (32,17,2,'2021-04-23 13:32:34','Admin','Added',NULL), - (33,37,2,'2021-05-19 12:03:48','Email','Added',NULL), - (34,149,2,'2020-12-31 18:28:15','Admin','Added',NULL), - (35,199,2,'2021-04-26 03:53:18','Admin','Added',NULL), - (36,115,2,'2021-05-03 06:30:49','Admin','Added',NULL), - (37,99,2,'2020-10-29 04:03:40','Email','Added',NULL), - (38,201,2,'2021-05-19 12:24:54','Email','Added',NULL), - (39,166,2,'2021-05-19 19:09:02','Admin','Added',NULL), - (40,138,2,'2021-06-19 15:12:00','Email','Added',NULL), - (41,61,2,'2020-09-19 08:59:13','Email','Added',NULL), - (42,56,2,'2020-07-28 22:28:32','Email','Added',NULL), - (43,172,2,'2020-11-13 07:30:27','Email','Added',NULL), - (44,157,2,'2021-04-10 01:30:38','Admin','Added',NULL), - (45,71,2,'2020-11-15 19:54:33','Admin','Added',NULL), - (46,32,2,'2021-06-12 08:50:15','Admin','Added',NULL), - (47,21,2,'2020-09-22 02:21:03','Admin','Added',NULL), - (48,25,2,'2021-02-17 23:14:19','Admin','Added',NULL), - (49,49,2,'2020-12-25 03:59:16','Email','Added',NULL), - (50,11,2,'2021-07-25 11:11:20','Email','Added',NULL), - (51,78,2,'2021-04-29 14:12:17','Email','Added',NULL), - (52,133,2,'2020-10-05 15:27:32','Admin','Added',NULL), - (53,184,2,'2020-09-24 15:33:49','Email','Added',NULL), - (54,198,2,'2021-01-01 19:00:56','Admin','Added',NULL), - (55,54,2,'2020-08-02 13:42:45','Email','Added',NULL), - (56,55,2,'2021-03-21 07:17:32','Admin','Added',NULL), - (57,111,2,'2021-05-26 08:38:56','Admin','Added',NULL), - (58,146,2,'2021-03-07 07:39:03','Email','Added',NULL), - (59,35,2,'2020-12-27 06:57:05','Email','Added',NULL), - (60,50,2,'2020-07-26 18:29:31','Email','Added',NULL), - (61,170,3,'2021-05-09 03:35:20','Email','Added',NULL), - (62,91,3,'2021-03-22 00:48:42','Admin','Added',NULL), - (63,13,3,'2021-02-24 21:26:02','Email','Added',NULL), - (64,134,3,'2020-12-10 13:38:39','Admin','Added',NULL), - (65,112,3,'2021-07-08 19:33:44','Email','Added',NULL), - (66,177,3,'2021-06-11 22:31:24','Email','Added',NULL), - (67,114,3,'2021-06-26 05:37:35','Email','Added',NULL), - (68,175,3,'2021-07-10 22:54:12','Email','Added',NULL), - (69,182,3,'2021-02-20 05:07:50','Email','Added',NULL), - (70,2,3,'2021-01-12 23:39:35','Admin','Added',NULL), - (71,90,3,'2021-05-31 09:10:54','Admin','Added',NULL), - (72,53,3,'2020-10-16 17:06:28','Admin','Added',NULL), - (73,80,3,'2020-08-12 11:37:58','Admin','Added',NULL), - (74,20,3,'2021-02-09 18:39:30','Admin','Added',NULL), - (75,41,3,'2020-12-13 23:20:42','Admin','Added',NULL), - (76,121,4,'2021-04-09 11:38:22','Email','Added',NULL), - (77,81,4,'2021-05-03 22:36:49','Email','Added',NULL), - (78,159,4,'2021-05-30 15:36:21','Email','Added',NULL), - (79,119,4,'2021-03-07 18:48:41','Email','Added',NULL), - (80,171,4,'2021-03-13 07:38:03','Admin','Added',NULL), - (81,115,4,'2020-08-25 20:58:06','Admin','Added',NULL), - (82,172,4,'2021-07-09 17:37:51','Email','Added',NULL), - (83,11,4,'2021-04-03 13:48:03','Admin','Added',NULL); + (1,104,2,'2021-04-08 01:12:45','Admin','Added',NULL), + (2,111,2,'2021-07-12 11:42:15','Admin','Added',NULL), + (3,105,2,'2021-07-08 05:01:34','Email','Added',NULL), + (4,48,2,'2021-01-06 05:01:51','Email','Added',NULL), + (5,4,2,'2020-12-29 23:37:50','Admin','Added',NULL), + (6,188,2,'2021-08-03 20:20:00','Admin','Added',NULL), + (7,130,2,'2021-02-01 15:10:11','Email','Added',NULL), + (8,200,2,'2021-02-28 11:02:55','Email','Added',NULL), + (9,107,2,'2020-10-23 12:59:12','Email','Added',NULL), + (10,195,2,'2021-07-29 06:16:39','Admin','Added',NULL), + (11,156,2,'2020-11-27 23:11:11','Email','Added',NULL), + (12,157,2,'2020-12-07 04:26:56','Admin','Added',NULL), + (13,121,2,'2021-05-19 21:15:46','Admin','Added',NULL), + (14,28,2,'2021-01-01 07:18:44','Admin','Added',NULL), + (15,172,2,'2020-11-21 07:25:31','Email','Added',NULL), + (16,39,2,'2021-04-16 07:48:23','Email','Added',NULL), + (17,13,2,'2021-02-09 02:46:33','Admin','Added',NULL), + (18,190,2,'2021-02-14 02:18:15','Admin','Added',NULL), + (19,138,2,'2021-08-23 04:26:13','Email','Added',NULL), + (20,191,2,'2020-12-19 07:51:21','Email','Added',NULL), + (21,7,2,'2021-08-26 20:14:40','Email','Added',NULL), + (22,67,2,'2021-06-25 23:06:27','Admin','Added',NULL), + (23,30,2,'2020-11-24 03:35:46','Email','Added',NULL), + (24,109,2,'2021-05-16 09:12:14','Admin','Added',NULL), + (25,98,2,'2021-06-02 09:27:22','Email','Added',NULL), + (26,94,2,'2021-08-12 20:44:08','Email','Added',NULL), + (27,116,2,'2021-09-06 18:39:40','Email','Added',NULL), + (28,32,2,'2021-09-15 02:03:20','Email','Added',NULL), + (29,12,2,'2021-02-21 01:54:02','Email','Added',NULL), + (30,88,2,'2021-06-30 20:12:33','Email','Added',NULL), + (31,99,2,'2021-10-03 20:29:01','Admin','Added',NULL), + (32,3,2,'2021-09-07 16:44:23','Email','Added',NULL), + (33,73,2,'2021-09-07 11:39:42','Email','Added',NULL), + (34,36,2,'2021-02-21 07:01:18','Admin','Added',NULL), + (35,53,2,'2021-10-06 02:14:58','Admin','Added',NULL), + (36,83,2,'2020-11-13 01:21:37','Admin','Added',NULL), + (37,132,2,'2021-01-08 18:51:38','Admin','Added',NULL), + (38,171,2,'2020-10-25 04:27:13','Admin','Added',NULL), + (39,152,2,'2021-01-20 14:12:42','Email','Added',NULL), + (40,149,2,'2021-03-18 11:07:07','Email','Added',NULL), + (41,199,2,'2021-08-03 13:05:06','Admin','Added',NULL), + (42,165,2,'2020-11-19 15:01:24','Email','Added',NULL), + (43,25,2,'2021-08-27 23:04:01','Admin','Added',NULL), + (44,27,2,'2020-10-20 21:03:39','Email','Added',NULL), + (45,163,2,'2021-02-06 21:51:51','Admin','Added',NULL), + (46,8,2,'2021-06-26 13:14:11','Admin','Added',NULL), + (47,103,2,'2021-06-11 22:03:12','Email','Added',NULL), + (48,23,2,'2020-11-19 13:06:30','Admin','Added',NULL), + (49,69,2,'2020-12-02 23:40:29','Admin','Added',NULL), + (50,38,2,'2021-08-14 10:52:55','Email','Added',NULL), + (51,122,2,'2021-06-03 06:27:34','Admin','Added',NULL), + (52,55,2,'2021-09-16 23:01:13','Admin','Added',NULL), + (53,63,2,'2021-10-12 16:58:42','Admin','Added',NULL), + (54,72,2,'2021-01-19 10:31:59','Email','Added',NULL), + (55,136,2,'2021-01-17 07:56:47','Email','Added',NULL), + (56,142,2,'2021-01-10 16:12:26','Email','Added',NULL), + (57,18,2,'2021-07-07 02:44:45','Email','Added',NULL), + (58,44,2,'2021-02-20 05:59:51','Email','Added',NULL), + (59,179,2,'2020-12-16 12:03:28','Admin','Added',NULL), + (60,57,2,'2020-12-07 07:08:44','Admin','Added',NULL), + (61,114,3,'2020-12-26 20:06:55','Admin','Added',NULL), + (62,15,3,'2020-10-18 21:21:24','Admin','Added',NULL), + (63,128,3,'2021-05-06 08:17:43','Admin','Added',NULL), + (64,85,3,'2020-11-01 05:28:35','Admin','Added',NULL), + (65,139,3,'2020-10-30 12:33:46','Email','Added',NULL), + (66,194,3,'2021-07-08 02:06:21','Email','Added',NULL), + (67,43,3,'2021-03-22 01:50:45','Email','Added',NULL), + (68,26,3,'2021-08-04 17:48:55','Email','Added',NULL), + (69,47,3,'2021-03-10 23:26:48','Email','Added',NULL), + (70,61,3,'2020-11-30 18:48:44','Admin','Added',NULL), + (71,54,3,'2021-09-27 17:59:22','Email','Added',NULL), + (72,175,3,'2020-12-26 21:17:02','Admin','Added',NULL), + (73,70,3,'2020-12-12 09:58:11','Email','Added',NULL), + (74,24,3,'2021-05-08 22:05:16','Email','Added',NULL), + (75,49,3,'2021-01-17 00:49:29','Admin','Added',NULL), + (76,104,4,'2021-07-03 05:12:46','Email','Added',NULL), + (77,200,4,'2020-10-30 16:08:16','Email','Added',NULL), + (78,172,4,'2021-05-22 23:27:36','Email','Added',NULL), + (79,67,4,'2021-05-24 02:03:24','Admin','Added',NULL), + (80,12,4,'2021-02-25 12:47:30','Email','Added',NULL), + (81,83,4,'2021-08-19 05:30:12','Email','Added',NULL), + (82,25,4,'2021-06-12 10:44:40','Email','Added',NULL), + (83,38,4,'2021-06-04 22:03:09','Admin','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -12176,23 +12189,21 @@ UNLOCK TABLES; LOCK TABLES `civicrm_website` WRITE; /*!40000 ALTER TABLE `civicrm_website` DISABLE KEYS */; INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES - (1,179,'http://kaneohetrust.org',1), - (2,167,'http://urbancenter.org',1), - (3,154,'http://charlotteassociation.org',1), - (4,88,'http://globalsystems.org',1), - (5,70,'http://dowlentechnology.org',1), - (6,191,'http://ruralmusic.org',1), - (7,188,'http://jacksoneducation.org',1), - (8,57,'http://cornettsvilleliteracy.org',1), - (9,109,'http://ruralalliance.org',1), - (10,34,'http://ruralsustainability.org',1), - (11,152,'http://creativeassociation.org',1), - (12,76,'http://secondpartners.org',1), - (13,97,'http://sierrasystems.org',1), - (14,125,'http://dawsonassociation.org',1), - (15,31,'http://idahocollective.org',1), - (16,120,'http://parrishadvocacyinitiative.org',1), - (17,73,'http://dowlenculturetrust.org',1); + (1,167,'http://lincolncollective.org',1), + (2,95,'http://acpoetryassociation.org',1), + (3,42,'http://ruraltrust.org',1), + (4,169,'http://ssartsassociation.org',1), + (5,81,'http://globaltrust.org',1), + (6,134,'http://sierrafoodservices.org',1), + (7,141,'http://urbanempowerment.org',1), + (8,125,'http://lhtechnologycollective.org',1), + (9,68,'http://oklahomaartscollective.org',1), + (10,173,'http://mchealthnetwork.org',1), + (11,100,'http://hawaiicenter.org',1), + (12,14,'http://greenassociation.org',1), + (13,87,'http://boisepartners.org',1), + (14,129,'http://globalfellowship.org',1), + (15,182,'http://globaleducationsystems.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -12224,12 +12235,13 @@ UNLOCK TABLES; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2021-07-26 14:08:52 +-- Dump completed on 2021-10-13 21:23:56 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | diff --git a/civicrm/sql/civicrm_navigation.mysql b/civicrm/sql/civicrm_navigation.mysql index 1fd598695d5996f32081774662fd7e1bb313794e..e4cf1d39fcead9d7ccdae9992f115779018a925b 100644 --- a/civicrm/sql/civicrm_navigation.mysql +++ b/civicrm/sql/civicrm_navigation.mysql @@ -34,7 +34,7 @@ INSERT INTO `civicrm_dashboard` -- event badge INSERT INTO civicrm_print_label (title, name, description, label_format_name, label_type_id, is_default, is_reserved, is_active, data) VALUES -('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}'); +('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date|crmDate:\"%B %E%f\"}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}'); -- navigation diff --git a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl index 4b26623da3be42b3a85cfd5265be18f9bb0236ec..b8eeb9dda58125e48664494d450f8ddfaf8678b9 100644 --- a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl @@ -14,7 +14,7 @@ </td> </tr> <tr> - {if $form.activity_type_id} + {if !empty($form.activity_type_id)} <td><label>{$form.activity_type_id.label}</label> <br /> {$form.activity_type_id.html} @@ -22,9 +22,9 @@ {else} <td> </td> {/if} - {if $form.activity_survey_id || $buildEngagementLevel} + {if !empty($form.activity_survey_id) || $buildEngagementLevel} <td> - {if $form.activity_survey_id} + {if !empty($form.activity_survey_id)} <label>{$form.activity_survey_id.label}</label> <br/> {$form.activity_survey_id.html} @@ -43,14 +43,14 @@ <td> <table> <tr><td> - {if $form.parent_id} + {if !empty($form.parent_id)} <label>{ts}Has a Followup Activity?{/ts}</label> <br/> {$form.parent_id.html} {/if} </td></tr> <tr><td> - {if $form.followup_parent_id} + {if !empty($form.followup_parent_id)} <label>{ts}Is a Followup Activity?{/ts}</label> <br/> {$form.followup_parent_id.html} @@ -60,7 +60,7 @@ </td> </tr> -{if $form.activity_tags} +{if !empty($form.activity_tags)} <tr> <td><label>{$form.activity_tags.label}</label> <br/> diff --git a/civicrm/templates/CRM/Activity/Form/Selector.tpl b/civicrm/templates/CRM/Activity/Form/Selector.tpl index c8ac5d4ed1c2fb56c19a3e92bb39ffb233df3de1..cdd6fb7a1f8ea34e8250788ddf1b9859beb05113 100644 --- a/civicrm/templates/CRM/Activity/Form/Selector.tpl +++ b/civicrm/templates/CRM/Activity/Form/Selector.tpl @@ -21,10 +21,12 @@ {/if} {foreach from=$columnHeaders item=header} <th scope="col"> - {if $header.sort} + {if isset($header.sort)} {assign var='key' value=$header.sort} - {$sort->_response.$key.link} - {else} + {if !empty($sort)} + {$sort->_response.$key.link} + {/if} + {elseif isset($header.name)} {$header.name} {/if} </th> @@ -52,22 +54,20 @@ {/if} </td> - <td>{$row.activity_subject}</td> + <td>{if isset($row.activity_subject)}{$row.activity_subject|purify}{/if}</td> <td> {if !$row.source_contact_id} <em>n/a</em> - {elseif $contactId NEQ $row.source_contact_id} - <a href="{crmURL p='civicrm/contact/view' q="reset=1&cid=`$row.source_contact_id`"}" title="{ts}View contact{/ts}">{$row.source_contact_name}</a> {else} - {$row.source_contact_name} + <a href="{crmURL p='civicrm/contact/view' q="reset=1&cid=`$row.source_contact_id`"}" title="{ts}View contact{/ts}">{$row.source_contact_name|purify}</a> {/if} </td> <td> {if $row.mailingId} <a href="{$row.mailingId}" title="{ts}View Mailing Report{/ts}">{$row.recipients}</a> - {elseif $row.recipients} + {elseif isset($row.recipients)} {$row.recipients} {elseif !$row.target_contact_name} <em>n/a</em> @@ -102,7 +102,14 @@ <td>{$row.activity_status}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td> + {if (!empty($row.id))} + {$row.action|replace:'xx':$row.id} + {else} + {$row.action} + {/if} + </td> + </tr> {/foreach} diff --git a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl index ddff12a700086625b77b706381ea0c0caa0601e5..d00fb30478bc989f0d82dfcc00bf62a3875267da 100644 --- a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl @@ -118,7 +118,7 @@ </div><!-- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> - {if !$workflow_id} + {if !$isWorkflow} <table class="form-layout-compressed"> <tr> <td class="label-left">{$form.is_active.label}</td> diff --git a/civicrm/templates/CRM/Admin/Form/Navigation.tpl b/civicrm/templates/CRM/Admin/Form/Navigation.tpl index 5885b230cbcb752cdb7a386027d6e624b330ecce..3a37bbc79cba81535b2cbce198c0bde91b5fd1d7 100644 --- a/civicrm/templates/CRM/Admin/Form/Navigation.tpl +++ b/civicrm/templates/CRM/Admin/Form/Navigation.tpl @@ -22,7 +22,7 @@ <td class="label">{$form.icon.label} {help id="id-menu_icon" file="CRM/Admin/Form/Navigation.hlp"}</td> <td>{$form.icon.html} </td> </tr> - {if $form.parent_id.html} + {if !empty($form.parent_id.html)} <tr class="crm-navigation-form-block-parent_id"> <td class="label">{$form.parent_id.label} {help id="id-parent" file="CRM/Admin/Form/Navigation.hlp"}</td> <td>{$form.parent_id.html}</td> diff --git a/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl b/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl index a18fde994390712388d7e0a3a3305620b6775f66..28827b440979d4156001877ab4fd5a521427db62 100644 --- a/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl +++ b/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl @@ -58,37 +58,37 @@ <tr class="crm-paymentProcessor-form-block-user_name"> <td class="label">{$form.user_name.label}</td><td>{$form.user_name.html} {help id=$ppTypeName|cat:'-live-user-name' title=$form.user_name.label}</td> </tr> -{if $form.password} +{if !empty($form.password)} <tr class="crm-paymentProcessor-form-block-password"> <td class="label">{$form.password.label}</td><td>{$form.password.html} {help id=$ppTypeName|cat:'-live-password' title=$form.password.label}</td> </tr> {/if} -{if $form.signature} +{if !empty($form.signature)} <tr class="crm-paymentProcessor-form-block-signature"> <td class="label">{$form.signature.label}</td><td>{$form.signature.html} {help id=$ppTypeName|cat:'-live-signature' title=$form.signature.label}</td> </tr> {/if} -{if $form.subject} +{if !empty($form.subject)} <tr class="crm-paymentProcessor-form-block-subject"> <td class="label">{$form.subject.label}</td><td>{$form.subject.html} {help id=$ppTypeName|cat:'-live-subject' title=$form.subject.label}</td> </tr> {/if} -{if $form.url_site} +{if !empty($form.url_site)} <tr class="crm-paymentProcessor-form-block-url_site"> <td class="label">{$form.url_site.label}</td><td>{$form.url_site.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-live-url-site' title=$form.url_site.label}</td> </tr> {/if} -{if $form.url_api} +{if !empty($form.url_api)} <tr class="crm-paymentProcessor-form-block-url_api"> <td class="label">{$form.url_api.label}</td><td>{$form.url_api.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-live-url-api' title=$form.url_api.label}</td> </tr> {/if} -{if $form.url_recur} +{if !empty($form.url_recur)} <tr class="crm-paymentProcessor-form-block-url_recur"> <td class="label">{$form.url_recur.label}</td><td>{$form.url_recur.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-live-url-recur' title=$form.url_recur.label}</td> </tr> {/if} -{if $form.url_button} +{if !empty($form.url_button)} <tr class="crm-paymentProcessor-form-block-url_button"> <td class="label">{$form.url_button.label}</td><td>{$form.url_button.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-live-url-button' title=$form.url_button.label}</td> </tr> @@ -101,37 +101,37 @@ <table class="form-layout-compressed"> <tr class="crm-paymentProcessor-form-block-test_user_name"> <td class="label">{$form.test_user_name.label}</td><td>{$form.test_user_name.html} {help id=$ppTypeName|cat:'-test-user-name' title=$form.test_user_name.label}</td></tr> -{if $form.test_password} +{if !empty($form.test_password)} <tr class="crm-paymentProcessor-form-block-test_password"> <td class="label">{$form.test_password.label}</td><td>{$form.test_password.html} {help id=$ppTypeName|cat:'-test-password' title=$form.test_password.label}</td> </tr> {/if} -{if $form.test_signature} +{if !empty($form.test_signature)} <tr class="crm-paymentProcessor-form-block-test_signature"> <td class="label">{$form.test_signature.label}</td><td>{$form.test_signature.html} {help id=$ppTypeName|cat:'-test-signature' title=$form.test_signature.label}</td> </tr> {/if} -{if $form.test_subject} +{if !empty($form.test_subject)} <tr class="crm-paymentProcessor-form-block-test_subject"> <td class="label">{$form.test_subject.label}</td><td>{$form.test_subject.html} {help id=$ppTypeName|cat:'-test-subject' title=$form.test_subject.label}</td> </tr> {/if} -{if $form.test_url_site} +{if !empty($form.test_url_site)} <tr class="crm-paymentProcessor-form-block-test_url_site"> <td class="label">{$form.test_url_site.label}</td><td>{$form.test_url_site.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-test-url-site' title=$form.test_url_site.label}</td> </tr> {/if} -{if $form.test_url_api} +{if !empty($form.test_url_api)} <tr class="crm-paymentProcessor-form-block-test_url_api"> <td class="label">{$form.test_url_api.label}</td><td>{$form.test_url_api.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-test-url-api' title=$form.test_url_api.label}</td> </tr> {/if} -{if $form.test_url_recur} +{if !empty($form.test_url_recur)} <tr class="crm-paymentProcessor-form-block-test_url_recur"> <td class="label">{$form.test_url_recur.label}</td><td>{$form.test_url_recur.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-test-url-recur' title=$form.test_url_recur.label}</td> </tr> {/if} -{if $form.test_url_button} +{if !empty($form.test_url_button)} <tr class="crm-paymentProcessor-form-block-test_url_button"> <td class="label">{$form.test_url_button.label}</td><td>{$form.test_url_button.html|crmAddClass:huge} {help id=$ppTypeName|cat:'-test-url-button' title=$form.test_url_button.label}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl index fa3cfc362948c7906537e5ec73eaa5c8ab6ef29b..0643d07a43b964aa97a37b74261defedcebda96a 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl @@ -212,7 +212,7 @@ </table> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> </div> -{if $form.contact_edit_options.html} +{if !empty($form.contact_edit_options.html)} {literal} <script type="text/javascript"> CRM.$(function($) { diff --git a/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl b/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl index ff038441843e52e78ed2ede2c42737ddb97048f6..a31f0b7f7903862cf8e1a6c42c2e818b5a5f015f 100644 --- a/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl +++ b/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl @@ -20,7 +20,7 @@ <tr class="crm-preferences-date-form-block-date_format"> <td class="label">{$form.date_format.label}</td><td>{$form.date_format.html}</td> </tr> - {if $form.time_format.label} + {if !empty($form.time_format.label)} <tr class="crm-preferences-date-form-block-time_format"> <td class="label">{$form.time_format.label}</td><td>{$form.time_format.html}</td> </tr> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl index de22fc47b2c384db4b6143110c598bd90cc3a745..ea82fd5f11cf7568e516af6d7014e3847c3e5b9c 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl @@ -19,7 +19,7 @@ <td class="label">{$form.lcMessages.label}</td> <td>{$form.lcMessages.html}</td> </tr> - {if $form.languageLimit} + {if !empty($form.languageLimit)} <tr class="crm-localization-form-block-languageLimit"> <td class="label">{$form.languageLimit.label}</td> <td>{$form.languageLimit.html}<br /> @@ -37,7 +37,7 @@ <span class="description">{$settings_fields.inheritLocale.description}</span> </td> </tr> - {if !$form.languageLimit} + {if empty($form.languageLimit)} <tr class="crm-localization-form-block-uiLanguages"> <td class="label">{$form.uiLanguages.label}</td> <td>{$form.uiLanguages.html}</td> @@ -104,7 +104,7 @@ </table> <h3>{ts}Multiple Languages Support{/ts}</h3> <table class="form-layout-compressed"> - {if $form.makeSinglelingual} + {if !empty($form.makeSinglelingual)} <tr class="crm-localization-form-block-makeSinglelingual_description"> <td></td> <td><span class="description">{ts 1="http://documentation.civicrm.org"}This is a multilingual installation. It contains certain schema differences compared to regular installations of CiviCRM. Please <a href="%1">refer to the documentation</a> for details.{/ts}</span></td> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl index 6b761b840eabe38d8304223a833faf29c1f06f2c..bb7fc8892cf3b741b26a29abaf4348098ef97fea 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl @@ -53,6 +53,24 @@ <p class="description">{ts}When generating a letter (PDF/Word) via mail-merge, how should the letter be recorded?{/ts}</p> </td> </tr> + <tr class="crm-miscellaneous-form-block-dompdf_font_dir"> + <td class="label">{$form.dompdf_font_dir.label}</td> + <td>{$form.dompdf_font_dir.html}<br /> + <p class="description">{ts}Additional folder where DOMPDF will look for fonts.{/ts}</p> + </td> + </tr> + <tr class="crm-miscellaneous-form-block-dompdf_chroot"> + <td class="label">{$form.dompdf_chroot.label}</td> + <td>{$form.dompdf_chroot.html}<br /> + <p class="description">{ts}Folder to restrict where DOMPDF looks when loading local images. By default it is the DOMPDF folder itself for security reasons. It will search in subfolders.{/ts}</p> + </td> + </tr> + <tr class="crm-miscellaneous-form-block-dompdf_enable_remote"> + <td class="label">{$form.dompdf_enable_remote.label}</td> + <td>{$form.dompdf_enable_remote.html}<br /> + <p class="description">{ts}Enable the use of remote images. By default this is enabled, but if not using remote images you may wish to turn it off for security reasons.{/ts}</p> + </td> + </tr> <tr class="crm-miscellaneous-form-block-wkhtmltopdfPath"> <td class="label">{$form.wkhtmltopdfPath.label}</td> <td>{$form.wkhtmltopdfPath.html}<br /> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl b/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl index 79d31141756433a5d0beca5c6e1d4b1ac2b3888c..0f9398cbd3076bad9a9bb60fb937fd1dcd5b9d95 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl @@ -17,7 +17,7 @@ <td class="label">{$form.userFrameworkUsersTableName.label}</td> <td>{$form.userFrameworkUsersTableName.html}</td> </tr> - {if $form.wpBasePage} + {if !empty($form.wpBasePage)} <tr class="crm-uf-form-block-wpBasePage"> <td class="label">{$form.wpBasePage.label}</td> <td>{$config->userFrameworkBaseURL}{$form.wpBasePage.html} diff --git a/civicrm/templates/CRM/Admin/Page/ExtensionDetails.tpl b/civicrm/templates/CRM/Admin/Page/ExtensionDetails.tpl index c28c33f566b42e899d9dfb6230d7d4e5eacb640f..46413b0e39a3b4a13a291fc8521f43b06df293a0 100644 --- a/civicrm/templates/CRM/Admin/Page/ExtensionDetails.tpl +++ b/civicrm/templates/CRM/Admin/Page/ExtensionDetails.tpl @@ -60,7 +60,7 @@ </td> </tr> <tr> - <td class="label">{ts}Local path{/ts}</td><td>{$extension.path|escape}</td> + <td class="label">{ts}Local path{/ts}</td><td>{if !empty($extension.path)}{$extension.path|escape}{/if}</td> </tr> {if !empty($extension.downloadUrl)} <tr> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl index 2cfa693a96afbcb1fa5402818162decc9fe36efd..e3e2c0207802b9cdaf7b327a550ee04658b788b2 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl @@ -17,7 +17,7 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl </thead> <tbody> {foreach from=$remoteExtensionRows key=extKey item=row} - {if $localExtensionRows[$extKey]} + {if !empty($localExtensionRows[$extKey])} {continue} {/if} <tr id="addnew-row_{$row.file}" class="crm-extensions crm-extensions_{$row.file}"> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl index 9425b176001d3f05f36507f3ef77dd98d4fc5728..8e2a65b155645d2d034185f94275d3b0a9f0689d 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl @@ -28,7 +28,7 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl </td> <td class="crm-extensions-status">{$row.statusLabel} </td> <td class="crm-extensions-version">{$row.version|escape} - {if ($row.develStage and $row.develStage != 'stable') or preg_match(";(alpha|beta|dev);", $row.version)} + {if (!empty($row.develStage) and $row.develStage != 'stable') or preg_match(";(alpha|beta|dev);", $row.version)} {icon icon="fa-flask crm-extensions-stage"}{ts}This is a pre-release version. For more details, see the expanded description.{/ts}{/icon} {else} {icon icon="fa-check-circle crm-extensions-stage"}{ts}This is a stable release version.{/ts}{/icon} diff --git a/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl b/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl index 32b4ae8c5944ee884a8cd061b5371544b9508952..87dd610dbd67f274982db7b1636d6b790e7aa60e 100644 --- a/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl +++ b/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl @@ -15,7 +15,7 @@ </td> </tr> -<tr id="option_group" {if !$form.option_group_id}class="hiddenElement"{/if}> +<tr id="option_group" {if empty($form.option_group_id)}class="hiddenElement"{/if}> <td class="label">{$form.option_group_id.label}</td> <td class="html-adjust">{$form.option_group_id.html}</td> </tr> diff --git a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl index 791817b4623af0253c4272babd3b46af49fb4d09..d92963147b47caf52a08298902005a96a5dc5254 100644 --- a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl +++ b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.tpl @@ -6,7 +6,9 @@ <tr class="{$campaignTrClass}"> {assign var=elementName value=$campaignInfo.elementName} <td class="{$campaignTdClass}"> - {$form.$elementName.label} {$form.$elementName.html} + {if isset($form.$elementName)} + {$form.$elementName.label} {$form.$elementName.html} + {/if} </td> </tr> diff --git a/civicrm/templates/CRM/Case/Form/Activity.tpl b/civicrm/templates/CRM/Case/Form/Activity.tpl index 7df7770d7044f43a612f603354859c093bf79b00..4e243b3415215134c93e9d63033b5f04ad305eb4 100644 --- a/civicrm/templates/CRM/Case/Form/Activity.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity.tpl @@ -233,7 +233,7 @@ </td> </tr> {/if} - {if $form.tag.html} + {if !empty($form.tag.html)} <tr class="crm-case-activity-form-block-tag"> <td class="label">{$form.tag.label}</td> <td class="view-value"> diff --git a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl index 32ee2e940932e4c554a6e6d9fa3ae07494c8849e..36c5aa293b180eb13ac969caeec054a8d17808e2 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl @@ -45,7 +45,7 @@ {$form.activity_type_filter_id.html} </td> </tr> - {if $form.activity_deleted} + {if !empty($form.activity_deleted)} <tr class="crm-case-caseview-form-block-activity_deleted"> <td> {$form.activity_deleted.html}{$form.activity_deleted.label} diff --git a/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl b/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl index 8d9b69525263d0d31157b7c6e3de8ba78470e1de..353d1d46d7bd281c254ef90ec20ae142a4380522 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl @@ -44,7 +44,7 @@ } var dataUrl = {/literal}"{crmURL p='civicrm/case/addToCase' q='reset=1' h=0}"{literal}; - dataUrl += '&activityId=' + activityID + '&caseId=' + currentCaseId + '&cid=' + {/literal}"{$contactID}"{literal} + '&fileOnCaseAction=' + action; + dataUrl += '&activityId=' + activityID + '&caseId=' + currentCaseId + '&cid=' + {/literal}"{if !empty($contactID)}{$contactID}{/if}"{literal} + '&fileOnCaseAction=' + action; function save() { if (!$("#file_on_case_unclosed_case_id").val()) { diff --git a/civicrm/templates/CRM/Case/Form/Case.tpl b/civicrm/templates/CRM/Case/Form/Case.tpl index 5812bcab0fdf00f5156499a7b2234ec0d7543027..ef2bbef2a2f6adf85c1b3c8c1dbb379729bcb7a7 100644 --- a/civicrm/templates/CRM/Case/Form/Case.tpl +++ b/civicrm/templates/CRM/Case/Form/Case.tpl @@ -53,7 +53,7 @@ </tr> {/if} -{if $form.activity_details.html} +{if !empty($form.activity_details.html)} <tr class="crm-case-form-block-activity_details"> <td class="label">{$form.activity_details.label}{help id="id-details" activityTypeFile=$activityTypeFile file="CRM/Case/Form/Case.hlp"}</td> <td class="view-value">{$form.activity_details.html|crmStripAlternatives}</td> @@ -68,7 +68,7 @@ </tr> {/if} -{if $form.activity_subject.html} +{if !empty($form.activity_subject.html)} <tr class="crm-case-form-block-activity_subject"> <td class="label">{$form.activity_subject.label}{help id="id-activity_subject" activityTypeFile=$activityTypeFile file="CRM/Case/Form/Case.hlp"}</td> <td>{$form.activity_subject.html|crmAddClass:huge}</td> @@ -80,7 +80,7 @@ {include file="CRM/Case/Form/Activity/$activityTypeFile.tpl"} {/if} -{if $form.duration.html} +{if !empty($form.duration.html)} <tr class="crm-case-form-block-duration"> <td class="label">{$form.duration.label}</td> <td class="view-value"> diff --git a/civicrm/templates/CRM/Case/Form/CaseView.tpl b/civicrm/templates/CRM/Case/Form/CaseView.tpl index 89c46727780a3d9046b6473ef1541c5642dd945a..0c2422ba0323f8c4b5efc8d58760fdf9ef38b634 100644 --- a/civicrm/templates/CRM/Case/Form/CaseView.tpl +++ b/civicrm/templates/CRM/Case/Form/CaseView.tpl @@ -45,7 +45,7 @@ {foreach from=$caseRoles.client item=client} <tr class="crm-case-caseview-display_name"> <td class="label-left bold" style="padding: 0px; border: none;"> - <a href="{crmURL p='civicrm/contact/view' q="action=view&reset=1&cid=`$client.contact_id`"}" title="{ts}View contact record{/ts}">{$client.display_name}</a>{if $client.email}{crmAPI var='email_type_id' entity='OptionValue' action='getsingle' return="value" name="Email" option_group_id="activity_type"}<span class="crm-case-caseview-email"><a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/activity/email/add' q="reset=1&action=add&atype=`$email_type_id.value`&cid=`$client.contact_id`&caseid=`$caseId`"}" title="{ts 1=$client.email|escape}Email: %1{/ts}"><i class="crm-i fa-envelope" aria-hidden="true"></i></a></span>{/if} + <a href="{crmURL p='civicrm/contact/view' q="action=view&reset=1&cid=`$client.contact_id`"}" title="{ts}View contact record{/ts}">{$client.display_name}</a>{if $client.email}{crmAPI var='email_type_id' entity='OptionValue' action='getsingle' return="value" name="Email" option_group_id="activity_type"}<span class="crm-case-caseview-email"><a class="crm-hover-button crm-popup" href="{crmURL p='civicrm/case/email/add' q="reset=1&action=add&atype=`$email_type_id.value`&cid=`$client.contact_id`&caseid=`$caseId`"}" title="{ts 1=$client.email|escape}Email: %1{/ts}"><i class="crm-i fa-envelope" aria-hidden="true"></i></a></span>{/if} </td> </tr> {if $client.phone} diff --git a/civicrm/templates/CRM/Case/Form/Search/Common.tpl b/civicrm/templates/CRM/Case/Form/Search/Common.tpl index 84bf8a8a1d107f1e8421f93e1f5bcd513f3c2349..dc9d0121f24217d306f7f15bd18f57a8ab82f761 100644 --- a/civicrm/templates/CRM/Case/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Case/Form/Search/Common.tpl @@ -41,7 +41,7 @@ <br /> {$form.case_owner.html} {/if} - {if $form.case_deleted} + {if !empty($form.case_deleted)} <br /> {$form.case_deleted.html} {$form.case_deleted.label} diff --git a/civicrm/templates/CRM/Case/Form/Task/Email.tpl b/civicrm/templates/CRM/Case/Form/Task/Email.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b47a6c442a15b6038ef5d8e5f3be1b2926245426 --- /dev/null +++ b/civicrm/templates/CRM/Case/Form/Task/Email.tpl @@ -0,0 +1 @@ +{include file="CRM/Contact/Form/Task/Email.tpl"} diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl index 5139e05ee1fec672d07c681c9bc4026840473300..ed18ebcd9e628cf0c8203258f2e4ae0cb2714dea 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl @@ -8,19 +8,9 @@ +--------------------------------------------------------------------+ *} {* tpl for building Individual related fields *} -<script type="text/javascript"> -{literal} -CRM.$(function($) { - if ($('#contact_sub_type *').length == 0) {//if they aren't any subtype we don't offer the option - $('#contact_sub_type').parent().hide(); - } -}); -</script> -{/literal} - <table class="form-layout-compressed"> <tr> - {if $form.prefix_id} + {if !empty($form.prefix_id)} <td> {$form.prefix_id.label}<br/> {$form.prefix_id.html} @@ -32,19 +22,19 @@ CRM.$(function($) { {$form.formal_title.html} </td> {/if} - {if $form.first_name} + {if !empty($form.first_name)} <td> {$form.first_name.label}<br /> {$form.first_name.html} </td> {/if} - {if $form.middle_name} + {if !empty($form.middle_name)} <td> {$form.middle_name.label}<br /> {$form.middle_name.html} </td> {/if} - {if $form.last_name} + {if !empty($form.last_name)} <td> {$form.last_name.label}<br /> {$form.last_name.html} @@ -71,9 +61,11 @@ CRM.$(function($) { {$form.nick_name.label}<br /> {$form.nick_name.html} </td> + {if !empty($form.contact_sub_type)} <td> {$form.contact_sub_type.label}<br /> {$form.contact_sub_type.html} </td> + {/if} </tr> </table> diff --git a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl index 2a867ae8522dc1eb1515512893e7f8421b03cb0b..379afb93b8b274e4346f358cf84283b05bd1483a 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl @@ -14,37 +14,37 @@ {include file="CRM/common/formButtons.tpl"} </div> {if $contactType eq 'Individual'} - {if $form.prefix_id} + {if !empty($form.prefix_id)} <div class="crm-inline-edit-field"> {$form.prefix_id.label}<br/> {$form.prefix_id.html} </div> {/if} - {if $form.formal_title} + {if !empty($form.formal_title)} <div class="crm-inline-edit-field"> {$form.formal_title.label}<br/> {$form.formal_title.html} </div> {/if} - {if $form.first_name} + {if !empty($form.first_name)} <div class="crm-inline-edit-field"> {$form.first_name.label}<br /> {$form.first_name.html} </div> {/if} - {if $form.middle_name} + {if !empty($form.middle_name)} <div class="crm-inline-edit-field"> {$form.middle_name.label}<br /> {$form.middle_name.html} </div> {/if} - {if $form.last_name} + {if !empty($form.last_name)} <div class="crm-inline-edit-field"> {$form.last_name.label}<br /> {$form.last_name.html} </div> {/if} - {if $form.suffix_id} + {if !empty($form.suffix_id)} <div class="crm-inline-edit-field"> {$form.suffix_id.label}<br/> {$form.suffix_id.html} diff --git a/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl b/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl index 955b08bbeaacd5eb77bdab98b07d636256b91501..ed4a96f847d464a24deaf9c3411950a8c85b5b89 100644 --- a/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl +++ b/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl @@ -182,7 +182,7 @@ </fieldset> -{if $form.is_for_organization} +{if !empty($form.is_for_organization)} {include file="CRM/common/showHideByFieldValue.tpl" trigger_field_id ="is_for_organization" trigger_value ="true" diff --git a/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl b/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl index 8042da1785b29ee94b694199298b6084addda775..2557db3713c74dae2892c580f6fcc27ad161a6d4 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl @@ -35,7 +35,7 @@ <div class="clear"></div> </div> - {if $form.contact_type} + {if !empty($form.contact_type)} <div class="crm-section contact_type-section"> <div class="label"> {$form.contact_type.label} @@ -47,7 +47,7 @@ </div> {/if} - {if $form.group} + {if !empty($form.group)} <div class="crm-section group_selection-section"> <div class="label"> {if $context EQ 'smog'} @@ -67,7 +67,7 @@ </div> {/if} - {if $form.tag} + {if !empty($form.tag)} <div class="crm-section tag-section"> <div class="label"> {$form.tag.label} diff --git a/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl b/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl index dded60f42c52adf101c568b375722990d78f3232..2941f228ee6ffde2b5ab8ab90ca73bfe581b2ab2 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl @@ -7,7 +7,7 @@ <td>{$form.buttons.html}</td> </tr> <tr> - {if $form.contact_tags} + {if !empty($form.contact_tags)} <td> <label>{$form.contact_tags.label}</label> <br> @@ -17,7 +17,7 @@ <td> </td> {/if} - {if $form.group} + {if !empty($form.group)} <td> <label>{$form.group.label}</label> <br> @@ -34,7 +34,7 @@ {$form.contact_type.html} </td> <td> - {if $form.deleted_contacts} + {if !empty($form.deleted_contacts)} {$form.deleted_contacts.html} {$form.deleted_contacts.label} {/if} </td> diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/DisplaySettings.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/DisplaySettings.tpl index 997957014fa74341cf68053234e9aab6f74b88cb..7a969b8514c21bc167cf7add62ab99e132321b66 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/DisplaySettings.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/DisplaySettings.tpl @@ -2,11 +2,11 @@ <table> <tr> <td> - {if $form.component_mode} + {if !empty($form.component_mode)} {$form.component_mode.label} {help id="id-display-results"} <br /> {$form.component_mode.html} - {if $form.display_relationship_type} + {if !empty($form.display_relationship_type)} <div id="crm-display_relationship_type">{$form.display_relationship_type.html}</div> {/if} {else} diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl index 251b7817538d157baa11a36f5576ab99e076df5a..fcabbdc323734717c2fcf99d0bffe0a30753c514 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl @@ -72,13 +72,13 @@ <div>{$form.location_type.label} {help id="location_type" title=$form.location_type.label}</div> {$form.location_type.html} </div> - {if $form.address_name.html} + {if !empty($form.address_name.html)} <div class="crm-field-wrapper"> {$form.address_name.label}<br /> {$form.address_name.html} </div> {/if} - {if $form.postal_code.html} + {if !empty($form.postal_code.html)} <div class="crm-field-wrapper"> {$form.postal_code.label} <input type="checkbox" id="postal-code-range-toggle" value="1"/> @@ -109,7 +109,7 @@ {/literal} </script> {/if} - {if $form.prox_distance.html} + {if !empty($form.prox_distance.html)} <div class="crm-field-wrapper"> {$form.prox_distance.label}<br /> {$form.prox_distance.html} {$form.prox_distance_unit.html} diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/SearchSettings.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/SearchSettings.tpl index c835f8c2637bf97a92c3420f211350aa401e2d40..15b93a640be4293ac932e6b7738cb848fed053d2 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/SearchSettings.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/SearchSettings.tpl @@ -3,7 +3,7 @@ <tr> <td>{$form.operator.label} {help id="id-search-operator"}<br />{$form.operator.html}</td> <td> - {if $form.deleted_contacts}{$form.deleted_contacts.html} {$form.deleted_contacts.label}{/if} + {if !empty($form.deleted_contacts)}{$form.deleted_contacts.html} {$form.deleted_contacts.label}{/if} </td> <td class="adv-search-top-submit" colspan="2"> <div class="crm-submit-buttons"> diff --git a/civicrm/templates/CRM/Contact/Form/Task.tpl b/civicrm/templates/CRM/Contact/Form/Task.tpl index 63b55a5170ce8babdc84c0a4f383495dc15576db..ec171e0810e35304345be5fe9c024143a9bc1f73 100644 --- a/civicrm/templates/CRM/Contact/Form/Task.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task.tpl @@ -12,7 +12,7 @@ {if !empty($searchtype) && $searchtype eq 'ts_sel'} <div id="popupContainer"> <div class="crm-block crm-form-block crm-search-form-block"> - <table id="selectedRecords-{$group.id}" class="display crm-copy-fields crm-sortable"> + <table id="selectedRecords-{if !empty($group)}{$group.id}{/if}" class="display crm-copy-fields crm-sortable"> <thead> <tr class="columnheader"> <th class="contact_details">{ts}Name{/ts}</th> diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl index 24902aabd884709825afe430ddcd4fe44d87f857..d537da1c9d9560dcd3b86d4d9852f68a48f39397 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl @@ -33,12 +33,15 @@ <tr class="crm-contact-task-addtogroup-form-block-description"> <td class="label">{$form.description.label}</td> <td>{$form.description.html}</td></tr> - {if $form.group_type} + {if !empty($form.group_type)} <tr class="crm-contact-task-addtogroup-form-block-group_type"> <td class="label">{$form.group_type.label}</td> <td>{$form.group_type.html}</td> </tr> {/if} + <tr> + <td colspan=2>{include file="CRM/Custom/Form/CustomData.tpl"}</td> + </tr> </table> </td> </tr> diff --git a/civicrm/templates/CRM/Contact/Form/Task/Email.tpl b/civicrm/templates/CRM/Contact/Form/Task/Email.tpl index 9e21ef1faea624324f06ed41c113266da56fc6a9..c9b9b138a028fcc1db5a6c8ee5010a0e820f032f 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Email.tpl @@ -26,14 +26,14 @@ {$form.to.html} {help id="id-to_email" file="CRM/Contact/Form/Task/Email.hlp"} </td> </tr> - <tr class="crm-contactEmail-form-block-cc_id" {if !$form.cc_id.value}style="display:none;"{/if}> + <tr class="crm-contactEmail-form-block-cc_id" {if empty($form.cc_id.value)}style="display:none;"{/if}> <td class="label">{$form.cc_id.label}</td> <td> {$form.cc_id.html} <a class="crm-hover-button clear-cc-link" rel="cc_id" title="{ts}Clear{/ts}" href="#"><i class="crm-i fa-times" aria-hidden="true"></i></a> </td> </tr> - <tr class="crm-contactEmail-form-block-bcc_id" {if !$form.bcc_id.value}style="display:none;"{/if}> + <tr class="crm-contactEmail-form-block-bcc_id" {if empty($form.bcc_id.value)}style="display:none;"{/if}> <td class="label">{$form.bcc_id.label}</td> <td> {$form.bcc_id.html} @@ -44,8 +44,8 @@ <td></td> <td> <div> - <a href="#" rel="cc_id" class="add-cc-link crm-hover-button" {if $form.cc_id.value}style="display:none;"{/if}>{ts}Add CC{/ts}</a> - <a href="#" rel="bcc_id" class="add-cc-link crm-hover-button" {if $form.bcc_id.value}style="display:none;"{/if}>{ts}Add BCC{/ts}</a> + <a href="#" rel="cc_id" class="add-cc-link crm-hover-button" {if !empty($form.cc_id.value)}style="display:none;"{/if}>{ts}Add CC{/ts}</a> + <a href="#" rel="bcc_id" class="add-cc-link crm-hover-button" {if !empty($form.bcc_id.value)}style="display:none;"{/if}>{ts}Add BCC{/ts}</a> </div> </td> </tr> diff --git a/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl b/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl index 864fedeb6daad783007fb2c6e149571acd48ca77..acdbc46ac9692f658823f1a14cf1a22805d82970 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl @@ -8,7 +8,7 @@ +--------------------------------------------------------------------+ *} {*common template for compose PDF letters*} -{if $form.template.html} +{if !empty($form.template.html)} <table class="form-layout-compressed"> <tr> <td class="label-left"> @@ -23,7 +23,7 @@ <td class="label-left">{$form.subject.label}</td> <td>{$form.subject.html}</td> </tr> - {if $form.campaign_id} + {if !empty($form.campaign_id)} <tr> <td class="label-left">{$form.campaign_id.label}</td> <td>{$form.campaign_id.html}</td> diff --git a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl index 5bcd911eeef4b9e01d6df6303c1032711a26c1d4..dbbd2477dd26f02002307bbbe0261af16f79a93a 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl @@ -34,7 +34,7 @@ <td class="label">{$form.description.label}</td> <td>{$form.description.html}</td> </tr> - {if $form.group_type} + {if !empty($form.group_type)} <tr class="crm-contact-task-createsmartgroup-form-block-group_type"> <td class="label">{$form.group_type.label}</td> <td>{$form.group_type.html}</td> diff --git a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl index 15b30f1fbc271ea861e8dacf4119f66cac231094..e899d3daf42dad46451cabd65e19f9b0d411447d 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl @@ -102,7 +102,7 @@ {* Existing Group *} -<div id="existing-groups" class="crm-accordion-wrapper crm-existing_group-accordion {if $form.groups} {else}collapsed{/if}"> +<div id="existing-groups" class="crm-accordion-wrapper crm-existing_group-accordion {if !empty($form.groups)} {else}collapsed{/if}"> <div class="crm-accordion-header"> {$form.groups.label} </div><!-- /.crm-accordion-header --> diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl index 8eb9fa71303d97d45ec4befd40b8bfcfba843e3e..992ef9e2dbc03289103217e05f94b923ab139fc3 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl @@ -112,7 +112,7 @@ {foreach from=$allTabs item=tabValue} <li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all{if isset($tabValue.count)} crm-count-{$tabValue.count}{/if}{if isset($tabValue.class)} {$tabValue.class}{/if}"> <a href="{if !empty($tabValue.template)}#contact-{$tabValue.id}{else}{$tabValue.url}{/if}" title="{$tabValue.title|escape}"> - <i class="{if $tabValue.icon}{$tabValue.icon}{else}crm-i fa-puzzle-piece{/if}" aria-hidden="true"></i> + <i class="{if !empty($tabValue.icon)}{$tabValue.icon}{else}crm-i fa-puzzle-piece{/if}" aria-hidden="true"></i> <span>{$tabValue.title}</span> {if empty($tabValue.hideCount)}<em>{if isset($tabValue.count)}{$tabValue.count}{/if}</em>{/if} </a> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl index 627e28b309726449d290135984cc02489b1e8eda..ccf25e943be6d0b01179ca89204a561d6c2e69eb 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl @@ -11,7 +11,7 @@ {if $priceSetId} {include file="CRM/Price/Form/PriceSet.tpl" context="standalone" extends="Contribution"} -{elseif $showAdditionalInfo and $formType } +{elseif !empty($showAdditionalInfo) and !empty($formType)} {include file="CRM/Contribute/Form/AdditionalInfo/$formType.tpl"} {else} {include file="CRM/Contribute/Form/AdditionalInfo/Payment.tpl"} @@ -58,7 +58,7 @@ <div class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl"} </div> - {if $isOnline}{assign var=valueStyle value=" class='view-value'"}{else}{assign var=valueStyle value=""}{/if} + {if !empty($isOnline)}{assign var=valueStyle value=" class='view-value'"}{else}{assign var=valueStyle value=""}{/if} <table class="form-layout-compressed"> <tr class="crm-contribution-form-block-contact_id"> <td class="label">{$form.contact_id.label}</td> @@ -66,7 +66,7 @@ </tr> <tr class="crm-contribution-form-block-contribution_type_id crm-contribution-form-block-financial_type_id"> <td class="label">{$form.financial_type_id.label}</td><td{$valueStyle}>{$form.financial_type_id.html} - {if $is_test} + {if !empty($is_test)} {ts}(test){/ts} {/if} {help id="id-financial_type"} </td> @@ -81,7 +81,7 @@ <td class="label">{$form.total_amount.label}</td> <td {$valueStyle}> <span id='totalAmount'>{$form.currency.html|crmAddClass:eight} {$form.total_amount.html|crmAddClass:eight}</span> - {if $freezeFinancialType} + {if !empty($freezeFinancialType)} {help id="id-total_amount"} {/if} {if !$payNow} @@ -91,7 +91,7 @@ <div id="priceset" class="hiddenElement"></div> {/if} - {if $ppID}{ts}<a class='action-item crm-hover-button' onclick='adjustPayment();'>adjust payment amount</a>{/ts}{help id="adjust-payment-amount"}{/if} + {if !empty($ppID)}{ts}<a class='action-item crm-hover-button' onclick='adjustPayment();'>adjust payment amount</a>{/ts}{help id="adjust-payment-amount"}{/if} <div id="totalAmountBlock"> {if $hasPriceSets}<span class="description">{ts}Alternatively, you can use a price set.{/ts}</span>{/if} <div id="totalTaxAmount" class="label"></div> @@ -126,7 +126,7 @@ {if $contributionMode && $processorSupportsFutureStartDate} <tr id='start_date' class="crm-contribution-form-block-receive_date"> <td class="label">{ts}Start Date{/ts}</td> - <td {$valueStyle}>{if $hideCalender neq true}{$form.receive_date.html}{/if}<br /> + <td {$valueStyle}>{$form.receive_date.html}<br /> <span class="description">{ts}You can set a start date for recurring contributions and the first payment will be on that date. For a single post-dated contribution you must select recurring and choose one installment{/ts}</span> </td> </tr> @@ -165,11 +165,7 @@ <tr id="cancelDate" class="crm-contribution-form-block-cancel_date"> <td class="label">{$form.cancel_date.label}</td> <td> - {if $hideCalendar neq true} - {$form.cancel_date.html} - {else} - {$form.cancel_date.value|crmDate} - {/if} + {$form.cancel_date.html} </td> </tr> <tr id="cancelDescription" class="crm-contribution-form-block-cancel_reason"> @@ -232,7 +228,7 @@ </td> </tr> {/if} - {if $form.payment_processor_id} + {if !empty($form.payment_processor_id)} <tr class="crm-contribution-form-block-payment_processor_id"><td class="label nowrap">{$form.payment_processor_id.label}<span class="crm-marker"> * </span></td><td>{$form.payment_processor_id.html}</td></tr> {/if} </table> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl index 2aba706f965b47ded87935cec5de1420454b3776..7ae9f08092a5a06205b87aaca239d1de82c0dfc0 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl @@ -135,7 +135,7 @@ {/if} {/crmRegion} - {if $form.is_recur} + {if !empty($form.is_recur)} <div class="crm-public-form-item crm-section {$form.is_recur.name}-section"> <div class="label"> </div> <div class="content"> @@ -199,7 +199,7 @@ <div class="crm-public-form-item crm-section honor_block_text-section"> {$honor_block_text} </div> - {if $form.soft_credit_type_id.html} + {if !empty($form.soft_credit_type_id.html)} <div class="crm-public-form-item crm-section {$form.soft_credit_type_id.name}-section"> <div class="content" > {$form.soft_credit_type_id.html} @@ -256,7 +256,7 @@ {* end of ccid loop *} {/if} - {if $form.payment_processor_id.label} + {if !empty($form.payment_processor_id.label)} {* PP selection only works with JS enabled, so we hide it initially *} <fieldset class="crm-public-form-item crm-group payment_options-group" style="display:none;"> <legend>{ts}Payment Options{/ts}</legend> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl index 7731d4d3a208b7818ee7391efd2f9b1f5b28fd81..73e8d98b03ec68d928a73d6976873e3b5568e6bb 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl @@ -13,7 +13,7 @@ * FIXME: This is way more complex than it needs to be * FIXME: Why are we not just using the dynamic form tpl to display this profile? *} -{if $form.is_for_organization} +{if !empty($form.is_for_organization)} <div class="crm-public-form-item crm-section {$form.is_for_organization.name}-section"> <div class="label"> </div> <div class="content"> @@ -28,7 +28,7 @@ {if $onBehalfOfFields && $onBehalfOfFields|@count} <fieldset> <legend>{$fieldSetTitle}</legend> - {if $form.org_option} + {if !empty($form.org_option)} <div id='orgOptions' class="section crm-public-form-item crm-section"> <div class="content"> {$form.org_option.html} diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl index 497e11799b82b6e9d6bce2fd43451f7adaa1732b..9dac6f4a23fcd58f956d2b15a50deaf5990a69a4 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl @@ -420,7 +420,7 @@ </script> {/literal} -{if $form.is_recur} +{if !empty($form.is_recur)} {include file="CRM/common/showHideByFieldValue.tpl" trigger_field_id ="is_recur" trigger_value ="true" @@ -430,7 +430,7 @@ invert = "false" } {/if} -{if $form.adjust_recur_start_date} +{if !empty($form.adjust_recur_start_date)} {include file="CRM/common/showHideByFieldValue.tpl" trigger_field_id ="adjust_recur_start_date" trigger_value ="true" diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl index 377ea50554b3b14303630cc92848d8bf24a0a8f9..751cb143869c9476186d810dae29e006a01a0be4 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl @@ -10,7 +10,7 @@ <div class="crm-block crm-content-block crm-contribution-view-form-block"> <div class="action-link"> <div class="crm-submit-buttons"> - {if (call_user_func(array('CRM_Core_Permission','check'), 'edit contributions') && call_user_func(array('CRM_Core_Permission', 'check'), "edit contributions of type $financial_type") && $canEdit) || + {if (call_user_func(array('CRM_Core_Permission','check'), 'edit contributions') && call_user_func(array('CRM_Core_Permission', 'check'), "edit contributions of type $financial_type") && !empty($canEdit)) || (call_user_func(array('CRM_Core_Permission','check'), 'edit contributions') && $noACL)} {assign var='urlParams' value="reset=1&id=$id&cid=$contact_id&action=update&context=$context"} {if ( $context eq 'fulltext' || $context eq 'search' ) && $searchKey} @@ -19,11 +19,11 @@ <a class="button" href="{crmURL p='civicrm/contact/view/contribution' q=$urlParams}" accesskey="e"><span> <i class="crm-i fa-pencil" aria-hidden="true"></i> {ts}Edit{/ts}</span> </a> - {if $paymentButtonName} + {if !empty($paymentButtonName)} <a class="button" href='{crmURL p="civicrm/payment" q="action=add&reset=1&component=`$component`&id=`$id`&cid=`$contact_id`"}'><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}{$paymentButtonName}{/ts}</a> {/if} {/if} - {if (call_user_func(array('CRM_Core_Permission','check'), 'delete in CiviContribute') && call_user_func(array('CRM_Core_Permission', 'check'), "delete contributions of type $financial_type") && $canDelete) || (call_user_func(array('CRM_Core_Permission','check'), 'delete in CiviContribute') && $noACL)} + {if (call_user_func(array('CRM_Core_Permission','check'), 'delete in CiviContribute') && call_user_func(array('CRM_Core_Permission', 'check'), "delete contributions of type $financial_type") && !empty($canDelete)) || (call_user_func(array('CRM_Core_Permission','check'), 'delete in CiviContribute') && $noACL)} {assign var='urlParams' value="reset=1&id=$id&cid=$contact_id&action=delete&context=$context"} {if ( $context eq 'fulltext' || $context eq 'search' ) && $searchKey} {assign var='urlParams' value="reset=1&id=$id&cid=$contact_id&action=delete&context=$context&key=$searchKey"} @@ -32,23 +32,23 @@ <i class="crm-i fa-trash" aria-hidden="true"></i> {ts}Delete{/ts}</span> </a> {/if} - {include file="CRM/common/formButtons.tpl" location="top"} {assign var='pdfUrlParams' value="reset=1&id=$id&cid=$contact_id"} {assign var='emailUrlParams' value="reset=1&id=$id&cid=$contact_id&select=email"} {if $invoicing && empty($is_template)} <div class="css_right"> <a class="button no-popup" href="{crmURL p='civicrm/contribute/invoice' q=$pdfUrlParams}"> - <i class="crm-i fa-print" aria-hidden="true"></i> + <i class="crm-i fa-download" aria-hidden="true"></i> {if $contribution_status != 'Refunded' && $contribution_status != 'Cancelled' } - {ts}Print Invoice{/ts}</a> + {ts}Download Invoice{/ts}</a> {else} - {ts}Print Invoice and Credit Note{/ts}</a> + {ts}Download Invoice and Credit Note{/ts}</a> {/if} <a class="button" href="{crmURL p='civicrm/contribute/invoice/email' q=$emailUrlParams}"> <i class="crm-i fa-paper-plane" aria-hidden="true"></i> {ts}Email Invoice{/ts}</a> </div> {/if} + {include file="CRM/common/formButtons.tpl" location="top"} </div> </div> <table class="crm-info-panel"> diff --git a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl index 88bef929304afba57608e9d4bd69c03f7fc535ca..99aa39bee9395474497ea0244ee61adb7ece4bce 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl @@ -58,12 +58,14 @@ </tr> <tr> <td> - {$form.contribution_or_softcredits.label} <br /> - {$form.contribution_or_softcredits.html}<br /> - <div class="float-left" id="contribution_soft_credit_type_wrapper"> - {$form.contribution_soft_credit_type_id.label} <br /> - {$form.contribution_soft_credit_type_id.html|crmAddClass:twenty} - </div> + {if !empty($form.contribution_or_softcredits)} + {$form.contribution_or_softcredits.label} <br /> + {$form.contribution_or_softcredits.html}<br /> + <div class="float-left" id="contribution_soft_credit_type_wrapper"> + {$form.contribution_soft_credit_type_id.label} <br /> + {$form.contribution_soft_credit_type_id.html|crmAddClass:twenty} + </div> + {/if} </td> <td> {$form.invoice_number.label} <br /> diff --git a/civicrm/templates/CRM/Contribute/Form/Selector.tpl b/civicrm/templates/CRM/Contribute/Form/Selector.tpl index dde319b31832be347c7c388e38961f316aa8291f..5443e1f7408708d3cbe2bbd577f94438e43e3213 100644 --- a/civicrm/templates/CRM/Contribute/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Selector.tpl @@ -22,10 +22,10 @@ {/if} {foreach from=$columnHeaders item=header} <th scope="col"> - {if $header.sort} + {if isset($header.sort)} {assign var='key' value=$header.sort} {$sort->_response.$key.link} - {else} + {elseif (!empty($header.name))} {$header.name} {/if} </th> @@ -48,7 +48,7 @@ <a class="nowrap bold crm-expand-row" title="{ts}view payments{/ts}" href="{crmURL p='civicrm/payment' q="view=transaction&component=contribution&action=browse&cid=`$row.contact_id`&id=`$row.contribution_id`&selector=1"}"> {$row.total_amount|crmMoney:$row.currency} </a> - {if $row.amount_level }<br/>({$row.amount_level}){/if} + {if !empty($row.amount_level) }<br/>({$row.amount_level}){/if} {if $row.contribution_recur_id && $row.is_template} <br/>{ts}(Recurring Template){/ts} {elseif $row.contribution_recur_id } @@ -56,10 +56,13 @@ {/if} </td> {foreach from=$columnHeaders item=column} - {assign var='columnName' value=$column.field_name} + {assign var='columnName' value=''} + {if isset($column.field_name)} + {assign var='columnName' value=$column.field_name} + {/if} {if !$columnName}{* if field_name has not been set skip, this helps with not changing anything not specifically edited *} {elseif $columnName === 'total_amount'}{* rendered above as soft credit columns = confusing *} - {elseif $column.type === 'actions'}{* rendered below as soft credit column handling = not fixed *} + {elseif isset($column.type) && $column.type === 'actions'}{* rendered below as soft credit column handling = not fixed *} {elseif $columnName == 'contribution_status'} <td class="crm-contribution-status"> {$row.contribution_status}<br/> @@ -68,13 +71,13 @@ {/if} </td> {else} - {if $column.type == 'date'} + {if isset($column.type) && $column.type == 'date'} <td class="crm-contribution-{$columnName}"> {$row.$columnName|crmDate} </td> {else} - <td class="crm-{$columnName} crm-{$columnName}_{$row.columnName}"> - {$row.$columnName} + <td class="crm-{$columnName} crm-{$columnName}_{if isset($row.columnName)}{$row.columnName}{/if}"> + {if isset($row.$columnName)}{$row.$columnName}{/if} </td> {/if} {/if} diff --git a/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl b/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl index 72d13b28f657097772141073e89f490ab3d5390d..e490a94cd3f6e7f36abcb5448572cdb47a6b1d00 100644 --- a/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl +++ b/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl @@ -12,7 +12,7 @@ {if $mode eq 'auto_renew'} {ts}Use this form to update the credit card and billing name and address used with the auto-renewal option for your {$membershipType} membership.{/ts} {else} - <strong>{ts 1=$amount|crmMoney 2=$frequency_interval 3=$frequency_unit}Recurring Contribution Details: %1 every %2 %3{/ts} + <strong>{ts 1=$amount|crmMoney 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring Contribution Details: %1 every %2 %3{/ts} {if $installments} {ts 1=$installments}for %1 installments{/ts}. {/if}</strong> diff --git a/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl b/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl index cda5b053fd0899cb5e8f813df7ac52a7a56687fe..06f77a01b2e2bde13c4abecc7fccbf5d3af0a38a 100644 --- a/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl +++ b/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl @@ -22,7 +22,7 @@ <table class="form-layout"> <tr> <td class="label">{$form.amount.label}</td> - <td>{$form.currency.html|crmAddClass:eight} {$form.amount.html|crmAddClass:eight} ({ts}every{/ts} {$frequency_interval} {$frequency_unit})</td> + <td>{$form.currency.html|crmAddClass:eight} {$form.amount.html|crmAddClass:eight} ({ts}every{/ts} {$recur_frequency_interval} {$recur_frequency_unit})</td> </tr> <tr><td class="label">{$form.installments.label}</td><td>{$form.installments.html}<br /> <span class="description">{ts}Total number of payments to be made. Set this to 0 if this is an open-ended commitment i.e. no set end date.{/ts}</span></td></tr> diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl index 8ac8f2d12966f37461d9527ba280a771cfd0df94..7b2a6040fa1a30c39a0c3be1eebc4378ec7761d3 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl @@ -26,27 +26,27 @@ <tr><td class="label">{ts}Amount{/ts}</td><td>{$recur.amount|crmMoney:$recur.currency}{if $is_test} ({ts}test{/ts}){/if}</td></tr> {/if} <tr><td class="label">{ts}Frequency{/ts}</td><td>every {$recur.frequency_interval} {$recur.frequency_unit}</td></tr> - <tr><td class="label">{ts}Installments{/ts}</td><td>{$recur.installments}</td></tr> + {if !empty($recur.installments)}<tr><td class="label">{ts}Installments{/ts}</td><td>{$recur.installments}</td></tr>{/if} <tr><td class="label">{ts}Status{/ts}</td><td>{$recur.contribution_status}</td></tr> <tr><td class="label">{ts}Start Date{/ts}</td><td>{$recur.start_date|crmDate}</td></tr> <tr><td class="label">{ts}Created Date{/ts}</td><td>{$recur.create_date|crmDate}</td></tr> {if $recur.modified_date}<tr><td class="label">{ts}Modified Date{/ts}</td><td>{$recur.modified_date|crmDate}</td></tr>{/if} - {if $recur.cancel_date}<tr><td class="label">{ts}Cancelled Date{/ts}</td><td>{$recur.cancel_date|crmDate}</td></tr>{/if} - {if $recur.cancel_reason}<tr><td class="label">{ts}Cancel Reason{/ts}</td><td>{$recur.cancel_reason}</td></tr>{/if} - {if $recur.end_date}<tr><td class="label">{ts}End Date{/ts}</td><td>{$recur.end_date|crmDate}</td></tr>{/if} + {if !empty($recur.cancel_date)}<tr><td class="label">{ts}Cancelled Date{/ts}</td><td>{$recur.cancel_date|crmDate}</td></tr>{/if} + {if !empty($recur.cancel_reason)}<tr><td class="label">{ts}Cancel Reason{/ts}</td><td>{$recur.cancel_reason}</td></tr>{/if} + {if !empty($recur.end_date)}<tr><td class="label">{ts}End Date{/ts}</td><td>{$recur.end_date|crmDate}</td></tr>{/if} {if $recur.processor_id}<tr><td class="label">{ts}Processor ID{/ts}</td><td>{$recur.processor_id}</td></tr>{/if} - <tr><td class="label">{ts}Transaction ID{/ts}</td><td>{$recur.trxn_id}</td></tr> + {if !empty($recur.trxn_id)}<tr><td class="label">{ts}Transaction ID{/ts}</td><td>{$recur.trxn_id}</td></tr>{/if} {if $recur.invoice_id}<tr><td class="label">{ts}Invoice ID{/ts}</td><td>{$recur.invoice_id}</td></tr>{/if} <tr><td class="label">{ts}Cycle Day{/ts}</td><td>{$recur.cycle_day}</td></tr> - {if $recur.contribution_status_id neq 3}<tr><td class="label">{ts}Next Contribution{/ts}</td><td>{$recur.next_sched_contribution_date|crmDate}</td></tr>{/if} + {if !empty($recur.next_sched_contribution_date) && $recur.contribution_status_id neq 3}<tr><td class="label">{ts}Next Contribution{/ts}</td><td>{$recur.next_sched_contribution_date|crmDate}</td></tr>{/if} <tr><td class="label">{ts}Failure Count{/ts}</td><td>{$recur.failure_count}</td></tr> - {if $recur.invoice_id}<tr><td class="label">{ts}Failure Retry Date{/ts}</td><td>{$recur.next_sched_contribution_date|crmDate}</td></tr>{/if} + {if !empty($recur.next_sched_contribution_date) && $recur.invoice_id}<tr><td class="label">{ts}Failure Retry Date{/ts}</td><td>{$recur.next_sched_contribution_date|crmDate}</td></tr>{/if} <tr><td class="label">{ts}Auto Renew?{/ts}</td><td>{if $recur.auto_renew}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}</td></tr> <tr><td class="label">{ts}Send receipt for each contribution?{/ts}</td><td>{if $recur.is_email_receipt}{ts}Yes{/ts}{else}{ts}No{/ts}{/if}</td></tr> {if $recur.payment_processor}<tr><td class="label">{ts}Payment Processor{/ts}</td><td>{$recur.payment_processor}</td></tr>{/if} {if $recur.financial_type}<tr><td class="label">{ts}Financial Type{/ts}</td><td>{$recur.financial_type}</td></tr>{/if} - {if $recur.campaign}<tr><td class="label">{ts}Campaign{/ts}</td><td>{$recur.campaign}</td></tr>{/if} - {if $recur.membership_id}<tr> + {if !empty($recur.campaign)}<tr><td class="label">{ts}Campaign{/ts}</td><td>{$recur.campaign}</td></tr>{/if} + {if !empty($recur.membership_id)}<tr> <td class="label">{ts}Membership{/ts}</td> <td><a class="crm-hover-button action-item" href='{crmURL p="civicrm/contact/view/membership" q="action=view&reset=1&cid=`$contactId`&id=`$recur.membership_id`&context=membership&selectedChild=member"}'>{$recur.membership_name}</a></td> </tr> diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl index fb98957a59d554ddcc30f878429601eaf5002314..0a105df7774bfc20ad0aee34c2c11f0e1d275adc 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl @@ -8,10 +8,10 @@ +--------------------------------------------------------------------+ *} {*Table displays contribution totals for a contact or search result-set *} -{if $annual.count OR $contributionSummary.total.count OR $contributionSummary.cancel.count OR $contributionSummary.soft_credit.count} +{if !empty($annual.count) OR $contributionSummary.total.count OR $contributionSummary.cancel.count OR $contributionSummary.soft_credit.count} <table class="form-layout-compressed"> - {if $annual.count} + {if !empty($annual.count)} <tr> <th class="contriTotalLeft right">{ts}Current Year-to-Date{/ts} – {$annual.amount}</th> <th class="right"> {ts}# Completed Contributions{/ts} – {$annual.count}</th> @@ -29,11 +29,11 @@ <th class="right"> {ts}# Completed{/ts} – {$contributionSummary.total.count}</th> <th class="right contriTotalRight"> {ts}Avg{/ts} – {$contributionSummary.total.avg}</th> {/if} - {if $contributionSummary.cancel.amount} + {if isset($contributionSummary.cancel.amount)} <th class="disabled right contriTotalRight"> {ts}Cancelled/Refunded{/ts} – {$contributionSummary.cancel.amount}</th> {/if} </tr> - {if $contributionSummary.soft_credit.count} + {if isset($contributionSummary.soft_credit.count)} {include file="CRM/Contribute/Page/ContributionSoftTotals.tpl" softCreditTotals=$contributionSummary.soft_credit} {/if} {/if} diff --git a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl index 70034d749b1980ffafeffa91e6c4e25660a816d1..e662f120446f36648375ff253bb8cbcb707d8904 100644 --- a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl @@ -49,11 +49,11 @@ {if call_user_func(array('CRM_Core_Permission','check'), 'view my invoices') OR call_user_func(array('CRM_Core_Permission','check'), 'access CiviContribute')} <a class="button no-popup nowrap" href="{crmURL p='civicrm/contribute/invoice' q=$urlParams}"> - <i class="crm-i fa-print" aria-hidden="true"></i> + <i class="crm-i fa-download" aria-hidden="true"></i> {if empty($row.contribution_status_name) || (!empty($row.contribution_status_name) && $row.contribution_status_name != 'Refunded' && $row.contribution_status_name != 'Cancelled') } - <span>{ts}Print Invoice{/ts}</span> + <span>{ts}Download Invoice{/ts}</span> {else} - <span>{ts}Print Invoice and Credit Note{/ts}</span> + <span>{ts}Download Invoice and Credit Note{/ts}</span> {/if} </a> {/if} diff --git a/civicrm/templates/CRM/Contribute/Page/Widget.tpl b/civicrm/templates/CRM/Contribute/Page/Widget.tpl index 125d07d34029f9be19ce44b4a1e82f2646598969..5df46ee82f443ab6cdd0b62ea45f2cb0652d99d7 100644 --- a/civicrm/templates/CRM/Contribute/Page/Widget.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Widget.tpl @@ -136,7 +136,7 @@ <div class="crm-amount-raised-wrapper"> <span id="crm_cpid_{$cpageId}_amt_raised" class="crm-amount-raised"> -- placeholder -- </span> </div> - {if $form.url_logo.value} + {if !empty($form.url_logo.value)} <div class="crm-logo"><img src="{$form.url_logo.value}" alt={ts}Logo{/ts}></div> {/if} <div id="crm_cpid_{$cpageId}_donors" class="crm-donors"></div> diff --git a/civicrm/templates/CRM/Custom/Form/CustomData.tpl b/civicrm/templates/CRM/Custom/Form/CustomData.tpl index 1a624a31a8fe45ea892d7050ff0851478bf9cbaa..1464225f445956e74823260e186e70e03a40a6fd 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Custom/Form/CustomData.tpl @@ -23,8 +23,8 @@ {include file="CRM/Custom/Form/Edit/CustomData.tpl" customDataEntity=''} </div> {else} - <div class="custom-group custom-group-{$cd_edit.name} crm-accordion-wrapper crm-custom-accordion {if $cd_edit.collapse_display and !$skipTitle}collapsed{/if}"> - {if !$skipTitle} + <div class="custom-group custom-group-{$cd_edit.name} crm-accordion-wrapper crm-custom-accordion {if $cd_edit.collapse_display and empty($skipTitle)}collapsed{/if}"> + {if empty($skipTitle)} <div class="crm-accordion-header"> {$cd_edit.title} </div><!-- /.crm-accordion-header --> diff --git a/civicrm/templates/CRM/Custom/Form/Field.tpl b/civicrm/templates/CRM/Custom/Form/Field.tpl index 0bca2ed44828539ef3a610623c27aeecc3e1aee4..df8cd053a58807f78a2d81afbc776df441b59826 100644 --- a/civicrm/templates/CRM/Custom/Form/Field.tpl +++ b/civicrm/templates/CRM/Custom/Form/Field.tpl @@ -30,7 +30,7 @@ <td class="label">{$form.serialize.label}</td> <td class="html-adjust">{$form.serialize.html}</td> </tr> - {if $form.in_selector} + {if !empty($form.in_selector)} <tr class='crm-custom-field-form-block-in_selector'> <td class='label'>{$form.in_selector.label}</td> <td class='html-adjust'>{$form.in_selector.html} {help id="id-in_selector"}</td> diff --git a/civicrm/templates/CRM/Custom/Form/Optionfields.tpl b/civicrm/templates/CRM/Custom/Form/Optionfields.tpl index 0b145459516ce73d0762c589f73bb45a07b2d7e5..d46ce1fbb45abcf22f4d853f77e449caaed0a183 100644 --- a/civicrm/templates/CRM/Custom/Form/Optionfields.tpl +++ b/civicrm/templates/CRM/Custom/Form/Optionfields.tpl @@ -15,7 +15,7 @@ </td> </tr> -<tr id="option_group" {if !$form.option_group_id}class="hiddenElement"{/if}> +<tr id="option_group" {if empty($form.option_group_id)}class="hiddenElement"{/if}> <td class="label">{$form.option_group_id.label}</td> <td class="html-adjust">{$form.option_group_id.html}</td> </tr> @@ -86,7 +86,7 @@ {* hide and display the appropriate blocks as directed by the php code *} on_load_init_blocks( showRows, hideBlocks, '' ); -{if $form.option_group_id} +{if !empty($form.option_group_id)} {literal} function showOptionSelect( ) { if ( document.getElementsByName("option_type")[0].checked ) { diff --git a/civicrm/templates/CRM/Custom/Form/Search.tpl b/civicrm/templates/CRM/Custom/Form/Search.tpl index 3ac0bdb83b28b8723baea81163d6444d2772510d..8bf00efc5b6748184dabcc6b35a4bece258309d5 100644 --- a/civicrm/templates/CRM/Custom/Form/Search.tpl +++ b/civicrm/templates/CRM/Custom/Form/Search.tpl @@ -28,7 +28,7 @@ <td class="label">{$form.$element_name_from.label}</td><td> {$form.$element_name_from.html|crmAddClass:six} {$form.$element_name_to.label} {$form.$element_name_to.html|crmAddClass:six} - {elseif $element.skip_calendar NEQ true } + {elseif empty($element.skip_calendar)} {include file="CRM/Core/DatePickerRangeCustomField.tpl" fieldName=$element_name hideRelativeLabel=0}<td> {/if} {else} diff --git a/civicrm/templates/CRM/Event/Form/EventFees.tpl b/civicrm/templates/CRM/Event/Form/EventFees.tpl index e6c5ef4ab4a3a40c08df040a09ef5596c349a1d8..2274143108ed0c9337d5d6a104fde1a08678bba4 100644 --- a/civicrm/templates/CRM/Event/Form/EventFees.tpl +++ b/civicrm/templates/CRM/Event/Form/EventFees.tpl @@ -227,7 +227,7 @@ function fillTotalAmount( totalAmount ) { if ( !totalAmount ) { - var amountVal = {/literal}{if $form.amount.value}{$form.amount.value}{else}0{/if}{literal}; + var amountVal = {/literal}{if !empty($form.amount.value)}{$form.amount.value}{else}0{/if}{literal}; if ( amountVal > 0 ) { var eventFeeBlockValues = {/literal}{$eventFeeBlockValues}{literal}; totalAmount = eval('eventFeeBlockValues.amount_id_'+ amountVal); diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl index 8e1b0645c162bff3baf0279d34b7be021e147155..5bb6b6a706d5bd1d22fb07352842a34fee2412a1 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl @@ -15,13 +15,13 @@ {include file="CRM/common/formButtons.tpl" location="top"} </div> <table class="form-layout-compressed"> - {if $form.template_id} + {if !empty($form.template_id)} <tr class="crm-event-manage-eventinfo-form-block-template_id"> <td class="label">{$form.template_id.label} {help id="id-select-template" isTemplate=$isTemplate}</td> <td>{$form.template_id.html}</td> </tr> {/if} - {if $form.template_title} + {if !empty($form.template_title)} <tr class="crm-event-manage-eventinfo-form-block-template_title"> <td class="label">{$form.template_title.label} {help id="id-template-title"}{if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_event' field='template_title' id=$eventID}{/if}</td> <td>{$form.template_title.html}</td> @@ -90,7 +90,7 @@ <td>{$form.event_full_text.html}</td> </tr> <tr id="id-waitlist-text" class="crm-event-manage-eventinfo-form-block-waitlist_text"> - {if $form.waitlist_text} + {if !empty($form.waitlist_text)} <td class="label">{$form.waitlist_text.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_event' field='waitlist_text' id=$eventID}{/if}<br />{help id="id-help-waitlist_text"}</td> <td>{$form.waitlist_text.html}</td> {/if} diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl index 27c4cdb59b21a20a2da34f076a9fc478639a1a34..c3db65bb90d1d8a47ff62dd04af838b59e86aee0 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl @@ -80,13 +80,13 @@ <td>{$form.dedupe_rule_group_id.html} {help id="id-dedupe_rule_group_id"}</td> </tr> <tr class="crm-event-manage-registration-form-block-requires_approval"> - {if $form.requires_approval} + {if !empty($form.requires_approval)} <td scope="row" class="label" width="20%">{$form.requires_approval.label}</td> <td>{$form.requires_approval.html} {help id="id-requires_approval"}</td> {/if} </tr> <tr id="id-approval-text" class="crm-event-manage-registration-form-block-approval_req_text"> - {if $form.approval_req_text} + {if !empty($form.approval_req_text)} <td scope="row" class="label" width="20%">{$form.approval_req_text.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_event' field='approval_req_text' id=$eventID}{/if}</td> <td>{$form.approval_req_text.html}</td> @@ -379,7 +379,7 @@ target_element_type ="block" field_type ="radio" invert = 0 } -{if $form.requires_approval} +{if !empty($form.requires_approval)} {include file="CRM/common/showHideByFieldValue.tpl" trigger_field_id ="requires_approval" trigger_value ="" diff --git a/civicrm/templates/CRM/Event/Form/Registration/Register.tpl b/civicrm/templates/CRM/Event/Form/Registration/Register.tpl index a76a3c8dfe9ce87446b04359f930eb7b71da09d1..512e94cbd2edc571b5f8fc5b7f74750fdc2fc813 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/Register.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/Register.tpl @@ -56,7 +56,7 @@ </div> {/if} - {if $form.additional_participants.html} + {if !empty($form.additional_participants.html)} <div class="crm-public-form-item crm-section additional_participants-section" id="noOfparticipants"> <div class="label">{$form.additional_participants.label} <span class="crm-marker" title="{ts}This field is required.{/ts}">*</span></div> <div class="content"> @@ -122,7 +122,7 @@ </fieldset> {/if} - {if $form.payment_processor_id.label} + {if !empty($form.payment_processor_id.label)} <fieldset class="crm-public-form-item crm-group payment_options-group" style="display:none;"> <legend>{ts}Payment Options{/ts}</legend> <div class="crm-section payment_processor-section"> diff --git a/civicrm/templates/CRM/Event/Form/Selector.tpl b/civicrm/templates/CRM/Event/Form/Selector.tpl index e0cdefac6e1364e9656089667d7910079dd63430..3505dc446ce1b708b781f111f06a68d9a6cb377e 100644 --- a/civicrm/templates/CRM/Event/Form/Selector.tpl +++ b/civicrm/templates/CRM/Event/Form/Selector.tpl @@ -44,7 +44,7 @@ {/if} <td class="crm-participant-event_title"><a href="{crmURL p='civicrm/event/info' q="id=`$row.event_id`&reset=1"}" title="{ts}View event info page{/ts}">{$row.event_title}</a> - {if $contactId}<br /><a href="{crmURL p='civicrm/event/search' q="reset=1&force=1&event=`$row.event_id`"}" title="{ts}List participants for this event (all statuses){/ts}">({ts}participants{/ts})</a>{/if} + {if !empty($contactId)}<br /><a href="{crmURL p='civicrm/event/search' q="reset=1&force=1&event=`$row.event_id`"}" title="{ts}List participants for this event (all statuses){/ts}">({ts}participants{/ts})</a>{/if} </td> {assign var="participant_id" value=$row.participant_id} {if $lineItems.$participant_id} diff --git a/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl b/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl index ba88106b0288121a98e5ba810c4e60c85cbcf2ff..8b501d4f7f4aa003614efa50651664cc5c57a84b 100644 --- a/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl +++ b/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl @@ -28,7 +28,7 @@ <td class="crm-participant-participant_role">{$details.role}</td> </tr> </table> - {if $form.contact_id} + {if !empty($form.contact_id)} <div class="crm-public-form-item crm-section selfsvctransfer-section"> <div class="crm-public-form-item crm-section selfsvctransfer-contact_id-section"> <div class="label">{$form.contact_id.label}</div> diff --git a/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl b/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl index d7ea053fc3b58f2f3b01e65e8de91d7c904aee01..e59db31228a1dc658477b6b4138c37c96ee1037f 100644 --- a/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl @@ -33,7 +33,7 @@ <tr class="crm-contact-task-addtogroup-form-block-description"> <td class="label">{$form.description.label}</td> <td>{$form.description.html}</td></tr> - {if $form.group_type} + {if !empty($form.group_type)} <tr class="crm-contact-task-addtogroup-form-block-group_type"> <td class="label">{$form.group_type.label}</td> <td>{$form.group_type.html}</td> diff --git a/civicrm/templates/CRM/Event/Page/DashBoard.tpl b/civicrm/templates/CRM/Event/Page/DashBoard.tpl index d01250ee681b22c8fcb00e666ae0ec3a4e18b2d9..81091d6c59e98414ea1ab1dc61a2f75caf9860e6 100644 --- a/civicrm/templates/CRM/Event/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Event/Page/DashBoard.tpl @@ -96,7 +96,7 @@ <ul class="panel" id="panel_info_{$id}"> {foreach from=$eventSummary.tab key=k item=v} {assign var="fld" value=$v.field} - {if NOT $values.$fld}{assign var="status" value="disabled"}{else}{assign var="status" value="enabled"}{/if} + {if empty($values.$fld)}{assign var="status" value="disabled"}{else}{assign var="status" value="enabled"}{/if} {* Schedule Reminders requires a different query string. *} {if $v.url EQ 'civicrm/event/manage/reminder'} <li><a title="{$v.title|escape}" class="action-item crm-hover-button no-popup {$status}" diff --git a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl index b122b063783dbaab5084fafaa7a1e98e04cda97e..05a676c69469e94a579873146c6f290fc36ce78f 100644 --- a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl +++ b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl @@ -9,7 +9,7 @@ *} {* Display icons / links for ical download and feed for EventInfo.tpl, ThankYou.tpl, DashBoard.tpl, and ManageEvent.tpl *} {foreach from=$iCal item="iCalItem"} - <a href="{$iCalItem.url}" title="{$iCalItem.text}"{if !$event} class="crm-event-feed-link"{/if}> + <a href="{$iCalItem.url}" title="{$iCalItem.text}"{if !empty($event)} class="crm-event-feed-link"{/if}> <span class="fa-stack" aria-hidden="true"><i class="crm-i fa-calendar-o fa-stack-2x"></i><i style="top: 15%;" class="crm-i {$iCalItem.icon} fa-stack-1x"></i></span> <span class="sr-only">{$iCalItem.text}</span> </a> diff --git a/civicrm/templates/CRM/Export/Form/Select.tpl b/civicrm/templates/CRM/Export/Form/Select.tpl index df984478d74b6133d3ebcd27eac6674101f7db89..06a37cb30ce59d55c87cb8a839fcf9fa461ea063 100644 --- a/civicrm/templates/CRM/Export/Form/Select.tpl +++ b/civicrm/templates/CRM/Export/Form/Select.tpl @@ -29,7 +29,7 @@ </div> <div id="map" class="crm-section crm-export-mapping-section"> - {if $form.mapping } + {if !empty($form.mapping)} <div class="label crm-label-export-mapping"> {$form.mapping.label} </div> diff --git a/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl b/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl index fe4a63c70746035b6d6fb9d71cf5d81c6c7e6b4f..456fdfe7a9bef1b99265dec1766da843fdd3775e 100644 --- a/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl +++ b/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl @@ -25,7 +25,7 @@ </td> </tr> <tr> - {if $form.contact_tags} + {if !empty($form.contact_tags)} <td> <label>{ts}Contributor Tag(s){/ts}</label><br> {$form.contact_tags.html} @@ -33,7 +33,7 @@ {else} <td> </td> {/if} - {if $form.group} + {if !empty($form.group)} <td><label>{ts}Contributor Group(s){/ts}</label><br> {$form.group.html} </td> @@ -242,7 +242,7 @@ function buildTransactionSelectorAssign(filterSearch) { }); } }); - + } function buildTransactionSelectorRemove( ) { diff --git a/civicrm/templates/CRM/Form/attachment.tpl b/civicrm/templates/CRM/Form/attachment.tpl index 87b74efe4786b51a723f2481b870504394738c16..86cade7e562bb926554a8f86be0502ec1c409205 100644 --- a/civicrm/templates/CRM/Form/attachment.tpl +++ b/civicrm/templates/CRM/Form/attachment.tpl @@ -41,7 +41,7 @@ {/if} <div id="attachments"> <table class="form-layout-compressed"> - {if $form.attachFile_1} + {if !empty($form.attachFile_1)} {if !empty($context) && $context EQ 'pcpCampaign'} <div class="description">{ts}You can upload a picture or image to include on your page. Your file should be in .jpg, .gif, or .png format. Recommended image size is 250 x 250 pixels. Images over 360 pixels wide will be automatically resized to fit.{/ts}</div> {/if} diff --git a/civicrm/templates/CRM/Form/body.tpl b/civicrm/templates/CRM/Form/body.tpl index ee60c49db6eda2e9579e40da6bab39991ef7ed42..a34e7a835cdadf645b078130b8c92cae01e94789 100644 --- a/civicrm/templates/CRM/Form/body.tpl +++ b/civicrm/templates/CRM/Form/body.tpl @@ -7,11 +7,11 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{if $form.javascript} +{if !empty($form.javascript)} {$form.javascript} {/if} -{if $form.hidden} +{if !empty($form.hidden)} <div>{$form.hidden}</div> {/if} diff --git a/civicrm/templates/CRM/Group/Form/Edit.tpl b/civicrm/templates/CRM/Group/Form/Edit.tpl index d0fe28bf3986ed67643d8c62faa70e1fd97007b8..967498961e96872ac7c280555b3bdd72fe48b311 100644 --- a/civicrm/templates/CRM/Group/Form/Edit.tpl +++ b/civicrm/templates/CRM/Group/Form/Edit.tpl @@ -45,7 +45,7 @@ <td>{$form.frontend_description.html}</td> </tr> - {if $form.group_type} + {if !empty($form.group_type)} <tr class="crm-group-form-block-group_type"> <td class="label">{$form.group_type.label}</td> <td>{$form.group_type.html} {help id="id-group-type" file="CRM/Group/Page/Group.hlp"}</td> diff --git a/civicrm/templates/CRM/Mailing/Form/Optout.tpl b/civicrm/templates/CRM/Mailing/Form/Optout.tpl index d862daaaf79ff76a29363b10bc846898eebd82d3..e5286a508a2691cf6570bc28519e04a201155e93 100644 --- a/civicrm/templates/CRM/Mailing/Form/Optout.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Optout.tpl @@ -9,25 +9,18 @@ *} <div class="crm-block crm-form-block crm-miscellaneous-form-block"> + <p>{ts}You are requesting to opt out this email address from all mailing lists:{/ts}</p> + <h3>{$email_masked}</h3> - <p>{ts}You are requesting to opt out this email address from all mailing lists:{/ts}</p> - <h3>{$email_masked}</h3> - - <p>{ts}If this is not your email address, there is no need to do anything. You have <i><b>not</b></i> been added to any mailing lists. If this is your email address and you <i><b>wish to opt out</b></i> please enter your email address below for verification purposes:{/ts}</p> - - <table class="form-layout"> - <tbody> - <tr> - <td class="label">{$form.email_confirm.label}</td> - <td class="content">{$form.email_confirm.html} - </tr> - </tbody> - </table> + <p> + {ts}If this is not your email address, there is no need to do anything. You have <strong>not</strong> been added to any mailing lists.{/ts} + {ts}If this is your email address and you <strong>wish to opt out</strong> please click the <strong>Opt Out</strong> button to confirm.{/ts} + </p> <div class="crm-submit-buttons"> - {include file="CRM/common/formButtons.tpl" location="bottom"} + {include file="CRM/common/formButtons.tpl" location="bottom"} </div> -<br/> + <br/> </div> diff --git a/civicrm/templates/CRM/Mailing/Form/Search.tpl b/civicrm/templates/CRM/Mailing/Form/Search.tpl index 9649ea4b126672ffc47ed14437203deb00f7c342..b8dd9a4cf66edec5874fb0f75b00f67794b2d222 100644 --- a/civicrm/templates/CRM/Mailing/Form/Search.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Search.tpl @@ -26,7 +26,7 @@ {$form.is_archived.html} </div> </td> - {if $form.mailing_status} + {if !empty($form.mailing_status)} <td width="100%"><label>{if $sms eq 1}{ts}SMS Status{/ts}{else}{ts}Mailing Status{/ts}{/if}</label><br /> <div class="listing-box" style="height: auto"> {foreach from=$form.mailing_status item="mailing_status_val"} diff --git a/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl b/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl index 6a1f97e792ae849ba2ad03fd3d7e44b265d75904..8cf750653016d43ff606161078d46e5ed65cfb0c 100644 --- a/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl @@ -24,15 +24,10 @@ <div class="crm-block crm-form-block crm-miscellaneous-form-block"> <p>{ts}You are requesting to unsubscribe this email address:{/ts}</p> <h3>{$email_masked}</h3> - <p>{ts}If this is not your email address, there is no need to do anything. You have <i><b>not</b></i> been added to any mailing lists. If this is your email address and you <i><b>wish to unsubscribe</b></i> please enter your email address below for verification purposes:{/ts}</p> - <table class="form-layout"> - <tbody> - <tr> - <td class="label">{$form.email_confirm.label}</td> - <td class="content">{$form.email_confirm.html}</td> - </tr> - </tbody> - </table> + <p> + {ts}If this is not your email address, there is no need to do anything. You have <strong>not</strong> been added to any mailing lists.{/ts} + {ts}If this is your email address and you <strong>wish to unsubscribe</strong> please click the <strong>Unsubscribe</strong> button to confirm.{/ts} + </p> <div class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl" location="bottom"} </div> diff --git a/civicrm/templates/CRM/Mailing/Page/Browse.tpl b/civicrm/templates/CRM/Mailing/Page/Browse.tpl index 448cd77bdb467fe9bfc1ad6a6dd811c2a1e1e2e8..ad5a0b8d41bedb41f0cad10790250cddf2713fc0 100644 --- a/civicrm/templates/CRM/Mailing/Page/Browse.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Browse.tpl @@ -35,10 +35,10 @@ <thead class="sticky"> {foreach from=$columnHeaders item=header} <th> - {if $header.sort} + {if !empty($header.sort)} {assign var='key' value=$header.sort} {$sort->_response.$key.link} - {else} + {elseif !empty($header.name)} {$header.name} {/if} </th> diff --git a/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl b/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl index 0ff3a3ff0459c554c56bb4fdf1ec5077435f48d5..7846736b1f7d14ee8e3377ab2281e970c3ec5ede 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl @@ -12,7 +12,7 @@ <div class="help"> {ts}Use this form to enable and configure a Membership Signup and Renewal section for this Online Contribution Page. If you're not using this page for membership signup, leave the <strong>Enabled</strong> box un-checked..{/ts} {docURL page="user/membership/setup"} </div> - {if $form.membership_type.html} + {if !empty($form.membership_type.html)} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> <tr class="crm-member-membershipblock-form-block-member_is_active"> diff --git a/civicrm/templates/CRM/Member/Form/Search/Common.tpl b/civicrm/templates/CRM/Member/Form/Search/Common.tpl index faf801b4af67ab7acd57f472083089d5ef89d53a..87876b61ac136e0efaa0a8b7119fb10b3407b39c 100644 --- a/civicrm/templates/CRM/Member/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Member/Form/Search/Common.tpl @@ -37,7 +37,7 @@ </tr> <tr> <td> - {if $form.member_auto_renew} + {if !empty($form.member_auto_renew)} <label>{$form.member_auto_renew.label}</label> {help id="id-member_auto_renew" file="CRM/Member/Form/Search.hlp"} <br/> diff --git a/civicrm/templates/CRM/PCP/Form/PCP.tpl b/civicrm/templates/CRM/PCP/Form/PCP.tpl index 8aac87cb87e8b11ebb0474d068b2f147819b6839..2df7a6719e5519bf880a5a24c76c7d89edd8a0a3 100644 --- a/civicrm/templates/CRM/PCP/Form/PCP.tpl +++ b/civicrm/templates/CRM/PCP/Form/PCP.tpl @@ -19,7 +19,7 @@ <div id="pcpFields"> {crmRegion name="pcp-form-pcp-fields"} - {if $form.target_entity_type} + {if !empty($form.target_entity_type)} <table class="form-layout"> <tr class="crm-contribution-contributionpage-pcp-form-block-target_entity_type"> <td class="label">{$form.target_entity_type.label} <span class="crm-marker"> *</span></td> diff --git a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl index 09ba2bca481edb938d4072615c1d5e9757caf485..d49e3013bef3c6c8b22bfe76fa9d11b6f88f5466 100644 --- a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl @@ -81,7 +81,7 @@ </tr> {if $email and $outBound_option != 2} - {if $form.is_acknowledge } + {if !empty($form.is_acknowledge)} <tr class="crm-pledge-form-block-is_acknowledge"> <td class="label">{$form.is_acknowledge.label}</td> <td>{$form.is_acknowledge.html}<br /> diff --git a/civicrm/templates/CRM/Price/Form/Option.tpl b/civicrm/templates/CRM/Price/Form/Option.tpl index 18b72acd55d3ab744019d3fcf918f0c736039f6f..ea6eb23c3b726485741610564ded48ba0af076fa 100644 --- a/civicrm/templates/CRM/Price/Form/Option.tpl +++ b/civicrm/templates/CRM/Price/Form/Option.tpl @@ -63,14 +63,14 @@ </td> </tr> {* fix for CRM-10241 *} - {if $form.count.html} + {if !empty($form.count.html)} <tr class="crm-price-option-form-block-count"> <td class="label">{$form.count.label}</td> <td>{$form.count.html} {help id="id-participant-count" file="CRM/Price/Page/Field.hlp"}</td> </tr> {* 2 line fix for CRM-10241 *} {/if} - {if $form.max_value.html} + {if !empty($form.max_value.html)} <tr class="crm-price-option-form-block-max_value"> <td class="label">{$form.max_value.label}</td> <td>{$form.max_value.html} {help id="id-participant-max" file="CRM/Price/Page/Field.hlp"}</td> diff --git a/civicrm/templates/CRM/Price/Form/PriceSet.tpl b/civicrm/templates/CRM/Price/Form/PriceSet.tpl index f2b56eb2b6ed34c2b3fd88ef594beb0c7cfb46bb..26520f58e26833c179310a123a63993f1c05f307 100644 --- a/civicrm/templates/CRM/Price/Form/PriceSet.tpl +++ b/civicrm/templates/CRM/Price/Form/PriceSet.tpl @@ -29,7 +29,7 @@ {* Skip 'Admin' visibility price fields WHEN this tpl is used in online registration unless user has administer CiviCRM permission. *} {if $element.visibility EQ 'public' || ($element.visibility EQ 'admin' && $adminFld EQ true) || $context eq 'standalone' || $context eq 'advanced' || $context eq 'search' || $context eq 'participant' || $context eq 'dashboard' || $action eq 1024} {if $element.help_pre}<span class="content description">{$element.help_pre}</span><br />{/if} - <div class="crm-section {$element.name}-section"> + <div class="crm-section {$element.name}-section crm-price-field-id-{$field_id}"> {if ($element.html_type eq 'CheckBox' || $element.html_type == 'Radio') && $element.options_per_line} {assign var="element_name" value="price_"|cat:$field_id} <div class="label">{$form.$element_name.label}</div> diff --git a/civicrm/templates/CRM/Tag/Form/Edit.tpl b/civicrm/templates/CRM/Tag/Form/Edit.tpl index fffeb0b46f7e6c4cccd158e4dad71b7ddb642df8..ed86047290267a6ad2d3288eb32af713cfc01cc7 100644 --- a/civicrm/templates/CRM/Tag/Form/Edit.tpl +++ b/civicrm/templates/CRM/Tag/Form/Edit.tpl @@ -20,13 +20,13 @@ <td class="label">{$form.description.label}</td> <td>{$form.description.html}</td> </tr> - {if $form.parent_id.html} + {if !empty($form.parent_id.html)} <tr class="crm-tag-form-block-parent_id"> <td class="label">{$form.parent_id.label}</td> <td>{$form.parent_id.html}</td> </tr> {/if} - {if $form.used_for} + {if !empty($form.used_for)} <tr class="crm-tag-form-block-used_for"> <td class="label">{$form.used_for.label}</td> <td>{$form.used_for.html} <br /> @@ -39,7 +39,7 @@ </td> </tr> {/if} - {if $form.color.html} + {if !empty($form.color.html)} <tr class="crm-tag-form-block-color"> <td class="label">{$form.color.label}</td> <td>{$form.color.html}</td> diff --git a/civicrm/templates/CRM/common/CMSUser.tpl b/civicrm/templates/CRM/common/CMSUser.tpl index 3bc57f261354244367ce4cfee40d07aa7ca33fe9..3b3a65864c8654b7ad9b3824cf82e155619c4279 100644 --- a/civicrm/templates/CRM/common/CMSUser.tpl +++ b/civicrm/templates/CRM/common/CMSUser.tpl @@ -11,7 +11,7 @@ <fieldset class="crm-group crm_user-group"> <div class="messages help cms_user_help-section"> {if !$isCMS} - {ts}If you would like to create an account on this site, check the box below and enter a Username{/ts}{if $form.cms_pass} {ts}and a password{/ts}.{/if} + {ts}If you would like to create an account on this site, check the box below and enter a Username{/ts}{if !empty($form.cms_pass)} {ts}and a password{/ts}.{/if} {else} {ts}Please enter a Username to create an account.{/ts} {/if} @@ -32,7 +32,7 @@ </div> </div> - {if $form.cms_pass} + {if !empty($form.cms_pass)} <div class="crm-section cms_pass-section"> <div class="label"> <label for="cms_pass">{$form.cms_pass.label}</label> diff --git a/civicrm/templates/CRM/common/TabHeader.tpl b/civicrm/templates/CRM/common/TabHeader.tpl index c969794196fe9b258c5c8c0d99df2c6871e6a844..1e9179975abc8cd2e31baea4437fa653bb9a6da3 100644 --- a/civicrm/templates/CRM/common/TabHeader.tpl +++ b/civicrm/templates/CRM/common/TabHeader.tpl @@ -9,7 +9,7 @@ *} {* enclose all tabs and its content in a block *} <div class="crm-block crm-content-block"> - {if $tabHeader and count($tabHeader)} + {if !empty($tabHeader) and count($tabHeader)} <div id="mainTabContainer"> <ul> {foreach from=$tabHeader key=tabName item=tabValue} diff --git a/civicrm/templates/CRM/common/Tagset.tpl b/civicrm/templates/CRM/common/Tagset.tpl index 4f79616305c8f11b157ce2e172879026c9ba8a91..bb862767fd2a4c47016235a51bbbcb6627e2806a 100644 --- a/civicrm/templates/CRM/common/Tagset.tpl +++ b/civicrm/templates/CRM/common/Tagset.tpl @@ -20,7 +20,7 @@ {if empty($tagsetElementName) or $tagsetElementName eq $elemName} {assign var="parID" value=$tagset.parentID} {assign var="skipEntityAction" value=$tagset.skipEntityAction} - {if $tableLayout} + {if !empty($tableLayout)} <tr> <td class="label"> {$form.$elemName.$parID.label} diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index 29c97b69c557239a24c306bf07b7dca8a1922100..1747c0e72d5204fd54ecc4923c846697ab98ce7e 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -176,8 +176,6 @@ if (!defined('CIVICRM_LOGGING_DSN')) { * */ -global $civicrm_root; - $civicrm_root = '%%crmRoot%%'; if (!defined('CIVICRM_TEMPLATE_COMPILEDIR')) { define( 'CIVICRM_TEMPLATE_COMPILEDIR', '%%templateCompileDir%%'); diff --git a/civicrm/templates/CRM/common/displaySearchCriteria.tpl b/civicrm/templates/CRM/common/displaySearchCriteria.tpl index cf5bfefb74d37bb97505a55c69109754b362d40f..f6e587e47fd9e1e34252d8383427b1f44374f486 100644 --- a/civicrm/templates/CRM/common/displaySearchCriteria.tpl +++ b/civicrm/templates/CRM/common/displaySearchCriteria.tpl @@ -38,7 +38,7 @@ <div class="qill"> {$item|escape} {if !$smarty.foreach.criteria.last} - {if $operator} + {if !empty($operator)} <span class="font-italic">...{$operator|escape}...</span> {else} <span class="font-italic">...{ts}AND{/ts}...</span> diff --git a/civicrm/templates/CRM/common/fatal.tpl b/civicrm/templates/CRM/common/fatal.tpl index 870180bb0a22c4b8cf399f5c4884d8963033f0c0..4ee6936607a5bb5f422470997da86dec5251f31d 100644 --- a/civicrm/templates/CRM/common/fatal.tpl +++ b/civicrm/templates/CRM/common/fatal.tpl @@ -13,7 +13,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> - <title>{$pageTitle|escape}</title> + <title>{if !empty($pageTitle)}{$pageTitle|escape}{/if}</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <base href="{$config->resourceBase}" /> <style type="text/css" media="screen"> @@ -35,23 +35,23 @@ <div class="messages status no-popup"> <i class="crm-i fa-exclamation-triangle crm-i-red" aria-hidden="true"></i> <span class="status-fatal">{ts}Sorry, due to an error, we are unable to fulfill your request at the moment. You may want to contact your administrator or service provider with more details about what action you were performing when this occurred.{/ts}</span> <div class="crm-section crm-error-message">{$message|escape}</div> - {if $error.message && $message != $error.message} + {if !empty($error.message) && $message != $error.message} <hr style="solid 1px" /> <div class="crm-section crm-error-message">{$error.message|escape}</div> {/if} - {if ($code OR $mysql_code OR $errorDetails) AND $config->debug} + {if (!empty($code) || !empty($mysql_code) || !empty($errorDetails)) AND $config->debug} <div class="crm-accordion-wrapper collapsed crm-fatal-error-details-block"> <div class="crm-accordion-header" onclick="toggle(this);";> {ts}Error Details{/ts} </div><!-- /.crm-accordion-header --> <div class="crm-accordion-body"> - {if $code} + {if !empty($code)} <div class="crm-section">{ts}Error Code:{/ts} {$code|purify}</div> {/if} - {if $mysql_code} + {if !empty($mysql_code)} <div class="crm-section">{ts}Database Error Code:{/ts} {$mysql_code|purify}</div> {/if} - {if $errorDetails} + {if !empty($errorDetails)} <div class="crm-section">{ts}Additional Details:{/ts} {$errorDetails|purify}</div> {/if} </div><!-- /.crm-accordion-body --> diff --git a/civicrm/templates/CRM/common/searchResultTasks.tpl b/civicrm/templates/CRM/common/searchResultTasks.tpl index 55f08a54f6ffaba27c04b69f6ae100e71435158c..be4b9e4a5dd59e04a72e3d07b3b8b7c5b6a03550 100644 --- a/civicrm/templates/CRM/common/searchResultTasks.tpl +++ b/civicrm/templates/CRM/common/searchResultTasks.tpl @@ -13,8 +13,8 @@ <table class="form-layout-compressed"> <tr> <td class="font-size12pt" style="width: 40%;"> - {if $savedSearch.name}{$savedSearch.name} ({ts}smart group{/ts}) - {/if} - {ts count=$pager->_totalItems plural='%count Results'}%count Result{/ts}{if $selectorLabel} - {$selectorLabel}{/if} + {if !empty($savedSearch.name)}{$savedSearch.name} ({ts}smart group{/ts}) - {/if} + {ts count=$pager->_totalItems plural='%count Results'}%count Result{/ts}{if !empty($selectorLabel)} - {$selectorLabel}{/if} {if $context == 'Event' && $participantCount && ( $pager->_totalItems ne $participantCount ) } <br />{ts}Actual participant count{/ts} : {$participantCount} {help id="id-actual_participant_count" file="CRM/Event/Form/Search/Results.hlp"} {/if} diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 933327f49008ebbea96a07826e4fd4cb4b0c90ad..0e6b3a8761ac6021e29facad654ef2b04a75e2ab 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5::getLoader(); +return ComposerAutoloaderInit13e9b60dd93f8aaefb66b9a8626540e9::getLoader(); diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 54dba0c20de758fe1f504bedd537eb8b44d501c5..cc1d0749ecb8076dbf7f666193cf1c723c43dabf 100644 --- a/civicrm/vendor/composer/autoload_real.php +++ b/civicrm/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5 +class ComposerAutoloaderInit13e9b60dd93f8aaefb66b9a8626540e9 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit13e9b60dd93f8aaefb66b9a8626540e9', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit13e9b60dd93f8aaefb66b9a8626540e9', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5 if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit3b2ff727b31236c2243afdf02557ffe5 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire3b2ff727b31236c2243afdf02557ffe5($fileIdentifier, $file); + composerRequire13e9b60dd93f8aaefb66b9a8626540e9($fileIdentifier, $file); } return $loader; } } -function composerRequire3b2ff727b31236c2243afdf02557ffe5($fileIdentifier, $file) +function composerRequire13e9b60dd93f8aaefb66b9a8626540e9($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 4ca6642c2f6e8f8439ca733dec327211e9efb6b5..61aa8ba849da093e5300cf689cc0e2728a781ede 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5 +class ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -572,11 +572,11 @@ class ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit3b2ff727b31236c2243afdf02557ffe5::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit13e9b60dd93f8aaefb66b9a8626540e9::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/xml/schema/Campaign/Survey.xml b/civicrm/xml/schema/Campaign/Survey.xml index e57a3b1f4def2e7683be1cfe42d67502932790dc..0433f898b57cbe3ade2d90fe781bdee570803942 100644 --- a/civicrm/xml/schema/Campaign/Survey.xml +++ b/civicrm/xml/schema/Campaign/Survey.xml @@ -214,6 +214,13 @@ <default>NULL</default> <comment>Used to store option group id.</comment> <add>3.3</add> + <pseudoconstant> + <table>civicrm_option_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + <nameColumn>name</nameColumn> + <condition>name LIKE "civicrm_survey_%"</condition> + </pseudoconstant> </field> <field> <name>bypass_confirm</name> diff --git a/civicrm/xml/schema/Contribute/ContributionRecur.xml b/civicrm/xml/schema/Contribute/ContributionRecur.xml index bc8e0eafe02193c101e3c9e9e280005c7c220647..10ccc535920a9ecb613fd846e3db759e52c1add4 100644 --- a/civicrm/xml/schema/Contribute/ContributionRecur.xml +++ b/civicrm/xml/schema/Contribute/ContributionRecur.xml @@ -143,8 +143,8 @@ <field> <name>modified_date</name> <title>Modified Date</title> - <type>datetime</type> - <default>CURRENT_TIMESTAMP</default> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> <comment>Last updated date for this record. mostly the last time a payment was received</comment> <add>1.6</add> <html> diff --git a/civicrm/xml/schema/Core/MappingField.xml b/civicrm/xml/schema/Core/MappingField.xml index 0f4114aacf870af4e1ef250eb546f261c81b1b81..10cf1c4d542dfd03a7b0924f85ec8c763ba33c17 100644 --- a/civicrm/xml/schema/Core/MappingField.xml +++ b/civicrm/xml/schema/Core/MappingField.xml @@ -38,6 +38,7 @@ <table>civicrm_mapping</table> <key>id</key> <add>1.2</add> + <onDelete>CASCADE</onDelete> </foreignKey> <field> <name>name</name> diff --git a/civicrm/xml/schema/Core/MessageTemplate.xml b/civicrm/xml/schema/Core/MessageTemplate.xml index 16ee1f7c7e87c20ad149bbe133a8431abbf64fd4..c912a6abb0e393ff8dc830aee385000b9c03db3c 100644 --- a/civicrm/xml/schema/Core/MessageTemplate.xml +++ b/civicrm/xml/schema/Core/MessageTemplate.xml @@ -96,6 +96,7 @@ <name>is_reserved</name> <title>Message Template Is Reserved?</title> <type>boolean</type> + <default>0</default> <comment>is this the reserved message template which we ship for the workflow referenced by workflow_id?</comment> <add>3.1</add> </field> diff --git a/civicrm/xml/schema/Event/Participant.xml b/civicrm/xml/schema/Event/Participant.xml index e06493f302b1d6dc8064462d9ffbce4192a2b75a..7f0ce2367eba202aa9fb0484f0277a19e7a913f5 100644 --- a/civicrm/xml/schema/Event/Participant.xml +++ b/civicrm/xml/schema/Event/Participant.xml @@ -102,13 +102,14 @@ <field> <name>role_id</name> <uniqueName>participant_role_id</uniqueName> - <title>Participant Role</title> + <title>Participant Role ID</title> <pseudoconstant> <optionGroupName>participant_role</optionGroupName> </pseudoconstant> <html> <type>Select</type> <multiple>1</multiple> + <label>Participant Role</label> </html> <serialize>SEPARATOR_TRIMMED</serialize> <headerPattern>/(participant.)?(role)$/i</headerPattern> diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl index 4d91916da12a3b48a9a2ba5389a5a39d67a33ad0..bff5c01a705f7a2e39863f26cf0da5dd532b27fd 100644 --- a/civicrm/xml/templates/civicrm_data.tpl +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -723,19 +723,19 @@ VALUES -- email greeting. (@option_group_id_emailGreeting, '{literal}Dear {contact.first_name}{/literal}', 1, '{literal}Dear {contact.first_name}{/literal}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_emailGreeting, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_emailGreeting, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Dear {contact.prefix_id:label} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.prefix_id:label} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_emailGreeting, '{literal}Customized{/literal}', 4, '{literal}Customized{/literal}', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), (@option_group_id_emailGreeting, '{literal}Dear {contact.household_name}{/literal}', 5, '{literal}Dear {contact.household_name}{/literal}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- postal greeting. (@option_group_id_postalGreeting, '{literal}Dear {contact.first_name}{/literal}', 1, '{literal}Dear {contact.first_name}{/literal}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_postalGreeting, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_postalGreeting, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.prefix_id:label} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Dear {contact.prefix_id:label} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.prefix_id:label} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_postalGreeting, '{literal}Customized{/literal}', 4, '{literal}Customized{/literal}', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), (@option_group_id_postalGreeting, '{literal}Dear {contact.household_name}{/literal}', 5, '{literal}Dear {contact.household_name}{/literal}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- addressee - (@option_group_id_addressee, '{literal}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}{/literal}', '1', '{literal}}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}{/literal}', NULL , '1', '1', '1', NULL , '0', '0', '1', NULL , NULL, NULL), + (@option_group_id_addressee, '{literal}{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}{/literal}', '1', '{literal}{contact.prefix_id:label}{ }{contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.suffix_id:label}{/literal}', NULL , '1', '1', '1', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, '{literal}{contact.household_name}{/literal}', '2', '{literal}{contact.household_name}{/literal}', NULL , '2', '1', '2', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, '{literal}{contact.organization_name}{/literal}', '3', '{literal}{contact.organization_name}{/literal}', NULL , '3', '1', '3', NULL , '0', '0', '1', NULL , NULL, NULL), (@option_group_id_addressee, '{literal}Customized{/literal}', '4', '{literal}Customized{/literal}', NULL , 0 , '0', '4', NULL , '0', '1', '1', NULL , NULL, NULL), @@ -1798,4 +1798,5 @@ INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_act INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'recaptcha', 'reCAPTCHA', 'reCAPTCHA', 'recaptcha', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'ckeditor4', 'CKEditor4', 'CKEditor4', 'ckeditor4', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'legacycustomsearches', 'Custom search framework', 'Custom search framework', 'legacycustomsearches', 1); +INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'org.civicrm.flexmailer', 'FlexMailer', 'FlexMailer', 'flexmailer', 1); diff --git a/civicrm/xml/templates/civicrm_navigation.tpl b/civicrm/xml/templates/civicrm_navigation.tpl index 5ca89798d36cb8126668e53364f9f387e3e1f835..e638f760a8360a4cc543dc6a2c063bd25df9fffe 100644 --- a/civicrm/xml/templates/civicrm_navigation.tpl +++ b/civicrm/xml/templates/civicrm_navigation.tpl @@ -34,7 +34,7 @@ INSERT INTO `civicrm_dashboard` -- event badge INSERT INTO civicrm_print_label (title, name, description, label_format_name, label_type_id, is_default, is_reserved, is_active, data) VALUES -('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{literal}{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}{/literal}'); +('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{literal}{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date|crmDate:\"%B %E%f\"}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}{/literal}'); -- navigation diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 07c3c97e6131d0f933b5782d5d3ff2d7d32ab05d..99267b3757ae9aa6bf6fde04978d20aa46f463fe 100644 --- a/civicrm/xml/version.xml +++ b/civicrm/xml/version.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="iso-8859-1" ?> <version> - <version_no>5.42.1</version_no> + <version_no>5.43.0</version_no> </version> diff --git a/includes/admin-metaboxes/civicrm.metabox.contact.add.php b/includes/admin-metaboxes/civicrm.metabox.contact.add.php index 2ca5a695af4c7bf9dc98464bb6f889ab54d70cd5..ce802947d0b6d9d0b295c7ed6f163a3989ab78c5 100644 --- a/includes/admin-metaboxes/civicrm.metabox.contact.add.php +++ b/includes/admin-metaboxes/civicrm.metabox.contact.add.php @@ -473,15 +473,27 @@ class CiviCRM_For_WordPress_Admin_Metabox_Contact_Add { wp_send_json($data); } - // Build params to create Contact. - $params = [ - 'version' => 3, - 'contact_type' => 'Individual', + // Build params to check for an existing Contact. + $contact = [ 'first_name' => $data['first_name'], 'last_name' => $data['last_name'], 'email' => $data['email'], ]; + // Bail if there is an existing Contact. + $existing_id = civi_wp()->admin->get_by_dedupe_unsupervised($contact); + if ($existing_id !== FALSE && $existing_id !== 0) { + $open = '<a href="' . $this->civi->admin->get_admin_link('civicrm/contact/view', 'reset=1&cid=' . $existing_id) . '">'; + $data['notice'] = sprintf(__('There seems to be %1$san existing Contact%2$s with these details.', 'civicrm'), $open, '</a>'); + wp_send_json($data); + } + + // Build params to create Contact. + $params = [ + 'version' => 3, + 'contact_type' => 'Individual', + ] + $contact; + // Call the API. $result = civicrm_api('Contact', 'create', $params); diff --git a/includes/civicrm.admin.php b/includes/civicrm.admin.php index bb28e1955fd9cbafc67bb494b8300a80f52dba22..dde9a45392cc06e0e6930f9ac1eba50e4b353764 100644 --- a/includes/civicrm.admin.php +++ b/includes/civicrm.admin.php @@ -863,4 +863,42 @@ class CiviCRM_For_WordPress_Admin { } + /** + * Gets a suggested CiviCRM Contact ID via the "Unsupervised" Dedupe Rule. + * + * @since 5.43 + * + * @param array $contact The array of CiviCRM Contact data. + * @param string $contact_type The Contact Type. + * @return integer|bool $contact_id The suggested Contact ID, or false on failure. + */ + public function get_by_dedupe_unsupervised($contact, $contact_type = 'Individual') { + + if (empty($contact)) { + return FALSE; + } + + if (!$this->civi->initialize()) { + return FALSE; + } + + // Get the Dedupe params. + $dedupe_params = CRM_Dedupe_Finder::formatParams($contact, $contact_type); + $dedupe_params['check_permission'] = FALSE; + + // Use Dedupe Rules to find possible Contact IDs. + $contact_ids = CRM_Dedupe_Finder::dupesByParams($dedupe_params, $contact_type, 'Unsupervised'); + + // Return the suggested Contact ID if present. + $contact_id = 0; + if (!empty($contact_ids)) { + $contact_ids = array_reverse($contact_ids); + $contact_id = (int) array_pop($contact_ids); + } + + // --< + return $contact_id; + + } + }