diff --git a/civicrm.php b/civicrm.php index a29186f54f972d1e085ba77a92a5c68c83f778f6..08738a0b40adc904cf779e3bd17b5ad245e33082 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,10 +2,10 @@ /* Plugin Name: CiviCRM Description: CiviCRM - Growing and Sustaining Relationships -Version: 5.22.1 +Version: 5.23.0 Author: CiviCRM LLC Author URI: https://civicrm.org/ -Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress +Plugin URI: https://docs.civicrm.org/sysadmin/en/latest/install/wordpress/ License: AGPL3 Text Domain: civicrm Domain Path: /languages @@ -54,7 +54,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Set version here: when it changes, will force JS to reload -define( 'CIVICRM_PLUGIN_VERSION', '4.7' ); +define( 'CIVICRM_PLUGIN_VERSION', '5.23.0' ); // Store reference to this file if (!defined('CIVICRM_PLUGIN_FILE')) { @@ -121,17 +121,6 @@ if ( file_exists( CIVICRM_SETTINGS_PATH ) ) { // Prevent CiviCRM from rendering its own header define( 'CIVICRM_UF_HEAD', TRUE ); -/** - * Setting this to 'true' will replace all mailing URLs calls to 'extern/url.php' - * and 'extern/open.php' with their REST counterpart 'civicrm/v3/url' and 'civicrm/v3/open'. - * - * Use for test purposes, may affect mailing - * performance, see Plugin->replace_tracking_urls() method. - */ -if ( ! defined( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING' ) ) { - define( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING', false ); -} - /** * Define CiviCRM_For_WordPress Class. @@ -523,11 +512,6 @@ class CiviCRM_For_WordPress { include_once CIVICRM_PLUGIN_DIR . 'includes/civicrm.basepage.php'; $this->basepage = new CiviCRM_For_WordPress_Basepage; - if ( ! class_exists( 'CiviCRM_WP_REST\Autoloader' ) ) { - // Include REST API autoloader class - require_once( CIVICRM_PLUGIN_DIR . 'wp-rest/Autoloader.php' ); - } - } @@ -652,16 +636,6 @@ class CiviCRM_For_WordPress { // Register hooks for clean URLs. $this->register_hooks_clean_urls(); - if ( ! class_exists( 'CiviCRM_WP_REST\Plugin' ) ) { - - // Set up REST API. - CiviCRM_WP_REST\Autoloader::add_source( $source_path = trailingslashit( CIVICRM_PLUGIN_DIR . 'wp-rest' ) ); - - // Init REST API. - new CiviCRM_WP_REST\Plugin; - - } - } diff --git a/civicrm/CONTRIBUTORS.txt b/civicrm/CONTRIBUTORS.txt index f0e5eb2e951af4a06f1add1a5162a90ce550417c..5d5e9b2a9c2aee6e6dfa457e9945831702ae3ea3 100644 --- a/civicrm/CONTRIBUTORS.txt +++ b/civicrm/CONTRIBUTORS.txt @@ -12,7 +12,7 @@ Alexy Mikhailichenko Andrei Mondoc Andrew Thompson Armadillo Sec Ltd - Daniel Compton -Australian Greens - Andrew Cormick-Dockery, Seamus Lee +Australian Greens - Andrew Cormick-Dockery Bastien Ho Blackfly Solutions - Alan Dixon Business & Code - Alain Benbassat @@ -46,12 +46,13 @@ Fuzion - Jitendra Purohit, Luke Stewart Hossein Amin Giant Rabbit - Peter Haight Giovanni Dalmas +GMVCO Databases - Craig Almond, Jade Gaunt Greenpeace Central and Eastern Europe - Patrick Figel Guillaume Rischard iXiam - César Ramos, Luciano Spiegel, Vangelis Pantazis Jamie Tillman Jens Schuppe -JMA Consulting - Edsel Lopez, Joe Murray, Monish Deb +JMA Consulting - Edsel Lopez, Joe Murray, Monish Deb, Seamus Lee Johan Vervloet John Kingsnorth John Kyle Cronan diff --git a/civicrm/CRM/ACL/BAO/ACL.php b/civicrm/CRM/ACL/BAO/ACL.php index cee8e8869a094efb38b294123d323487e8091d99..29b1231940c5ec608ed9fc49b065cce67c7ae2aa 100644 --- a/civicrm/CRM/ACL/BAO/ACL.php +++ b/civicrm/CRM/ACL/BAO/ACL.php @@ -34,6 +34,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * @return array|null */ public static function entityTable() { + CRM_Core_Error::deprecatedFunctionWarning('unused function to be removed'); if (!self::$_entityTable) { self::$_entityTable = [ 'civicrm_contact' => ts('Contact'), @@ -47,6 +48,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * @return array|null */ public static function objectTable() { + CRM_Core_Error::deprecatedFunctionWarning('unused function to be removed'); if (!self::$_objectTable) { self::$_objectTable = [ 'civicrm_contact' => ts('Contact'), @@ -59,7 +61,9 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { } /** - * @return array|null + * Available operations for pseudoconstant. + * + * @return array */ public static function operation() { if (!self::$_operation) { @@ -92,6 +96,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * @throws \CRM_Core_Exception */ public static function getClause($table, $id, &$tables) { + CRM_Core_Error::deprecatedFunctionWarning('unused function to be removed'); $table = CRM_Utils_Type::escape($table, 'String'); $id = CRM_Utils_Type::escape($id, 'Integer'); $whereTables = []; @@ -150,7 +155,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * * @throws \CRM_Core_Exception */ - public static function getACLs($contact_id = NULL) { + protected static function getACLs($contact_id = NULL) { $results = []; if (empty($contact_id)) { @@ -163,8 +168,6 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { $acl = self::getTableName(); $contact = CRM_Contact_BAO_Contact::getTableName(); - $c2g = CRM_Contact_BAO_GroupContact::getTableName(); - $group = CRM_Contact_BAO_Group::getTableName(); $query = " SELECT acl.* FROM $acl acl"; @@ -196,34 +199,23 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * * @throws \CRM_Core_Exception */ - public static function getACLRoles($contact_id = NULL) { + protected static function getACLRoles($contact_id = NULL) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $rule = new CRM_ACL_BAO_ACL(); - $acl = self::getTableName(); - $aclRole = 'civicrm_acl_role'; - $aclRoleJoin = CRM_ACL_DAO_EntityRole::getTableName(); $contact = CRM_Contact_BAO_Contact::getTableName(); - $query = " SELECT acl.* - FROM $acl acl - INNER JOIN civicrm_option_group og - ON og.name = 'acl_role' - INNER JOIN civicrm_option_value ov - ON acl.entity_table = '$aclRole' - AND ov.option_group_id = og.id - AND acl.entity_id = ov.value"; + $query = 'SELECT acl.* FROM civicrm_acl acl'; + $where = ['acl.entity_table = "civicrm_acl_role" AND acl.entity_id IN (' . implode(',', array_keys(CRM_Core_OptionGroup::values('acl_role'))) . ')']; if (!empty($contact_id)) { - $query .= " WHERE acl.entity_table = '$contact' - AND acl.is_active = 1 - AND acl.entity_id = $contact_id"; + $where[] = " acl.entity_table = '$contact' AND acl.is_active = 1 AND acl.entity_id = $contact_id"; } $results = []; - $rule->query($query); + $rule->query($query . ' WHERE ' . implode(' AND ', $where)); while ($rule->fetch()) { $results[$rule->id] = $rule->toArray(); @@ -244,7 +236,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { * Assoc array of ACL rules * @throws \CRM_Core_Exception */ - public static function getGroupACLs($contact_id, $aclRoles = FALSE) { + protected static function getGroupACLs($contact_id, $aclRoles = FALSE) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $rule = new CRM_ACL_BAO_ACL(); @@ -289,7 +281,7 @@ SELECT acl.* * Array of assoc. arrays of ACL rules * @throws \CRM_Core_Exception */ - public static function getGroupACLRoles($contact_id) { + protected static function getGroupACLRoles($contact_id) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $rule = new CRM_ACL_BAO_ACL(); @@ -299,7 +291,6 @@ SELECT acl.* $aclER = CRM_ACL_DAO_EntityRole::getTableName(); $c2g = CRM_Contact_BAO_GroupContact::getTableName(); - $group = CRM_Contact_BAO_Group::getTableName(); $query = " SELECT acl.* FROM $acl acl @@ -643,7 +634,7 @@ ORDER BY a.object_id * * @return bool */ - public static function matchType($type, $operation) { + protected static function matchType($type, $operation) { $typeCheck = FALSE; switch ($operation) { case 'All': diff --git a/civicrm/CRM/ACL/Form/ACL.php b/civicrm/CRM/ACL/Form/ACL.php index 2ffa52e376cb2ed77c7dab8ad631d91351c3386c..de1665dcd4662305a8719393d8121c83f418d42c 100644 --- a/civicrm/CRM/ACL/Form/ACL.php +++ b/civicrm/CRM/ACL/Form/ACL.php @@ -94,8 +94,6 @@ class CRM_ACL_Form_ACL extends CRM_Admin_Form { return; } - $attributes = CRM_Core_DAO::getAttribute('CRM_ACL_DAO_ACL'); - $this->add('text', 'name', ts('Description'), CRM_Core_DAO::getAttribute('CRM_ACL_DAO_ACL', 'name'), TRUE); $operations = ['' => ts('- select -')] + CRM_ACL_BAO_ACL::operation(); diff --git a/civicrm/CRM/ACL/Form/WordPress/Permissions.php b/civicrm/CRM/ACL/Form/WordPress/Permissions.php index f0a449d2456d9cc02f9886f127ee597edc1577ec..4c5f1330066f4d03cf337d5ca1ac2ceba5c9d9ef 100644 --- a/civicrm/CRM/ACL/Form/WordPress/Permissions.php +++ b/civicrm/CRM/ACL/Form/WordPress/Permissions.php @@ -38,7 +38,7 @@ class CRM_ACL_Form_WordPress_Permissions extends CRM_Core_Form { } foreach ($wp_roles->role_names as $role => $name) { // Don't show the permissions options for administrator, as they have all permissions - if ( is_multisite() OR $role !== 'administrator') { + if ($role !== 'administrator') { $roleObj = $wp_roles->get_role($role); if (!empty($roleObj->capabilities)) { foreach ($roleObj->capabilities as $ckey => $cname) { @@ -194,7 +194,6 @@ class CRM_ACL_Form_WordPress_Permissions extends CRM_Core_Form { * civicrm permissions */ public static function getPermissionArray($descriptions = FALSE) { - global $civicrm_root; $permissions = CRM_Core_Permission::basicPermissions(FALSE, $descriptions); diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index a42019a405108b5ff5d0435fd884361e564f656c..1f0e7a4fe8f95cf7f433aa3ce84322f9ca1f0ac1 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -804,7 +804,10 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { // fetch case subject for case ID found if (!empty($activity['case_id'])) { - $activities[$id]['case_subject'] = CRM_Core_DAO::executeQuery('CRM_Case_DAO_Case', $activity['case_id'], 'subject'); + $activities[$id]['case_subject'] = civicrm_api3('Case', 'getvalue', [ + 'return' => 'subject', + 'id' => reset($activity['case_id']), + ]); } } else { @@ -979,12 +982,13 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * @param string $additionalDetails * @param int $campaignID * @param array $attachments + * @param int $caseID * * @return int * The created activity ID * @throws \CRM_Core_Exception */ - public static function createEmailActivity($userID, $subject, $html, $text, $additionalDetails, $campaignID, $attachments) { + public static function createEmailActivity($userID, $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) @@ -1006,6 +1010,9 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Completed'), 'campaign_id' => $campaignID, ]; + 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']); @@ -1016,9 +1023,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $activityParams = array_merge($activityParams, $attachments); } - $activity = self::create($activityParams); - - return $activity->id; + $activity = civicrm_api3('Activity', 'create', $activityParams); + return $activity['id']; } /** @@ -1049,6 +1055,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * The additional information of CC and BCC appended to the activity Details. * @param array $contributionIds * @param int $campaignId + * @param int $caseId * * @return array * ( sent, activityId) if any email is sent and activityId @@ -1069,7 +1076,8 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $contactIds = NULL, $additionalDetails = NULL, $contributionIds = NULL, - $campaignId = NULL + $campaignId = NULL, + $caseId = NULL ) { // get the contact details of logged in contact, which we set as from email if ($userID == NULL) { @@ -1097,7 +1105,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } //create the meta level record first ( email activity ) - $activityID = self::createEmailActivity($userID, $subject, $html, $text, $additionalDetails, $campaignId, $attachments); + $activityID = self::createEmailActivity($userID, $subject, $html, $text, $additionalDetails, $campaignId, $attachments, $caseId); $returnProperties = []; if (isset($messageToken['contact'])) { @@ -1188,6 +1196,12 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $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); diff --git a/civicrm/CRM/Activity/Form/Activity.php b/civicrm/CRM/Activity/Form/Activity.php index 889901a56649e6e758414eed195f0e01dce94cd0..a3d6f4a5d6f8332b82352274dfe4e447163b3647 100644 --- a/civicrm/CRM/Activity/Form/Activity.php +++ b/civicrm/CRM/Activity/Form/Activity.php @@ -42,7 +42,10 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { public $_activityTypeId; /** - * The name of activity type. + * The label of the activity type. + * Unfortunately this variable is called Name but don't want to change it + * since it's public and might be commonly used in customized code. See also + * activityTypeNameAndLabel used in the smarty template. * * @var string */ diff --git a/civicrm/CRM/Activity/Form/ActivityView.php b/civicrm/CRM/Activity/Form/ActivityView.php index 422e30eef33e9fdc0fa802ef73f2b747915a31ec..3ef07b7aa1428a597492e6ee66b967a413fda976 100644 --- a/civicrm/CRM/Activity/Form/ActivityView.php +++ b/civicrm/CRM/Activity/Form/ActivityView.php @@ -95,13 +95,13 @@ class CRM_Activity_Form_ActivityView extends CRM_Core_Form { $values['attachment'] = CRM_Core_BAO_File::attachmentInfo('civicrm_activity', $activityId); $this->assign('values', $values); - $url = CRM_Utils_System::url(implode("/", $this->urlPath), "reset=1&id={$activityId}&action=view&cid={$values['source_contact_id']}"); - CRM_Utils_Recent::add($this->_values['subject'], + $url = CRM_Utils_System::url(implode("/", $this->urlPath), "reset=1&id={$activityId}&action=view&cid={$defaults['source_contact_id']}"); + CRM_Utils_Recent::add($defaults['subject'], $url, - $values['id'], + $activityId, 'Activity', - $values['source_contact_id'], - $values['source_contact'] + $defaults['source_contact_id'], + $defaults['source_contact'] ); } diff --git a/civicrm/CRM/Activity/Form/Search.php b/civicrm/CRM/Activity/Form/Search.php index 57a35aef82d10cf22fe386bb9978daccdeb1f74b..06dab35143ad026a3fc3d49896be96e1e0a13811 100644 --- a/civicrm/CRM/Activity/Form/Search.php +++ b/civicrm/CRM/Activity/Form/Search.php @@ -71,7 +71,6 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $this->set('searchFormName', 'Search'); // set the button names - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; diff --git a/civicrm/CRM/Activity/Form/Task/PDF.php b/civicrm/CRM/Activity/Form/Task/PDF.php new file mode 100644 index 0000000000000000000000000000000000000000..1e21a8701eaf125a68037e4b9e787ccf39a13bf8 --- /dev/null +++ b/civicrm/CRM/Activity/Form/Task/PDF.php @@ -0,0 +1,62 @@ +<?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 | + +--------------------------------------------------------------------+ + */ + +/** + * This class provides the functionality to create PDF/Word letters for activities. + */ +class CRM_Activity_Form_Task_PDF extends CRM_Activity_Form_Task { + + /** + * Build all the data structures needed to build the form. + */ + public function preProcess() { + parent::preProcess(); + CRM_Activity_Form_Task_PDFLetterCommon::preProcess($this); + } + + /** + * Set defaults for the pdf. + * + * @return array + */ + public function setDefaultValues() { + return CRM_Activity_Form_Task_PDFLetterCommon::setDefaultValues(); + } + + /** + * Build the form object. + */ + public function buildQuickForm() { + CRM_Activity_Form_Task_PDFLetterCommon::buildQuickForm($this); + // Remove types other than pdf as they are not working (have never worked) and don't want fix + // for them to block pdf. + // @todo debug & fix.... + $this->add('select', 'document_type', ts('Document Type'), ['pdf' => ts('Portable Document Format (.pdf)')]); + + } + + /** + * Process the form after the input has been submitted and validated. + */ + public function postProcess() { + CRM_Activity_Form_Task_PDFLetterCommon::postProcess($this); + } + + /** + * List available tokens for this form. + * + * @return array + */ + public function listTokens() { + return CRM_Activity_Form_Task_PDFLetterCommon::listTokens(); + } + +} diff --git a/civicrm/CRM/Activity/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Activity/Form/Task/PDFLetterCommon.php new file mode 100644 index 0000000000000000000000000000000000000000..28cbe8dde92fa76c46def64d09d025d476844e06 --- /dev/null +++ b/civicrm/CRM/Activity/Form/Task/PDFLetterCommon.php @@ -0,0 +1,74 @@ +<?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\TokenProcessor; + +/** + * This class provides the common functionality for creating PDF letter for + * activities. + * + */ +class CRM_Activity_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetterCommon { + + /** + * Process the form after the input has been submitted and validated. + * + * @param CRM_Core_Form $form + * @param $activityIds + * + * @return void + */ + public static function postProcess(&$form) { + $activityIds = $form->_activityHolderIds; + $formValues = $form->controller->exportValues($form->getName()); + $html_message = self::processTemplate($formValues); + + // Do the rest in another function to make testing easier + self::createDocument($activityIds, $html_message, $formValues); + + $form->postProcessHook(); + + CRM_Utils_System::civiExit(1); + } + + /** + * Produce the document from the activities + * This uses the new token processor + * + * @param array $activityIds array of activity ids + * @param string $html_message message text with tokens + * @param array $formValues formValues from the form + * @return void + */ + public static function createDocument($activityIds, $html_message, $formValues) { + $tp = self::createTokenProcessor(); + $tp->addMessage('body_html', $html_message, 'text/html'); + + foreach ($activityIds as $activityId) { + $tp->addRow()->context('activityId', $activityId); + } + $tp->evaluate(); + + return self::renderFromRows($tp->getRows(), 'body_html', $formValues); + } + + /** + * Create a token processor + */ + public static function createTokenProcessor() { + return new TokenProcessor(\Civi::dispatcher(), array( + 'controller' => get_class(), + 'smarty' => FALSE, + 'schema' => ['activityId'], + )); + } + +} diff --git a/civicrm/CRM/Activity/Task.php b/civicrm/CRM/Activity/Task.php index a65f8170dc98a8c4264fef3c77e2ca37a1cb7b5d..d93519d8bddc93f669d365fd23f22818222ac919 100644 --- a/civicrm/CRM/Activity/Task.php +++ b/civicrm/CRM/Activity/Task.php @@ -68,6 +68,11 @@ class CRM_Activity_Task extends CRM_Core_Task { ], 'result' => FALSE, ], + self::PDF_LETTER => [ + 'title' => ts('Print/merge Document'), + 'class' => 'CRM_Activity_Form_Task_PDF', + 'result' => FALSE, + ], self::TASK_SMS => [ 'title' => ts('SMS - send reply'), 'class' => 'CRM_Activity_Form_Task_SMS', diff --git a/civicrm/CRM/Activity/Tokens.php b/civicrm/CRM/Activity/Tokens.php index 21f6300f608c7c64f8d4eb1c274f3ce0f3ef0a4e..825c120c9890e085260a3c64825b1dc33df1747e 100644 --- a/civicrm/CRM/Activity/Tokens.php +++ b/civicrm/CRM/Activity/Tokens.php @@ -20,15 +20,33 @@ * * Generate "activity.*" tokens. * - * This TokenSubscriber was produced by refactoring the code from the + * This TokenSubscriber was originally produced by refactoring the code from the * scheduled-reminder system with the goal of making that system * more flexible. The current implementation is still coupled to * scheduled-reminders. It would be good to figure out a more generic * implementation which is not tied to scheduled reminders, although * that is outside the current scope. + * + * This has been enhanced to work with PDF/letter merge */ class CRM_Activity_Tokens extends \Civi\Token\AbstractTokenSubscriber { + private $basicTokens; + private $customFieldTokens; + + /** + * Mapping from tokenName to api return field + * Use lists since we might need multiple fields + * + * @var array + */ + private static $fieldMapping = [ + 'activity_id' => ['id'], + 'activity_type' => ['activity_type_id'], + 'status' => ['status_id'], + 'campaign' => ['campaign_id'], + ]; + /** * CRM_Activity_Tokens constructor. */ @@ -43,9 +61,34 @@ class CRM_Activity_Tokens extends \Civi\Token\AbstractTokenSubscriber { * @inheritDoc */ 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_activity'; + return in_array('activityId', $processor->context['schema']) || + (!empty($processor->context['actionMapping']) + && $processor->context['actionMapping']->getEntity() === 'civicrm_activity'); + } + + /** + * @inheritDoc + */ + public function getActiveTokens(\Civi\Token\Event\TokenValueEvent $e) { + $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + if (!isset($messageTokens[$this->entity])) { + return NULL; + } + + $activeTokens = []; + // if message token contains '_\d+_', then treat as '_N_' + foreach ($messageTokens[$this->entity] as $msgToken) { + 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); } /** @@ -60,39 +103,114 @@ class CRM_Activity_Tokens extends \Civi\Token\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'); + } + + /** + * Find the fields that we need to get to construct the tokens requested. + * @param array $tokens list of tokens + * @return array list of fields needed to generate those tokens + */ + public function getReturnFields($tokens) { + // Make sure we always return something + $fields = ['id']; + + foreach (array_intersect($tokens, + array_merge(array_keys(self::getBasicTokens()), array_keys(self::getCustomFieldTokens())) + ) as $token) { + if (isset(self::$fieldMapping[$token])) { + $fields = array_merge($fields, self::$fieldMapping[$token]); + } + else { + $fields[] = $token; + } + } + return array_unique($fields); + } - // FIXME: seems too broad. - $e->query->select('e.*'); - $e->query->select('ov.label as activity_type, e.id as activity_id'); + /** + * @inheritDoc + */ + public function prefetch(\Civi\Token\Event\TokenValueEvent $e) { + // Find all the activity IDs + $activityIds + = $e->getTokenProcessor()->getContextValues('actionSearchResult', 'entityID') + + $e->getTokenProcessor()->getContextValues('activityId'); + + if (!$activityIds) { + return; + } - $e->query->join("og", "!casMailingJoinType civicrm_option_group og ON og.name = 'activity_type'"); - $e->query->join("ov", "!casMailingJoinType civicrm_option_value ov ON e.activity_type_id = ov.value AND ov.option_group_id = og.id"); + // Get data on all activities for basic and customfield tokens + $activities = civicrm_api3('Activity', 'get', [ + 'id' => ['IN' => $activityIds], + 'options' => ['limit' => 0], + 'return' => self::getReturnFields($this->activeTokens), + ]); + $prefetch['activity'] = $activities['values']; - // if CiviCase component is enabled, join for caseId. - $compInfo = CRM_Core_Component::getEnabledComponents(); - if (array_key_exists('CiviCase', $compInfo)) { - $e->query->select("civicrm_case_activity.case_id as case_id"); - $e->query->join('civicrm_case_activity', "LEFT JOIN `civicrm_case_activity` ON `e`.`id` = `civicrm_case_activity`.`activity_id`"); + // Store the activity types if needed + if (in_array('activity_type', $this->activeTokens)) { + $this->activityTypes = \CRM_Core_OptionGroup::values('activity_type'); } + + // Store the activity statuses if needed + if (in_array('status', $this->activeTokens)) { + $this->activityStatuses = \CRM_Core_OptionGroup::values('activity_status'); + } + + // Store the campaigns if needed + if (in_array('campaign', $this->activeTokens)) { + $this->campaigns = \CRM_Campaign_BAO_Campaign::getCampaigns(); + } + + return $prefetch; } /** * @inheritDoc */ public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) { - $actionSearchResult = $row->context['actionSearchResult']; + // maps token name to api field + $mapping = [ + 'activity_id' => 'id', + ]; + + // Get ActivityID either from actionSearchResult (for scheduled reminders) if exists + $activityId = isset($row->context['actionSearchResult']->entityID) + ? $row->context['actionSearchResult']->entityID + : $row->context['activityId']; + + $activity = (object) $prefetch['activity'][$activityId]; - if (in_array($field, array('activity_date_time'))) { - $row->tokens($entity, $field, \CRM_Utils_Date::customFormat($actionSearchResult->$field)); + if (in_array($field, ['activity_date_time', 'created_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 (isset($actionSearchResult->$field)) { - $row->tokens($entity, $field, $actionSearchResult->$field); + elseif (in_array($field, ['status'])) { + $row->tokens($entity, $field, $this->activityStatuses[$activity->status_id]); } - elseif ($cfID = \CRM_Core_BAO_CustomField::getKeyID($field)) { - $row->customToken($entity, $cfID, $actionSearchResult->entity_id); + elseif (in_array($field, ['campaign'])) { + $row->tokens($entity, $field, $this->campaigns[$activity->campaign_id]); } - else { - $row->tokens($entity, $field, ''); + elseif (in_array($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); + } + 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); } } @@ -102,13 +220,27 @@ class CRM_Activity_Tokens extends \Civi\Token\AbstractTokenSubscriber { * @return array token name => token label */ protected function getBasicTokens() { - return [ - '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'), - ]; + 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'), + 'activity_type_id' => ts('Activity Type ID'), + 'status' => ts('Activity Status'), + 'status_id' => ts('Activity Status ID'), + 'location' => ts('Activity Location'), + 'created_date' => ts('Activity Creation Date'), + 'duration' => ts('Activity Duration'), + 'campaign' => ts('Activity Campaign'), + 'campaign_id' => ts('Activity Campaign ID'), + ]; + if (array_key_exists('CiviCase', CRM_Core_Component::getEnabledComponents())) { + $this->basicTokens['case_id'] = ts('Activity Case ID'); + } + } + return $this->basicTokens; } /** @@ -116,7 +248,10 @@ class CRM_Activity_Tokens extends \Civi\Token\AbstractTokenSubscriber { * @return array token name => token label */ protected function getCustomFieldTokens() { - return CRM_Utils_Token::getCustomFieldTokens('Activity'); + if (!isset($this->customFieldTokens)) { + $this->customFieldTokens = \CRM_Utils_Token::getCustomFieldTokens('Activity'); + } + return $this->customFieldTokens; } } diff --git a/civicrm/CRM/Admin/Form/LabelFormats.php b/civicrm/CRM/Admin/Form/LabelFormats.php index 5e77a66a194a4951a6111fd17b276fe6c4d4f3a1..1713fd910b3fe322a98ce59ff4cf33c911d3e183 100644 --- a/civicrm/CRM/Admin/Form/LabelFormats.php +++ b/civicrm/CRM/Admin/Form/LabelFormats.php @@ -155,6 +155,7 @@ class CRM_Admin_Form_LabelFormats extends CRM_Admin_Form { public function setDefaultValues() { if ($this->_action & CRM_Core_Action::ADD) { $defaults['weight'] = CRM_Utils_Array::value('weight', CRM_Core_BAO_LabelFormat::getDefaultValues($this->_group), 0); + $defaults['font_name'] = CRM_Utils_Array::value('font-name', CRM_Core_BAO_LabelFormat::getDefaultValues($this->_group), ''); } else { $defaults = $this->_values; diff --git a/civicrm/CRM/Admin/Form/Preferences.php b/civicrm/CRM/Admin/Form/Preferences.php index f0dc5c9a364f5dd932ab8a072dbd0b36fdec4f39..343df0fdd1b43d93281a2ad5bee78b3a5aa74435 100644 --- a/civicrm/CRM/Admin/Form/Preferences.php +++ b/civicrm/CRM/Admin/Form/Preferences.php @@ -26,15 +26,17 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { protected $_contactID = NULL; public $_action = NULL; - protected $_checkbox = NULL; - - protected $_varNames = []; - - protected $_config = NULL; - protected $_params = NULL; + /** + * Preprocess form. + * + * @throws \CRM_Core_Exception + */ public function preProcess() { + // @todo - it's likely the only 'current' code in this function is the line + // $this->addFieldsDefinedInSettingsMetadata(); and this class is no different to CRM_Admin_Form_Setting + // in any meaningful way. $this->_contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this, FALSE ); @@ -44,44 +46,27 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'update' ); - if (isset($action)) { - $this->assign('action', $action); - } - - $session = CRM_Core_Session::singleton(); - - $this->_config = new CRM_Core_DAO(); if ($this->_system) { if (CRM_Core_Permission::check('administer CiviCRM')) { $this->_contactID = NULL; } else { - CRM_Utils_System::fatal('You do not have permission to edit preferences'); + throw new CRM_Core_Exception('You do not have permission to edit preferences'); } - $this->_config->contact_id = NULL; } else { if (!$this->_contactID) { - $this->_contactID = $session->get('userID'); + $this->_contactID = CRM_Core_Session::getLoggedInContactID(); if (!$this->_contactID) { - CRM_Utils_System::fatal('Could not retrieve contact id'); + throw new CRM_Core_Exception('Could not retrieve contact id'); } $this->set('cid', $this->_contactID); } - $this->_config->contact_id = $this->_contactID; } $this->addFieldsDefinedInSettingsMetadata(); - $settings = Civi::settings(); - // @todo replace this by defining all in settings. - foreach ($this->_varNames as $groupName => $settingNames) { - CRM_Core_Error::deprecatedFunctionWarning('deprecated use of preferences form. This will be removed from core soon'); - foreach ($settingNames as $settingName => $options) { - $this->_config->$settingName = $settings->get($settingName); - } - } - $session->pushUserContext(CRM_Utils_System::url('civicrm/admin', 'reset=1')); + CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm/admin', 'reset=1')); } /** @@ -89,128 +74,16 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { */ public function setDefaultValues() { $this->_defaults = []; - $this->setDefaultsForMetadataDefinedFields(); - foreach ($this->_varNames as $groupName => $settings) { - CRM_Core_Error::deprecatedFunctionWarning('deprecated use of preferences form. This will be removed from core soon'); - foreach ($settings as $settingName => $settingDetails) { - $this->_defaults[$settingName] = isset($this->_config->$settingName) ? $this->_config->$settingName : CRM_Utils_Array::value('default', $settingDetails, NULL); - } - } - return $this->_defaults; } - /** - * @todo deprecate in favour of setting using metadata. - * - * @param $defaults - */ - public function cbsDefaultValues(&$defaults) { - - foreach ($this->_varNames as $groupName => $groupValues) { - CRM_Core_Error::deprecatedFunctionWarning('deprecated use of preferences form. This will be removed from core soon'); - foreach ($groupValues as $settingName => $fieldValue) { - if ($fieldValue['html_type'] == 'checkboxes') { - if (isset($this->_config->$settingName) && - $this->_config->$settingName - ) { - $value = explode(CRM_Core_DAO::VALUE_SEPARATOR, - substr($this->_config->$settingName, 1, -1) - ); - if (!empty($value)) { - $defaults[$settingName] = []; - foreach ($value as $n => $v) { - $defaults[$settingName][$v] = 1; - } - } - } - } - } - } - } - /** * Build the form object. */ public function buildQuickForm() { parent::buildQuickForm(); - if (!empty($this->_varNames)) { - CRM_Core_Error::deprecatedFunctionWarning('deprecated use of preferences form. This will be removed from core soon'); - foreach ($this->_varNames as $groupName => $groupValues) { - $formName = CRM_Utils_String::titleToVar($groupName); - $this->assign('formName', $formName); - $fields = []; - foreach ($groupValues as $fieldName => $fieldValue) { - $fields[$fieldName] = $fieldValue; - - switch ($fieldValue['html_type']) { - case 'text': - $this->addElement('text', - $fieldName, - $fieldValue['title'], - [ - 'maxlength' => 64, - 'size' => 32, - ] - ); - break; - - case 'textarea': - case 'checkbox': - $this->add($fieldValue['html_type'], - $fieldName, - $fieldValue['title'] - ); - break; - - case 'radio': - $options = CRM_Core_OptionGroup::values($fieldName, FALSE, FALSE, TRUE); - $this->addRadio($fieldName, $fieldValue['title'], $options, NULL, ' '); - break; - - case 'YesNo': - $this->addRadio($fieldName, $fieldValue['title'], [0 => 'No', 1 => 'Yes'], NULL, ' '); - break; - - case 'checkboxes': - $options = array_flip(CRM_Core_OptionGroup::values($fieldName, FALSE, FALSE, TRUE)); - $newOptions = []; - foreach ($options as $key => $val) { - $newOptions[$key] = $val; - } - $this->addCheckBox($fieldName, - $fieldValue['title'], - $newOptions, - NULL, NULL, NULL, NULL, - [' ', ' ', '<br/>'] - ); - break; - - case 'select': - $this->addElement('select', - $fieldName, - $fieldValue['title'], - $fieldValue['option_values'], - CRM_Utils_Array::value('attributes', $fieldValue) - ); - break; - - case 'wysiwyg': - $this->add('wysiwyg', $fieldName, $fieldValue['title'], $fieldValue['attributes']); - break; - - case 'entity_reference': - $this->addEntityRef($fieldName, $fieldValue['title'], CRM_Utils_Array::value('options', $fieldValue, [])); - } - } - - $fields = CRM_Utils_Array::crmArraySortByField($fields, 'weight'); - $this->assign('fields', $fields); - } - } - $this->addButtons([ [ 'type' => 'next', @@ -232,7 +105,6 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { * Process the form submission. */ public function postProcess() { - $config = CRM_Core_Config::singleton(); if ($this->_action == CRM_Core_Action::VIEW) { return; } @@ -254,52 +126,6 @@ class CRM_Admin_Form_Preferences extends CRM_Core_Form { CRM_Core_Session::setStatus($e->getMessage(), ts('Save Failed'), 'error'); } - foreach ($this->_varNames as $groupName => $groupValues) { - foreach ($groupValues as $settingName => $fieldValue) { - switch ($fieldValue['html_type']) { - case 'checkboxes': - if (!empty($this->_params[$settingName]) && - is_array($this->_params[$settingName]) - ) { - $this->_config->$settingName = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, - array_keys($this->_params[$settingName]) - ) . CRM_Core_DAO::VALUE_SEPARATOR; - } - else { - $this->_config->$settingName = NULL; - } - break; - - case 'checkbox': - $this->_config->$settingName = !empty($this->_params[$settingName]) ? 1 : 0; - break; - - case 'text': - case 'select': - case 'radio': - case 'YesNo': - case 'entity_reference': - $this->_config->$settingName = CRM_Utils_Array::value($settingName, $this->_params); - break; - - case 'textarea': - $value = CRM_Utils_Array::value($settingName, $this->_params); - if ($value) { - $value = trim($value); - $value = str_replace(["\r\n", "\r"], "\n", $value); - } - $this->_config->$settingName = $value; - break; - } - } - } - - foreach ($this->_varNames as $groupName => $groupValues) { - foreach ($groupValues as $settingName => $fieldValue) { - $settingValue = isset($this->_config->$settingName) ? $this->_config->$settingName : NULL; - Civi::settings()->set($settingName, $settingValue); - } - } // Update any settings stored in dynamic js CRM_Core_Resources::singleton()->resetCacheCode(); diff --git a/civicrm/CRM/Admin/Form/Setting.php b/civicrm/CRM/Admin/Form/Setting.php index b3982b121a16ae8356ab72a3fb021e1d2e80d1fa..41585c821389b9b75ac740cb9941c95b15eca446 100644 --- a/civicrm/CRM/Admin/Form/Setting.php +++ b/civicrm/CRM/Admin/Form/Setting.php @@ -34,12 +34,6 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { public function setDefaultValues() { if (!$this->_defaults) { $this->_defaults = []; - $formArray = ['Component', 'Localization']; - $formMode = FALSE; - if (in_array($this->_name, $formArray)) { - $formMode = TRUE; - } - $this->setDefaultsForMetadataDefinedFields(); // @todo these should be retrievable from the above function. @@ -54,6 +48,8 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { /** * Build the form object. + * + * @throws \CRM_Core_Exception */ public function buildQuickForm() { CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm/admin', 'reset=1')); diff --git a/civicrm/CRM/Admin/Form/SettingTrait.php b/civicrm/CRM/Admin/Form/SettingTrait.php index 6ab89f0ec5a200f5d329758c1d68d845b6d4808f..840461009c300b197e49b6ff3d9cb3458cd37372 100644 --- a/civicrm/CRM/Admin/Form/SettingTrait.php +++ b/civicrm/CRM/Admin/Form/SettingTrait.php @@ -151,6 +151,8 @@ trait CRM_Admin_Form_SettingTrait { /** * Add fields in the metadata to the template. + * + * @throws \CRM_Core_Exception */ protected function addFieldsDefinedInSettingsMetadata() { $settingMetaData = $this->getSettingsMetaData(); @@ -178,7 +180,7 @@ trait CRM_Admin_Form_SettingTrait { } $add = 'add' . $quickFormType; - if ($add == 'addElement') { + if ($add === 'addElement') { $this->$add( $props['html_type'], $setting, @@ -187,13 +189,13 @@ trait CRM_Admin_Form_SettingTrait { ($options !== NULL) ? CRM_Utils_Array::value('html_attributes', $props, []) : NULL ); } - elseif ($add == 'addSelect') { + elseif ($add === 'addSelect') { $this->addElement('select', $setting, $props['title'], $options, CRM_Utils_Array::value('html_attributes', $props)); } - elseif ($add == 'addCheckBox') { + elseif ($add === 'addCheckBox') { $this->addCheckBox($setting, '', $options, NULL, CRM_Utils_Array::value('html_attributes', $props), NULL, NULL, [' ']); } - elseif ($add == 'addCheckBoxes') { + elseif ($add === 'addCheckBoxes') { $newOptions = array_flip($options); $classes = 'crm-checkbox-list'; if (!empty($props['sortable'])) { @@ -208,12 +210,12 @@ trait CRM_Admin_Form_SettingTrait { '</li><li>' ); } - elseif ($add == 'addChainSelect') { + elseif ($add === 'addChainSelect') { $this->addChainSelect($setting, [ 'label' => $props['title'], ]); } - elseif ($add == 'addMonthDay') { + elseif ($add === 'addMonthDay') { $this->add('date', $setting, $props['title'], CRM_Core_SelectValues::date(NULL, 'M d')); } elseif ($add === 'addEntityRef') { @@ -232,15 +234,15 @@ trait CRM_Admin_Form_SettingTrait { $description = CRM_Utils_Array::value('description', $props); $descriptions[$setting] = $description; $this->assign("{$setting}_description", $description); - if ($setting == 'max_attachments') { + if ($setting === 'max_attachments') { //temp hack @todo fix to get from metadata $this->addRule('max_attachments', ts('Value should be a positive number'), 'positiveInteger'); } - if ($setting == 'max_attachments_backend') { + if ($setting === 'max_attachments_backend') { //temp hack @todo fix to get from metadata $this->addRule('max_attachments_backend', ts('Value should be a positive number'), 'positiveInteger'); } - if ($setting == 'maxFileSize') { + if ($setting === 'maxFileSize') { //temp hack $this->addRule('maxFileSize', ts('Value should be a positive number'), 'positiveInteger'); } @@ -293,12 +295,15 @@ trait CRM_Admin_Form_SettingTrait { * Get the defaults for all fields defined in the metadata. * * All others are pending conversion. + * + * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ protected function setDefaultsForMetadataDefinedFields() { CRM_Core_BAO_ConfigSetting::retrieve($this->_defaults); foreach (array_keys($this->_settings) as $setting) { $this->_defaults[$setting] = civicrm_api3('setting', 'getvalue', ['name' => $setting]); - $spec = $this->getSettingsMetadata()[$setting]; + $spec = $this->getSettingsMetaData()[$setting]; if (!empty($spec['serialize'])) { $this->_defaults[$setting] = CRM_Core_DAO::unSerializeField($this->_defaults[$setting], $spec['serialize']); } @@ -355,6 +360,8 @@ trait CRM_Admin_Form_SettingTrait { * @param array $settingValue * * @return array + * + * @throws \CRM_Core_Exception */ private function getReorderedSettingData($setting, $settingValue) { // Get order from $_POST as $_POST maintains the order the sorted setting diff --git a/civicrm/CRM/Api4/Page/AJAX.php b/civicrm/CRM/Api4/Page/AJAX.php index 39c8febe29428bdbe3db4eceb8513aa7e9b24c77..da37b04682985781db5a365fc20da5a20abb79d2 100644 --- a/civicrm/CRM/Api4/Page/AJAX.php +++ b/civicrm/CRM/Api4/Page/AJAX.php @@ -89,8 +89,8 @@ class CRM_Api4_Page_AJAX extends CRM_Core_Page { ]; if (CRM_Core_Permission::check('view debug output')) { $response['error_message'] = $e->getMessage(); - if (\Civi::settings()->get('backtrace')) { - $response['backtrace'] = $e->getTrace(); + if (!empty($params['debug']) && \Civi::settings()->get('backtrace')) { + $response['debug']['backtrace'] = $e->getTrace(); } } } diff --git a/civicrm/CRM/Api4/Page/Api4Explorer.php b/civicrm/CRM/Api4/Page/Api4Explorer.php index ec5718c657fa53797555d69025215617f8864719..adc1d74326dd8727a288a7d3ebd8b359045632ff 100644 --- a/civicrm/CRM/Api4/Page/Api4Explorer.php +++ b/civicrm/CRM/Api4/Page/Api4Explorer.php @@ -20,16 +20,20 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { public function run() { + $apiDoc = new ReflectionFunction('civicrm_api4'); $vars = [ 'operators' => \CRM_Core_DAO::acceptedSQLOperators(), 'basePath' => Civi::resources()->getUrl('civicrm'), 'schema' => (array) \Civi\Api4\Entity::get()->setChain(['fields' => ['$name', 'getFields']])->execute(), 'links' => (array) \Civi\Api4\Entity::getLinks()->execute(), + 'docs' => \Civi\Api4\Utils\ReflectionUtils::parseDocBlock($apiDoc->getDocComment()), ]; Civi::resources() ->addVars('api4', $vars) + ->addPermissions(['access debug output']) ->addScriptFile('civicrm', 'js/load-bootstrap.js') ->addScriptFile('civicrm', 'bower_components/js-yaml/dist/js-yaml.min.js') + ->addScriptFile('civicrm', 'bower_components/marked/marked.min.js') ->addScriptFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.js') ->addStyleFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.css'); diff --git a/civicrm/CRM/Badge/Form/Layout.php b/civicrm/CRM/Badge/Form/Layout.php index 5018dfaf73340181540e127775b93423b8821cfe..25834a190126b3ef3ead8ceb76060fc3decf4b99 100644 --- a/civicrm/CRM/Badge/Form/Layout.php +++ b/civicrm/CRM/Badge/Form/Layout.php @@ -34,7 +34,7 @@ class CRM_Badge_Form_Layout extends CRM_Admin_Form { $resources = CRM_Core_Resources::singleton(); $resources->addSetting( [ - 'kcfinderPath' => $config->userFrameworkResourceURL . 'packages' . DIRECTORY_SEPARATOR, + 'kcfinderPath' => CRM_Utils_File::addTrailingSlash(Civi::paths()->getVariable('civicrm.packages', 'url'), '/'), ] ); $resources->addScriptFile('civicrm', 'templates/CRM/Badge/Form/Layout.js', 1, 'html-header'); diff --git a/civicrm/CRM/Campaign/Form/Search.php b/civicrm/CRM/Campaign/Form/Search.php index 0ec2990d547131337f809ed28e1257fd3b32f84c..ca86ffd86b55e66e8ecf204a1762df00a7420fe3 100644 --- a/civicrm/CRM/Campaign/Form/Search.php +++ b/civicrm/CRM/Campaign/Form/Search.php @@ -58,7 +58,6 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { $this->_defaults = array(); //set the button name. - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_printButtonName = $this->getButtonName('next', 'print'); $this->_actionButtonName = $this->getButtonName('next', 'action'); diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index 4e1615e9ef324924e7dc338864364606ec8506cc..f481c016f0cf879c753df9354da8fadcabc65b97 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -1511,7 +1511,7 @@ HERESQL; $groupInfo['title'] = $results['title']; $params = [['group', '=', $groupInfo['id'], 0, 0]]; $return = ['contact_id' => 1, 'sort_name' => 1, 'display_name' => 1, 'email' => 1, 'phone' => 1]; - list($globalContacts) = CRM_Contact_BAO_Query::apiQuery($params, $return, NULL, $sort, $offset, $rowCount, TRUE, $returnOnlyCount); + list($globalContacts) = CRM_Contact_BAO_Query::apiQuery($params, $return, NULL, $sort, $offset, $rowCount, TRUE, $returnOnlyCount, FALSE); if ($returnOnlyCount) { return $globalContacts; diff --git a/civicrm/CRM/Case/BAO/CaseType.php b/civicrm/CRM/Case/BAO/CaseType.php index deaf69ab82251617b3e0c6afe37fd28e23a02ec7..a65deb470bdf7fcb8c35d63b458ab10cd63efdaa 100644 --- a/civicrm/CRM/Case/BAO/CaseType.php +++ b/civicrm/CRM/Case/BAO/CaseType.php @@ -167,7 +167,7 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { foreach ($definition['caseRoles'] as $values) { $xmlFile .= "<RelationshipType>\n"; foreach ($values as $key => $value) { - $xmlFile .= "<{$key}>" . self::encodeXmlString($value) . "</{$key}>\n"; + $xmlFile .= "<{$key}>" . ($key == 'groups' ? implode(',', array_map(['\CRM_Case_BAO_CaseType', 'encodeXmlString'], (array) $value)) : self::encodeXmlString($value)) . "</{$key}>\n"; } $xmlFile .= "</RelationshipType>\n"; } @@ -180,7 +180,7 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { if (!empty($definition['activityAsgmtGrps'])) { $xmlFile .= "<ActivityAsgmtGrps>\n"; - foreach ($definition['activityAsgmtGrps'] as $value) { + foreach ((array) $definition['activityAsgmtGrps'] as $value) { $xmlFile .= "<Group>$value</Group>\n"; } $xmlFile .= "</ActivityAsgmtGrps>\n"; @@ -234,6 +234,12 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { if (isset($xml->ActivityAsgmtGrps)) { $definition['activityAsgmtGrps'] = (array) $xml->ActivityAsgmtGrps->Group; + // Backwards compat - convert group ids to group names if ids are supplied + if (array_filter($definition['activityAsgmtGrps'], ['\CRM_Utils_Rule', 'integer']) === $definition['activityAsgmtGrps']) { + foreach ($definition['activityAsgmtGrps'] as $idx => $group) { + $definition['activityAsgmtGrps'][$idx] = CRM_Core_DAO::getFieldValue('CRM_Contact_BAO_Group', $group); + } + } } // set activity types @@ -284,7 +290,11 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { if (isset($xml->CaseRoles)) { $definition['caseRoles'] = []; foreach ($xml->CaseRoles->RelationshipType as $caseRoleXml) { - $definition['caseRoles'][] = json_decode(json_encode($caseRoleXml), TRUE); + $caseRole = json_decode(json_encode($caseRoleXml), TRUE); + if (!empty($caseRole['groups'])) { + $caseRole['groups'] = explode(',', $caseRole['groups']); + } + $definition['caseRoles'][] = $caseRole; } } diff --git a/civicrm/CRM/Case/Form/Activity.php b/civicrm/CRM/Case/Form/Activity.php index 1eaf0d49a9731c9b8dc7cf292853806d01a514c9..219fa7dc057d24f32402953f08843b74eb9cf979 100644 --- a/civicrm/CRM/Case/Form/Activity.php +++ b/civicrm/CRM/Case/Form/Activity.php @@ -447,13 +447,6 @@ class CRM_Case_Form_Activity extends CRM_Activity_Form_Activity { } } - // build custom data getFields array - $customFields = CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, $this->_activityTypeId); - $customFields = CRM_Utils_Array::crmArrayMerge($customFields, - CRM_Core_BAO_CustomField::getFields('Activity', FALSE, FALSE, - NULL, NULL, TRUE - ) - ); $params['custom'] = CRM_Core_BAO_CustomField::postProcess($params, $this->_activityId, 'Activity' @@ -502,6 +495,9 @@ class CRM_Case_Form_Activity extends CRM_Activity_Form_Activity { } } else { + // create a new version of activity if activity was found to + // have been modified/created by user + // since the params we need to set are very few, and we don't want rest of the // work done by bao create method , lets use dao object to make the changes $params = ['id' => $this->_activityId]; @@ -509,11 +505,7 @@ class CRM_Case_Form_Activity extends CRM_Activity_Form_Activity { $activity = new CRM_Activity_DAO_Activity(); $activity->copyValues($params); $activity->save(); - } - // create a new version of activity if activity was found to - // have been modified/created by user - if (isset($newActParams)) { // set proper original_id if (!empty($this->_defaults['original_id'])) { $newActParams['original_id'] = $this->_defaults['original_id']; diff --git a/civicrm/CRM/Case/Form/Case.php b/civicrm/CRM/Case/Form/Case.php index 0d43ed1912af147d4d6b7bbe35ad5631692e09a4..05e832c744544b54dee470f810876e9d74bd7a29 100644 --- a/civicrm/CRM/Case/Form/Case.php +++ b/civicrm/CRM/Case/Form/Case.php @@ -93,20 +93,6 @@ class CRM_Case_Form_Case extends CRM_Core_Form { return $this->_caseId; } - /** - * Get the entity subtype ID being edited - * - * @param $subTypeId - * - * @return int|null - */ - public function getEntitySubTypeId($subTypeId) { - if ($subTypeId) { - return $subTypeId; - } - return $this->_caseTypeId; - } - /** * Build the form object. */ diff --git a/civicrm/CRM/Case/Form/CaseView.php b/civicrm/CRM/Case/Form/CaseView.php index 811b2b68f1cd210685d2269a07c40ec0adb26635..d3dae3609d75095045f53063672b07de33caa540 100644 --- a/civicrm/CRM/Case/Form/CaseView.php +++ b/civicrm/CRM/Case/Form/CaseView.php @@ -168,11 +168,31 @@ class CRM_Case_Form_CaseView extends CRM_Core_Form { } $allowedRelationshipTypes = CRM_Contact_BAO_Relationship::getContactRelationshipType($this->_contactID); + $relationshipTypeMetadata = CRM_Contact_Form_Relationship::getRelationshipTypeMetadata($allowedRelationshipTypes); + + $caseTypeDefinition = civicrm_api3('CaseType', 'getsingle', ['name' => $this->_caseType])['definition']; + + foreach ($caseTypeDefinition['caseRoles'] as $role) { + if (!empty($role['groups'])) { + $relationshipType = civicrm_api3('RelationshipType', 'get', [ + 'sequential' => 1, + 'name_a_b' => $role['name'], + 'name_b_a' => $role['name'], + 'options' => ['limit' => 1, 'or' => [["name_a_b", "name_b_a"]]], + ]); + if (($relationshipType['values'][0]['name_a_b'] ?? NULL) === $role['name']) { + $relationshipTypeMetadata[$relationshipType['id']]['group_a'] = $role['groups']; + } + if (($relationshipType['values'][0]['name_b_a'] ?? NULL) === $role['name']) { + $relationshipTypeMetadata[$relationshipType['id']]['group_b'] = $role['groups']; + } + } + } CRM_Core_Resources::singleton() ->addScriptFile('civicrm', 'js/crm.livePage.js', 1, 'html-header') ->addScriptFile('civicrm', 'templates/CRM/Case/Form/CaseView.js', 2, 'html-header') - ->addVars('relationshipTypes', CRM_Contact_Form_Relationship::getRelationshipTypeMetadata($allowedRelationshipTypes)); + ->addVars('relationshipTypes', $relationshipTypeMetadata); $xmlProcessor = new CRM_Case_XMLProcessor_Process(); $caseRoles = $xmlProcessor->get($this->_caseType, 'CaseRoles'); diff --git a/civicrm/CRM/Case/Form/Search.php b/civicrm/CRM/Case/Form/Search.php index e6820681213d9fbf8a1016b5ada01233dc2a7d26..8d971a851f759569eb4114e0d939ac9fc5218400 100644 --- a/civicrm/CRM/Case/Form/Search.php +++ b/civicrm/CRM/Case/Form/Search.php @@ -75,7 +75,6 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { /** * set the button names */ - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index a392f89ac9690fad839fd39ee0309ddfa46fc32f..4698884396019cf127f3a637b7559bf1e4404ab5 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -1384,54 +1384,15 @@ WHERE civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer'); $withMultiCustomFields ) ); - //unset the fields, which are not related to their - //contact type. - $commonValues = [ - 'Individual' => [ - 'household_name', - 'legal_name', - 'sic_code', - 'organization_name', - ], - 'Household' => [ - 'first_name', - 'middle_name', - 'last_name', - 'formal_title', - 'job_title', - 'gender_id', - 'prefix_id', - 'suffix_id', - 'birth_date', - 'organization_name', - 'legal_name', - 'legal_identifier', - 'sic_code', - 'home_URL', - 'is_deceased', - 'deceased_date', - ], - 'Organization' => [ - 'first_name', - 'middle_name', - 'last_name', - 'formal_title', - 'job_title', - 'gender_id', - 'prefix_id', - 'suffix_id', - 'birth_date', - 'household_name', - 'is_deceased', - 'deceased_date', - ], - ]; - foreach ($commonValues[$contactType] as $value) { - unset($fields[$value]); + // Unset the fields which are not related to their contact type. + foreach (CRM_Contact_DAO_Contact::import() as $name => $value) { + if (!empty($value['contactType']) && $value['contactType'] !== $contactType) { + unset($fields[$name]); + } } } else { - foreach (['Individual', 'Household', 'Organization'] as $type) { + foreach (CRM_Contact_BAO_ContactType::basicTypes() as $type) { $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport($type, $showAll, @@ -1604,7 +1565,7 @@ WHERE civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer'); ); } else { - foreach (['Individual', 'Household', 'Organization'] as $type) { + foreach (CRM_Contact_BAO_ContactType::basicTypes() as $type) { $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport($type, FALSE, FALSE, $search, $checkPermissions, $withMultiRecord) ); @@ -2534,11 +2495,14 @@ WHERE civicrm_openid.openid = %1"; * * @param int $contactID * Contact id. + * @param bool $polite + * Whether to only pull an email if it's okay to send to it--that is, if it + * is not on_hold and the contact is not do_not_email. * * @return string * Email address if present else null */ - public static function getPrimaryEmail($contactID) { + public static function getPrimaryEmail($contactID, $polite = FALSE) { // fetch the primary email $query = " SELECT civicrm_email.email as email @@ -2546,6 +2510,11 @@ WHERE civicrm_openid.openid = %1"; LEFT JOIN civicrm_email ON ( civicrm_contact.id = civicrm_email.contact_id ) WHERE civicrm_email.is_primary = 1 AND civicrm_contact.id = %1"; + if ($polite) { + $query .= ' + AND civicrm_contact.do_not_email = 0 + AND civicrm_email.on_hold = 0'; + } $p = [1 => [$contactID, 'Integer']]; $dao = CRM_Core_DAO::executeQuery($query, $p); diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index 5f3a4999538827d6b320ae56d2401158f1952274..ba956c029b56aea00f97832f7b1ca834144017d5 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -783,7 +783,7 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i // Normal update process will automatically create new address with submitted values // 1. loop through entire submitted address array - $skipFields = ['is_primary', 'location_type_id', 'is_billing', 'master_id', 'update_current_employer']; + $skipFields = ['is_primary', 'location_type_id', 'is_billing', 'master_id', 'add_relationship']; foreach ($address as & $values) { // 2. check if "Use another contact's address" is checked, if not continue // Additionally, if master_id is set (address was shared), set master_id to empty value. @@ -794,8 +794,8 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i continue; } - // Set update_current_employer checkbox value - $values['update_current_employer'] = !empty($values['update_current_employer']); + // Set add_relationship checkbox value + $values['add_relationship'] = !empty($values['add_relationship']); // 3. get the address details for master_id $masterAddress = new CRM_Core_BAO_Address(); diff --git a/civicrm/CRM/Contact/BAO/Group.php b/civicrm/CRM/Contact/BAO/Group.php index 12a024f367c0d66261b7149fcd1e57abc904978d..2cad5888bb72ed0ea7af2d5e06639a9f07d3728c 100644 --- a/civicrm/CRM/Contact/BAO/Group.php +++ b/civicrm/CRM/Contact/BAO/Group.php @@ -334,6 +334,21 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { CRM_Utils_Hook::pre('create', 'Group', NULL, $params); } + // If title isn't specified, retrieve it because we use it later, e.g. + // for RecentItems. But note we use array_key_exists not isset or empty + // since otherwise there would be no way to blank out an existing title. + // I'm not sure what the use-case is for that, but you're allowed to do it + // currently. + if (!empty($params['id']) && !array_key_exists('title', $params)) { + try { + $groupTitle = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $params['id'], 'title', 'id'); + $params['title'] = $groupTitle; + } + catch (CRM_Core_Exception $groupTitleException) { + // don't set title + } + } + // dev/core#287 Disable child groups if all parents are disabled. if (!empty($params['id'])) { $allChildGroupIds = self::getChildGroupIds($params['id']); @@ -581,7 +596,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { $groups = CRM_ACL_API::group(CRM_ACL_API::VIEW); if (!empty($groups)) { $groupList = implode(', ', array_values($groups)); - $clause = "groups.id IN ( $groupList ) "; + $clause = "`groups`.id IN ( $groupList ) "; } else { $clause = '1 = 0'; @@ -811,7 +826,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { $limit = " LIMIT {$params['offset']}, {$params['rowCount']} "; } - $orderBy = ' ORDER BY groups.title asc'; + $orderBy = ' ORDER BY `groups`.title asc'; if (!empty($params['sort'])) { $orderBy = ' ORDER BY ' . CRM_Utils_Type::escape($params['sort'], 'String'); @@ -828,7 +843,7 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { ) { $select = ", contact.display_name as org_name, contact.id as org_id"; $from = " LEFT JOIN civicrm_group_organization gOrg - ON gOrg.group_id = groups.id + ON gOrg.group_id = `groups`.id LEFT JOIN civicrm_contact contact ON contact.id = gOrg.organization_id "; @@ -842,10 +857,10 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { } $query = " - SELECT groups.*, createdBy.sort_name as created_by {$select} - FROM civicrm_group groups + SELECT `groups`.*, createdBy.sort_name as created_by {$select} + FROM civicrm_group `groups` LEFT JOIN civicrm_contact createdBy - ON createdBy.id = groups.created_id + ON createdBy.id = `groups`.created_id {$from} WHERE $whereClause {$where} {$orderBy} @@ -1130,12 +1145,12 @@ WHERE id IN $groupIdString */ public static function getGroupCount(&$params) { $whereClause = self::whereClause($params, FALSE); - $query = "SELECT COUNT(*) FROM civicrm_group groups"; + $query = "SELECT COUNT(*) FROM civicrm_group `groups`"; if (!empty($params['created_by'])) { $query .= " INNER JOIN civicrm_contact createdBy - ON createdBy.id = groups.created_id"; + ON createdBy.id = `groups`.created_id"; } $query .= " WHERE {$whereClause}"; @@ -1154,7 +1169,7 @@ WHERE {$whereClause}"; $values = []; $title = CRM_Utils_Array::value('title', $params); if ($title) { - $clauses[] = "groups.title LIKE %1"; + $clauses[] = "`groups`.title LIKE %1"; if (strpos($title, '%') !== FALSE) { $params[1] = [$title, 'String', FALSE]; } @@ -1167,7 +1182,7 @@ WHERE {$whereClause}"; if ($groupType) { $types = explode(',', $groupType); if (!empty($types)) { - $clauses[] = 'groups.group_type LIKE %2'; + $clauses[] = '`groups`.group_type LIKE %2'; $typeString = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, $types) . CRM_Core_DAO::VALUE_SEPARATOR; $params[2] = [$typeString, 'String', TRUE]; } @@ -1175,7 +1190,7 @@ WHERE {$whereClause}"; $visibility = CRM_Utils_Array::value('visibility', $params); if ($visibility) { - $clauses[] = 'groups.visibility = %3'; + $clauses[] = '`groups`.visibility = %3'; $params[3] = [$visibility, 'String']; } @@ -1183,30 +1198,30 @@ WHERE {$whereClause}"; if ($groupStatus) { switch ($groupStatus) { case 1: - $clauses[] = 'groups.is_active = 1'; + $clauses[] = '`groups`.is_active = 1'; $params[4] = [$groupStatus, 'Integer']; break; case 2: - $clauses[] = 'groups.is_active = 0'; + $clauses[] = '`groups`.is_active = 0'; $params[4] = [$groupStatus, 'Integer']; break; case 3: - $clauses[] = '(groups.is_active = 0 OR groups.is_active = 1 )'; + $clauses[] = '(`groups`.is_active = 0 OR `groups`.is_active = 1 )'; break; } } $parentsOnly = CRM_Utils_Array::value('parentsOnly', $params); if ($parentsOnly) { - $clauses[] = 'groups.parents IS NULL'; + $clauses[] = '`groups`.parents IS NULL'; } // only show child groups of a specific parent group $parent_id = CRM_Utils_Array::value('parent_id', $params); if ($parent_id) { - $clauses[] = 'groups.id IN (SELECT child_group_id FROM civicrm_group_nesting WHERE parent_group_id = %5)'; + $clauses[] = '`groups`.id IN (SELECT child_group_id FROM civicrm_group_nesting WHERE parent_group_id = %5)'; $params[5] = [$parent_id, 'Integer']; } @@ -1221,11 +1236,11 @@ WHERE {$whereClause}"; } if (empty($clauses)) { - $clauses[] = 'groups.is_active = 1'; + $clauses[] = '`groups`.is_active = 1'; } if ($excludeHidden) { - $clauses[] = 'groups.is_hidden = 0'; + $clauses[] = '`groups`.is_hidden = 0'; } $clauses[] = self::getPermissionClause(); @@ -1287,10 +1302,10 @@ WHERE {$whereClause}"; */ public function pagerAtoZ($whereClause, $whereParams) { $query = " - SELECT DISTINCT UPPER(LEFT(groups.title, 1)) as sort_name - FROM civicrm_group groups + SELECT DISTINCT UPPER(LEFT(`groups`.title, 1)) as sort_name + FROM civicrm_group `groups` WHERE $whereClause - ORDER BY LEFT(groups.title, 1) + ORDER BY LEFT(`groups`.title, 1) "; $dao = CRM_Core_DAO::executeQuery($query, $whereParams); diff --git a/civicrm/CRM/Contact/BAO/GroupNestingCache.php b/civicrm/CRM/Contact/BAO/GroupNestingCache.php index 597cf66a46705baa770fbeba3c492143dc3541d2..5ef00f1246aa43fe90b6067c31c02a3c21b70798 100644 --- a/civicrm/CRM/Contact/BAO/GroupNestingCache.php +++ b/civicrm/CRM/Contact/BAO/GroupNestingCache.php @@ -19,12 +19,12 @@ class CRM_Contact_BAO_GroupNestingCache { /** * Update cache. * - * @throws \Exception + * @throws \CRM_Core_Exception */ public static function update() { // lets build the tree in memory first - $sql = " + $sql = ' SELECT n.child_group_id as child , n.parent_group_id as parent FROM civicrm_group_nesting n, @@ -32,7 +32,7 @@ FROM civicrm_group_nesting n, civicrm_group gp WHERE n.child_group_id = gc.id AND n.parent_group_id = gp.id -"; +'; $dao = CRM_Core_DAO::executeQuery($sql); @@ -57,15 +57,15 @@ WHERE n.child_group_id = gc.id } if (self::checkCyclicGraph($tree)) { - CRM_Core_Error::fatal(ts("We detected a cycle which we can't handle. aborting")); + throw new CRM_Core_Exception(ts('We detected a cycle which we can\'t handle. aborting')); } // first reset the current cache entries - $sql = " + $sql = ' UPDATE civicrm_group SET parents = null, children = null -"; +'; CRM_Core_DAO::executeQuery($sql); $values = []; @@ -132,9 +132,10 @@ WHERE id = $id /** * @param int $id - * @param $groups + * @param array $groups * * @return array + * @throws \CRM_Core_Exception */ public static function getPotentialCandidates($id, &$groups) { $tree = Civi::cache('groups')->get('nestable tree hierarchy'); @@ -201,6 +202,8 @@ WHERE id = $id /** * @return string + * + * @throws \CRM_Core_Exception */ public static function json() { $tree = Civi::cache('groups')->get('nestable tree hierarchy'); diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index 1ea2de79ddd587024d9dd667ae41fed274685513..04e33776d16aba525dec7c8f6a6c4851d8def2cb 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -946,7 +946,7 @@ class CRM_Contact_BAO_Query { GROUP_CONCAT(DISTINCT IF(civicrm_group_contact.status = 'Added', civicrm_group_contact.group_id, '')), GROUP_CONCAT(DISTINCT civicrm_group_contact_cache.group_id) ) - as groups"; + as `groups`"; $this->_element[$name] = 1; $this->_tables['civicrm_group_contact'] = 1; $this->_tables['civicrm_group_contact_cache'] = 1; diff --git a/civicrm/CRM/Contact/BAO/Relationship.php b/civicrm/CRM/Contact/BAO/Relationship.php index 325ce00de6180eda7e9e47e253461f09e77f703a..a88193f071fb94d6ef8faea177775e0cc23b978c 100644 --- a/civicrm/CRM/Contact/BAO/Relationship.php +++ b/civicrm/CRM/Contact/BAO/Relationship.php @@ -834,7 +834,7 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship { * @param int $id * Relationship id. * - * $returns returns the contact ids in the realtionship + * $returns returns the contact ids in the relationship * * @return \CRM_Contact_DAO_Relationship */ diff --git a/civicrm/CRM/Contact/BAO/SavedSearch.php b/civicrm/CRM/Contact/BAO/SavedSearch.php index 78ddca55459ff22ff73eaa5c7799b956f0883c84..295502d770e01e663b83e9bd0f5e866120ded911 100644 --- a/civicrm/CRM/Contact/BAO/SavedSearch.php +++ b/civicrm/CRM/Contact/BAO/SavedSearch.php @@ -74,6 +74,9 @@ class CRM_Contact_BAO_SavedSearch extends CRM_Contact_DAO_SavedSearch { * * @return array * the values of the posted saved search used as default values in various Search Form + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function getFormValues($id) { $specialDateFields = [ @@ -82,7 +85,7 @@ class CRM_Contact_BAO_SavedSearch extends CRM_Contact_DAO_SavedSearch { ]; $fv = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $id, 'form_values'); - $result = NULL; + $result = []; if ($fv) { // make sure u CRM_Utils_String::unserialize - since it's stored in serialized form $result = CRM_Utils_String::unserialize($fv); @@ -200,6 +203,9 @@ class CRM_Contact_BAO_SavedSearch extends CRM_Contact_DAO_SavedSearch { * @param int $id * * @return array + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function getSearchParams($id) { $fv = self::getFormValues($id); diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 99405af76c360a4f6485ce5a69667a1e4ec3740b..e4135fe7e2a0f90c55391201fa5dbb8109b1e310 100644 --- a/civicrm/CRM/Contact/DAO/Contact.php +++ b/civicrm/CRM/Contact/DAO/Contact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:773bf2fc16c1af3c283f6ecc7098e927) + * (GenCodeChecksum:4b1e2ef9f5c431f59befcc000cb35577) */ /** @@ -688,6 +688,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'where' => 'civicrm_contact.legal_name', 'headerPattern' => '/^legal|(l(egal\s)?name)$/i', 'export' => TRUE, + 'contactType' => 'Organization', 'table_name' => 'civicrm_contact', 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', diff --git a/civicrm/CRM/Contact/Form/Edit/Address.php b/civicrm/CRM/Contact/Form/Edit/Address.php index 4d5021b89369188e1fd4e325a7ea39e3fee45320..9ea5b2af70d20624aaabd9764efb170bdb535b6c 100644 --- a/civicrm/CRM/Contact/Form/Edit/Address.php +++ b/civicrm/CRM/Contact/Form/Edit/Address.php @@ -58,6 +58,7 @@ class CRM_Contact_Form_Edit_Address { $form->addField( "address[$blockId][is_primary]", [ 'entity' => 'address', + 'type' => 'CheckBox', 'label' => ts('Primary location for this contact'), 'text' => ts('Primary location for this contact'), ] + $js); @@ -156,7 +157,9 @@ class CRM_Contact_Form_Edit_Address { $form->addEntityRef("address[$blockId][master_contact_id]", ts('Share With'), ['create' => $profileLinks, 'api' => ['extra' => ['contact_type']]]); // do we want to update employer for shared address - $form->addElement('checkbox', "address[$blockId][update_current_employer]", NULL, ts('Set this organization as current employer')); + $employer_label = '<span class="addrel-employer">' . ts('Set this organization as current employer') . '</span>'; + $household_label = '<span class="addrel-household">' . ts('Create a household member relationship with this contact') . '</span>'; + $form->addElement('checkbox', "address[$blockId][add_relationship]", NULL, $employer_label . $household_label); } } diff --git a/civicrm/CRM/Contact/Form/Merge.php b/civicrm/CRM/Contact/Form/Merge.php index 52690f03bbffe97d88f7d4bf2e74edeed682bc2d..2c3d2cb35cd02cfbae63678787d6b7ad2def141c 100644 --- a/civicrm/CRM/Contact/Form/Merge.php +++ b/civicrm/CRM/Contact/Form/Merge.php @@ -87,11 +87,16 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { if (!$this->_rgid) { // Unset browse URL as we have come from the search screen. $browseUrl = ''; - $this->_rgid = civicrm_api3('RuleGroup', 'getvalue', [ - 'contact_type' => $this->_contactType, - 'used' => 'Supervised', - 'return' => 'id', - ]); + try { + $this->_rgid = civicrm_api3('RuleGroup', 'getvalue', [ + 'contact_type' => $this->_contactType, + 'used' => 'Supervised', + 'return' => 'id', + ]); + } + catch (Exception $e) { + throw new CRM_Core_Exception(ts('There is no Supervised dedupe rule configured for contact type %1.', [1 => $this->_contactType])); + } } $this->assign('browseUrl', $browseUrl); if ($browseUrl) { @@ -112,6 +117,7 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $mainUfId = CRM_Core_BAO_UFMatch::getUFId($this->_cid); $mainUser = NULL; if ($mainUfId) { + // @todo also calculate & assign url here & get it out of getRowsElementsAndInfo as it is form layer functionality. $mainUser = $config->userSystem->getUser($this->_cid); $this->assign('mainUfId', $mainUfId); $this->assign('mainUfName', $mainUser ? $mainUser['name'] : NULL); @@ -149,6 +155,7 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $otherUser = NULL; if ($otherUfId) { + // @todo also calculate & assign url here & get it out of getRowsElementsAndInfo as it is form layer functionality. $otherUser = $config->userSystem->getUser($this->_oid); $this->assign('otherUfId', $otherUfId); $this->assign('otherUfName', $otherUser ? $otherUser['name'] : NULL); diff --git a/civicrm/CRM/Contact/Form/Search.php b/civicrm/CRM/Contact/Form/Search.php index eca29eb4d4e3672de0def4272c1f30207962a654..1e64b00371f3b711c45ee71730129ef89fbfa95c 100644 --- a/civicrm/CRM/Contact/Form/Search.php +++ b/civicrm/CRM/Contact/Form/Search.php @@ -502,6 +502,8 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { /** * Processing needed for buildForm and later. + * + * @throws \CRM_Core_Exception */ public function preProcess() { // set the various class variables @@ -530,7 +532,6 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { /** * set the button names */ - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->assign('actionButtonName', $this->_actionButtonName); @@ -599,7 +600,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { } // fix for CRM-1907 - if (isset($this->_ssID) && $this->_context != 'smog') { + if (isset($this->_ssID) && $this->_context !== 'smog') { // we only retrieve the saved search values if out current values are null $this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID); @@ -793,7 +794,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { return; } else { - if (array_key_exists($this->_searchButtonName, $_POST) || + if (array_key_exists($this->getButtonName('refresh'), $_POST) || ($this->_force && !$crmPID) ) { //reset the cache table for new search diff --git a/civicrm/CRM/Contact/Form/Search/Builder.php b/civicrm/CRM/Contact/Form/Search/Builder.php index 3d4a9ff395d7c402632fb87db9a0eb9059bc3676..6f3bc7cac29f38cb9ad38f9f1c2b5bf942158930 100644 --- a/civicrm/CRM/Contact/Form/Search/Builder.php +++ b/civicrm/CRM/Contact/Form/Search/Builder.php @@ -106,7 +106,7 @@ class CRM_Contact_Form_Search_Builder extends CRM_Contact_Form_Search { $mappingId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $this->_ssID, 'mapping_id'); } - CRM_Core_BAO_Mapping::buildMappingForm($this, 'Search Builder', $mappingId, $this->_columnCount, $this->_blockCount); + CRM_Core_BAO_Mapping::buildMappingForm($this, $mappingId, $this->_columnCount, $this->_blockCount); parent::buildQuickForm(); } diff --git a/civicrm/CRM/Contact/Form/Task/EmailCommon.php b/civicrm/CRM/Contact/Form/Task/EmailCommon.php index 4591c8bf481aab4c8ef4496a1ef52c90adfc30a4..d8e7af4c33a11cdadebdbbedb86cafe48afc6361 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailCommon.php +++ b/civicrm/CRM/Contact/Form/Task/EmailCommon.php @@ -476,7 +476,8 @@ class CRM_Contact_Form_Task_EmailCommon { array_keys($form->_toContactDetails), $additionalDetails, $contributionIds, - CRM_Utils_Array::value('campaign_id', $formValues) + CRM_Utils_Array::value('campaign_id', $formValues), + $form->getVar('_caseId') ); $followupStatus = ''; diff --git a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php index 61bf8f4519ff046fbf7ee186b53302b6ce69dc0f..ee7179f2108653f0cc0ef9c43862ef48b9321e99 100644 --- a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php @@ -104,8 +104,8 @@ 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 */ public static function postProcess(&$form) { $formValues = $form->controller->exportValues($form->getName()); @@ -127,6 +127,14 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter $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, @@ -142,12 +150,7 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter } $tokenHtml = CRM_Utils_Token::replaceContactTokens($html_message, $contact[$contactId], TRUE, $messageToken); - if (!empty($form->_caseId)) { - $caseId = $form->_caseId; - } - if (empty($caseId) && !empty($form->_caseIds[$item])) { - $caseId = $form->_caseIds[$item]; - } + if ($caseId) { $tokenHtml = CRM_Utils_Token::replaceCaseTokens($caseId, $tokenHtml, $messageToken); } diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard.php b/civicrm/CRM/Contact/Page/View/UserDashBoard.php index 538dbd9bf19640545104dcbce7ebdbc6009c78aa..347824ccebb7930e32523c1b4f580ed2a75765ba 100644 --- a/civicrm/CRM/Contact/Page/View/UserDashBoard.php +++ b/civicrm/CRM/Contact/Page/View/UserDashBoard.php @@ -77,7 +77,7 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page { */ public function preProcess() { if (!$this->_contactId) { - CRM_Core_Error::fatal(ts('You must be logged in to view this page.')); + throw new CRM_Core_Exception(ts('You must be logged in to view this page.')); } list($displayName, $contactImage) = CRM_Contact_BAO_Contact::getDisplayAndImage($this->_contactId); diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index fb1ad57ab9ae8300c70833310e344aae039d3e66..4cc044b85c147073298edc14f649ae1b9f49c98b 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -91,6 +91,9 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { if (empty($params)) { return NULL; } + if (!empty($ids)) { + CRM_Core_Error::deprecatedFunctionWarning('ids should not be passed into Contribution.add'); + } //per http://wiki.civicrm.org/confluence/display/CRM/Database+layer we are moving away from $ids array $contributionID = CRM_Utils_Array::value('contribution', $ids, CRM_Utils_Array::value('id', $params)); $action = $contributionID ? 'edit' : 'create'; @@ -128,13 +131,12 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { if (!$contributionID) { CRM_Core_DAO::setCreateDefaults($params, self::getDefaults()); - if (empty($params['invoice_number'])) { + if (empty($params['invoice_number']) && CRM_Invoicing_Utils::isInvoicingEnabled()) { $nextContributionID = CRM_Core_DAO::singleValueQuery("SELECT COALESCE(MAX(id) + 1, 1) FROM civicrm_contribution"); $params['invoice_number'] = self::getInvoiceNumber($nextContributionID); } } - $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); //if contribution is created with cancelled or refunded status, add credit note id // do the same for chargeback - this entered the code 'accidentally' but moving it to here // as part of cleanup maintains consistency. @@ -143,7 +145,11 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $params['creditnote_id'] = self::createCreditNoteId(); } } - if (empty($params['contribution_status_id'])) { + $contributionStatusID = $params['contribution_status_id'] ?? NULL; + if (CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $contributionStatusID) === 'Partially paid' && empty($params['is_post_payment_create'])) { + CRM_Core_Error::deprecatedFunctionWarning('Setting status to partially paid other than by using Payment.create is deprecated and unreliable'); + } + if (!$contributionStatusID) { // Since the fee amount is expecting this (later on) ensure it is always set. // It would only not be set for an update where it is unchanged. $params['contribution_status_id'] = civicrm_api3('Contribution', 'getvalue', [ @@ -151,6 +157,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { 'return' => 'contribution_status_id', ]); } + $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $params['contribution_status_id']); if (!$contributionID && CRM_Utils_Array::value('membership_id', $params) @@ -185,9 +192,10 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { if ($contributionID && $setPrevContribution) { $params['prevContribution'] = self::getOriginalContribution($contributionID); } + $previousContributionStatus = ($contributionID && !empty($params['prevContribution'])) ? CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $params['prevContribution']->contribution_status_id) : NULL; - if ($contributionID && !empty($params['revenue_recognition_date']) && !empty($params['prevContribution']) - && !($contributionStatus[$params['prevContribution']->contribution_status_id] == 'Pending') + if ($contributionID && !empty($params['revenue_recognition_date']) + && !($previousContributionStatus === 'Pending') && !self::allowUpdateRevenueRecognitionDate($contributionID) ) { unset($params['revenue_recognition_date']); @@ -234,7 +242,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { if (self::isUpdateToRecurringContribution($params)) { CRM_Contribute_BAO_ContributionRecur::updateOnNewPayment( (!empty($params['contribution_recur_id']) ? $params['contribution_recur_id'] : $params['prevContribution']->contribution_recur_id), - $contributionStatus[$params['contribution_status_id']], + $contributionStatus, CRM_Utils_Array::value('receive_date', $params) ); } @@ -489,7 +497,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * @throws \CiviCRM_API3_Exception */ public static function create(&$params, $ids = []) { - $dateFields = [ 'receive_date', 'cancel_date', @@ -506,7 +513,11 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $transaction = new CRM_Core_Transaction(); try { - $contribution = self::add($params, $ids); + if (!isset($params['id']) && isset($ids['contribution'])) { + CRM_Core_Error::deprecatedFunctionWarning('ids should not be used for contribution create'); + $params['id'] = $ids['contribution']; + } + $contribution = self::add($params); } catch (CRM_Core_Exception $e) { $transaction->rollback(); @@ -944,7 +955,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Get memberships realted to the contribution. + * Get memberships related to the contribution. * * @param int $contributionID * @@ -2372,8 +2383,8 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $contributionParams[$field] = $params[$field]; } - $ids = ['contribution' => $contributionId]; - $contribution = CRM_Contribute_BAO_Contribution::create($contributionParams, $ids); + $contributionParams['id'] = $contributionId; + $contribution = CRM_Contribute_BAO_Contribution::create($contributionParams); } return $updateResult; @@ -4167,7 +4178,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac return (float) CRM_Utils_Money::subtractCurrencies( $contributionTotal, - CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId, TRUE) ?: 0, + CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId, TRUE), CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $contributionId, 'currency') ); } @@ -4694,16 +4705,17 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * * @return string * Credit Note Id. + * + * @throws \CiviCRM_API3_Exception */ public static function createCreditNoteId() { - $prefixValue = Civi::settings()->get('contribution_invoice_settings'); $creditNoteNum = CRM_Core_DAO::singleValueQuery("SELECT count(creditnote_id) as creditnote_number FROM civicrm_contribution WHERE creditnote_id IS NOT NULL"); $creditNoteId = NULL; do { $creditNoteNum++; - $creditNoteId = CRM_Utils_Array::value('credit_notes_prefix', $prefixValue) . "" . $creditNoteNum; + $creditNoteId = Civi::settings()->get('credit_notes_prefix') . '' . $creditNoteNum; $result = civicrm_api3('Contribution', 'getcount', [ 'sequential' => 1, 'creditnote_id' => $creditNoteId, @@ -4835,41 +4847,31 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * * Replace with Order.create->Payment.create flow. * - * @param array $contributions - * @param string $contributionStatusId + * @param array $contribution * * @throws \CiviCRM_API3_Exception */ - public static function addPayments($contributions, $contributionStatusId = NULL) { + public static function addPayments($contribution) { // get financial trxn which is a payment $ftSql = "SELECT ft.id, ft.total_amount FROM civicrm_financial_trxn ft INNER JOIN civicrm_entity_financial_trxn eft ON eft.financial_trxn_id = ft.id AND eft.entity_table = 'civicrm_contribution' WHERE eft.entity_id = %1 AND ft.is_payment = 1 ORDER BY ft.id DESC LIMIT 1"; - $contributionStatus = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id', [ - 'labelColumn' => 'name', + + $ftDao = CRM_Core_DAO::executeQuery($ftSql, [ + 1 => [ + $contribution->id, + 'Integer', + ], ]); - foreach ($contributions as $contribution) { - if (!($contributionStatus[$contribution->contribution_status_id] == 'Partially paid' - || CRM_Utils_Array::value($contributionStatusId, $contributionStatus) == 'Partially paid') - ) { - continue; - } - $ftDao = CRM_Core_DAO::executeQuery($ftSql, [ - 1 => [ - $contribution->id, - 'Integer', - ], - ]); - $ftDao->fetch(); + $ftDao->fetch(); - // store financial item Proportionaly. - $trxnParams = [ - 'total_amount' => $ftDao->total_amount, - 'contribution_id' => $contribution->id, - ]; - self::assignProportionalLineItems($trxnParams, $ftDao->id, $contribution->total_amount); - } + // store financial item Proportionaly. + $trxnParams = [ + 'total_amount' => $ftDao->total_amount, + 'contribution_id' => $contribution->id, + ]; + self::assignProportionalLineItems($trxnParams, $ftDao->id, $contribution->total_amount); } /** @@ -5063,21 +5065,13 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * * * @param string $name - * @param bool $checkInvoicing + * * @return string * */ - public static function checkContributeSettings($name = NULL, $checkInvoicing = FALSE) { + public static function checkContributeSettings($name) { $contributeSettings = Civi::settings()->get('contribution_invoice_settings'); - - if ($checkInvoicing && empty($contributeSettings['invoicing'])) { - return NULL; - } - - if ($name) { - return CRM_Utils_Array::value($name, $contributeSettings); - } - return $contributeSettings; + return CRM_Utils_Array::value($name, $contributeSettings); } /** @@ -5892,7 +5886,7 @@ LIMIT 1;"; * @return string */ public static function getInvoiceNumber($contributionID) { - if ($invoicePrefix = self::checkContributeSettings('invoice_prefix', TRUE)) { + if ($invoicePrefix = self::checkContributeSettings('invoice_prefix')) { return $invoicePrefix . $contributionID; } diff --git a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php index e936512ac9a6e21fa13aaf56b006b14cd7f24e13..5e3b9488284a873164a9a6a731686318fb0c6187 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php +++ b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php @@ -180,8 +180,8 @@ class CRM_Contribute_BAO_Contribution_Utils { $contribution->payment_status_id = $result['payment_status_id']; } $result['contribution'] = $contribution; - if ($result['payment_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', - 'status_id', 'Pending') && $payment->isSendReceiptForPending()) { + if ($result['payment_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending') + && $payment->isSendReceiptForPending()) { CRM_Contribute_BAO_ContributionPage::sendMail($contactID, $form->_values, $contribution->is_test diff --git a/civicrm/CRM/Contribute/BAO/ContributionPage.php b/civicrm/CRM/Contribute/BAO/ContributionPage.php index d74a952e9ca15b2aad1539a30f9d976d6b7d3341..43cbb90546181dd9e5ef90eb10b0f5394d3bf32e 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/BAO/ContributionPage.php @@ -828,10 +828,13 @@ LEFT JOIN civicrm_premiums ON ( civicrm_premiums.entity_id = civicrm // Special logic for fields whose options depend on context or properties switch ($fieldName) { case 'financial_type_id': - // Fixme - this is going to ignore context, better to get conditions, add params, and call PseudoConstant::get - return CRM_Financial_BAO_FinancialType::getIncomeFinancialType(); - - break; + // @fixme - this is going to ignore context, better to get conditions, add params, and call PseudoConstant::get + // @fixme - https://lab.civicrm.org/dev/core/issues/547 if CiviContribute not enabled this causes an invalid query + // because $relationTypeId is not set in CRM_Financial_BAO_FinancialType::getIncomeFinancialType() + if (array_key_exists('CiviContribute', CRM_Core_Component::getEnabledComponents())) { + return CRM_Financial_BAO_FinancialType::getIncomeFinancialType(); + } + return []; } return CRM_Core_PseudoConstant::get(__CLASS__, $fieldName, $params, $context); } diff --git a/civicrm/CRM/Contribute/BAO/ContributionSoft.php b/civicrm/CRM/Contribute/BAO/ContributionSoft.php index a949c49a0f7d59e53b1bcc6ae4b5d21b68dc81bf..3923e5f73bb5cf5c0973a5032c7d1222fa51cc59 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionSoft.php +++ b/civicrm/CRM/Contribute/BAO/ContributionSoft.php @@ -33,6 +33,9 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio * soft contribution of object that is added */ public static function add(&$params) { + $hook = empty($params['id']) ? 'create' : 'edit'; + CRM_Utils_Hook::pre($hook, 'ContributionSoft', CRM_Utils_Array::value('id', $params), $params); + $contributionSoft = new CRM_Contribute_DAO_ContributionSoft(); $contributionSoft->copyValues($params); @@ -41,7 +44,9 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $config = CRM_Core_Config::singleton(); $contributionSoft->currency = $config->defaultCurrency; } - return $contributionSoft->save(); + $result = $contributionSoft->save(); + CRM_Utils_Hook::post($hook, 'ContributionSoft', $contributionSoft->id, $contributionSoft); + return $result; } /** @@ -57,7 +62,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $pcpId = self::getSoftCreditIds($contribution->id, TRUE); if ($pcp = CRM_Utils_Array::value('pcp', $params)) { - $softParams = array(); + $softParams = []; $softParams['id'] = $pcpId ? $pcpId : NULL; $softParams['contribution_id'] = $contribution->id; $softParams['pcp_id'] = $pcp['pcp_made_through_id']; @@ -78,7 +83,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio } //Delete PCP against this contribution and create new on submitted PCP information elseif (array_key_exists('pcp', $params) && $pcpId) { - civicrm_api3('ContributionSoft', 'delete', array('id' => $pcpId)); + civicrm_api3('ContributionSoft', 'delete', ['id' => $pcpId]); } if (isset($params['soft_credit'])) { $softParams = $params['soft_credit']; @@ -100,7 +105,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio // delete any extra soft-credit while updating back-office contribution foreach ((array) $softIDs as $softID) { if (!in_array($softID, $params['soft_credit_ids'])) { - civicrm_api3('ContributionSoft', 'delete', array('id' => $softID)); + civicrm_api3('ContributionSoft', 'delete', ['id' => $softID]); } } } @@ -116,14 +121,14 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio * Form object. */ public static function formatSoftCreditParams(&$params, &$form) { - $pcp = $softParams = $softIDs = array(); + $pcp = $softParams = $softIDs = []; if (!empty($params['pcp_made_through_id'])) { - $fields = array( + $fields = [ 'pcp_made_through_id', 'pcp_display_in_roll', 'pcp_roll_nickname', 'pcp_personal_note', - ); + ]; foreach ($fields as $f) { $pcp[$f] = CRM_Utils_Array::value($f, $params); } @@ -136,10 +141,10 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $contributionSoftParams['soft_credit_type_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionSoft', 'soft_credit_type_id', 'pcp'); //check if there is any duplicate contact // honoree should never be the donor - $exceptKeys = array( + $exceptKeys = [ 'contactID' => 0, 'onbehalf_contact_id' => 0, - ); + ]; $except = array_values(array_intersect_key($params, $exceptKeys)); $ids = CRM_Contact_BAO_Contact::getDuplicateContacts( $params['honor'], @@ -158,13 +163,13 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $honorId, NULL, $form->_values['honoree_profile_id'] ); - $softParams[] = array( + $softParams[] = [ 'contact_id' => $honorId, 'soft_credit_type_id' => $params['soft_credit_type_id'], - ); + ]; if (CRM_Utils_Array::value('is_email_receipt', $form->_values)) { - $form->_values['honor'] = array( + $form->_values['honor'] = [ 'soft_credit_type' => CRM_Utils_Array::value( $params['soft_credit_type_id'], CRM_Core_OptionGroup::values("soft_credit_type") @@ -172,7 +177,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio 'honor_id' => $honorId, 'honor_profile_id' => $form->_values['honoree_profile_id'], 'honor_profile_values' => $params['honor'], - ); + ]; } } elseif (!empty($params['soft_credit_contact_id'])) { @@ -231,15 +236,15 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio WHERE cc.is_test = %2 AND ccs.contact_id = %1 {$whereClause} GROUP BY currency"; - $params = array( - 1 => array($contact_id, 'Integer'), - 2 => array($isTest, 'Integer'), - ); + $params = [ + 1 => [$contact_id, 'Integer'], + 2 => [$isTest, 'Integer'], + ]; $cs = CRM_Core_DAO::executeQuery($query, $params); $count = $countCancelled = 0; - $amount = $average = $cancelAmount = array(); + $amount = $average = $cancelAmount = []; while ($cs->fetch()) { if ($cs->amount > 0) { @@ -252,7 +257,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio //to get cancel amount $cancelAmountWhereClause = "AND cc.cancel_date IS NOT NULL"; $query = str_replace($whereClause, $cancelAmountWhereClause, $query); - $cancelAmountSQL = CRM_Core_DAO::executeQuery($query, $params); + $cancelAmountSQL = CRM_Core_DAO::executeQuery($query, $params); while ($cancelAmountSQL->fetch()) { if ($cancelAmountSQL->amount > 0) { $countCancelled++; @@ -261,15 +266,15 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio } if ($count > 0 || $countCancelled > 0) { - return array( + return [ $count, $countCancelled, implode(', ', $amount), implode(', ', $average), implode(', ', $cancelAmount), - ); + ]; } - return array(0, 0); + return [0, 0]; } /** @@ -363,10 +368,10 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio else { $query .= " AND pcp_id IS NULL"; } - $params = array(1 => array($contributionID, 'Integer')); + $params = [1 => [$contributionID, 'Integer']]; $dao = CRM_Core_DAO::executeQuery($query, $params); - $id = array(); + $id = []; $type = ''; while ($dao->fetch()) { if ($isPCP) { @@ -404,7 +409,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $softCreditList = self::getSoftContributionList($contactId, $filter, $isTest, $params); - $softCreditListDT = array(); + $softCreditListDT = []; $softCreditListDT['data'] = array_values($softCreditList); $softCreditListDT['recordsTotal'] = $params['total']; $softCreditListDT['recordsFiltered'] = $params['total']; @@ -426,14 +431,14 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio */ public static function getSoftContributionList($contact_id, $filter = NULL, $isTest = 0, &$dTParams = NULL) { $config = CRM_Core_Config::singleton(); - $links = array( - CRM_Core_Action::VIEW => array( + $links = [ + CRM_Core_Action::VIEW => [ 'name' => ts('View'), 'url' => 'civicrm/contact/view/contribution', 'qs' => 'reset=1&id=%%contributionid%%&cid=%%contactId%%&action=view&context=contribution&selectedChild=contribute', 'title' => ts('View related contribution'), - ), - ); + ], + ]; $orderBy = 'cc.receive_date DESC'; if (!empty($dTParams['sort'])) { $orderBy = $dTParams['sort']; @@ -482,16 +487,16 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $query .= "{$where} ORDER BY {$orderBy} {$limit}"; - $params = array( - 1 => array($contact_id, 'Integer'), - 2 => array($isTest, 'Integer'), - 3 => array($softOgId, 'Integer'), - 4 => array($statusOgId, 'Integer'), - ); + $params = [ + 1 => [$contact_id, 'Integer'], + 2 => [$isTest, 'Integer'], + 3 => [$softOgId, 'Integer'], + 4 => [$statusOgId, 'Integer'], + ]; $cs = CRM_Core_DAO::executeQuery($query, $params); $dTParams['total'] = CRM_Core_DAO::singleValueQuery('SELECT FOUND_ROWS()'); - $result = array(); + $result = []; while ($cs->fetch()) { $result[$cs->id]['amount'] = CRM_Utils_Money::format($cs->amount, $cs->currency); $result[$cs->id]['currency'] = $cs->currency; @@ -511,10 +516,10 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio $result[$cs->id]['pcp_personal_note'] = $cs->pcp_personal_note; $result[$cs->id]['contribution_status'] = $cs->contribution_status; $result[$cs->id]['sct_label'] = $cs->sct_label; - $replace = array( + $replace = [ 'contributionid' => $cs->contribution_id, 'contactId' => $cs->contributor_id, - ); + ]; $result[$cs->id]['links'] = CRM_Core_Action::formLink($links, NULL, $replace); if ($isTest) { @@ -539,7 +544,7 @@ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_Contributio } $profileContactType = CRM_Core_BAO_UFGroup::getContactType($form->_values['honoree_profile_id']); $profileFields = CRM_Core_BAO_UFGroup::getFields($form->_values['honoree_profile_id']); - $honoreeProfileFields = $values = array(); + $honoreeProfileFields = $values = []; $honorName = NULL; if ($honorId) { diff --git a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php index 160544bb27bb4f947e1480cc99c753265310a2c7..04be631bb13810d842ab22bbbae5b12b9e5b7a15 100644 --- a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php +++ b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php @@ -232,6 +232,9 @@ class CRM_Contribute_Form_AbstractEditPayment extends CRM_Contact_Form_Task { /** * Pre process function with common actions. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function preProcess() { $this->_contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this); @@ -530,7 +533,6 @@ WHERE contribution_id = {$id} /** * Common block for setting up the parts of a form that relate to credit / debit card - * @throws Exception */ protected function assignPaymentRelatedVariables() { try { diff --git a/civicrm/CRM/Contribute/Form/AdditionalPayment.php b/civicrm/CRM/Contribute/Form/AdditionalPayment.php index 07dd076ff4c1175146295d1c9828a20b81989dfc..ee860de148faacef9a46c178cacb3336b98f096a 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalPayment.php +++ b/civicrm/CRM/Contribute/Form/AdditionalPayment.php @@ -362,9 +362,6 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract $config = CRM_Core_Config::singleton(); $session = CRM_Core_Session::singleton(); - $now = date('YmdHis'); - $fields = []; - // we need to retrieve email address if ($this->_context == 'standalone' && !empty($this->_params['is_email_receipt'])) { list($this->userDisplayName, diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php index 04fa3e074a952d11d1be0cb61c9e7a46c27e3688..a47c573dd15ea0b72cc073d22a316e301a14fbee 100644 --- a/civicrm/CRM/Contribute/Form/Contribution.php +++ b/civicrm/CRM/Contribute/Form/Contribution.php @@ -211,6 +211,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP /** * Set variables up before form is built. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function preProcess() { // Check permission for action. @@ -279,7 +282,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->_lineItems = []; if ($this->_id) { - if (!empty($this->_compId) && $this->_compContext == 'participant') { + if (!empty($this->_compId) && $this->_compContext === 'participant') { $this->assign('compId', $this->_compId); $lineItem = CRM_Price_BAO_LineItem::getLineItems($this->_compId); } @@ -310,6 +313,8 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP * Set default values. * * @return array + * + * @throws \CRM_Core_Exception */ public function setDefaultValues() { $defaults = $this->_values; @@ -450,6 +455,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP /** * Build the form object. + * + * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public function buildQuickForm() { if ($this->_id) { @@ -1294,7 +1302,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP ]); $this->_id = $params['id']; $this->_values = $existingContribution; - if (CRM_Contribute_BAO_Contribution::checkContributeSettings('invoicing')) { + if (CRM_Invoicing_Utils::isInvoicingEnabled()) { $this->_values['tax_amount'] = civicrm_api3('contribution', 'getvalue', [ 'id' => $params['id'], 'return' => 'tax_amount', diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index 6f7d403abcd4776b81843421daff04b6197930ab..7db07f48b8d4456492b5b4e00e5a099e8cd5ed96 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -283,7 +283,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu $this->buildComponentForm($this->_id, $this); } - if (count($this->_paymentProcessors) >= 1 && !isset($this->_paymentProcessors[0]) && !$this->get_template_vars("isCaptcha") && $this->hasToAddForcefully()) { + if (count($this->_paymentProcessors) >= 1 && !$this->get_template_vars("isCaptcha") && $this->hasToAddForcefully()) { if (!$this->_userID) { $this->enableCaptchaOnForm(); } @@ -438,13 +438,8 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu } } if ($this->_pcpId && empty($this->_ccid)) { - if ($pcpSupporter = CRM_PCP_BAO_PCP::displayName($this->_pcpId)) { - $pcp_supporter_text = ts('This contribution is being made thanks to the effort of <strong>%1</strong>, who supports our campaign.', [1 => $pcpSupporter]); - // Only tell people that can also create a PCP if the contribution page has a non-empty value in the "Create Personal Campaign Page link" field. - $text = CRM_PCP_BAO_PCP::getPcpBlockStatus($this->_id, 'contribute'); - if (!empty($text)) { - $pcp_supporter_text .= ts("You can support it as well - once you complete the donation, you will be able to create your own Personal Campaign Page!"); - } + if (CRM_PCP_BAO_PCP::displayName($this->_pcpId)) { + $pcp_supporter_text = CRM_PCP_BAO_PCP::getPcpSupporterText($this->_pcpId, $this->_id, 'contribute'); $this->assign('pcpSupporterText', $pcp_supporter_text); } $prms = ['id' => $this->_pcpId]; diff --git a/civicrm/CRM/Contribute/Form/ContributionBase.php b/civicrm/CRM/Contribute/Form/ContributionBase.php index 59670755beab60ff262cfe29324596bf26626929..aa08c053ce54b439956983e40a8cddfd03e94bf6 100644 --- a/civicrm/CRM/Contribute/Form/ContributionBase.php +++ b/civicrm/CRM/Contribute/Form/ContributionBase.php @@ -561,10 +561,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { $this->assign('onBehalfEmail', $this->_params['onbehalf_location']['email'][$locTypeId[0]]['email']); } $this->assignPaymentFields(); - - $this->assign('email', - $this->controller->exportValue('Main', "email-{$this->_bltID}") - ); + $this->assignEmailField(); // also assign the receipt_text if (isset($this->_values['receipt_text'])) { @@ -572,6 +569,25 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { } } + /** + * Assign email variable in the template. + */ + public function assignEmailField() { + //If email exist in a profile, the default billing email field is not loaded on the page. + //Hence, assign the existing location type email by iterating through the params. + if ($this->_emailExists && empty($this->_params["email-{$this->_bltID}"])) { + foreach ($this->_params as $key => $val) { + if (substr($key, 0, 6) == 'email-') { + $this->assign('email', $this->_params[$key]); + break; + } + } + } + else { + $this->assign('email', CRM_Utils_Array::value("email-{$this->_bltID}", $this->_params)); + } + } + /** * Add the custom fields. * diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php b/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php index 5bd2d52af26b09749639ad43ccb361f00c44b2cf..e703228a165afafec43674bf89817ddf91a12cd8 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php @@ -39,6 +39,8 @@ class CRM_Contribute_Form_ContributionPage_Widget extends CRM_Contribute_Form_Co $this->assign('cpageId', $this->_id); + $this->assign('widgetExternUrl', CRM_Utils_System::externUrl('extern/widget', "cpageId={$this->_id}&widgetId={$this->_widget->id}&format=3")); + $config = CRM_Core_Config::singleton(); $title = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', $this->_id, diff --git a/civicrm/CRM/Contribute/Form/ContributionView.php b/civicrm/CRM/Contribute/Form/ContributionView.php index d16922d9ab04fb8e7439f2e46cd08951012418be..fc0181933a1228c8c836b6ea5a05d164c227fc6b 100644 --- a/civicrm/CRM/Contribute/Form/ContributionView.php +++ b/civicrm/CRM/Contribute/Form/ContributionView.php @@ -165,10 +165,9 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form { // assign values to the template $this->assign($values); - $invoiceSettings = Civi::settings()->get('contribution_invoice_settings'); $invoicing = CRM_Invoicing_Utils::isInvoicingEnabled(); $this->assign('invoicing', $invoicing); - $this->assign('isDeferred', CRM_Utils_Array::value('deferred_revenue_enabled', $invoiceSettings)); + $this->assign('isDeferred', Civi::settings()->get('deferred_revenue_enabled')); if ($invoicing && isset($values['tax_amount'])) { $this->assign('totalTaxAmount', $values['tax_amount']); } diff --git a/civicrm/CRM/Contribute/Form/Search.php b/civicrm/CRM/Contribute/Form/Search.php index 3f780e8323fc3e18319afb71f43499d956b2f893..abe1b633160b49a8f84e1a6a17a56a04d0f45264 100644 --- a/civicrm/CRM/Contribute/Form/Search.php +++ b/civicrm/CRM/Contribute/Form/Search.php @@ -45,7 +45,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { * Prefix for the controller. * @var string */ - protected $_prefix = "contribute_"; + protected $_prefix = 'contribute_'; /** * Explicitly declare the entity api name. @@ -63,7 +63,6 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { public function preProcess() { $this->set('searchFormName', 'Search'); - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; @@ -79,7 +78,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { $this->_context ); $prefix = NULL; - if ($this->_context == 'user') { + if ($this->_context === 'user') { $prefix = $this->_prefix; } @@ -232,6 +231,8 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { * done. * The processing consists of using a Selector / Controller framework for getting the * search results. + * + * @throws \CRM_Core_Exception */ public function postProcess() { if ($this->_done) { @@ -245,9 +246,9 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { $this->fixFormValues(); // We don't show test records in summaries or dashboards - if (empty($this->_formValues['contribution_test']) && $this->_force && !empty($this->_context) && $this->_context == 'dashboard') { + if (empty($this->_formValues['contribution_test']) && $this->_force && !empty($this->_context) && $this->_context === 'dashboard') { // @todo - stop changing formValues - respect submitted form values, change a working array. - $this->_formValues["contribution_test"] = 0; + $this->_formValues['contribution_test'] = 0; } foreach ([ @@ -336,7 +337,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { $selector->setKey($this->controller->_key); $prefix = NULL; - if ($this->_context == 'basic' || $this->_context == 'user') { + if ($this->_context === 'basic' || $this->_context === 'user') { $prefix = $this->_prefix; } @@ -351,7 +352,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { $controller->setEmbedded(TRUE); $query = &$selector->getQuery(); - if ($this->_context == 'user') { + if ($this->_context === 'user') { $query->setSkipPermission(TRUE); } @@ -362,6 +363,8 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { * Use values from $_GET if force is set to TRUE. * * Note that this means that GET over-rides POST. This was a historical decision & the reasoning is not explained. + * + * @throws \CRM_Core_Exception */ public function fixFormValues() { if (!$this->_force) { diff --git a/civicrm/CRM/Contribute/Form/Task/Batch.php b/civicrm/CRM/Contribute/Form/Task/Batch.php index 88ead436390d954981c3d1d7a281a2da89474405..4a35044f4324bfe66ecaef53adeef8eacb7803d8 100644 --- a/civicrm/CRM/Contribute/Form/Task/Batch.php +++ b/civicrm/CRM/Contribute/Form/Task/Batch.php @@ -69,7 +69,7 @@ class CRM_Contribute_Form_Task_Batch extends CRM_Contribute_Form_Task { $ufGroupId = $this->get('ufGroupId'); if (!$ufGroupId) { - CRM_Core_Error::fatal('ufGroupId is missing'); + 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); diff --git a/civicrm/CRM/Contribute/Form/Task/PDF.php b/civicrm/CRM/Contribute/Form/Task/PDF.php index 20868497c6e57589125167f33119efd8d4370120..9eea32cd4b44a8b9a9b89fb6828e6172b2dbbc66 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDF.php +++ b/civicrm/CRM/Contribute/Form/Task/PDF.php @@ -159,7 +159,7 @@ AND {$this->_componentClause}"; $ids['event'] = CRM_Utils_Array::value('event', $detail); if (!$elements['baseIPN']->validateData($input, $ids, $objects, FALSE)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('invalid data'); } $contribution = &$objects['contribution']; diff --git a/civicrm/CRM/Contribute/Import/Parser/Contribution.php b/civicrm/CRM/Contribute/Import/Parser/Contribution.php index e9249ed11207799a65631ce09cc5c3a553dd5ced..5bc8cf306e04c8afa2fd1e7b3b33e2bcde12246f 100644 --- a/civicrm/CRM/Contribute/Import/Parser/Contribution.php +++ b/civicrm/CRM/Contribute/Import/Parser/Contribution.php @@ -321,7 +321,8 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Contribute_Import_Pa } } - $newContribution = CRM_Contribute_BAO_Contribution::create($formatted, $ids); + $formatted['id'] = $ids['contribution']; + $newContribution = CRM_Contribute_BAO_Contribution::create($formatted); $this->_newContributions[] = $newContribution->id; //return soft valid since we need to show how soft credits were added diff --git a/civicrm/CRM/Contribute/Selector/Search.php b/civicrm/CRM/Contribute/Selector/Search.php index b219918535d00f0bd2555a3cc8ef613c44afa57b..91e65fbfa125b6de43b67da37d4ebbeb67848e8b 100644 --- a/civicrm/CRM/Contribute/Selector/Search.php +++ b/civicrm/CRM/Contribute/Selector/Search.php @@ -608,7 +608,7 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C } /** - * @return string + * @return \CRM_Contact_BAO_Query */ public function &getQuery() { return $this->_query; diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index d65d7b628b054407071337aa1c9e214344727431..c3d43ac96dc041a49347039da2173b23c8ee88f6 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -596,7 +596,7 @@ FROM civicrm_action_schedule cas * List of error messages. */ protected static function sendReminderEmail($tokenRow, $schedule, $toContactID) { - $toEmail = CRM_Contact_BAO_Contact::getPrimaryEmail($toContactID); + $toEmail = CRM_Contact_BAO_Contact::getPrimaryEmail($toContactID, TRUE); if (!$toEmail) { return ["email_missing" => "Couldn't find recipient's email address."]; } diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php index 578df7b89b7c497092ae3eb50814a02592fa7e1f..e83d1774e033d94996850f128c4b76b3f36d911a 100644 --- a/civicrm/CRM/Core/BAO/Address.php +++ b/civicrm/CRM/Core/BAO/Address.php @@ -1023,8 +1023,15 @@ SELECT is_primary, $query = 'SELECT id, contact_id FROM civicrm_address WHERE master_id = %1'; $dao = CRM_Core_DAO::executeQuery($query, [1 => [$addressId, 'Integer']]); + // legacy - for api backward compatibility + if (!isset($params['add_relationship']) && isset($params['update_current_employer'])) { + // warning + CRM_Core_Error::deprecatedFunctionWarning('update_current_employer is deprecated, use add_relationship instead'); + $params['add_relationship'] = $params['update_current_employer']; + } + // Default to TRUE if not set to maintain api backward compatibility. - $createRelationship = isset($params['update_current_employer']) ? $params['update_current_employer'] : TRUE; + $createRelationship = isset($params['add_relationship']) ? $params['add_relationship'] : TRUE; // unset contact id $skipFields = ['is_primary', 'location_type_id', 'is_billing', 'contact_id']; diff --git a/civicrm/CRM/Core/BAO/ConfigSetting.php b/civicrm/CRM/Core/BAO/ConfigSetting.php index 9241b41477c17254cda980b42a03713aa084c64a..359685a8cf12a0605ff8d970403e709fe21332d6 100644 --- a/civicrm/CRM/Core/BAO/ConfigSetting.php +++ b/civicrm/CRM/Core/BAO/ConfigSetting.php @@ -41,6 +41,9 @@ class CRM_Core_BAO_ConfigSetting { * * @param array $params * Associated array of civicrm variables. + * @deprecated + * This method was historically used to access civicrm_domain.config_backend. + * However, that has been fully replaced by the settings system since v4.7. */ public static function add(&$params) { $domain = new CRM_Core_DAO_Domain(); @@ -69,6 +72,9 @@ class CRM_Core_BAO_ConfigSetting { * @param $defaults * * @return array + * @deprecated + * This method was historically used to access civicrm_domain.config_backend. + * However, that has been fully replaced by the settings system since v4.7. */ public static function retrieve(&$defaults) { $domain = new CRM_Core_DAO_Domain(); @@ -80,7 +86,8 @@ class CRM_Core_BAO_ConfigSetting { $urlVar = 'task'; } - if ($isUpgrade && CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_domain', 'config_backend')) { + $hasBackend = CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_domain', 'config_backend'); + if ($isUpgrade && $hasBackend) { $domain->selectAdd('config_backend'); } else { @@ -89,7 +96,10 @@ class CRM_Core_BAO_ConfigSetting { $domain->id = CRM_Core_Config::domainID(); $domain->find(TRUE); - if ($domain->config_backend) { + if ($hasBackend && $domain->config_backend) { + // This whole branch can probably be removed; the transitional loading + // is in SettingBag::loadValues(). Moreover, since 4.7.alpha1 dropped + // the column, anyone calling ::retrieve() has likely not gotten any data. $defaults = unserialize($domain->config_backend); if ($defaults === FALSE || !is_array($defaults)) { $defaults = []; diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index 25bd3c1e9ab50a81be0bcc39e4217e6be7174266..1f21c3e80edcf701a797f0363062f312cdf3007b 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -161,6 +161,8 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { * Array of arrays as would be passed into create * @param array $defaults * Default parameters to be be merged into each of the params. + * + * @throws \CiviCRM_API3_Exception */ public static function bulkSave($bulkParams, $defaults = []) { $addedColumns = $sql = $tables = $customFields = []; diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index e4828338e6e496f82ea2d02c914c47fd41ff4aee..1bfd2a634c3be58b2d625efd7a28ef32d23f2edd 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -160,7 +160,7 @@ class CRM_Core_BAO_CustomGroup extends CRM_Core_DAO_CustomGroup { if (CRM_Core_DAO_AllCoreTables::isCoreTable($tableName)) { // Bad idea. Prevent group creation because it might lead to a broken configuration. - CRM_Core_Error::fatal(ts("Cannot create custom table because %1 is already a core table.", ['1' => $tableName])); + throw new CRM_Core_Exception(ts('Cannot create custom table because %1 is already a core table.', ['1' => $tableName])); } } } @@ -1639,9 +1639,9 @@ ORDER BY civicrm_custom_group.weight, $value = NULL; } } - elseif ($field['html_type'] == 'Select' || - ($field['html_type'] == 'Radio' && - $field['data_type'] != 'Boolean' + elseif ($field['html_type'] === 'Select' || + ($field['html_type'] === 'Radio' && + $field['data_type'] !== 'Boolean' ) ) { $customOption = CRM_Core_BAO_CustomOption::getCustomOption($key, TRUE); @@ -1654,7 +1654,7 @@ ORDER BY civicrm_custom_group.weight, } } } - elseif ($field['data_type'] == 'Date') { + elseif ($field['data_type'] === 'Date') { $valid = CRM_Utils_Rule::date($value); } @@ -1679,12 +1679,14 @@ ORDER BY civicrm_custom_group.weight, * * @return bool * false if it matches else true + * + * @throws \CRM_Core_Exception */ public static function checkCustomField($customFieldId, &$removeCustomFieldTypes) { - $query = "SELECT cg.extends as extends + $query = 'SELECT cg.extends as extends FROM civicrm_custom_group as cg, civicrm_custom_field as cf WHERE cg.id = cf.custom_group_id - AND cf.id =" . + AND cf.id =' . CRM_Utils_Type::escape($customFieldId, 'Integer'); $extends = CRM_Core_DAO::singleValueQuery($query); @@ -1762,7 +1764,7 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, if (array_key_exists($table, $extendObjs)) { return $extendObjs[$table]; } - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Unknown error'); } } } @@ -1839,7 +1841,7 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, if (isset($properties['customValue'][$groupCount])) { $properties['element_name'] = "custom_{$k}_{$properties['customValue'][$groupCount]['id']}"; $formattedGroupTree[$key]['table_id'] = $properties['customValue'][$groupCount]['id']; - if ($properties['data_type'] == 'File') { + if ($properties['data_type'] === 'File') { $properties['element_value'] = $properties['customValue'][$groupCount]; $uploadNames[] = $properties['element_name']; } @@ -2064,7 +2066,7 @@ SELECT civicrm_custom_group.id as groupID, civicrm_custom_group.title as groupT if (!$flag) { $extendObjs = []; - CRM_Core_OptionValue::getValues(['name' => 'cg_extend_objects'], $extendObjs); + CRM_Core_OptionValue::getValues(['name' => 'cg_extend_objects'], $extendObjs, 'weight', TRUE); foreach ($extendObjs as $ovId => $ovValues) { if ($ovValues['description']) { @@ -2076,7 +2078,7 @@ SELECT civicrm_custom_group.id as groupID, civicrm_custom_group.title as groupT } if (!is_array($args)) { - CRM_Core_Error::fatal('Arg is not of type array'); + throw new CRM_Core_Exception('Arg is not of type array'); } list($className) = explode('::', $callback); diff --git a/civicrm/CRM/Core/BAO/FinancialTrxn.php b/civicrm/CRM/Core/BAO/FinancialTrxn.php index f81fdf802d19eda7a58a2c25a57db87004e709aa..6abb1bdb83d80abf42e8a82c02e15e332cb31bea 100644 --- a/civicrm/CRM/Core/BAO/FinancialTrxn.php +++ b/civicrm/CRM/Core/BAO/FinancialTrxn.php @@ -479,12 +479,14 @@ WHERE ceft.entity_id = %1"; } /** + * Get the total sum of all payments (and optionally refunds) for a contribution record + * * @param int $contributionID * @param bool $includeRefund * - * @return string + * @return float */ - public static function getTotalPayments($contributionID, $includeRefund = FALSE) { + public static function getTotalPayments($contributionID, $includeRefund = FALSE): float { $statusIDs = [CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed')]; if ($includeRefund) { @@ -495,7 +497,7 @@ WHERE ceft.entity_id = %1"; INNER JOIN civicrm_entity_financial_trxn eft ON (eft.financial_trxn_id = ft.id AND eft.entity_table = 'civicrm_contribution') WHERE eft.entity_id = %1 AND ft.is_payment = 1 AND ft.status_id IN (%2) "; - return CRM_Core_DAO::singleValueQuery($sql, [ + return (float) CRM_Core_DAO::singleValueQuery($sql, [ 1 => [$contributionID, 'Integer'], 2 => [implode(',', $statusIDs), 'CommaSeparatedIntegers'], ]); diff --git a/civicrm/CRM/Core/BAO/LabelFormat.php b/civicrm/CRM/Core/BAO/LabelFormat.php index c126ef9bc572e1ddcd41aa4e669d3e6ff7a35dc1..175d599410bfe207560ab21264a09c271cd8fcf0 100644 --- a/civicrm/CRM/Core/BAO/LabelFormat.php +++ b/civicrm/CRM/Core/BAO/LabelFormat.php @@ -61,10 +61,11 @@ class CRM_Core_BAO_LabelFormat extends CRM_Core_DAO_OptionValue { 'default' => 'portrait', ], 'font-name' => [ - // Font name: 'courier', 'helvetica', 'times' + // Font name: 'dejavusans', 'courier', 'helvetica', 'times' + // dejavusans is the only one that supports unicode 'name' => 'font-name', 'type' => CRM_Utils_Type::T_STRING, - 'default' => 'helvetica', + 'default' => 'dejavusans', ], 'font-size' => [ // Font size: always in points diff --git a/civicrm/CRM/Core/BAO/Mapping.php b/civicrm/CRM/Core/BAO/Mapping.php index 05210de3683b3f9b4e5f8baa5d14bbabe72a3719..e29e071469b48e39bbe29573e33720908877e314 100644 --- a/civicrm/CRM/Core/BAO/Mapping.php +++ b/civicrm/CRM/Core/BAO/Mapping.php @@ -302,63 +302,27 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { } /** - * Build the mapping form. + * Build the mapping form for Search Builder. * * @param CRM_Core_Form $form - * @param string $mappingType - * (Export/Search Builder). (Import apparently used to use this but does no longer). * @param int $mappingId * @param int $columnNo * @param int $blockCount * (no of blocks shown). * @param int $exportMode */ - public static function buildMappingForm(&$form, $mappingType, $mappingId, $columnNo, $blockCount, $exportMode = NULL) { + public static function buildMappingForm(&$form, $mappingId, $columnNo, $blockCount, $exportMode = NULL) { $hasLocationTypes = []; $hasRelationTypes = []; - //get the saved mapping details - - if ($mappingType == 'Export') { - $columnCount = ['1' => $columnNo]; - $form->applyFilter('saveMappingName', 'trim'); - - //to save the current mappings - if (!isset($mappingId)) { - $saveDetailsName = ts('Save this field mapping'); - $form->add('text', 'saveMappingName', ts('Name')); - $form->add('text', 'saveMappingDesc', ts('Description')); - } - else { - $form->assign('loadedMapping', $mappingId); - - $params = ['id' => $mappingId]; - $temp = []; - $mappingDetails = CRM_Core_BAO_Mapping::retrieve($params, $temp); - - $form->assign('savedName', $mappingDetails->name); - - $form->add('hidden', 'mappingId', $mappingId); - - $form->addElement('checkbox', 'updateMapping', ts('Update this field mapping'), NULL); - $saveDetailsName = ts('Save as a new field mapping'); - $form->add('text', 'saveMappingName', ts('Name')); - $form->add('text', 'saveMappingDesc', ts('Description')); - } - - $form->addElement('checkbox', 'saveMapping', $saveDetailsName, NULL, ['onclick' => "showSaveDetails(this)"]); - $form->addFormRule(['CRM_Export_Form_Map', 'formRule'], $form->get('mappingTypeId')); - } - elseif ($mappingType == 'Search Builder') { - $columnCount = $columnNo; - $form->addElement('submit', 'addBlock', ts('Also include contacts where'), - ['class' => 'submit-link'] - ); - } + $columnCount = $columnNo; + $form->addElement('submit', 'addBlock', ts('Also include contacts where'), + ['class' => 'submit-link'] + ); $contactTypes = CRM_Contact_BAO_ContactType::basicTypes(); - $fields = self::getBasicFields($mappingType); + $fields = self::getBasicFields('Search Builder'); // Unset groups, tags, notes for component export if ($exportMode != CRM_Export_Form_Select::CONTACT_EXPORT) { @@ -367,37 +331,35 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { } } - if ($mappingType == 'Search Builder') { - // Build the common contact fields array. - $fields['Contact'] = []; - foreach ($fields[$contactTypes[0]] as $key => $value) { - // If a field exists across all contact types, move it to the "Contact" selector - $ubiquitious = TRUE; - foreach ($contactTypes as $type) { - if (!isset($fields[$type][$key])) { - $ubiquitious = FALSE; - } - } - if ($ubiquitious) { - $fields['Contact'][$key] = $value; - foreach ($contactTypes as $type) { - unset($fields[$type][$key]); - } + // Build the common contact fields array. + $fields['Contact'] = []; + foreach ($fields[$contactTypes[0]] as $key => $value) { + // If a field exists across all contact types, move it to the "Contact" selector + $ubiquitious = TRUE; + foreach ($contactTypes as $type) { + if (!isset($fields[$type][$key])) { + $ubiquitious = FALSE; } } - if (array_key_exists('note', $fields['Contact'])) { - $noteTitle = $fields['Contact']['note']['title']; - $fields['Contact']['note']['title'] = $noteTitle . ': ' . ts('Body and Subject'); - $fields['Contact']['note_body'] = ['title' => $noteTitle . ': ' . ts('Body Only'), 'name' => 'note_body']; - $fields['Contact']['note_subject'] = [ - 'title' => $noteTitle . ': ' . ts('Subject Only'), - 'name' => 'note_subject', - ]; + if ($ubiquitious) { + $fields['Contact'][$key] = $value; + foreach ($contactTypes as $type) { + unset($fields[$type][$key]); + } } } + if (array_key_exists('note', $fields['Contact'])) { + $noteTitle = $fields['Contact']['note']['title']; + $fields['Contact']['note']['title'] = $noteTitle . ': ' . ts('Body and Subject'); + $fields['Contact']['note_body'] = ['title' => $noteTitle . ': ' . ts('Body Only'), 'name' => 'note_body']; + $fields['Contact']['note_subject'] = [ + 'title' => $noteTitle . ': ' . ts('Subject Only'), + 'name' => 'note_subject', + ]; + } // add component fields - $compArray = self::addComponentFields($fields, $mappingType, $exportMode); + $compArray = self::addComponentFields($fields, 'Search Builder', $exportMode); foreach ($fields as $key => $value) { @@ -444,9 +406,7 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { // since we need a hierarchical list to display contact types & subtypes, // this is what we going to display in first selector $contactTypeSelect = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, FALSE); - if ($mappingType == 'Search Builder') { - $contactTypeSelect = ['Contact' => ts('Contacts')] + $contactTypeSelect; - } + $contactTypeSelect = ['Contact' => ts('Contacts')] + $contactTypeSelect; $sel1 = ['' => ts('- select record type -')] + $contactTypeSelect + $compArray; @@ -494,74 +454,6 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { // Array for core fields and relationship custom data $relationshipTypes = CRM_Contact_BAO_Relationship::getContactRelationshipType(NULL, NULL, NULL, NULL, TRUE); - if ($mappingType == 'Export') { - foreach ($sel1 as $k => $sel) { - if ($k) { - foreach ($mapperFields[$k] as $field => $dontCare) { - if (isset($hasRelationTypes[$k][$field])) { - list($id, $first, $second) = explode('_', $field); - // FIX ME: For now let's not expose custom data related to relationship - $relationshipCustomFields = []; - //$relationshipCustomFields = self::getRelationTypeCustomGroupData( $id ); - //asort($relationshipCustomFields); - - $relatedFields = []; - $relationshipType = new CRM_Contact_BAO_RelationshipType(); - $relationshipType->id = $id; - if ($relationshipType->find(TRUE)) { - $direction = "contact_sub_type_$second"; - $target_type = 'contact_type_' . $second; - if (isset($relationshipType->$direction)) { - $relatedFields = array_merge((array) $relatedMapperFields[$relationshipType->$direction], (array) $relationshipCustomFields); - } - elseif (isset($relationshipType->$target_type)) { - $relatedFields = array_merge((array) $relatedMapperFields[$relationshipType->$target_type], (array) $relationshipCustomFields); - } - //CRM-20672 If contact target type not set e.g. "All Contacts" relationship - present user with all field options and let them determine what they expect to work - else { - $types = CRM_Contact_BAO_ContactType::basicTypes(FALSE); - foreach ($types as $contactType => $label) { - $relatedFields = array_merge($relatedFields, (array) $relatedMapperFields[$label]); - } - $relatedFields = array_merge($relatedFields, (array) $relationshipCustomFields); - } - } - asort($relatedFields); - $sel5[$k][$field] = $relatedFields; - } - } - } - } - - //Location Type for relationship fields - foreach ($sel5 as $k => $v) { - if ($v) { - foreach ($v as $rel => $fields) { - foreach ($fields as $field => $fieldLabel) { - if (isset($hasLocationTypes[$k][$field])) { - $sel6[$k][$rel][$field] = $locationTypes; - } - } - } - } - } - - //PhoneTypes for relationship fields - $sel7[''] = NULL; - foreach ($sel6 as $k => $rel) { - if ($k) { - foreach ($rel as $phonekey => $phonevalue) { - foreach ($locationTypes as $locType => $loc) { - if (trim($locType) != '') { - $sel7[$k][$phonekey]['phone'][$locType] = &$phoneTypes; - $sel7[$k][$phonekey]['im'][$locType] = &$imProviders; - } - } - } - } - } - } - //special fields that have location, hack for primary location $specialFields = [ 'street_address', @@ -618,12 +510,7 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { list($mappingName, $defaults, $noneArray, $jsSet) = self::loadSavedMapping($mappingLocation, $x, $i, $mappingName, $mapperFields, $mappingContactType, $mappingRelation, $specialFields, $mappingPhoneType, $defaults, $noneArray, $mappingImProvider, $mappingOperator, $mappingValue); } //Fix for Search Builder - if ($mappingType == 'Export') { - $j = 7; - } - else { - $j = 4; - } + $j = 4; $formValues = $form->exportValues(); if (!$jsSet) { @@ -656,48 +543,21 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { } } //Fix for Search Builder - if ($mappingType == 'Export') { - if (!isset($mappingId) || $i >= count(reset($mappingName))) { - if (isset($formValues['mapper']) && - isset($formValues['mapper'][$x][$i][1]) && - array_key_exists($formValues['mapper'][$x][$i][1], $relationshipTypes) - ) { - $sel->setOptions([$sel1, $sel2, $sel5, $sel6, $sel7, $sel3, $sel4]); - } - else { - $sel->setOptions([$sel1, $sel2, $sel3, $sel4, $sel5, $sel6, $sel7]); - } - } - else { - $sel->setOptions([$sel1, $sel2, $sel3, $sel4, $sel5, $sel6, $sel7]); - } - } - else { - $sel->setOptions([$sel1, $sel2, $sel3, $sel4]); - } + $sel->setOptions([$sel1, $sel2, $sel3, $sel4]); - if ($mappingType == 'Search Builder') { - //CRM -2292, restricted array set - $operatorArray = ['' => ts('-operator-')] + CRM_Core_SelectValues::getSearchBuilderOperators(); + //CRM -2292, restricted array set + $operatorArray = ['' => ts('-operator-')] + CRM_Core_SelectValues::getSearchBuilderOperators(); - $form->add('select', "operator[$x][$i]", '', $operatorArray); - $form->add('text', "value[$x][$i]", ''); - } - } - //end of columnCnt for - if ($mappingType == 'Search Builder') { - $title = ts('Another search field'); - } - else { - $title = ts('Select more fields'); + $form->add('select', "operator[$x][$i]", '', $operatorArray); + $form->add('text', "value[$x][$i]", ''); } - $form->addElement('submit', "addMore[$x]", $title, ['class' => 'submit-link']); + $form->addElement('submit', "addMore[$x]", ts('Another search field'), ['class' => 'submit-link']); } //end of block for $js = "<script type='text/javascript'>\n"; - $formName = "document." . (($mappingType == 'Export') ? 'Map' : 'Builder'); + $formName = "document.Builder"; if (!empty($nullArray)) { $js .= "var nullArray = ["; $elements = []; diff --git a/civicrm/CRM/Core/BAO/RecurringEntity.php b/civicrm/CRM/Core/BAO/RecurringEntity.php index b5e56e955c5ebe276cd9d7c1b6bf53941fc5e931..6e16f1da756099d12ec8814d632f6f34e6fa4c5d 100644 --- a/civicrm/CRM/Core/BAO/RecurringEntity.php +++ b/civicrm/CRM/Core/BAO/RecurringEntity.php @@ -586,6 +586,8 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { CRM_Core_BAO_RecurringEntity::quickAdd($object->id, $newObject->id, $entityTable); } + + CRM_Utils_Hook::copy(CRM_Core_DAO_AllCoreTables::getBriefName($daoName), $newObject); return $newObject; } diff --git a/civicrm/CRM/Core/BAO/SchemaHandler.php b/civicrm/CRM/Core/BAO/SchemaHandler.php index b135036d645bad6397240c57418a26ce7cae8f1d..2f3f70241e07f5a6ab7e3d631f44357dec291807 100644 --- a/civicrm/CRM/Core/BAO/SchemaHandler.php +++ b/civicrm/CRM/Core/BAO/SchemaHandler.php @@ -557,7 +557,7 @@ MODIFY {$columnName} varchar( $length ) * Check if the table has an index matching the name. * * @param string $tableName - * @param array $indexName + * @param string $indexName * * @return bool */ @@ -654,15 +654,20 @@ MODIFY {$columnName} varchar( $length ) * @param bool $dropFalseIndices * If set - this function deletes false indices present in the DB which mismatches the expected * values of xml file so that civi re-creates them with correct values using createMissingIndices() function. + * @param array|FALSE $tables + * An optional array of tables - if provided the results will be restricted to these tables. * * @return array * index specifications */ - public static function getMissingIndices($dropFalseIndices = FALSE) { + public static function getMissingIndices($dropFalseIndices = FALSE, $tables = FALSE) { $requiredSigs = $existingSigs = []; // Get the indices defined (originally) in the xml files $requiredIndices = CRM_Core_DAO_AllCoreTables::indices(); $reqSigs = []; + if ($tables !== FALSE) { + $requiredIndices = array_intersect_key($requiredIndices, array_fill_keys($tables, TRUE)); + } foreach ($requiredIndices as $table => $indices) { $reqSigs[] = CRM_Utils_Array::collect('sig', $indices); } @@ -791,4 +796,101 @@ MODIFY {$columnName} varchar( $length ) return $sql; } + /** + * Performs the utf8mb4 migration. + * + * @param bool $revert + * Being able to revert if primarily for unit testing. + * + * @return bool + */ + public static function migrateUtf8mb4($revert = FALSE) { + $newCharSet = $revert ? 'utf8' : 'utf8mb4'; + $newCollation = $revert ? 'utf8_unicode_ci' : 'utf8mb4_unicode_ci'; + $newBinaryCollation = $revert ? 'utf8_bin' : 'utf8mb4_bin'; + $tables = []; + $dao = new CRM_Core_DAO(); + $database = $dao->_database; + CRM_Core_DAO::executeQuery("ALTER DATABASE $database CHARACTER SET = $newCharSet COLLATE = $newCollation"); + $dao = CRM_Core_DAO::executeQuery("SHOW TABLE STATUS WHERE Engine = 'InnoDB' AND Name LIKE 'civicrm\_%'"); + while ($dao->fetch()) { + $tables[$dao->Name] = [ + 'Engine' => $dao->Engine, + ]; + } + $dsn = defined('CIVICRM_LOGGING_DSN') ? DB::parseDSN(CIVICRM_LOGGING_DSN) : DB::parseDSN(CIVICRM_DSN); + $logging_database = $dsn['database']; + $dao = CRM_Core_DAO::executeQuery("SHOW TABLE STATUS FROM `$logging_database` WHERE Engine <> 'MyISAM' AND Name LIKE 'log\_civicrm\_%'"); + while ($dao->fetch()) { + $tables["$logging_database.{$dao->Name}"] = [ + 'Engine' => $dao->Engine, + ]; + } + foreach ($tables as $table => $param) { + $query = "ALTER TABLE $table"; + $dao = CRM_Core_DAO::executeQuery("SHOW FULL COLUMNS FROM $table", [], TRUE, NULL, FALSE, FALSE); + $index = 0; + $params = []; + $tableCollation = $newCollation; + while ($dao->fetch()) { + if (!$dao->Collation || $dao->Collation === $newCollation || $dao->Collation === $newBinaryCollation) { + continue; + } + if (strpos($dao->Collation, 'utf8') !== 0) { + continue; + } + + if (strpos($dao->Collation, '_bin') !== FALSE) { + $tableCollation = $newBinaryCollation; + } + else { + $tableCollation = $newCollation; + } + if ($dao->Null === 'YES') { + $null = 'NULL'; + } + else { + $null = 'NOT NULL'; + } + $default = ''; + if ($dao->Default !== NULL) { + $index++; + $default = "DEFAULT %$index"; + $params[$index] = [$dao->Default, 'String']; + } + elseif ($dao->Null === 'YES') { + $default = 'DEFAULT NULL'; + } + $index++; + $params[$index] = [$dao->Comment, 'String']; + $query .= " MODIFY `{$dao->Field}` {$dao->Type} CHARACTER SET $newCharSet COLLATE $tableCollation $null $default {$dao->Extra} COMMENT %$index,"; + } + $query .= " CHARACTER SET = $newCharSet COLLATE = $tableCollation"; + if ($param['Engine'] === 'InnoDB') { + $query .= ' ROW_FORMAT = Dynamic'; + } + // Disable i18n rewrite. + CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, FALSE); + } + return TRUE; + } + + /** + * Get the database collation. + * + * @return string + */ + public static function getDBCollation() { + return CRM_Core_DAO::singleValueQuery('SELECT @@collation_database'); + } + + /** + * Get the database collation. + * + * @return string + */ + public static function getDBCharset() { + return CRM_Core_DAO::singleValueQuery('SELECT @@character_set_database'); + } + } diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php index 50cc7dc06413d0c6d32d587c298835714aa1c88c..225f44926af32042bb96285164f297f4a7357d17 100644 --- a/civicrm/CRM/Core/BAO/Setting.php +++ b/civicrm/CRM/Core/BAO/Setting.php @@ -171,7 +171,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * (required) An api formatted array of keys and values. * @param null $domains * - * @throws api_Exception + * @throws API_Exception * @domains array an array of domains to get settings for. Default is the current domain * @return array */ @@ -211,7 +211,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * Empty array to be populated with fields metadata. * @param bool $createMode * - * @throws api_Exception + * @throws API_Exception * @return array * name => value array of the fields to be set (with extraneous removed) */ @@ -253,7 +253,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { $fields = civicrm_api3('setting', 'getfields', $getFieldsParams); $invalidParams = (array_diff_key($settingParams, $fields['values'])); if (!empty($invalidParams)) { - throw new api_Exception(implode(',', array_keys($invalidParams)) . " not valid settings"); + throw new API_Exception(implode(',', array_keys($invalidParams)) . " not valid settings"); } if (!empty($settingParams)) { $filteredFields = array_intersect_key($settingParams, $fields['values']); @@ -274,9 +274,10 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * Metadata for given field (drawn from the xml) * * @return bool - * @throws \api_Exception + * @throws \API_Exception */ public static function validateSetting(&$value, array $fieldSpec) { + // Deprecated guesswork - should use $fieldSpec['serialize'] if ($fieldSpec['type'] == 'String' && is_array($value)) { $value = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, $value) . CRM_Core_DAO::VALUE_SEPARATOR; } @@ -286,7 +287,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { else { $cb = Civi\Core\Resolver::singleton()->get($fieldSpec['validate_callback']); if (!call_user_func_array($cb, array(&$value, $fieldSpec))) { - throw new api_Exception("validation failed for {$fieldSpec['name']} = $value based on callback {$fieldSpec['validate_callback']}"); + throw new API_Exception("validation failed for {$fieldSpec['name']} = $value based on callback {$fieldSpec['validate_callback']}"); } } } @@ -298,11 +299,11 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting { * @param array $fieldSpec Metadata for given field (drawn from the xml) * * @return bool - * @throws \api_Exception + * @throws \API_Exception */ public static function validateBoolSetting(&$value, $fieldSpec) { if (!CRM_Utils_Rule::boolean($value)) { - throw new api_Exception("Boolean value required for {$fieldSpec['name']}"); + throw new API_Exception("Boolean value required for {$fieldSpec['name']}"); } if (!$value) { $value = 0; diff --git a/civicrm/CRM/Core/BAO/UFGroup.php b/civicrm/CRM/Core/BAO/UFGroup.php index ea56ed79358932b3dcd036a34e711acbdc2b91da..43995fc5558efc060964990dbd0fed2397bf397c 100644 --- a/civicrm/CRM/Core/BAO/UFGroup.php +++ b/civicrm/CRM/Core/BAO/UFGroup.php @@ -1477,13 +1477,13 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { /** * Make uf join entries for an uf group. * - * @param array $params - * (reference) an assoc array of name/value pairs. + * @param int $weight + * @param array $groupTypes + * An assoc array of name/value pairs. * @param int $ufGroupId * Ufgroup id. */ - public static function createUFJoin(&$params, $ufGroupId) { - $groupTypes = CRM_Utils_Array::value('uf_group_type', $params); + public static function createUFJoin($weight, $groupTypes, $ufGroupId) { // get ufjoin records for uf group $ufGroupRecord = CRM_Core_BAO_UFGroup::getUFJoinRecord($ufGroupId); @@ -1507,7 +1507,7 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { $joinParams = []; $joinParams['uf_group_id'] = $ufGroupId; $joinParams['module'] = $key; - if ($key == 'User Account') { + if ($key === 'User Account') { $menuRebuild = TRUE; } if (array_key_exists($key, $groupTypes) && !in_array($key, $ufGroupRecord)) { @@ -1521,14 +1521,14 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { } //update the weight - $query = " + $query = ' UPDATE civicrm_uf_join SET weight = %1 WHERE uf_group_id = %2 AND ( entity_id IS NULL OR entity_id <= 0 ) -"; +'; $p = [ - 1 => [$params['weight'], 'Integer'], + 1 => [$weight, 'Integer'], 2 => [$ufGroupId, 'Integer'], ]; CRM_Core_DAO::executeQuery($query, $p); diff --git a/civicrm/CRM/Core/ClassLoader.php b/civicrm/CRM/Core/ClassLoader.php index 9af4ce32386618dc9a08c39c45fd6c4406ca2cf5..34b770fd7e5745397f361a50461ed1dbe4f232d4 100644 --- a/civicrm/CRM/Core/ClassLoader.php +++ b/civicrm/CRM/Core/ClassLoader.php @@ -124,7 +124,13 @@ class CRM_Core_ClassLoader { $this->initHtmlPurifier($prepend); $this->_registered = TRUE; - $packages_path = implode(DIRECTORY_SEPARATOR, [$civicrm_base_path, 'packages']); + // The ClassLoader runs before the classes are available. Approximate Civi::paths()->get('[civicrm.packages]'). + if (isset($GLOBALS['civicrm_paths']['civicrm.packages']['path'])) { + $packages_path = rtrim($GLOBALS['civicrm_paths']['civicrm.packages']['path'], DIRECTORY_SEPARATOR); + } + else { + $packages_path = implode(DIRECTORY_SEPARATOR, [$civicrm_base_path, 'packages']); + } $include_paths = [ '.', $civicrm_base_path, @@ -177,7 +183,12 @@ class CRM_Core_ClassLoader { // we do this to prevent a autoloader errors with joomla / 3rd party packages // Use absolute path, since we don't know the content of include_path yet. // CRM-11304 - $file = dirname(__FILE__) . '/../../packages/IDS/vendors/htmlpurifier/HTMLPurifier/Bootstrap.php'; + if (isset($GLOBALS['civicrm_paths']['civicrm.packages']['path'])) { + $file = rtrim($GLOBALS['civicrm_paths']['civicrm.packages']['path'], DIRECTORY_SEPARATOR) . '/IDS/vendors/htmlpurifier/HTMLPurifier/Bootstrap.php'; + } + else { + $file = dirname(__FILE__) . '/../../packages/IDS/vendors/htmlpurifier/HTMLPurifier/Bootstrap.php'; + } if (file_exists($file)) { return $file; } diff --git a/civicrm/CRM/Core/CodeGen/Config.php b/civicrm/CRM/Core/CodeGen/Config.php index 8853913d98a40c8409a503663b6a1caa976cf015..aa50e059577a81794bd8228a966167b73b0d0910 100644 --- a/civicrm/CRM/Core/CodeGen/Config.php +++ b/civicrm/CRM/Core/CodeGen/Config.php @@ -39,6 +39,10 @@ class CRM_Core_CodeGen_Config extends CRM_Core_CodeGen_BaseTask { * path to config template */ public function findConfigTemplate($cms) { + if (getenv('GENCODE_CONFIG_TEMPLATE')) { + return getenv('GENCODE_CONFIG_TEMPLATE'); + } + $candidates = []; switch ($cms) { case 'backdrop': diff --git a/civicrm/CRM/Core/CodeGen/Main.php b/civicrm/CRM/Core/CodeGen/Main.php index 4ea9ba89342b1794ba1ed83d3775db9184a33a02..88a31222d60ae531b8b2a853d4f3178ebfdd9ace 100644 --- a/civicrm/CRM/Core/CodeGen/Main.php +++ b/civicrm/CRM/Core/CodeGen/Main.php @@ -151,13 +151,17 @@ Alternatively you can get a version of CiviCRM that matches your PHP version return $this->sourceDigest; } - protected function init() { + /** + * @return static + */ + public function init() { if (!$this->database || !$this->tables) { $specification = new CRM_Core_CodeGen_Specification(); $specification->parse($this->schemaPath, $this->buildVersion); $this->database = $specification->database; $this->tables = $specification->tables; } + return $this; } } diff --git a/civicrm/CRM/Core/CodeGen/Schema.php b/civicrm/CRM/Core/CodeGen/Schema.php index b96cb39ebee9e161860769402f54ba9a86cec99d..8a7cfb582229c6e7cc5bb54959a0baaf0ccd994b 100644 --- a/civicrm/CRM/Core/CodeGen/Schema.php +++ b/civicrm/CRM/Core/CodeGen/Schema.php @@ -18,24 +18,38 @@ class CRM_Core_CodeGen_Schema extends CRM_Core_CodeGen_BaseTask { public function run() { CRM_Core_CodeGen_Util_File::createDir($this->config->sqlCodePath); - $this->generateCreateSql(); - $this->generateDropSql(); + $put = function ($files) { + foreach ($files as $file => $content) { + if (substr($content, -1) !== "\n") { + $content .= "\n"; + } + file_put_contents($this->config->sqlCodePath . $file, $content); + } + }; - $this->generateLocaleDataSql(); + echo "Generating sql file\n"; + $put($this->generateCreateSql()); + + echo "Generating sql drop tables file\n"; + $put($this->generateDropSql()); + + foreach ($this->locales as $locale) { + echo "Generating data files for $locale\n"; + $put($this->generateLocaleDataSql($locale)); + } // also create the archive tables // $this->generateCreateSql('civicrm_archive.mysql' ); // $this->generateDropSql('civicrm_archive_drop.mysql'); - $this->generateNavigation(); - $this->generateSample(); + echo "Generating navigation file\n"; + $put($this->generateNavigation()); + + echo "Generating sample file\n"; + $put($this->generateSample()); } - /** - * @param string $fileName - */ - public function generateCreateSql($fileName = 'civicrm.mysql') { - echo "Generating sql file\n"; + public function generateCreateSql() { $template = new CRM_Core_CodeGen_Util_Template('sql'); $template->assign('database', $this->config->database); @@ -44,33 +58,34 @@ class CRM_Core_CodeGen_Schema extends CRM_Core_CodeGen_BaseTask { $template->assign('dropOrder', $dropOrder); $template->assign('mysql', 'modern'); - $template->run('schema.tpl', $this->config->sqlCodePath . $fileName); + return ['civicrm.mysql' => $template->fetch('schema.tpl')]; } - /** - * @param string $fileName - */ - public function generateDropSql($fileName = 'civicrm_drop.mysql') { - echo "Generating sql drop tables file\n"; + public function generateDropSql() { $dropOrder = array_reverse(array_keys($this->tables)); $template = new CRM_Core_CodeGen_Util_Template('sql'); $template->assign('dropOrder', $dropOrder); - $template->run('drop.tpl', $this->config->sqlCodePath . $fileName); + return ['civicrm_drop.mysql' => $template->fetch('drop.tpl')]; } public function generateNavigation() { - echo "Generating navigation file\n"; $template = new CRM_Core_CodeGen_Util_Template('sql'); - $template->run('civicrm_navigation.tpl', $this->config->sqlCodePath . "civicrm_navigation.mysql"); + return ['civicrm_navigation.mysql' => $template->fetch('civicrm_navigation.tpl')]; } - public function generateLocaleDataSql() { + /** + * @param string $locale + * Ex: en_US, fr_FR + * @return array + */ + public function generateLocaleDataSql($locale) { $template = new CRM_Core_CodeGen_Util_Template('sql'); global $tsLocale; $oldTsLocale = $tsLocale; - foreach ($this->locales as $locale) { - echo "Generating data files for $locale\n"; + + try { + $tsLocale = $locale; $template->assign('locale', $locale); $template->assign('db_version', $this->config->db_version); @@ -85,24 +100,32 @@ class CRM_Core_CodeGen_Schema extends CRM_Core_CodeGen_BaseTask { ]; $ext = ($locale != 'en_US' ? ".$locale" : ''); - // write the initialize base-data sql script - $template->runConcat($sections, $this->config->sqlCodePath . "civicrm_data$ext.mysql"); - // write the acl sql script - $template->run('civicrm_acl.tpl', $this->config->sqlCodePath . "civicrm_acl$ext.mysql"); + return [ + "civicrm_data$ext.mysql" => $template->fetchConcat($sections), + "civicrm_acl$ext.mysql" => $template->fetch('civicrm_acl.tpl'), + ]; + } + finally { + $tsLocale = $oldTsLocale; } - $tsLocale = $oldTsLocale; } + /** + * @return array + * Array(string $fileName => string $fileContent). + * List of files + */ public function generateSample() { $template = new CRM_Core_CodeGen_Util_Template('sql'); $sections = [ 'civicrm_sample.tpl', 'civicrm_acl.tpl', ]; - $template->runConcat($sections, $this->config->sqlCodePath . 'civicrm_sample.mysql'); - - $template->run('case_sample.tpl', $this->config->sqlCodePath . 'case_sample.mysql'); + return [ + 'civicrm_sample.mysql' => $template->fetchConcat($sections), + 'case_sample.mysql' => $template->fetch('case_sample.tpl'), + ]; } /** diff --git a/civicrm/CRM/Core/CodeGen/Util/Smarty.php b/civicrm/CRM/Core/CodeGen/Util/Smarty.php index 68a7077ec7d56ed10872461b4a4e35a05bbd2c59..d45989504d557c51491073dda3ceeda0d7112e0e 100644 --- a/civicrm/CRM/Core/CodeGen/Util/Smarty.php +++ b/civicrm/CRM/Core/CodeGen/Util/Smarty.php @@ -46,11 +46,12 @@ class CRM_Core_CodeGen_Util_Smarty { */ public function createSmarty() { $base = dirname(dirname(dirname(dirname(__DIR__)))); + $pkgs = file_exists(dirname($base) . "/civicrm-packages") ? dirname($base) . "/civicrm-packages" : "$base/packages"; require_once 'Smarty/Smarty.class.php'; $smarty = new Smarty(); $smarty->template_dir = "$base/xml/templates"; - $smarty->plugins_dir = ["$base/packages/Smarty/plugins", "$base/CRM/Core/Smarty/plugins"]; + $smarty->plugins_dir = ["$pkgs/Smarty/plugins", "$base/CRM/Core/Smarty/plugins"]; $smarty->compile_dir = $this->getCompileDir(); $smarty->clear_all_cache(); @@ -59,6 +60,8 @@ class CRM_Core_CodeGen_Util_Smarty { require_once 'CRM/Core/Smarty/plugins/block.localize.php'; $smarty->register_block('localize', 'smarty_block_localize'); + $smarty->assign('gencodeXmlDir', dirname(dirname(dirname(dirname(__DIR__)))) . '/xml'); + return $smarty; } diff --git a/civicrm/CRM/Core/CodeGen/Util/Template.php b/civicrm/CRM/Core/CodeGen/Util/Template.php index 5183997b45078f6858c77b96a716d3add26ffe36..ee0e09bd4baca3eab3ba6b010b9645a9c7abfab3 100644 --- a/civicrm/CRM/Core/CodeGen/Util/Template.php +++ b/civicrm/CRM/Core/CodeGen/Util/Template.php @@ -105,6 +105,23 @@ class CRM_Core_CodeGen_Util_Template { return $this->smarty->fetch($infile); } + /** + * Fetch multiple templates - and concatenate them. + * + * @see runConcat + * @param array $inputs + * Template filenames. + * @return string + */ + public function fetchConcat($inputs) { + $buf = ''; + foreach ($inputs as $infile) { + $buf .= $this->smarty->fetch($infile); + $buf .= "\n"; + } + return $buf; + } + /** * @param $key * @param $value diff --git a/civicrm/CRM/Core/Config.php b/civicrm/CRM/Core/Config.php index a942d7ffccd3affbb3f5ede5513d376f4962628e..4025c5d5ac86c42bccc91cea9b03cefa6675c147 100644 --- a/civicrm/CRM/Core/Config.php +++ b/civicrm/CRM/Core/Config.php @@ -196,10 +196,13 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge { /** * Reset the serialized array and recompute. * use with care + * + * @deprecated */ public function reset() { - $query = "UPDATE civicrm_domain SET config_backend = null"; - CRM_Core_DAO::executeQuery($query); + // This is what it used to do. However, it hasn't meant anything since 4.6. + // $query = "UPDATE civicrm_domain SET config_backend = null"; + // CRM_Core_DAO::executeQuery($query); } /** @@ -242,7 +245,7 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge { $domain = defined('CIVICRM_DOMAIN_ID') ? CIVICRM_DOMAIN_ID : 1; } - return $domain; + return (int) $domain; } /** diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index 80045ca09ae442a7c33053aadb1131a1832775b2..70fd10bc8a638277cd960052ab7370c86bc13691 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -144,6 +144,7 @@ class CRM_Core_DAO extends DB_DataObject { Civi::$statics[__CLASS__]['init'] = 1; $options = &PEAR::getStaticProperty('DB_DataObject', 'options'); $options['database'] = $dsn; + $options['quote_identifiers'] = TRUE; if (defined('CIVICRM_DAO_DEBUG')) { self::DebugLevel(CIVICRM_DAO_DEBUG); } @@ -1103,7 +1104,7 @@ FROM civicrm_domain * * @return array */ - public function fetchAll() { + public function fetchAll($k = FALSE, $v = FALSE, $method = FALSE) { $result = []; while ($this->fetch()) { $result[] = $this->toArray(); diff --git a/civicrm/CRM/Core/DAO/Address.php b/civicrm/CRM/Core/DAO/Address.php index 0354340602ce0a2715a0ab691655e1085582e448..e0619a1a47811edf2462174ae4a72e1b115f8c83 100644 --- a/civicrm/CRM/Core/DAO/Address.php +++ b/civicrm/CRM/Core/DAO/Address.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Address.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c53b9ecace9b92f598172ccd17620489) + * (GenCodeChecksum:aed8175462599ecc4c8d43887d76350a) */ /** @@ -266,13 +266,14 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { public static function &fields() { if (!isset(Civi::$statics[__CLASS__]['fields'])) { Civi::$statics[__CLASS__]['fields'] = [ - 'id' => [ + 'address_id' => [ 'name' => 'id', 'type' => CRM_Utils_Type::T_INT, 'title' => ts('Address ID'), 'description' => ts('Unique Address ID'), 'required' => TRUE, 'where' => 'civicrm_address.id', + 'export' => TRUE, 'table_name' => 'civicrm_address', 'entity' => 'Address', 'bao' => 'CRM_Core_BAO_Address', @@ -312,7 +313,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { 'is_primary' => [ 'name' => 'is_primary', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is Address Primary?'), + 'title' => ts('Primary address'), 'description' => ts('Is this the primary address.'), 'where' => 'civicrm_address.is_primary', 'default' => '0', @@ -321,7 +322,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO { 'bao' => 'CRM_Core_BAO_Address', 'localizable' => 0, 'html' => [ - 'type' => 'CheckBox', + 'type' => 'Radio', ], ], 'is_billing' => [ diff --git a/civicrm/CRM/Core/DAO/Domain.php b/civicrm/CRM/Core/DAO/Domain.php index 42569bdbc7df6be0d88beed9f96685cdb8c8599c..39c07dc6bf5519515c49b07f9ffa7bbc18d5dcba 100644 --- a/civicrm/CRM/Core/DAO/Domain.php +++ b/civicrm/CRM/Core/DAO/Domain.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Domain.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:63a7b29cbea5066fe2605191bd41226a) + * (GenCodeChecksum:cdd41aa071b68a8a4be6b28f7ca3a0a3) */ /** @@ -49,13 +49,6 @@ class CRM_Core_DAO_Domain extends CRM_Core_DAO { */ public $description; - /** - * Backend configuration. - * - * @var text - */ - public $config_backend; - /** * The civicrm version this instance is running * @@ -159,18 +152,6 @@ class CRM_Core_DAO_Domain extends CRM_Core_DAO { 'type' => 'Text', ], ], - 'config_backend' => [ - 'name' => 'config_backend', - 'type' => CRM_Utils_Type::T_TEXT, - 'title' => ts('Domain Configuration'), - 'description' => ts('Backend configuration.'), - 'where' => 'civicrm_domain.config_backend', - 'table_name' => 'civicrm_domain', - 'entity' => 'Domain', - 'bao' => 'CRM_Core_BAO_Domain', - 'localizable' => 0, - 'serialize' => self::SERIALIZE_PHP, - ], 'version' => [ 'name' => 'version', 'type' => CRM_Utils_Type::T_STRING, diff --git a/civicrm/CRM/Core/DAO/Email.php b/civicrm/CRM/Core/DAO/Email.php index 12b8173e49d071c3b9bd1a8be6cd42d437bdd7ac..083c4064dbbbb3ec123972b261bdd14e105362b6 100644 --- a/civicrm/CRM/Core/DAO/Email.php +++ b/civicrm/CRM/Core/DAO/Email.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Email.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:68301f75314731f6ee2ec37298fe49fe) + * (GenCodeChecksum:ae76175a9d3e57bc555ce90cac672e73) */ /** @@ -57,7 +57,7 @@ class CRM_Core_DAO_Email extends CRM_Core_DAO { public $email; /** - * Is this the primary? + * Is this the primary email address * * @var bool */ @@ -210,14 +210,17 @@ class CRM_Core_DAO_Email extends CRM_Core_DAO { 'is_primary' => [ 'name' => 'is_primary', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is Primary email'), - 'description' => ts('Is this the primary?'), + 'title' => ts('Primary email'), + 'description' => ts('Is this the primary email address'), 'where' => 'civicrm_email.is_primary', 'default' => '0', 'table_name' => 'civicrm_email', 'entity' => 'Email', 'bao' => 'CRM_Core_BAO_Email', 'localizable' => 0, + 'html' => [ + 'type' => 'Radio', + ], ], 'is_billing' => [ 'name' => 'is_billing', diff --git a/civicrm/CRM/Core/DAO/IM.php b/civicrm/CRM/Core/DAO/IM.php index bb07bee65becaa3b954aab19901363f260ea6bf3..9562be99bce50d7d0ccad6cf857f383467032bde 100644 --- a/civicrm/CRM/Core/DAO/IM.php +++ b/civicrm/CRM/Core/DAO/IM.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/IM.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:e09b9168fc001341138686c827deba1f) + * (GenCodeChecksum:9ea5d47a6892a28874a633ca8c5ef92c) */ /** @@ -192,7 +192,7 @@ class CRM_Core_DAO_IM extends CRM_Core_DAO { 'is_primary' => [ 'name' => 'is_primary', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is IM Primary?'), + 'title' => ts('Primary IM'), 'description' => ts('Is this the primary IM for this contact and location.'), 'where' => 'civicrm_im.is_primary', 'default' => '0', @@ -200,6 +200,9 @@ class CRM_Core_DAO_IM extends CRM_Core_DAO { 'entity' => 'IM', 'bao' => 'CRM_Core_BAO_IM', 'localizable' => 0, + 'html' => [ + 'type' => 'Radio', + ], ], 'is_billing' => [ 'name' => 'is_billing', diff --git a/civicrm/CRM/Core/DAO/OpenID.php b/civicrm/CRM/Core/DAO/OpenID.php index 4b85ea714849a7a2615f17ff41d545200827ff8c..56fc736a9c62c1230afa5614a8545e1df3e3e8b2 100644 --- a/civicrm/CRM/Core/DAO/OpenID.php +++ b/civicrm/CRM/Core/DAO/OpenID.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/OpenID.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:4ff4afe262a2f93f500559f17f096ae8) + * (GenCodeChecksum:4baa608e9caa3e118ac02d28032b8bc2) */ /** @@ -170,7 +170,7 @@ class CRM_Core_DAO_OpenID extends CRM_Core_DAO { 'is_primary' => [ 'name' => 'is_primary', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is OpenID Primary?'), + 'title' => ts('Primary ID'), 'description' => ts('Is this the primary email for this contact and location.'), 'where' => 'civicrm_openid.is_primary', 'default' => '0', @@ -178,6 +178,9 @@ class CRM_Core_DAO_OpenID extends CRM_Core_DAO { 'entity' => 'OpenID', 'bao' => 'CRM_Core_BAO_OpenID', 'localizable' => 0, + 'html' => [ + 'type' => 'Radio', + ], ], ]; CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); diff --git a/civicrm/CRM/Core/DAO/Phone.php b/civicrm/CRM/Core/DAO/Phone.php index d2c869ffc99d29294b77739bd90e51c277294930..f0b749808424e688d3fb43a0de281c9fa88dd6ec 100644 --- a/civicrm/CRM/Core/DAO/Phone.php +++ b/civicrm/CRM/Core/DAO/Phone.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Phone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8298e3f0ae875f23de4b0c6a737e94c6) + * (GenCodeChecksum:76a7202934e0d8aa7f4240c61a42e42c) */ /** @@ -175,7 +175,7 @@ class CRM_Core_DAO_Phone extends CRM_Core_DAO { 'is_primary' => [ 'name' => 'is_primary', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is Phone Primary?'), + 'title' => ts('Primary phone'), 'description' => ts('Is this the primary phone for this contact and location.'), 'where' => 'civicrm_phone.is_primary', 'default' => '0', @@ -183,6 +183,9 @@ class CRM_Core_DAO_Phone extends CRM_Core_DAO { 'entity' => 'Phone', 'bao' => 'CRM_Core_BAO_Phone', 'localizable' => 0, + 'html' => [ + 'type' => 'Radio', + ], ], 'is_billing' => [ 'name' => 'is_billing', diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index d99104c2027343099d01356a1b1771977170032f..1f0b4d40dbf2e9a81b90e1e90922469605989ca5 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -803,16 +803,19 @@ class CRM_Core_Error extends PEAR_ErrorStack { if ($e instanceof PEAR_Exception) { $ei = $e; while (is_callable([$ei, 'getCause'])) { - if ($ei->getCause() instanceof PEAR_Error) { - $msg .= '<table class="crm-db-error">'; - $msg .= sprintf('<thead><tr><th>%s</th><th>%s</th></tr></thead>', ts('Error Field'), ts('Error Value')); - $msg .= '<tbody>'; - foreach (['Type', 'Code', 'Message', 'Mode', 'UserInfo', 'DebugInfo'] as $f) { - $msg .= sprintf('<tr><td>%s</td><td>%s</td></tr>', $f, call_user_func([$ei->getCause(), "get$f"])); + // DB_ERROR doesn't have a getCause but does have a __call function which tricks is_callable. + if (!$ei instanceof DB_Error) { + if ($ei->getCause() instanceof PEAR_Error) { + $msg .= '<table class="crm-db-error">'; + $msg .= sprintf('<thead><tr><th>%s</th><th>%s</th></tr></thead>', ts('Error Field'), ts('Error Value')); + $msg .= '<tbody>'; + foreach (['Type', 'Code', 'Message', 'Mode', 'UserInfo', 'DebugInfo'] as $f) { + $msg .= sprintf('<tr><td>%s</td><td>%s</td></tr>', $f, call_user_func([$ei->getCause(), "get$f"])); + } + $msg .= '</tbody></table>'; } - $msg .= '</tbody></table>'; + $ei = $ei->getCause(); } - $ei = $ei->getCause(); } $msg .= $e->toHtml(); } @@ -835,12 +838,19 @@ class CRM_Core_Error extends PEAR_ErrorStack { $ei = $e; while (is_callable([$ei, 'getCause'])) { - if ($ei->getCause() instanceof PEAR_Error) { - foreach (['Type', 'Code', 'Message', 'Mode', 'UserInfo', 'DebugInfo'] as $f) { - $msg .= sprintf(" * ERROR %s: %s\n", strtoupper($f), call_user_func([$ei->getCause(), "get$f"])); + // DB_ERROR doesn't have a getCause but does have a __call function which tricks is_callable. + if (!$ei instanceof DB_Error) { + if ($ei->getCause() instanceof PEAR_Error) { + foreach (['Type', 'Code', 'Message', 'Mode', 'UserInfo', 'DebugInfo'] as $f) { + $msg .= sprintf(" * ERROR %s: %s\n", strtoupper($f), call_user_func([$ei->getCause(), "get$f"])); + } } + $ei = $ei->getCause(); + } + // if we have reached a DB_Error assume that is the end of the road. + else { + $ei = NULL; } - $ei = $ei->getCause(); } $msg .= self::formatBacktrace($e->getTrace()); return $msg; diff --git a/civicrm/CRM/Core/Exception/ResourceConflictException.php b/civicrm/CRM/Core/Exception/ResourceConflictException.php new file mode 100644 index 0000000000000000000000000000000000000000..c72232029558ef83226eba825d1bb62746eeff60 --- /dev/null +++ b/civicrm/CRM/Core/Exception/ResourceConflictException.php @@ -0,0 +1,42 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 5 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2019 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Exception thrown when contention over a resource causes process to abort. + * + * @param string $message + * The human friendly error message. + * @param string $error_code + * A computer friendly error code. By convention, no space (but underscore allowed). + * ex: mandatory_missing, duplicate, invalid_format + * @param array $data + * Extra params to return. eg an extra array of ids. It is not mandatory, but can help the computer using the api. + * Keep in mind the api consumer isn't to be trusted. eg. the database password is NOT a good extra data. + */ +class CRM_Core_Exception_ResourceConflictException extends \CRM_Core_Exception { + +} diff --git a/civicrm/CRM/Core/Form/EntityFormTrait.php b/civicrm/CRM/Core/Form/EntityFormTrait.php index 61b800205de26f4a18f90cc925b85510483c8485..15ff60830a797184fd2a658b2b88cbc2937a128b 100644 --- a/civicrm/CRM/Core/Form/EntityFormTrait.php +++ b/civicrm/CRM/Core/Form/EntityFormTrait.php @@ -21,7 +21,7 @@ trait CRM_Core_Form_EntityFormTrait { * * @var int */ - protected $_entitySubTypeId; + protected $_entitySubTypeId = NULL; /** * Get entity fields for the entity to be added to the form. @@ -83,17 +83,21 @@ trait CRM_Core_Form_EntityFormTrait { /** * Get the entity subtype ID being edited * - * @param $subTypeId - * * @return int|null */ - public function getEntitySubTypeId($subTypeId) { - if ($subTypeId) { - return $subTypeId; - } + public function getEntitySubTypeId() { return $this->_entitySubTypeId; } + /** + * Set the entity subtype ID being edited + * + * @param $subTypeId + */ + public function setEntitySubTypeId($subTypeId) { + $this->_entitySubTypeId = $subTypeId; + } + /** * If the custom data is in the submitted data (eg. added via ajax loaded form) add to form. */ @@ -103,7 +107,7 @@ trait CRM_Core_Form_EntityFormTrait { } $customisableEntities = CRM_Core_SelectValues::customGroupExtends(); if (isset($customisableEntities[$this->getDefaultEntity()])) { - CRM_Custom_Form_CustomData::addToForm($this); + CRM_Custom_Form_CustomData::addToForm($this, $this->getEntitySubTypeId()); } } diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php index 4dc1b95db36494e4994fd7968c28b9204eb7c4c2..66cebe8282bef5ba7c4b8c9d18eb92871c4af8ab 100644 --- a/civicrm/CRM/Core/Form/Search.php +++ b/civicrm/CRM/Core/Form/Search.php @@ -21,13 +21,6 @@ class CRM_Core_Form_Search extends CRM_Core_Form { */ protected $_force; - /** - * Name of search button - * - * @var string - */ - protected $_searchButtonName; - /** * Name of action button * diff --git a/civicrm/CRM/Core/Form/Task.php b/civicrm/CRM/Core/Form/Task.php index 879bfc6a471bbd1e5dc26dbb80193981b3b3dd49..67ca0537adce8d3db83201b93c60fee21f9583d4 100644 --- a/civicrm/CRM/Core/Form/Task.php +++ b/civicrm/CRM/Core/Form/Task.php @@ -167,8 +167,7 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form { } /** - * Simple shell that derived classes can call to add buttons to - * the form with a customized title for the main Submit + * Add buttons to the form. * * @param string $title * Title of the main button. diff --git a/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php index a76e97996dd24e3718a188732792c422cd084837..0ec70a5b1b1b4c620642c073c9dd6cf0074cb81e 100644 --- a/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Core/Form/Task/PDFLetterCommon.php @@ -131,7 +131,7 @@ class CRM_Core_Form_Task_PDFLetterCommon { $form->assign('useThisPageFormat', ts('Always use this Page Format with the new template?')); $form->assign('useSelectedPageFormat', ts('Should the new template always use the selected Page Format?')); - $form->assign('totalSelectedContacts', count($form->_contactIds)); + $form->assign('totalSelectedContacts', !is_null($form->_contactIds) ? count($form->_contactIds) : 0); $form->add('select', 'document_type', ts('Document Type'), CRM_Core_SelectValues::documentFormat()); @@ -219,6 +219,10 @@ class CRM_Core_Form_Task_PDFLetterCommon { /** * Handle the template processing part of the form + * + * @param array $formValues + * + * @return string $html_message */ public static function processTemplate(&$formValues) { $html_message = CRM_Utils_Array::value('html_message', $formValues); @@ -320,4 +324,46 @@ class CRM_Core_Form_Task_PDFLetterCommon { $message = implode($newLineOperators['p']['oper'], $htmlMsg); } + /** + * Render html from rows + * @param array $rows Array of \Civi\Token\TokenRow + * @param string $msgPart The name registered with the TokenProcessor + * @param string $formValues The values submitted through the form + * @return string + * $html if formValues['is_unit_test'] is true, otherwise outputs document to browser + * + */ + public static function renderFromRows($rows, $msgPart, $formValues) { + $html = array(); + foreach ($rows as $row) { + $html[] = $row->render($msgPart); + } + + if (!empty($formValues['is_unit_test'])) { + return $html; + } + + if (!empty($html)) { + $type = $formValues['document_type']; + + if ($type == 'pdf') { + CRM_Utils_PDF_Utils::html2pdf($html, "CiviLetter.pdf", FALSE, $formValues); + } + else { + CRM_Utils_PDF_Document::html2doc($html, "CiviLetter.$type", $formValues); + } + } + } + + /** + * List the available tokens + * @return array of token name => label + */ + public static function listTokens() { + $class = get_called_class(); + if (method_exists($class, 'createTokenProcessor')) { + return $class::createTokenProcessor()->listTokens(); + } + } + } diff --git a/civicrm/CRM/Core/I18n.php b/civicrm/CRM/Core/I18n.php index be23d592ff0ca6e440e674d393760947fa3f5e0a..1da5d28005514edabb6ab24f3bb277b4f6b82dc6 100644 --- a/civicrm/CRM/Core/I18n.php +++ b/civicrm/CRM/Core/I18n.php @@ -282,11 +282,7 @@ class CRM_Core_I18n { * @return string */ public static function getResourceDir() { - static $dir = NULL; - if ($dir === NULL) { - $dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'l10n' . DIRECTORY_SEPARATOR; - } - return $dir; + return \Civi::paths()->getPath('[civicrm.l10n]/.'); } /** @@ -424,17 +420,7 @@ class CRM_Core_I18n { // do all wildcard translations first - // FIXME: Is there a constant we can reference instead of hardcoding en_US? - $replacementsLocale = $this->locale ? $this->locale : 'en_US'; - if (!isset(Civi::$statics[__CLASS__]) || !array_key_exists($replacementsLocale, Civi::$statics[__CLASS__])) { - if (defined('CIVICRM_DSN') && !CRM_Core_Config::isUpgradeMode()) { - Civi::$statics[__CLASS__][$replacementsLocale] = CRM_Core_BAO_WordReplacement::getLocaleCustomStrings($replacementsLocale); - } - else { - Civi::$statics[__CLASS__][$replacementsLocale] = []; - } - } - $stringTable = Civi::$statics[__CLASS__][$replacementsLocale]; + $stringTable = $this->getWordReplacements(); $exactMatch = FALSE; if (isset($stringTable['enabled']['exactMatch'])) { @@ -462,7 +448,7 @@ class CRM_Core_I18n { if (isset($count) && isset($plural)) { if ($this->_phpgettext) { - $text = $this->_phpgettext->ngettext($text, $plural, $count); + $text = $this->_phpgettext->ngettext($text, $plural, (int) $count); } else { // if the locale's not set, we do ngettext work by hand @@ -741,6 +727,28 @@ class CRM_Core_I18n { return $tsLocale ? $tsLocale : 'en_US'; } + /** + * @return array + * Ex: $stringTable['enabled']['wildcardMatch']['foo'] = 'bar'; + */ + private function getWordReplacements() { + if (isset(Civi::$statics['testPreInstall'])) { + return []; + } + + // FIXME: Is there a constant we can reference instead of hardcoding en_US? + $replacementsLocale = $this->locale ? $this->locale : 'en_US'; + if ((!isset(Civi::$statics[__CLASS__]) || !array_key_exists($replacementsLocale, Civi::$statics[__CLASS__]))) { + if (defined('CIVICRM_DSN') && !CRM_Core_Config::isUpgradeMode()) { + Civi::$statics[__CLASS__][$replacementsLocale] = CRM_Core_BAO_WordReplacement::getLocaleCustomStrings($replacementsLocale); + } + else { + Civi::$statics[__CLASS__][$replacementsLocale] = []; + } + } + return Civi::$statics[__CLASS__][$replacementsLocale]; + } + } /** diff --git a/civicrm/CRM/Core/I18n/Schema.php b/civicrm/CRM/Core/I18n/Schema.php index 7f6a2918118f519bd94e08daa4b298b2cea5e456..13318083bbd0667edceda50045fa9d71e048f2a8 100644 --- a/civicrm/CRM/Core/I18n/Schema.php +++ b/civicrm/CRM/Core/I18n/Schema.php @@ -487,17 +487,17 @@ class CRM_Core_I18n_Schema { if (!in_array($dao->Field, array_keys($columns[$table])) and !preg_match('/_[a-z][a-z]_[A-Z][A-Z]$/', $dao->Field) ) { - $cols[] = $dao->Field; + $cols[] = '`' . $dao->Field . '`'; } $tableCols[] = $dao->Field; } // view intrernationalized columns through an alias foreach ($columns[$table] as $column => $_) { if (!$isUpgradeMode) { - $cols[] = "{$column}_{$locale} {$column}"; + $cols[] = "`{$column}_{$locale}` `{$column}`"; } elseif (in_array("{$column}_{$locale}", $tableCols)) { - $cols[] = "{$column}_{$locale} {$column}"; + $cols[] = "`{$column}_{$locale}` `{$column}`"; } } return "CREATE OR REPLACE VIEW {$table}_{$locale} AS SELECT " . implode(', ', $cols) . " FROM {$table}"; diff --git a/civicrm/CRM/Core/IDS.php b/civicrm/CRM/Core/IDS.php index e72afd146f3921c1014eaa149f8779713648a287..7a3eded15af81fff272faf5805dc74788c901ba5 100644 --- a/civicrm/CRM/Core/IDS.php +++ b/civicrm/CRM/Core/IDS.php @@ -103,14 +103,14 @@ class CRM_Core_IDS { public static function createBaseConfig() { $config = \CRM_Core_Config::singleton(); $tmpDir = empty($config->uploadDir) ? Civi::paths()->getVariable('civicrm.compile', 'path') : $config->uploadDir; - global $civicrm_root; + $pkgs = Civi::paths()->getVariable('civicrm.packages', 'path'); return [ 'General' => [ 'filter_type' => 'xml', - 'filter_path' => "{$civicrm_root}/packages/IDS/default_filter.xml", + 'filter_path' => "{$pkgs}/IDS/default_filter.xml", 'tmp_path' => $tmpDir, - 'HTML_Purifier_Path' => $civicrm_root . 'packages/IDS/vendors/htmlpurifier/HTMLPurifier.auto.php', + 'HTML_Purifier_Path' => $pkgs . '/IDS/vendors/htmlpurifier/HTMLPurifier.auto.php', 'HTML_Purifier_Cache' => $tmpDir, 'scan_keys' => '', 'exceptions' => ['__utmz', '__utmc'], diff --git a/civicrm/CRM/Core/InnoDBIndexer.php b/civicrm/CRM/Core/InnoDBIndexer.php index fdd401eb8da980dc5c0859645f477b1e0efda5e8..e9d26997a007fc27306a2d83a4d68265e45d4148 100644 --- a/civicrm/CRM/Core/InnoDBIndexer.php +++ b/civicrm/CRM/Core/InnoDBIndexer.php @@ -169,10 +169,17 @@ class CRM_Core_InnoDBIndexer { } // Note: this only works in MySQL 5.6, but this whole system is intended to only work in MySQL 5.6 + // Note: In MYSQL 8 the Tables have been renamed from INNODB_SYS_TABLES and INNODB_SYS_INDEXES to INNODB_TABLES and INNODB_INDEXES + $innodbTable = "innodb_sys_tables"; + $innodbIndex = "innodb_sys_indexes"; + if (version_compare($mysqlVersion, '8.0', '>=')) { + $innodbTable = "innodb_tables"; + $innodbIndex = "innodb_indexes"; + } $sql = " - SELECT i.name as index_name - FROM information_schema.innodb_sys_tables t - JOIN information_schema.innodb_sys_indexes i USING (table_id) + SELECT i.name as `index_name` + FROM information_schema.$innodbTable t + JOIN information_schema.$innodbIndex i USING (table_id) WHERE t.name = concat(database(),'/$table') AND i.name like '" . self::IDX_PREFIX . "%' "; diff --git a/civicrm/CRM/Core/Menu.php b/civicrm/CRM/Core/Menu.php index ceb7e2a98cdf98e1a5b18f8247b46d19d9de948b..f370b8cacb6b16e642f31bb5639fa8d68f7b2add 100644 --- a/civicrm/CRM/Core/Menu.php +++ b/civicrm/CRM/Core/Menu.php @@ -96,7 +96,7 @@ class CRM_Core_Menu { * @throws Exception */ public static function read($name, &$menu) { - $xml = simplexml_load_file($name); + $xml = simplexml_load_string(file_get_contents($name)); self::readXML($xml, $menu); } diff --git a/civicrm/CRM/Core/Payment/BaseIPN.php b/civicrm/CRM/Core/Payment/BaseIPN.php index 192f347e68f144e8a247f29c5a68819dc93c62b8..9ebe28db8d300727195f90fb0f788b9274e0b556 100644 --- a/civicrm/CRM/Core/Payment/BaseIPN.php +++ b/civicrm/CRM/Core/Payment/BaseIPN.php @@ -87,15 +87,7 @@ class CRM_Core_Payment_BaseIPN { */ public function validateData(&$input, &$ids, &$objects, $required = TRUE, $paymentProcessorID = NULL) { - // make sure contact exists and is valid - $contact = new CRM_Contact_BAO_Contact(); - $contact->id = $ids['contact']; - if (!$contact->find(TRUE)) { - CRM_Core_Error::debug_log_message("Could not find contact record: {$ids['contact']} in IPN request: " . print_r($input, TRUE)); - echo "Failure: Could not find contact record: {$ids['contact']}<p>"; - return FALSE; - } - + // Check if the contribution exists // make sure contribution exists and is valid $contribution = new CRM_Contribute_BAO_Contribution(); $contribution->id = $ids['contribution']; @@ -104,6 +96,29 @@ class CRM_Core_Payment_BaseIPN { echo "Failure: Could not find contribution record for {$contribution->id}<p>"; return FALSE; } + + // make sure contact exists and is valid + // use the contact id from the contribution record as the id in the IPN may not be valid anymore. + $contact = new CRM_Contact_BAO_Contact(); + $contact->id = $contribution->contact_id; + $contact->find(TRUE); + if ($contact->id != $ids['contact']) { + // If the ids do not match then it is possible the contact id in the IPN has been merged into another contact which is why we use the contact_id from the contribution + CRM_Core_Error::debug_log_message("Contact ID in IPN {$ids['contact']} not found but contact_id found in contribution {$contribution->contact_id} used instead"); + echo "WARNING: Could not find contact record: {$ids['contact']}<p>"; + $ids['contact'] = $contribution->contact_id; + } + + if (!empty($ids['contributionRecur'])) { + $contributionRecur = new CRM_Contribute_BAO_ContributionRecur(); + $contributionRecur->id = $ids['contributionRecur']; + if (!$contributionRecur->find(TRUE)) { + CRM_Core_Error::debug_log_message("Could not find contribution recur record: {$ids['ContributionRecur']} in IPN request: " . print_r($input, TRUE)); + echo "Failure: Could not find contribution recur record: {$ids['ContributionRecur']}<p>"; + return FALSE; + } + } + $contribution->receive_date = CRM_Utils_Date::isoToMysql($contribution->receive_date); $contribution->receipt_date = CRM_Utils_Date::isoToMysql($contribution->receipt_date); diff --git a/civicrm/CRM/Core/Payment/Manual.php b/civicrm/CRM/Core/Payment/Manual.php index deaff409074857dd017104edf596c6ee1f6684db..be4a171c966765259bbf8eea14ef528f87cec236 100644 --- a/civicrm/CRM/Core/Payment/Manual.php +++ b/civicrm/CRM/Core/Payment/Manual.php @@ -117,7 +117,7 @@ class CRM_Core_Payment_Manual extends CRM_Core_Payment { */ protected function getResult() { if (!$this->result) { - $this->setResult(CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'status_id', 'Pending')); + $this->setResult(CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending')); } return $this->result; } diff --git a/civicrm/CRM/Core/Payment/PaymentExpress.php b/civicrm/CRM/Core/Payment/PaymentExpress.php index 28552293feeda9e863a2fb44186cb8904f034b8e..47db6a690ca1fa4072ea3889d0619ee9b5139602 100644 --- a/civicrm/CRM/Core/Payment/PaymentExpress.php +++ b/civicrm/CRM/Core/Payment/PaymentExpress.php @@ -121,7 +121,7 @@ class CRM_Core_Payment_PaymentExpress extends CRM_Core_Payment { CRM_Core_Error::fatal(ts('Component is invalid')); } - $url = $config->userFrameworkResourceURL . "extern/pxIPN.php"; + $url = CRM_Utils_System::externUrl('extern/pxIPN'); if ($component == 'event') { $cancelURL = CRM_Utils_System::url('civicrm/event/register', diff --git a/civicrm/CRM/Core/Permission/Drupal8.php b/civicrm/CRM/Core/Permission/Drupal8.php index 8464b79b2b2a51b1c5be2a37bb4e926904562663..7596e15af313829bd8840e932def1bf918511ea8 100644 --- a/civicrm/CRM/Core/Permission/Drupal8.php +++ b/civicrm/CRM/Core/Permission/Drupal8.php @@ -92,4 +92,31 @@ class CRM_Core_Permission_Drupal8 extends CRM_Core_Permission_DrupalBase { } } + /** + * Given a roles array, check user has at least one of those roles + * + * @param array $roles_to_check + * The roles to check. An array indexed starting at 0, e.g. [0 => 'administrator'] + * + * @return bool + * true if user has at least one of the roles, else false + */ + public function checkGroupRole($roles_to_check) { + if (isset($roles_to_check)) { + + // This returns an array indexed starting at 0 of role machine names, e.g. + // [ + // 0 => 'authenticated', + // 1 => 'administrator', + // ] + // or + // [ 0 => 'anonymous' ] + $user_roles = \Drupal::currentUser()->getRoles(); + + $roles_in_both = array_intersect($user_roles, $roles_to_check); + return !empty($roles_in_both); + } + return FALSE; + } + } diff --git a/civicrm/CRM/Core/PseudoConstant.php b/civicrm/CRM/Core/PseudoConstant.php index 99316fada86608698370556b9f7a43f4c35b90a8..255594e4659fb8f5eaa5c1c91d5744c8f097a9b4 100644 --- a/civicrm/CRM/Core/PseudoConstant.php +++ b/civicrm/CRM/Core/PseudoConstant.php @@ -358,7 +358,7 @@ class CRM_Core_PseudoConstant { $i18n->localizeArray($output, $I18nParams); // Maintain sort by label if ($order == "ORDER BY %2") { - CRM_Utils_Array::asort($output); + $output = CRM_Utils_Array::asort($output); } } CRM_Utils_Hook::fieldOptions($entity, $fieldName, $output, $params); diff --git a/civicrm/CRM/Core/Report/Excel.php b/civicrm/CRM/Core/Report/Excel.php index 127f23e5c41eec47be4ad55d2b823d661f86c5fc..18749398b32545e33273330554a085314274452c 100644 --- a/civicrm/CRM/Core/Report/Excel.php +++ b/civicrm/CRM/Core/Report/Excel.php @@ -40,22 +40,10 @@ class CRM_Core_Report_Excel { $config = CRM_Core_Config::singleton(); $seperator = $config->fieldSeparator; - $enclosed = '"'; - $escaped = $enclosed; $add_character = "\015\012"; - $schema_insert = ''; - foreach ($header as $field) { - $schema_insert .= $enclosed . str_replace($enclosed, $escaped . $enclosed, stripslashes($field)) . $enclosed; - $schema_insert .= $seperator; - } - // end while - if ($outputHeader) { - // need to add PMA_exportOutputHandler functionality out here, rather than - // doing it the moronic way of assembling a buffer - $out = trim(substr($schema_insert, 0, -1)) . $add_character; - echo $out; + self::outputHeaderRow($header); } $fields_cnt = count($header); @@ -70,13 +58,14 @@ class CRM_Core_Report_Excel { else { // loic1 : always enclose fields //$value = ereg_replace("\015(\012)?", "\012", $value); + // Convert carriage return to line feed. $value = preg_replace("/\015(\012)?/", "\012", $value); if ((substr($value, 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR) && (substr($value, -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR) ) { $strArray = explode(CRM_Core_DAO::VALUE_SEPARATOR, $value); - + // Filter out empty value separated strings. foreach ($strArray as $key => $val) { if (trim($val) == '') { unset($strArray[$key]); @@ -87,7 +76,7 @@ class CRM_Core_Report_Excel { $value = &$str; } - $schema_insert .= $enclosed . str_replace($enclosed, $escaped . $enclosed, $value) . $enclosed; + $schema_insert .= '"' . str_replace('"', '""', $value) . '"'; } if ($colNo < $fields_cnt - 1) { @@ -102,6 +91,26 @@ class CRM_Core_Report_Excel { } } + /** + * Output the header row for a csv file. + * + * @param array $header + * Array of field names. + */ + public static function outputHeaderRow($header) { + $schema_insert = ''; + $separator = Civi::settings()->get('fieldSeparator'); + foreach ($header as $field) { + $schema_insert .= '"' . str_replace('"', '""', stripslashes($field)) . '"'; + $schema_insert .= $separator; + } + // end while + // need to add PMA_exportOutputHandler functionality out here, rather than + // doing it the moronic way of assembling a buffer + // We append a hex newline at the end. + echo trim(substr($schema_insert, 0, -1)) . "\015\012"; + } + /** * @param string $fileName * @param $header diff --git a/civicrm/CRM/Core/Resources.php b/civicrm/CRM/Core/Resources.php index 2c4f211c431e715d1cb074915c6fe3322d9d1bb0..99448dd0da1531e18d10a9d30cd9062f08a782c9 100644 --- a/civicrm/CRM/Core/Resources.php +++ b/civicrm/CRM/Core/Resources.php @@ -818,6 +818,19 @@ class CRM_Core_Resources { // Allow hooks to modify this list CRM_Utils_Hook::coreResourceList($items, $region); + // Oof, existing listeners would expect $items to typically begin with 'bower_components/' or 'packages/' + // (using an implicit base of `[civicrm.root]`). We preserve the hook contract and cleanup $items post-hook. + $map = [ + 'bower_components' => rtrim(Civi::paths()->getUrl('[civicrm.bower]/.', 'absolute'), '/'), + 'packages' => rtrim(Civi::paths()->getUrl('[civicrm.packages]/.', 'absolute'), '/'), + ]; + $filter = function($m) use ($map) { + return $map[$m[1]] . $m[2]; + }; + $items = array_map(function($item) use ($filter) { + return is_array($item) ? $item : preg_replace_callback(';^(bower_components|packages)(/.*);', $filter, $item); + }, $items); + return $items; } diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index 170f348a058a8f154625312f12ddaa8f054c96f5..9ebe8db0ce6f9374462a8e085c094779b48adfea 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -87,7 +87,7 @@ class CRM_Core_SelectValues { 'month' => ts('month'), 'year' => ts('year'), ]; - if ($unitType == 'duration') { + if ($unitType === 'duration') { $unitList['lifetime'] = ts('lifetime'); } return $unitList; @@ -121,10 +121,10 @@ class CRM_Core_SelectValues { */ public static function emailSelectMethods() { return [ - 'automatic' => ts("Automatic"), - 'location-only' => ts("Only send to email addresses assigned to the specified location"), - 'location-prefer' => ts("Prefer email addresses assigned to the specified location"), - 'location-exclude' => ts("Exclude email addresses assigned to the specified location"), + 'automatic' => ts('Automatic'), + 'location-only' => ts('Only send to email addresses assigned to the specified location'), + 'location-prefer' => ts('Prefer email addresses assigned to the specified location'), + 'location-exclude' => ts('Exclude email addresses assigned to the specified location'), ]; } @@ -294,7 +294,7 @@ class CRM_Core_SelectValues { * * @return array * the date array - * @throws \Exception + * @throws CRM_Core_Exception */ public static function date($type = NULL, $format = NULL, $minOffset = NULL, $maxOffset = NULL, $context = 'display') { // These options are deprecated. Definitely not used in datepicker. Possibly not even in jcalendar+addDateTime. @@ -312,7 +312,7 @@ class CRM_Core_SelectValues { $dao = new CRM_Core_DAO_PreferencesDate(); $dao->name = $type; if (!$dao->find(TRUE)) { - CRM_Core_Error::fatal(); + throw new CRM_Core_Exception('Date preferences not configured.'); } if (!$maxOffset) { $maxOffset = $dao->end; @@ -326,7 +326,7 @@ class CRM_Core_SelectValues { } if (empty($date['format'])) { - if ($context == 'Input') { + if ($context === 'Input') { $date['format'] = Civi::settings()->get('dateInputFormat'); } else { @@ -443,6 +443,27 @@ class CRM_Core_SelectValues { return $geo; } + /** + * Get options for displaying tax. + * + * @return array + * + * @throws \CRM_Core_Exception + */ + public function taxDisplayOptions() { + return [ + 'Do_not_show' => ts('Do not show breakdown, only show total - i.e %1', [ + 1 => CRM_Utils_Money::format(120), + ]), + 'Inclusive' => ts('Show [tax term] inclusive price - i.e. %1', [ + 1 => ts('%1 (includes [tax term] of %2)', [1 => CRM_Utils_Money::format(120), 2 => CRM_Utils_Money::format(20)]), + ]), + 'Exclusive' => ts('Show [tax term] exclusive price - i.e. %1', [ + 1 => ts('%1 + %2 [tax term]', [1 => CRM_Utils_Money::format(120), 2 => CRM_Utils_Money::format(20)]), + ]), + ]; + } + /** * Get the Address Standardization Providers from available plugins. * @@ -477,6 +498,7 @@ class CRM_Core_SelectValues { '{domain.address}' => ts('Domain (organization) address'), '{domain.phone}' => ts('Domain (organization) phone'), '{domain.email}' => ts('Domain (organization) email'), + '{mailing.key}' => ts('Mailing key'), '{mailing.name}' => ts('Mailing name'), '{mailing.group}' => ts('Mailing group'), '{mailing.viewUrl}' => ts('Mailing permalink'), @@ -865,7 +887,7 @@ class CRM_Core_SelectValues { * * @return array */ - public static function getSearchBuilderOperators($fieldType = NULL) { + public static function getSearchBuilderOperators() { return [ '=' => '=', '!=' => '≠', @@ -1098,6 +1120,7 @@ class CRM_Core_SelectValues { * Dropdown options for quicksearch in the menu * * @return array + * @throws \CiviCRM_API3_Exception */ public static function quicksearchOptions() { $includeEmail = civicrm_api3('setting', 'getvalue', ['name' => 'includeEmailInName', 'group' => 'Search Preferences']); diff --git a/civicrm/CRM/Core/Session.php b/civicrm/CRM/Core/Session.php index 7794ca48b61c48942ebb443f0eb4272dbeb8a69c..8cbcfdfeada0d42acd5969301bd5eac19e54f1bf 100644 --- a/civicrm/CRM/Core/Session.php +++ b/civicrm/CRM/Core/Session.php @@ -41,6 +41,13 @@ 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 @@ -88,6 +95,11 @@ 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; + } // lets initialize the _session variable just before we need it // hopefully any bootstrapping code will actually load the session from the CMS if (!isset($this->_session)) { @@ -96,17 +108,7 @@ class CRM_Core_Session { if ($isRead) { return; } - // FIXME: This belongs in CRM_Utils_System_* - if (CRM_Core_Config::singleton()->userSystem->is_drupal && function_exists('drupal_session_start')) { - // https://issues.civicrm.org/jira/browse/CRM-14356 - if (!(isset($GLOBALS['lazy_session']) && $GLOBALS['lazy_session'] == TRUE)) { - drupal_session_start(); - } - $_SESSION = []; - } - else { - session_start(); - } + CRM_Core_Config::singleton()->userSystem->sessionStart(); } $this->_session =& $_SESSION; } diff --git a/civicrm/CRM/Core/Smarty.php b/civicrm/CRM/Core/Smarty.php index c6403d59344ba8d66bb76fde82fc38be492c5a7e..ef0fc4dab07e77a69801ce21744598b9f55726c7 100644 --- a/civicrm/CRM/Core/Smarty.php +++ b/civicrm/CRM/Core/Smarty.php @@ -118,7 +118,8 @@ class CRM_Core_Smarty extends Smarty { } } - $smartyDir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'packages' . DIRECTORY_SEPARATOR . 'Smarty' . DIRECTORY_SEPARATOR; + $pkgsDir = Civi::paths()->getVariable('civicrm.packages', 'path'); + $smartyDir = $pkgsDir . DIRECTORY_SEPARATOR . 'Smarty' . DIRECTORY_SEPARATOR; $pluginsDir = __DIR__ . DIRECTORY_SEPARATOR . 'Smarty' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR; if ($customPluginsDir) { diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php b/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php index dd91bae3351030f6aa2a6f4859d277780ac4ac13..01b47198a2c38a8f1ce3f093ec7921cac778c078 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php @@ -21,14 +21,21 @@ * Determine the path of a resource file * * @param array $params + * Identify the resource by either 'ext'+'file' or 'expr'. + * * Array with keys: * - ext: string, extension name. see CRM_Core_Resources::getPath * - file: string, relative file path. see CRM_Core_Resources::getPath + * - expr: string, a dynamic path expression. See: \Civi\Core\Paths::getPath() * @param CRM_Core_Smarty $smarty * * @return string */ function smarty_function_crmResPath($params, &$smarty) { + if (!empty($params['expr'])) { + return Civi::paths()->getPath($params['expr']); + } + $res = CRM_Core_Resources::singleton(); if (!array_key_exists('ext', $params)) { $params['ext'] = 'civicrm'; diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php index 800c56997df0449cbcb231f1535179d940a0bf67..e73e67ac33ab4b975c4307b9672f3c8adc8c99cf 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php @@ -21,14 +21,21 @@ * Determine the URL of a resource file * * @param array $params + * Identify the resource by either 'ext'+'file' or 'expr'. + * * Array with keys: * - ext: string, extension name. see CRM_Core_Resources::getUrl * - file: string, relative file path. see CRM_Core_Resources::getUrl + * - expr: string, a dynamic path expression. See: \Civi\Core\Paths::getUrl() * @param CRM_Core_Smarty $smarty * * @return string */ function smarty_function_crmResURL($params, &$smarty) { + if (!empty($params['expr'])) { + return Civi::paths()->getUrl($params['expr'], 'absolute'); + } + $res = CRM_Core_Resources::singleton(); if (!array_key_exists('file', $params)) { $params['file'] = NULL; diff --git a/civicrm/CRM/Custom/Form/CustomData.php b/civicrm/CRM/Custom/Form/CustomData.php index 8bdc0d79ace599299bbaa2604c471cfc1424ae78..e502c72e15b1ffb03bfe191184ec4279f9551901 100644 --- a/civicrm/CRM/Custom/Form/CustomData.php +++ b/civicrm/CRM/Custom/Form/CustomData.php @@ -29,7 +29,7 @@ class CRM_Custom_Form_CustomData { * $params['custom'] = CRM_Core_BAO_CustomField::postProcess($submitted, $this->_id, $this->getDefaultEntity()); * * @param CRM_Core_Form $form - * @param null|string $subType values stored in civicrm_custom_group.extends_entity_column_value + * @param null|string $entitySubType values stored in civicrm_custom_group.extends_entity_column_value * e.g Student for contact type * @param null|string $subName value in civicrm_custom_group.extends_entity_column_id * @param null|int $groupCount number of entities that could have custom data @@ -37,15 +37,12 @@ class CRM_Custom_Form_CustomData { * * @throws \CRM_Core_Exception */ - public static function addToForm(&$form, $subType = NULL, $subName = NULL, $groupCount = 1, $contact_id = NULL) { + public static function addToForm(&$form, $entitySubType = NULL, $subName = NULL, $groupCount = 1, $contact_id = NULL) { $entityName = $form->getDefaultEntity(); $entityID = $form->getEntityId(); - // FIXME: If the form has been converted to use entityFormTrait then getEntitySubTypeId() will exist. - // However, if it is only partially converted (ie. we've switched customdata to use CRM_Custom_Form_CustomData) - // it won't, so we check if we have a subtype before calling the function. - $entitySubType = NULL; - if ($subType) { - $entitySubType = $form->getEntitySubTypeId($subType); + // If the form has been converted to use entityFormTrait then getEntitySubTypeId() will exist. + if (method_exists($form, 'getEntitySubTypeId') && empty($entitySubType)) { + $entitySubType = $form->getEntitySubTypeId(); } if ($form->getAction() == CRM_Core_Action::VIEW) { diff --git a/civicrm/CRM/Cxn/BAO/Cxn.php b/civicrm/CRM/Cxn/BAO/Cxn.php index 2b3372eeec2a549d3ea4a0c43064f69ca6ef355f..2fb5d0be906c710ec122406704a4b864920fe39f 100644 --- a/civicrm/CRM/Cxn/BAO/Cxn.php +++ b/civicrm/CRM/Cxn/BAO/Cxn.php @@ -29,22 +29,7 @@ class CRM_Cxn_BAO_Cxn extends CRM_Cxn_DAO_Cxn { * @return string */ public static function getSiteCallbackUrl() { - $config = CRM_Core_Config::singleton(); - - if (preg_match('/^(http|https):/', $config->resourceBase)) { - $civiUrl = $config->resourceBase; - } - else { - $civiUrl = rtrim(CRM_Utils_System::baseURL(), '/') . '/' . ltrim($config->resourceBase, '/'); - } - - // In practice, this may not be necessary, but we want to prevent - // edge-cases that downgrade security-level below system policy. - if (Civi::settings()->get('enableSSL')) { - $civiUrl = preg_replace('/^http:/', 'https:', $civiUrl); - } - - return rtrim($civiUrl, '/') . '/extern/cxn.php'; + return CRM_Utils_System::externUrl('extern/cxn', NULL, NULL, TRUE, TRUE); } /** diff --git a/civicrm/CRM/Dashlet/Page/GettingStarted.php b/civicrm/CRM/Dashlet/Page/GettingStarted.php index 7ce121fa69eaacf25d2af163cdd0369977b1ab17..f09a490f7e86944eced5c847ce8ea63f7c8ef586 100644 --- a/civicrm/CRM/Dashlet/Page/GettingStarted.php +++ b/civicrm/CRM/Dashlet/Page/GettingStarted.php @@ -72,13 +72,15 @@ class CRM_Dashlet_Page_GettingStarted extends CRM_Core_Page { * @return array */ private function _gettingStarted() { - $value = Civi::cache('community_messages')->get('dashboard_gettingStarted'); + $tsLocale = CRM_Core_I18n::getLocale(); + $key = 'dashboard_gettingStarted_' . $tsLocale; + $value = Civi::cache('community_messages')->get($key); if (!$value) { $value = $this->_getHtml($this->gettingStartedUrl()); if ($value) { - Civi::cache('community_messages')->set('dashboard_gettingStarted', $value, (60 * 60 * 24 * self::CACHE_DAYS)); + Civi::cache('community_messages')->set($key, $value, (60 * 60 * 24 * self::CACHE_DAYS)); } } diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php index 57e6156155a808805f223409a0c7a44068f2a46c..12ec5faaa539e8ebf1d0838d31e026a8750fc369 100644 --- a/civicrm/CRM/Dedupe/Merger.php +++ b/civicrm/CRM/Dedupe/Merger.php @@ -33,6 +33,7 @@ class CRM_Dedupe_Merger { $title = $userRecordUrl = ''; $config = CRM_Core_Config::singleton(); + // @todo - this user url stuff is only needed for the form layer - move to CRM_Contact_Form_Merge if ($config->userSystem->is_drupal) { $userRecordUrl = CRM_Utils_System::url('user/%ufid'); $title = ts('%1 User: %2; user id: %3', [ @@ -933,7 +934,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m */ public static function skipMerge($mainId, $otherId, &$migrationInfo, $mode = 'safe', &$conflicts = []) { - $conflicts = self::getConflicts($migrationInfo, $mainId, $otherId, $mode); + $conflicts = self::getConflicts($migrationInfo, $mainId, $otherId, $mode)['conflicts']; // A hook could have set skip_merge in order to alter merge behaviour. // This is a something we might ideally deprecate since they really 'should' // mess with the conflicts array instead. @@ -1116,189 +1117,10 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $locations = ['main' => [], 'other' => []]; foreach ($locationBlocks as $blockName => $blockInfo) { - - // Collect existing fields from both 'main' and 'other' contacts first - // This allows us to match up location/types when building the table rows - $locations['main'][$blockName] = self::buildLocationBlockForContact($mainId, $blockInfo, $blockName); - $locations['other'][$blockName] = self::buildLocationBlockForContact($otherId, $blockInfo, $blockName); - - // Now, build the table rows appropriately, based off the information on - // the 'other' contact - if (!empty($locations['other']) && !empty($locations['other'][$blockName])) { - foreach ($locations['other'][$blockName] as $count => $value) { - - $displayValue = $value[$blockInfo['displayField']]; - - // Add this value to the table rows - $rows["move_location_{$blockName}_{$count}"]['other'] = $displayValue; - - // CRM-17556 Only display 'main' contact value if it's the same location + type - // Look it up from main values... - - $lookupLocation = FALSE; - if ($blockInfo['hasLocation']) { - $lookupLocation = $value['location_type_id']; - } - - $lookupType = FALSE; - if ($blockInfo['hasType']) { - $lookupType = CRM_Utils_Array::value($blockInfo['hasType'], $value); - } - - // Hold ID of main contact's matching block - $mainContactBlockId = 0; - - if (!empty($locations['main'][$blockName])) { - foreach ($locations['main'][$blockName] as $mainValueCheck) { - // No location/type, or matching location and type - if ( - (empty($lookupLocation) || $lookupLocation == $mainValueCheck['location_type_id']) - && (empty($lookupType) || $lookupType == $mainValueCheck[$blockInfo['hasType']]) - ) { - // Set this value as the default against the 'other' contact value - $rows["move_location_{$blockName}_{$count}"]['main'] = $mainValueCheck[$blockInfo['displayField']]; - $rows["move_location_{$blockName}_{$count}"]['main_is_primary'] = $mainValueCheck['is_primary']; - $rows["move_location_{$blockName}_{$count}"]['location_entity'] = $blockName; - $mainContactBlockId = $mainValueCheck['id']; - break; - } - } - } - - // Add checkbox to migrate data from 'other' to 'main' - $elements[] = ['advcheckbox', "move_location_{$blockName}_{$count}"]; - - // Add checkbox to set the 'other' location as primary - $elements[] = [ - 'advcheckbox', - "location_blocks[$blockName][$count][set_other_primary]", - NULL, - ts('Set as primary'), - ]; - - // Flag up this field to skipMerge function (@todo: do we need to?) - $migrationInfo["move_location_{$blockName}_{$count}"] = 1; - - // Add a hidden field to store the ID of the target main contact block - $elements[] = [ - 'hidden', - "location_blocks[$blockName][$count][mainContactBlockId]", - $mainContactBlockId, - ]; - - // Setup variables - $thisTypeId = FALSE; - $thisLocId = FALSE; - - // Provide a select drop-down for the location's location type - // eg: Home, Work... - - if ($blockInfo['hasLocation']) { - - // Load the location options for this entity - $locationOptions = civicrm_api3($blockName, 'getoptions', ['field' => 'location_type_id']); - - $thisLocId = $value['location_type_id']; - - // Put this field's location type at the top of the list - $tmpIdList = $locationOptions['values']; - $defaultLocId = [$thisLocId => $tmpIdList[$thisLocId]]; - unset($tmpIdList[$thisLocId]); - - // Add the element - $elements[] = [ - 'select', - "location_blocks[$blockName][$count][locTypeId]", - NULL, - $defaultLocId + $tmpIdList, - ]; - - // Add the relevant information to the $migrationInfo - // Keep location-type-id same as that of other-contact - // @todo Check this logic out - $migrationInfo['location_blocks'][$blockName][$count]['locTypeId'] = $thisLocId; - if ($blockName != 'address') { - $elements[] = [ - 'advcheckbox', - "location_blocks[{$blockName}][$count][operation]", - NULL, - ts('Add new'), - ]; - // always use add operation - $migrationInfo['location_blocks'][$blockName][$count]['operation'] = 1; - } - - } - - // Provide a select drop-down for the location's type/provider - // eg websites: Google+, Facebook... - - if ($blockInfo['hasType']) { - - // Load the type options for this entity - $typeOptions = civicrm_api3($blockName, 'getoptions', ['field' => $blockInfo['hasType']]); - - $thisTypeId = CRM_Utils_Array::value($blockInfo['hasType'], $value); - - // Put this field's location type at the top of the list - $tmpIdList = $typeOptions['values']; - $defaultTypeId = [$thisTypeId => CRM_Utils_Array::value($thisTypeId, $tmpIdList)]; - unset($tmpIdList[$thisTypeId]); - - // Add the element - $elements[] = [ - 'select', - "location_blocks[$blockName][$count][typeTypeId]", - NULL, - $defaultTypeId + $tmpIdList, - ]; - - // Add the information to the migrationInfo - $migrationInfo['location_blocks'][$blockName][$count]['typeTypeId'] = $thisTypeId; - - } - - // Set the label for this row - $rowTitle = $blockInfo['label'] . ' ' . ($count + 1); - if (!empty($thisLocId)) { - $rowTitle .= ' (' . $locationOptions['values'][$thisLocId] . ')'; - } - if (!empty($thisTypeId)) { - $rowTitle .= ' (' . $typeOptions['values'][$thisTypeId] . ')'; - } - $rows["move_location_{$blockName}_$count"]['title'] = $rowTitle; - - } // End loop through 'other' locations of this type - - } // End if 'other' location for this type exists - + list($locations, $rows, $elements, $migrationInfo) = self::addLocationFieldInfo($mainId, $otherId, $blockInfo, $blockName, $locations, $rows, $elements, $migrationInfo); } // End loop through each location block entity // add the related tables and unset the ones that don't sport any of the duplicate contact's info - $config = CRM_Core_Config::singleton(); - $mainUfId = CRM_Core_BAO_UFMatch::getUFId($mainId); - $mainUser = NULL; - if ($mainUfId) { - // d6 compatible - if ($config->userSystem->is_drupal == '1' && function_exists($mainUser)) { - $mainUser = user_load($mainUfId); - } - elseif ($config->userFramework == 'Joomla') { - $mainUser = JFactory::getUser($mainUfId); - } - } - $otherUfId = CRM_Core_BAO_UFMatch::getUFId($otherId); - $otherUser = NULL; - if ($otherUfId) { - // d6 compatible - if ($config->userSystem->is_drupal == '1' && function_exists($mainUser)) { - $otherUser = user_load($otherUfId); - } - elseif ($config->userFramework == 'Joomla') { - $otherUser = JFactory::getUser($otherUfId); - } - } - $mergeHandler = new CRM_Dedupe_MergeHandler((int) $mainId, (int) $otherId); $relTables = $mergeHandler->getTablesRelatedToTheMergePair(); foreach ($relTables as $name => $null) { @@ -1307,18 +1129,10 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $relTables[$name]['main_url'] = str_replace('$cid', $mainId, $relTables[$name]['url']); $relTables[$name]['other_url'] = str_replace('$cid', $otherId, $relTables[$name]['url']); - if ($name == 'rel_table_users') { - $relTables[$name]['main_url'] = str_replace('%ufid', $mainUfId, $relTables[$name]['url']); - $relTables[$name]['other_url'] = str_replace('%ufid', $otherUfId, $relTables[$name]['url']); - $find = ['$ufid', '$ufname']; - if ($mainUser) { - $replace = [$mainUfId, $mainUser->name]; - $relTables[$name]['main_title'] = str_replace($find, $replace, $relTables[$name]['title']); - } - if ($otherUser) { - $replace = [$otherUfId, $otherUser->name]; - $relTables[$name]['other_title'] = str_replace($find, $replace, $relTables[$name]['title']); - } + if ($name === 'rel_table_users') { + // @todo - this user url stuff is only needed for the form layer - move to CRM_Contact_Form_Merge + $relTables[$name]['main_url'] = str_replace('%ufid', CRM_Core_BAO_UFMatch::getUFId($otherId), $relTables[$name]['url']); + $relTables[$name]['other_url'] = str_replace('%ufid', CRM_Core_BAO_UFMatch::getUFId($otherId), $relTables[$name]['url']); } if ($name == 'rel_table_memberships') { //Enable 'add new' checkbox if main contact does not contain any membership similar to duplicate contact. @@ -1354,25 +1168,24 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m ); foreach ($otherTree as $gid => $group) { - $foundField = FALSE; if (!isset($group['fields'])) { continue; } foreach ($group['fields'] as $fid => $field) { + $mainContactValue = $mainTree[$gid]['fields'][$fid]['customValue'] ?? NULL; + $otherContactValue = $otherTree[$gid]['fields'][$fid]['customValue'] ?? NULL; if (in_array($fid, $compareFields['custom'])) { - if (!$foundField) { - $rows["custom_group_$gid"]['title'] = $group['title']; - $foundField = TRUE; - } - if (!empty($mainTree[$gid]['fields'][$fid]['customValue'])) { - foreach ($mainTree[$gid]['fields'][$fid]['customValue'] as $valueId => $values) { + $rows["custom_group_$gid"]['title'] = $rows["custom_group_$gid"]['title'] ?? $group['title']; + + if ($mainContactValue) { + foreach ($mainContactValue as $valueId => $values) { $rows["move_custom_$fid"]['main'] = CRM_Core_BAO_CustomField::displayValue($values['data'], $fid); } } - $value = "null"; - if (!empty($otherTree[$gid]['fields'][$fid]['customValue'])) { - foreach ($otherTree[$gid]['fields'][$fid]['customValue'] as $valueId => $values) { + $value = 'null'; + if ($otherContactValue) { + foreach ($otherContactValue as $valueId => $values) { $rows["move_custom_$fid"]['other'] = CRM_Core_BAO_CustomField::displayValue($values['data'], $fid); if ($values['data'] === 0 || $values['data'] === '0') { $values['data'] = $qfZeroBug; @@ -1383,12 +1196,13 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $rows["move_custom_$fid"]['title'] = $field['label']; $elements[] = [ - 'advcheckbox', - "move_custom_$fid", - NULL, - NULL, - NULL, - $value, + 0 => 'advcheckbox', + 1 => "move_custom_$fid", + 2 => NULL, + 3 => NULL, + 4 => NULL, + 5 => $value, + 'is_checked' => (!isset($rows["move_custom_$fid"]['main']) || $rows["move_custom_$fid"]['main'] === ''), ]; $migrationInfo["move_custom_$fid"] = $value; } @@ -2039,6 +1853,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } $migrationInfo = []; $conflicts = []; + // Try to lock the contacts before we load the data as we don't want it changing under us. + // https://lab.civicrm.org/dev/core/issues/1355 + $locks = self::getLocksOnContacts([$mainId, $otherId]); if (!CRM_Dedupe_Merger::skipMerge($mainId, $otherId, $migrationInfo, $mode, $conflicts)) { CRM_Dedupe_Merger::moveAllBelongings($mainId, $otherId, $migrationInfo, $checkPermissions); $resultStats['merged'][] = [ @@ -2060,6 +1877,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m else { CRM_Core_BAO_PrevNextCache::deletePair($mainId, $otherId, $cacheKeyString); } + self::releaseLocks($locks); return $resultStats; } @@ -2346,13 +2164,13 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // allow hook to override / manipulate migrationInfo as well $migrationInfo = $migrationData['migration_info']; foreach ($conflicts as $key => $val) { - if ($val !== NULL || $mode !== 'safe') { - // copy over the resolved values - $migrationInfo[$key] = $val; - unset($conflicts[$key]); - } + // Copy over the resolved values. If we are in aggressive mode we update to null + // so as not to copy over. Why it's different to safe mode is a bit murky. + // Working theory is it doesn't matter what we do in safe mode here if $val is NULL. + // as the merge is not gonna happen if $val == NULL + $migrationInfo[$key] = $val ?? ($mode === 'safe' ? $migrationInfo[$key] : NULL); } - return self::formatConflictArray($conflicts, $migrationInfo['rows'], $migrationInfo['main_details']['location_blocks'], $migrationInfo['other_details']['location_blocks'], $mainId, $otherId); + return self::formatConflictArray($conflicts, $migrationInfo['rows'], $migrationInfo['main_details']['location_blocks'], $migrationInfo['other_details']['location_blocks'], $mainId, $otherId, $mode); } /** @@ -2362,12 +2180,29 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @param $toRemoveContactLocationBlocks * @param $toKeepID * @param $toRemoveID + * @param string $mode * * @return mixed * @throws \CRM_Core_Exception */ - protected static function formatConflictArray($conflicts, $migrationInfo, $toKeepContactLocationBlocks, $toRemoveContactLocationBlocks, $toKeepID, $toRemoveID) { + protected static function formatConflictArray($conflicts, $migrationInfo, $toKeepContactLocationBlocks, $toRemoveContactLocationBlocks, $toKeepID, $toRemoveID, $mode) { $return = []; + $resolved = []; + foreach ($conflicts as $key => $val) { + if ($val !== NULL) { + // copy over the resolved values + $resolved[$key] = $val; + unset($conflicts[$key]); + } + elseif ($mode === 'aggressive') { + unset($conflicts[$key]); + if (strpos($key, 'move_location_') !== 0) { + // @todo - just handling plain contact fields for now because I think I need a bigger refactor + // of the below to handle locations & will do as a follow up. + $resolved['contact'][substr($key, 5)] = $migrationInfo[$key]['main']; + } + } + } foreach (array_keys($conflicts) as $index) { if (substr($index, 0, 14) === 'move_location_') { $parts = explode('_', $index); @@ -2406,7 +2241,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m throw new CRM_Core_Exception(ts('Unknown parameter') . $index); } } - return $return; + return ['conflicts' => $return, 'resolved' => $resolved]; } /** @@ -2546,4 +2381,230 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m return $locationBlock; } + /** + * Get a lock on the given contact. + * + * The lock is like a gentleman's agreement between php & mysql. It is reserved at the + * mysql level so it works across php processes but it doesn't actually lock the database. + * + * Instead php can check the lock to see if it has been acquired before taking an action. + * + * In this case we really don't want to attempt to dedupe contacts if another process is + * trying to act on the specific contact as it could result in messy deadlocks & possibly data corruption. + * In most databases this would be a rare event but if multiple dedupe processes are running + * at once (for example) or there is also an import process in play there is potential for them to crash. + * By throwing a specific error the calling process can catch it and determine it is worth trying again later without a lot of + * noise. + * + * As of writing no other processes DO grab contact locks but it would be reasonable to consider + * grabbing them doing contact edits in general as well as imports etc. + * + * @param array $contacts + * + * @return array + * + * @throws \CRM_Core_Exception + * @throws \CRM_Core_Exception_ResourceConflictException + */ + protected static function getLocksOnContacts($contacts):array { + $locks = []; + if (!CRM_Utils_SQL::supportsMultipleLocks()) { + return $locks; + } + foreach ($contacts as $contactID) { + $lock = Civi::lockManager()->acquire("data.core.contact.{$contactID}"); + if ($lock->isAcquired()) { + $locks[] = $lock; + } + else { + self::releaseLocks($locks); + throw new CRM_Core_Exception_ResourceConflictException(ts('Contact is in Use'), 'contact_lock'); + } + } + return $locks; + } + + /** + * Release contact locks so another process can alter them if it wants. + * + * @param array $locks + */ + protected static function releaseLocks(array $locks) { + foreach ($locks as $lock) { + /* @var Civi\Core\Lock\LockInterface $lock */ + $lock->release(); + } + } + + /** + * @param $mainId + * @param $otherId + * @param $blockInfo + * @param $blockName + * @param array $locations + * @param array $rows + * @param array $elements + * @param array $migrationInfo + * + * @return array + * @throws \CiviCRM_API3_Exception + */ + protected static function addLocationFieldInfo($mainId, $otherId, $blockInfo, $blockName, array $locations, array $rows, array $elements, array $migrationInfo): array { + // Collect existing fields from both 'main' and 'other' contacts first + // This allows us to match up location/types when building the table rows + $locations['main'][$blockName] = self::buildLocationBlockForContact($mainId, $blockInfo, $blockName); + $locations['other'][$blockName] = self::buildLocationBlockForContact($otherId, $blockInfo, $blockName); + + // Now, build the table rows appropriately, based off the information on + // the 'other' contact + if (!empty($locations['other']) && !empty($locations['other'][$blockName])) { + foreach ($locations['other'][$blockName] as $count => $value) { + + $displayValue = $value[$blockInfo['displayField']]; + + // Add this value to the table rows + $rows["move_location_{$blockName}_{$count}"]['other'] = $displayValue; + + // CRM-17556 Only display 'main' contact value if it's the same location + type + // Look it up from main values... + + $lookupLocation = FALSE; + if ($blockInfo['hasLocation']) { + $lookupLocation = $value['location_type_id']; + } + + $lookupType = FALSE; + if ($blockInfo['hasType']) { + $lookupType = CRM_Utils_Array::value($blockInfo['hasType'], $value); + } + + // Hold ID of main contact's matching block + $mainContactBlockId = 0; + + if (!empty($locations['main'][$blockName])) { + foreach ($locations['main'][$blockName] as $mainValueCheck) { + // No location/type, or matching location and type + if ( + (empty($lookupLocation) || $lookupLocation == $mainValueCheck['location_type_id']) + && (empty($lookupType) || $lookupType == $mainValueCheck[$blockInfo['hasType']]) + ) { + // Set this value as the default against the 'other' contact value + $rows["move_location_{$blockName}_{$count}"]['main'] = $mainValueCheck[$blockInfo['displayField']]; + $rows["move_location_{$blockName}_{$count}"]['main_is_primary'] = $mainValueCheck['is_primary']; + $rows["move_location_{$blockName}_{$count}"]['location_entity'] = $blockName; + $mainContactBlockId = $mainValueCheck['id']; + break; + } + } + } + + // Add checkbox to migrate data from 'other' to 'main' + $elements[] = ['advcheckbox', "move_location_{$blockName}_{$count}"]; + + // Add checkbox to set the 'other' location as primary + $elements[] = [ + 'advcheckbox', + "location_blocks[$blockName][$count][set_other_primary]", + NULL, + ts('Set as primary'), + ]; + + // Flag up this field to skipMerge function (@todo: do we need to?) + $migrationInfo["move_location_{$blockName}_{$count}"] = 1; + + // Add a hidden field to store the ID of the target main contact block + $elements[] = [ + 'hidden', + "location_blocks[$blockName][$count][mainContactBlockId]", + $mainContactBlockId, + ]; + + // Setup variables + $thisTypeId = FALSE; + $thisLocId = FALSE; + + // Provide a select drop-down for the location's location type + // eg: Home, Work... + + if ($blockInfo['hasLocation']) { + + // Load the location options for this entity + $locationOptions = civicrm_api3($blockName, 'getoptions', ['field' => 'location_type_id']); + + $thisLocId = $value['location_type_id']; + + // Put this field's location type at the top of the list + $tmpIdList = $locationOptions['values']; + $defaultLocId = [$thisLocId => $tmpIdList[$thisLocId]]; + unset($tmpIdList[$thisLocId]); + + // Add the element + $elements[] = [ + 'select', + "location_blocks[$blockName][$count][locTypeId]", + NULL, + $defaultLocId + $tmpIdList, + ]; + + // Add the relevant information to the $migrationInfo + // Keep location-type-id same as that of other-contact + // @todo Check this logic out + $migrationInfo['location_blocks'][$blockName][$count]['locTypeId'] = $thisLocId; + if ($blockName != 'address') { + $elements[] = [ + 'advcheckbox', + "location_blocks[{$blockName}][$count][operation]", + NULL, + ts('Add new'), + ]; + // always use add operation + $migrationInfo['location_blocks'][$blockName][$count]['operation'] = 1; + } + + } + + // Provide a select drop-down for the location's type/provider + // eg websites: Facebook... + + if ($blockInfo['hasType']) { + + // Load the type options for this entity + $typeOptions = civicrm_api3($blockName, 'getoptions', ['field' => $blockInfo['hasType']]); + + $thisTypeId = CRM_Utils_Array::value($blockInfo['hasType'], $value); + + // Put this field's location type at the top of the list + $tmpIdList = $typeOptions['values']; + $defaultTypeId = [$thisTypeId => CRM_Utils_Array::value($thisTypeId, $tmpIdList)]; + unset($tmpIdList[$thisTypeId]); + + // Add the element + $elements[] = [ + 'select', + "location_blocks[$blockName][$count][typeTypeId]", + NULL, + $defaultTypeId + $tmpIdList, + ]; + + // Add the information to the migrationInfo + $migrationInfo['location_blocks'][$blockName][$count]['typeTypeId'] = $thisTypeId; + + } + + // Set the label for this row + $rowTitle = $blockInfo['label'] . ' ' . ($count + 1); + if (!empty($thisLocId)) { + $rowTitle .= ' (' . $locationOptions['values'][$thisLocId] . ')'; + } + if (!empty($thisTypeId)) { + $rowTitle .= ' (' . $typeOptions['values'][$thisTypeId] . ')'; + } + $rows["move_location_{$blockName}_$count"]['title'] = $rowTitle; + + } // End loop through 'other' locations of this type + + } + return [$locations, $rows, $elements, $migrationInfo]; + } + } diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index c0895185752a15ba64e0e11460ef363a37a43fb5..df78a6ac9c3cec2b742487ed4a98d7d60e206a93 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -1232,8 +1232,6 @@ WHERE civicrm_event.is_active = 1 $values['event'] ); // append invoice pdf to email - $template = CRM_Core_Smarty::singleton(); - $taxAmt = $template->get_template_vars('totalTaxAmount'); $prefixValue = Civi::settings()->get('contribution_invoice_settings'); $invoicing = CRM_Utils_Array::value('invoicing', $prefixValue); if (isset($invoicing) && isset($prefixValue['is_email_pdf']) && !empty($values['contributionId'])) { @@ -1751,7 +1749,7 @@ WHERE id = $cfID $customProfile = $additionalIDs = []; if (!$participantId) { - CRM_Core_Error::fatal(ts('Cannot find participant ID')); + throw new CRM_Core_Exception(ts('Cannot find participant ID')); } //set Ids of Primary Participant also. @@ -2350,10 +2348,13 @@ LEFT JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field // Special logic for fields whose options depend on context or properties switch ($fieldName) { case 'financial_type_id': - // Fixme - this is going to ignore context, better to get conditions, add params, and call PseudoConstant::get - return CRM_Financial_BAO_FinancialType::getIncomeFinancialType(); - - break; + // @fixme - this is going to ignore context, better to get conditions, add params, and call PseudoConstant::get + // @fixme - https://lab.civicrm.org/dev/core/issues/547 if CiviContribute not enabled this causes an invalid query + // because $relationTypeId is not set in CRM_Financial_BAO_FinancialType::getIncomeFinancialType() + if (array_key_exists('CiviEvent', CRM_Core_Component::getEnabledComponents())) { + return CRM_Financial_BAO_FinancialType::getIncomeFinancialType(); + } + return []; } return CRM_Core_PseudoConstant::get(__CLASS__, $fieldName, $params, $context); } diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index a3f432c89ef3e379da25f9577e86879cc294c0be..f134201cc436ff695a0f6d89943ca0fc1c058163 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -330,6 +330,12 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { * * @param bool $returnWaitingCount * @param bool $considerTestParticipant + * When TRUE, include participant records where is_test = 1. + * @param bool $onlyPositiveStatuses + * When FALSE, count all participant statuses where is_counted = 1. This includes + * both "Positive" participants (Registered, Attended, etc.) and waitlisted + * (and some pending) participants. + * When TRUE, count only participants with statuses of "Positive". * * @return bool|int|null|string * 1. false => If event having some empty spaces. @@ -339,7 +345,8 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { $returnEmptySeats = FALSE, $includeWaitingList = TRUE, $returnWaitingCount = FALSE, - $considerTestParticipant = FALSE + $considerTestParticipant = FALSE, + $onlyPositiveStatuses = FALSE ) { $result = NULL; if (!$eventId) { @@ -354,18 +361,16 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { $participantRoles = CRM_Event_PseudoConstant::participantRole(NULL, 'filter = 1'); $countedStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1'); + $positiveStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Positive'"); $waitingStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Waiting'"); $onWaitlistStatusId = array_search('On waitlist', $waitingStatuses); - //when we do require only waiting count don't consider counted. - if (!$returnWaitingCount && !empty($countedStatuses)) { - $allStatusIds = array_keys($countedStatuses); - } - $where = [' event.id = %1 ']; if (!$considerTestParticipant) { $where[] = ' ( participant.is_test = 0 OR participant.is_test IS NULL ) '; } + + // Only count Participant Roles with the "Counted?" flag. if (!empty($participantRoles)) { $escapedRoles = []; foreach (array_keys($participantRoles) as $participantRole) { @@ -406,8 +411,13 @@ INNER JOIN civicrm_event event ON ( event.id = participant.event_id ) } } - //consider only counted participants. - $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) '; + //Consider only counted participants, or alternatively only registered (not on waitlist) participants. + if ($onlyPositiveStatuses) { + $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($positiveStatuses)) . ' ) '; + } + else { + $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) '; + } $whereClause = ' WHERE ' . implode(' AND ', $where); $eventSeatsWhere = implode(' AND ', $where); @@ -557,6 +567,8 @@ INNER JOIN civicrm_price_field field ON ( value.price_field_id = field.id * Get the empty spaces for event those we can allocate * to pending participant to become confirm. * + * @deprecated + * * @param int $eventId * Event id. * @@ -564,42 +576,8 @@ INNER JOIN civicrm_price_field field ON ( value.price_field_id = field.id * $spaces Number of Empty Seats/null. */ public static function pendingToConfirmSpaces($eventId) { - $emptySeats = 0; - if (!$eventId) { - return $emptySeats; - } - - $positiveStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Positive'"); - $statusIds = '(' . implode(',', array_keys($positiveStatuses)) . ')'; - - $query = " - SELECT count(participant.id) as registered, - civicrm_event.max_participants - FROM civicrm_participant participant, civicrm_event - WHERE participant.event_id = {$eventId} - AND civicrm_event.id = participant.event_id - AND participant.status_id IN {$statusIds} -GROUP BY participant.event_id -"; - $dao = CRM_Core_DAO::executeQuery($query); - if ($dao->fetch()) { - - //unlimited space. - if ($dao->max_participants == NULL || $dao->max_participants <= 0) { - return NULL; - } - - //no space. - if ($dao->registered >= $dao->max_participants) { - return $emptySeats; - } - - //difference. - return $dao->max_participants - $dao->registered; - } - - //space in case no registeration yet. - return CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $eventId, 'max_participants'); + CRM_Core_Error::deprecatedFunctionWarning('CRM_Event_BAO_Participant::eventFull'); + return CRM_Event_BAO_Participant::eventFull($eventId, TRUE, FALSE, TRUE, FALSE, TRUE); } /** @@ -991,6 +969,21 @@ WHERE civicrm_participant.id = {$participantId} } } + /** + * Get the ID of the default (first) participant role + * + * @return int + * @throws \CiviCRM_API3_Exception + */ + public static function getDefaultRoleID() { + return (int) civicrm_api3('OptionValue', 'getvalue', [ + 'return' => 'value', + 'option_group_id' => 'participant_role', + 'is_active' => 1, + 'options' => ['limit' => 1, 'sort' => 'is_default DESC'], + ]); + } + /** * Get the additional participant ids. * diff --git a/civicrm/CRM/Event/BAO/Query.php b/civicrm/CRM/Event/BAO/Query.php index abf74dc0226d5664d2d0787680c6df6d81a29621..ba9a353df8df9151cf96f383d40f583a51edafc9 100644 --- a/civicrm/CRM/Event/BAO/Query.php +++ b/civicrm/CRM/Event/BAO/Query.php @@ -49,25 +49,25 @@ class CRM_Event_BAO_Query extends CRM_Core_BAO_Query { if (($query->_mode & CRM_Contact_BAO_Query::MODE_EVENT) || CRM_Contact_BAO_Query::componentPresent($query->_returnProperties, 'participant_') ) { - $query->_select['participant_id'] = "civicrm_participant.id as participant_id"; + $query->_select['participant_id'] = 'civicrm_participant.id as participant_id'; $query->_element['participant_id'] = 1; $query->_tables['civicrm_participant'] = $query->_whereTables['civicrm_participant'] = 1; //add fee level if (!empty($query->_returnProperties['participant_fee_level'])) { - $query->_select['participant_fee_level'] = "civicrm_participant.fee_level as participant_fee_level"; + $query->_select['participant_fee_level'] = 'civicrm_participant.fee_level as participant_fee_level'; $query->_element['participant_fee_level'] = 1; } //add participant contact ID if (!empty($query->_returnProperties['participant_contact_id'])) { - $query->_select['participant_contact_id'] = "civicrm_participant.contact_id as participant_contact_id"; + $query->_select['participant_contact_id'] = 'civicrm_participant.contact_id as participant_contact_id'; $query->_element['participant_contact_id'] = 1; } //add fee amount if (!empty($query->_returnProperties['participant_fee_amount'])) { - $query->_select['participant_fee_amount'] = "civicrm_participant.fee_amount as participant_fee_amount"; + $query->_select['participant_fee_amount'] = 'civicrm_participant.fee_amount as participant_fee_amount'; $query->_element['participant_fee_amount'] = 1; } @@ -471,12 +471,12 @@ class CRM_Event_BAO_Query extends CRM_Core_BAO_Query { $from = NULL; switch ($name) { case 'civicrm_participant': - $from = " LEFT JOIN civicrm_participant ON civicrm_participant.contact_id = contact_a.id "; + $from = ' LEFT JOIN civicrm_participant ON civicrm_participant.contact_id = contact_a.id '; break; case 'civicrm_event': //CRM-17121 - $from = " LEFT JOIN civicrm_event ON civicrm_participant.event_id = civicrm_event.id "; + $from = ' LEFT JOIN civicrm_event ON civicrm_participant.event_id = civicrm_event.id '; break; case 'event_type': diff --git a/civicrm/CRM/Event/Form/Participant.php b/civicrm/CRM/Event/Form/Participant.php index d0ac09656abf88e56e921bde02116cbf5fa28285..3ed5ae1a5ab28ef6e459b531c7afe9c69ac366dc 100644 --- a/civicrm/CRM/Event/Form/Participant.php +++ b/civicrm/CRM/Event/Form/Participant.php @@ -10,20 +10,31 @@ */ /** - * + * Back office participant form. * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ - * */ /** - * This class generates form components for processing a participation - * in an event + * Back office participant form. */ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment { + /** + * Participant ID - use getParticipantID. + * + * @var int + */ + public $_pId; + + /** + * ID of discount record. + * + * @var int + */ + public $_discountId; + public $useLivePageJS = TRUE; /** @@ -96,60 +107,70 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment /** * If event is paid or unpaid. + * * @var bool */ public $_isPaidEvent; /** * Page action. + * * @var int */ public $_action; /** * Role Id. + * * @var int */ protected $_roleId = NULL; /** * Event Type Id. + * * @var int */ protected $_eventTypeId = NULL; /** * Participant status Id. + * * @var int */ protected $_statusId = NULL; /** * Cache all the participant statuses. + * * @var array */ protected $_participantStatuses; /** * Participant mode. + * * @var string */ public $_mode = NULL; /** * Event ID preselect. + * * @var int */ public $_eID = NULL; /** * Line Item for Price Set. + * * @var array */ public $_lineItem = NULL; /** * Contribution mode for event registration for offline mode. + * * @var string * @deprecated */ @@ -159,30 +180,35 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment /** * Store id of role custom data type ( option value ) + * * @var int */ protected $_roleCustomDataTypeID; /** * Store id of event Name custom data type ( option value) + * * @var int */ protected $_eventNameCustomDataTypeID; /** * Selected discount id. + * * @var int */ public $_originalDiscountId = NULL; /** * Event id. + * * @var int */ public $_eventId = NULL; /** * Id of payment, if any + * * @var int */ public $_paymentId = NULL; @@ -193,6 +219,13 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment */ public $_onlinePendingContributionId = NULL; + /** + * Stored participant record. + * + * @var array + */ + protected $participantRecord; + /** * Explicitly declare the entity api name. */ @@ -210,8 +243,8 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment /** * Set variables up before form is built. * - * @return void * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function preProcess() { parent::preProcess(); @@ -365,7 +398,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment // when fee amount is included in form if (!empty($_POST['hidden_feeblock']) || !empty($_POST['send_receipt'])) { CRM_Event_Form_EventFees::preProcess($this); - self::buildEventFeeForm($this); + $this->buildEventFeeForm($this); CRM_Event_Form_EventFees::setDefaultValues($this); } @@ -587,7 +620,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $this->assign('partiallyPaidStatusId', $partiallyPaidStatusId); if ($this->_showFeeBlock) { - return self::buildEventFeeForm($this); + return $this->buildEventFeeForm($this); } //need to assign custom data type to the template @@ -973,11 +1006,17 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment * @throws \CiviCRM_API3_Exception */ public function submit($params) { + if ($this->_mode && !$this->_isPaidEvent) { + CRM_Core_Error::statusBounce(ts('Selected Event is not Paid Event ')); + } $participantStatus = CRM_Event_PseudoConstant::participantStatus(); // set the contact, when contact is selected if (!empty($params['contact_id'])) { $this->_contactID = $this->_contactId = $params['contact_id']; } + if (!$this->_priceSetId && $this->_isPaidEvent) { + CRM_Core_Error::deprecatedFunctionWarning('this should never be true, handling to be removed'); + } if ($this->_priceSetId && $isQuickConfig = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config')) { $this->_quickConfig = $isQuickConfig; } @@ -991,101 +1030,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $params['total_amount'] = CRM_Utils_Rule::cleanMoney($params['total_amount']); } if ($this->_isPaidEvent) { - - $contributionParams = ['skipCleanMoney' => TRUE]; - $lineItem = []; - $additionalParticipantDetails = []; - if (Civi::settings()->get('deferred_revenue_enabled')) { - $eventStartDate = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $this->_eventId, 'start_date'); - if (strtotime($eventStartDate) > strtotime(date('Ymt'))) { - $contributionParams['revenue_recognition_date'] = date('Ymd', strtotime($eventStartDate)); - } - } - if (($this->_id && $this->_action & CRM_Core_Action::UPDATE) && $this->_paymentId) { - $participantBAO = new CRM_Event_BAO_Participant(); - $participantBAO->id = $this->_id; - $participantBAO->find(TRUE); - $contributionParams['total_amount'] = $participantBAO->fee_amount; - - $params['discount_id'] = NULL; - //re-enter the values for UPDATE mode - $params['fee_level'] = $params['amount_level'] = $participantBAO->fee_level; - $params['fee_amount'] = $participantBAO->fee_amount; - if (isset($params['priceSetId'])) { - $lineItem[0] = CRM_Price_BAO_LineItem::getLineItems($this->_id); - } - //also add additional participant's fee level/priceset - if (CRM_Event_BAO_Participant::isPrimaryParticipant($this->_id)) { - $additionalIds = CRM_Event_BAO_Participant::getAdditionalParticipantIds($this->_id); - $hasLineItems = CRM_Utils_Array::value('priceSetId', $params, FALSE); - $additionalParticipantDetails = CRM_Event_BAO_Participant::getFeeDetails($additionalIds, - $hasLineItems - ); - } - } - else { - - // check that discount_id is set - if (empty($params['discount_id'])) { - $params['discount_id'] = 'null'; - } - - //lets carry currency, CRM-4453 - $params['fee_currency'] = $config->defaultCurrency; - if (!isset($lineItem[0])) { - $lineItem[0] = []; - } - CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], - $params, $lineItem[0] - ); - //CRM-11529 for quick config backoffice transactions - //when financial_type_id is passed in form, update the - //lineitems with the financial type selected in form - $submittedFinancialType = CRM_Utils_Array::value('financial_type_id', $params); - $isPaymentRecorded = CRM_Utils_Array::value('record_contribution', $params); - if ($isPaymentRecorded && $this->_quickConfig && $submittedFinancialType) { - foreach ($lineItem[0] as &$values) { - $values['financial_type_id'] = $submittedFinancialType; - } - } - - $params['fee_level'] = $params['amount_level']; - $contributionParams['total_amount'] = $params['amount']; - if ($this->_quickConfig && !empty($params['total_amount']) && - $params['status_id'] != array_search('Partially paid', $participantStatus) - ) { - $params['fee_amount'] = $params['total_amount']; - } - else { - //fix for CRM-3086 - $params['fee_amount'] = $params['amount']; - } - } - - if (isset($params['priceSetId'])) { - if (!empty($lineItem[0])) { - $this->set('lineItem', $lineItem); - - $this->_lineItem = $lineItem; - $lineItem = array_merge($lineItem, $additionalParticipantDetails); - - $participantCount = []; - foreach ($lineItem as $k) { - foreach ($k as $v) { - if (CRM_Utils_Array::value('participant_count', $v) > 0) { - $participantCount[] = $v['participant_count']; - } - } - } - } - if (isset($participantCount)) { - $this->assign('pricesetFieldsCount', $participantCount); - } - $this->assign('lineItem', empty($lineItem[0]) || $this->_quickConfig ? FALSE : $lineItem); - } - else { - $this->assign('amount_level', $params['amount_level']); - } + list($contributionParams, $lineItem, $additionalParticipantDetails, $params) = $this->preparePaidEventProcessing($params); } $this->_params = $params; @@ -1113,28 +1058,16 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment //participant method (addParticipant) $this->_params['participant_status_id'] = $params['status_id']; $this->_params['participant_role_id'] = is_array($params['role_id']) ? $params['role_id'] : explode(',', $params['role_id']); - $this->_params['participant_register_date'] = $params['register_date']; $roleIdWithSeparator = implode(CRM_Core_DAO::VALUE_SEPARATOR, $this->_params['participant_role_id']); $now = date('YmdHis'); if ($this->_mode) { - if (!$this->_isPaidEvent) { - CRM_Core_Error::statusBounce(ts('Selected Event is not Paid Event ')); - } - - $eventTitle - = CRM_Core_DAO::getFieldValue( - 'CRM_Event_DAO_Event', - $params['event_id'], - 'title' - ); - // set source if not set if (empty($params['source'])) { $this->_params['participant_source'] = ts('Offline Registration for Event: %2 by: %1', [ 1 => $userName, - 2 => $eventTitle, + 2 => $this->getEventValue('title'), ]); } else { @@ -1151,8 +1084,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $fields['email-Primary'] = 1; $params['email-Primary'] = $params["email-{$this->_bltID}"] = $this->_contributorEmail; - $params['register_date'] = $now; - // now set the values for the billing location. foreach ($this->_fields as $name => $dontCare) { $fields[$name] = 1; @@ -1277,10 +1208,10 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $this->_params['mode'] = $this->_mode; //add contribution record - $contributions[] = $contribution = CRM_Event_Form_Registration_Confirm::processContribution( + $contributions[] = $contribution = $this->processContribution( $this, $this->_params, $result, $contactID, - FALSE, FALSE, + FALSE, $this->_paymentProcessor ); @@ -1295,7 +1226,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment //CRM-15372 patch to fix fee amount replacing amount $this->_params['fee_amount'] = $this->_params['amount']; - $participants[] = CRM_Event_Form_Registration::addParticipant($this, $contactID); + $participants[] = $this->addParticipant($this, $this->_params, $contactID); //add custom data for participant CRM_Core_BAO_CustomValueTable::postProcess($this->_params, @@ -1338,13 +1269,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment } } - if (isset($params['event_id'])) { - $eventTitle = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', - $params['event_id'], - 'title' - ); - } - if ($this->_single) { $this->_contactIds[] = $this->_contactId; } @@ -1353,10 +1277,10 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment if (!empty($params['record_contribution'])) { if (!empty($params['id'])) { if ($this->_onlinePendingContributionId) { - $ids['contribution'] = $this->_onlinePendingContributionId; + $contributionParams['id'] = $this->_onlinePendingContributionId; } else { - $ids['contribution'] = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment', + $contributionParams['id'] = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment', $params['id'], 'contribution_id', 'participant_id' @@ -1369,7 +1293,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment if (!$this->_onlinePendingContributionId) { if (empty($params['source'])) { $contributionParams['source'] = ts('%1 : Offline registration (by %2)', [ - 1 => $eventTitle, + 1 => $this->getEventValue('title'), 2 => $userName, ]); } @@ -1428,7 +1352,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment // if multiple participants are link, consider contribution total amount as the amount Owed if ($this->_id && CRM_Event_BAO_Participant::isPrimaryParticipant($this->_id)) { $amountOwed = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', - $ids['contribution'], + $contributionParams['id'], 'total_amount' ); } @@ -1439,6 +1363,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $contributionParams['partial_payment_total'] = $amountOwed; // the actual amount paid $contributionParams['partial_amount_to_pay'] = $params['total_amount']; + $this->assign('balanceAmount', $contributionParams['partial_payment_total'] - $contributionParams['partial_amount_to_pay']); } } @@ -1447,21 +1372,17 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment } if ($this->_single) { - if (empty($ids)) { - $ids = []; - } - $contributions[] = CRM_Contribute_BAO_Contribution::create($contributionParams, $ids); + $contributions[] = CRM_Contribute_BAO_Contribution::create($contributionParams); } else { - $ids = []; foreach ($this->_contactIds as $contactID) { $contributionParams['contact_id'] = $contactID; - $contributions[] = CRM_Contribute_BAO_Contribution::create($contributionParams, $ids); + $contributions[] = CRM_Contribute_BAO_Contribution::create($contributionParams); } } // Insert payment record for this participant - if (empty($ids['contribution'])) { + if (empty($contributionParams['id'])) { foreach ($this->_contactIds as $num => $contactID) { $participantPaymentParams = [ 'participant_id' => $participants[$num]->id, @@ -1504,10 +1425,14 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $lineItem[$this->_priceSetId][$lineKey] = $line; } CRM_Price_BAO_LineItem::processPriceSet($participants[$num]->id, $lineItem, CRM_Utils_Array::value($num, $contributions, NULL), 'civicrm_participant'); - CRM_Contribute_BAO_Contribution::addPayments($contributions); } } } + foreach ($contributions as $contribution) { + if ('Partially paid' === CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contribution->contribution_status_id)) { + CRM_Contribute_BAO_Contribution::addPayments($contribution); + } + } } $updateStatusMsg = NULL; @@ -1525,53 +1450,11 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $sent = []; $notSent = []; if (!empty($params['send_receipt'])) { - if (array_key_exists($params['from_email_address'], $this->_fromEmails['from_email_id'])) { - $receiptFrom = $params['from_email_address']; - } $this->assign('module', 'Event Registration'); - //use of the message template below requires variables in different format - $event = $events = []; - $returnProperties = ['event_type_id', 'fee_label', 'start_date', 'end_date', 'is_show_location', 'title']; - - //get all event details. - CRM_Core_DAO::commonRetrieveAll('CRM_Event_DAO_Event', 'id', $params['event_id'], $events, $returnProperties); - $event = $events[$params['event_id']]; - unset($event['start_date']); - unset($event['end_date']); - - $role = CRM_Event_PseudoConstant::participantRole(); - $participantRoles = CRM_Utils_Array::value('role_id', $params); - if (is_array($participantRoles)) { - $selectedRoles = []; - foreach ($participantRoles as $roleId) { - $selectedRoles[] = $role[$roleId]; - } - $event['participant_role'] = implode(', ', $selectedRoles); - } - else { - $event['participant_role'] = CRM_Utils_Array::value($participantRoles, $role); - } - $event['is_monetary'] = $this->_isPaidEvent; - - if ($params['receipt_text']) { - $event['confirm_email_text'] = $params['receipt_text']; - } - + $this->assignEventDetailsToTpl($params['event_id'], CRM_Utils_Array::value('role_id', $params), CRM_Utils_Array::value('receipt_text', $params), $this->_isPaidEvent); $this->assign('isAmountzero', 1); - $this->assign('event', $event); - - $this->assign('isShowLocation', $event['is_show_location']); - if (CRM_Utils_Array::value('is_show_location', $event) == 1) { - $locationParams = [ - 'entity_id' => $params['event_id'], - 'entity_table' => 'civicrm_event', - ]; - $location = CRM_Core_BAO_Location::getValues($locationParams, TRUE); - $this->assign('location', $location); - } - $status = CRM_Event_PseudoConstant::participantStatus(); if ($this->_isPaidEvent) { $paymentInstrument = CRM_Contribute_PseudoConstant::paymentInstrument(); if (!$this->_mode) { @@ -1585,11 +1468,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment } $this->assign('totalAmount', $contributionParams['total_amount']); - if (isset($contributionParams['partial_payment_total'])) { - // balance amount - $balanceAmount = $contributionParams['partial_payment_total'] - $contributionParams['partial_amount_to_pay']; - $this->assign('balanceAmount', $balanceAmount); - } $this->assign('isPrimary', 1); $this->assign('checkNumber', CRM_Utils_Array::value('check_number', $params)); } @@ -1705,6 +1583,9 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment // try to send emails only if email id is present // and the do-not-email option is not checked for that contact if ($this->_contributorEmail and !$this->_toDoNotEmail) { + if (array_key_exists($params['from_email_address'], $this->_fromEmails['from_email_id'])) { + $receiptFrom = $params['from_email_address']; + } $sendTemplateParams['from'] = $receiptFrom; $sendTemplateParams['toName'] = $this->_contributorDisplayName; $sendTemplateParams['toEmail'] = $this->_contributorEmail; @@ -1807,33 +1688,21 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment /** * Build the form object. * - * @param CRM_Core_Form $form + * @param \CRM_Event_Form_Participant $form * * @return bool * @throws \CRM_Core_Exception * @throws \Exception */ - public static function buildEventFeeForm(&$form) { + public function buildEventFeeForm($form) { if ($form->_eventId) { $form->_isPaidEvent = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $form->_eventId, 'is_monetary'); if ($form->_isPaidEvent) { $form->addElement('hidden', 'hidden_feeblock', 1); } - // make sure this is for backoffice registration. - if ($form->getName() == 'Participant') { - $eventfullMsg = CRM_Event_BAO_Participant::eventFullMessage($form->_eventId, $form->_pId); - $form->addElement('hidden', 'hidden_eventFullMsg', $eventfullMsg, ['id' => 'hidden_eventFullMsg']); - } - } - - if ($form->_pId) { - if (CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment', - $form->_pId, 'contribution_id', 'participant_id' - ) - ) { - $form->_online = !$form->isBackOffice; - } + $eventfullMsg = CRM_Event_BAO_Participant::eventFullMessage($form->_eventId, $this->getParticipantID()); + $form->addElement('hidden', 'hidden_eventFullMsg', $eventfullMsg, ['id' => 'hidden_eventFullMsg']); } if ($form->_isPaidEvent) { @@ -1873,10 +1742,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment FALSE, ['class' => "crm-select2"] ); - - if ($form->_online) { - $element->freeze(); - } } if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && !CRM_Utils_Array::value('fee', $form->_values) @@ -1971,4 +1836,404 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment $form->assign('hasPayment', $form->_paymentId); } + /** + * Extracted code relating to paid events. + * + * @param $params + * + * @return array + * + * @throws \CiviCRM_API3_Exception + */ + protected function preparePaidEventProcessing($params): array { + $participantStatus = CRM_Event_PseudoConstant::participantStatus(); + $contributionParams = [ + 'skipCleanMoney' => TRUE, + 'revenue_recognition_date' => $this->getRevenueRecognitionDate(), + ]; + $lineItem = []; + $additionalParticipantDetails = []; + + if ($this->isPaymentOnExistingContribution()) { + $contributionParams['total_amount'] = $this->getParticipantValue('fee_amount'); + + $params['discount_id'] = NULL; + //re-enter the values for UPDATE mode + $params['fee_level'] = $params['amount_level'] = $this->getParticipantValue('fee_level'); + $params['fee_amount'] = $this->getParticipantValue('fee_amount'); + if (isset($params['priceSetId'])) { + $lineItem[0] = CRM_Price_BAO_LineItem::getLineItems($this->_id); + } + //also add additional participant's fee level/priceset + if (CRM_Event_BAO_Participant::isPrimaryParticipant($this->_id)) { + $additionalIds = CRM_Event_BAO_Participant::getAdditionalParticipantIds($this->_id); + $hasLineItems = CRM_Utils_Array::value('priceSetId', $params, FALSE); + $additionalParticipantDetails = CRM_Event_BAO_Participant::getFeeDetails($additionalIds, + $hasLineItems + ); + } + } + else { + + // check that discount_id is set + if (empty($params['discount_id'])) { + $params['discount_id'] = 'null'; + } + + //lets carry currency, CRM-4453 + $params['fee_currency'] = CRM_Core_Config::singleton()->defaultCurrency; + if (!isset($lineItem[0])) { + $lineItem[0] = []; + } + CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], + $params, $lineItem[0] + ); + //CRM-11529 for quick config backoffice transactions + //when financial_type_id is passed in form, update the + //lineitems with the financial type selected in form + $submittedFinancialType = CRM_Utils_Array::value('financial_type_id', $params); + $isPaymentRecorded = CRM_Utils_Array::value('record_contribution', $params); + if ($isPaymentRecorded && $this->_quickConfig && $submittedFinancialType) { + foreach ($lineItem[0] as &$values) { + $values['financial_type_id'] = $submittedFinancialType; + } + } + + $params['fee_level'] = $params['amount_level']; + $contributionParams['total_amount'] = $params['amount']; + if ($this->_quickConfig && !empty($params['total_amount']) && + $params['status_id'] != array_search('Partially paid', $participantStatus) + ) { + $params['fee_amount'] = $params['total_amount']; + } + else { + //fix for CRM-3086 + $params['fee_amount'] = $params['amount']; + } + } + + if (isset($params['priceSetId'])) { + if (!empty($lineItem[0])) { + $this->set('lineItem', $lineItem); + + $this->_lineItem = $lineItem; + $lineItem = array_merge($lineItem, $additionalParticipantDetails); + + $participantCount = []; + foreach ($lineItem as $k) { + foreach ($k as $v) { + if (CRM_Utils_Array::value('participant_count', $v) > 0) { + $participantCount[] = $v['participant_count']; + } + } + } + } + if (isset($participantCount)) { + $this->assign('pricesetFieldsCount', $participantCount); + } + $this->assign('lineItem', empty($lineItem[0]) || $this->_quickConfig ? FALSE : $lineItem); + } + else { + $this->assign('amount_level', $params['amount_level']); + } + return [$contributionParams, $lineItem, $additionalParticipantDetails, $params]; + } + + /** + * @param $eventID + * @param $participantRoles + * @param $receiptText + * @param $isPaidEvent + * + * @return void + */ + protected function assignEventDetailsToTpl($eventID, $participantRoles, $receiptText, $isPaidEvent) { + //use of the message template below requires variables in different format + $events = []; + $returnProperties = ['event_type_id', 'fee_label', 'start_date', 'end_date', 'is_show_location', 'title']; + + //get all event details. + CRM_Core_DAO::commonRetrieveAll('CRM_Event_DAO_Event', 'id', $eventID, $events, $returnProperties); + $event = $events[$eventID]; + unset($event['start_date']); + unset($event['end_date']); + + $role = CRM_Event_PseudoConstant::participantRole(); + + if (is_array($participantRoles)) { + $selectedRoles = []; + foreach ($participantRoles as $roleId) { + $selectedRoles[] = $role[$roleId]; + } + $event['participant_role'] = implode(', ', $selectedRoles); + } + else { + $event['participant_role'] = CRM_Utils_Array::value($participantRoles, $role); + } + $event['is_monetary'] = $isPaidEvent; + + if ($receiptText) { + $event['confirm_email_text'] = $receiptText; + } + $this->assign('event', $event); + $this->assign('isShowLocation', $event['is_show_location']); + if (CRM_Utils_Array::value('is_show_location', $event) == 1) { + $locationParams = [ + 'entity_id' => $eventID, + 'entity_table' => 'civicrm_event', + ]; + $location = CRM_Core_BAO_Location::getValues($locationParams, TRUE); + $this->assign('location', $location); + } + } + + /** + * Process the contribution. + * + * @param CRM_Core_Form $form + * @param array $params + * @param array $result + * @param int $contactID + * @param bool $pending + * @param array $paymentProcessor + * + * @return \CRM_Contribute_BAO_Contribution + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + public function processContribution( + &$form, $params, $result, $contactID, + $pending = FALSE, + $paymentProcessor = NULL + ) { + $transaction = new CRM_Core_Transaction(); + + $now = date('YmdHis'); + $receiptDate = NULL; + + if (!empty($form->_values['event']['is_email_confirm'])) { + $receiptDate = $now; + } + + // CRM-20264: fetch CC type ID and number (last 4 digit) and assign it back to $params + CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($params); + + $contribParams = [ + 'contact_id' => $contactID, + 'financial_type_id' => !empty($form->_values['event']['financial_type_id']) ? $form->_values['event']['financial_type_id'] : $params['financial_type_id'], + 'receive_date' => $now, + 'total_amount' => $params['amount'], + 'tax_amount' => $params['tax_amount'], + 'amount_level' => $params['amount_level'], + 'invoice_id' => $params['invoiceID'], + 'currency' => $params['currencyID'], + 'source' => !empty($params['participant_source']) ? $params['participant_source'] : $params['description'], + 'is_pay_later' => CRM_Utils_Array::value('is_pay_later', $params, 0), + 'campaign_id' => CRM_Utils_Array::value('campaign_id', $params), + 'card_type_id' => CRM_Utils_Array::value('card_type_id', $params), + 'pan_truncation' => CRM_Utils_Array::value('pan_truncation', $params), + ]; + + if ($paymentProcessor) { + $contribParams['payment_instrument_id'] = $paymentProcessor['payment_instrument_id']; + $contribParams['payment_processor'] = $paymentProcessor['id']; + } + + if (!$pending && $result) { + $contribParams += [ + 'fee_amount' => CRM_Utils_Array::value('fee_amount', $result), + 'trxn_id' => $result['trxn_id'], + 'receipt_date' => $receiptDate, + ]; + } + + $allStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); + $contribParams['contribution_status_id'] = array_search('Completed', $allStatuses); + if ($pending) { + $contribParams['contribution_status_id'] = array_search('Pending', $allStatuses); + } + + $contribParams['is_test'] = 0; + if ($form->_action & CRM_Core_Action::PREVIEW || CRM_Utils_Array::value('mode', $params) == 'test') { + $contribParams['is_test'] = 1; + } + + if (!empty($contribParams['invoice_id'])) { + $contribParams['id'] = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', + $contribParams['invoice_id'], + 'id', + 'invoice_id' + ); + } + $contribParams['revenue_recognition_date'] = $this->getRevenueRecognitionDate(); + + //create an contribution address + // The concept of contributeMode is deprecated. Elsewhere we use the function processBillingAddress() - although + // currently that is only inherited by back-office forms. + if ($form->_contributeMode != 'notify' && empty($params['is_pay_later'])) { + $contribParams['address_id'] = CRM_Contribute_BAO_Contribution::createAddress($params, $form->_bltID); + } + + $contribParams['skipLineItem'] = 1; + $contribParams['skipCleanMoney'] = 1; + // create contribution record + $contribution = CRM_Contribute_BAO_Contribution::add($contribParams); + // CRM-11124 + CRM_Event_BAO_Participant::createDiscountTrxn($form->_eventId, $contribParams, NULL, CRM_Price_BAO_PriceSet::parseFirstPriceSetValueIDFromParams($params)); + + // process soft credit / pcp pages + if (!empty($params['pcp_made_through_id'])) { + CRM_Contribute_BAO_ContributionSoft::formatSoftCreditParams($params, $form); + CRM_Contribute_BAO_ContributionSoft::processSoftContribution($params, $contribution); + } + + $transaction->commit(); + + return $contribution; + } + + /** + * Process the participant. + * + * @param CRM_Core_Form $form + * @param array $params + * @param int $contactID + * + * @return \CRM_Event_BAO_Participant + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected function addParticipant(&$form, $params, $contactID) { + $transaction = new CRM_Core_Transaction(); + + $participantFields = CRM_Event_DAO_Participant::fields(); + $participantParams = [ + 'id' => CRM_Utils_Array::value('participant_id', $params), + 'contact_id' => $contactID, + 'event_id' => $form->_eventId ? $form->_eventId : $params['event_id'], + 'status_id' => CRM_Utils_Array::value('participant_status', + $params, 1 + ), + 'role_id' => CRM_Utils_Array::value('participant_role_id', $params) ?: CRM_Event_BAO_Participant::getDefaultRoleID(), + 'register_date' => $params['register_date'], + 'source' => CRM_Utils_String::ellipsify( + isset($params['participant_source']) ? CRM_Utils_Array::value('participant_source', $params) : CRM_Utils_Array::value('description', $params), + $participantFields['participant_source']['maxlength'] + ), + 'fee_level' => CRM_Utils_Array::value('amount_level', $params), + 'is_pay_later' => CRM_Utils_Array::value('is_pay_later', $params, 0), + 'fee_amount' => CRM_Utils_Array::value('fee_amount', $params), + 'registered_by_id' => CRM_Utils_Array::value('registered_by_id', $params), + 'discount_id' => CRM_Utils_Array::value('discount_id', $params), + 'fee_currency' => CRM_Utils_Array::value('currencyID', $params), + 'campaign_id' => CRM_Utils_Array::value('campaign_id', $params), + ]; + + if ($form->_action & CRM_Core_Action::PREVIEW || CRM_Utils_Array::value('mode', $params) == 'test') { + $participantParams['is_test'] = 1; + } + else { + $participantParams['is_test'] = 0; + } + + if (!empty($form->_params['note'])) { + $participantParams['note'] = $form->_params['note']; + } + elseif (!empty($form->_params['participant_note'])) { + $participantParams['note'] = $form->_params['participant_note']; + } + + // reuse id if one already exists for this one (can happen + // with back button being hit etc) + if (!$participantParams['id'] && !empty($params['contributionID'])) { + $pID = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment', + $params['contributionID'], + 'participant_id', + 'contribution_id' + ); + $participantParams['id'] = $pID; + } + $participantParams['discount_id'] = CRM_Core_BAO_Discount::findSet($form->_eventId, 'civicrm_event'); + + if (!$participantParams['discount_id']) { + $participantParams['discount_id'] = "null"; + } + + $participant = CRM_Event_BAO_Participant::create($participantParams); + + $transaction->commit(); + + return $participant; + } + + /** + * Is a payment being made on an existing contribution. + * + * Note + * 1) ideally we should not permit this on this form! Perhaps we don't & this is just cruft. + * 2) _paymentID is the contribution id. + * + * @return bool + */ + protected function isPaymentOnExistingContribution(): bool { + return ($this->getParticipantID() && $this->_action & CRM_Core_Action::UPDATE) && $this->_paymentId; + } + + /** + * Get the value for a field relating to the event. + * + * @param string $fieldName + * + * @return mixed + * @throws \CiviCRM_API3_Exception + */ + protected function getEventValue(string $fieldName) { + if (!isset($this->_event)) { + $this->_event = civicrm_api3('Event', 'getsingle', ['id' => $this->_eventId]); + } + return $this->_event[$fieldName]; + } + + /** + * Get a value from the existing participant record (applies to edits). + * + * @param string $fieldName + * + * @return array + * @throws \CiviCRM_API3_Exception + */ + protected function getParticipantValue($fieldName) { + if (!$this->participantRecord) { + $this->participantRecord = civicrm_api3('Participant', 'getsingle', ['id' => $this->_id]); + } + return $this->participantRecord[$fieldName] ?? $this->participantRecord['participant_' . $fieldName]; + } + + /** + * Get id of participant being edited. + * + * @return int|null + */ + protected function getParticipantID() { + return $this->_id ?? $this->_pId; + } + + /** + * Get the value for the revenue recognition date field. + * + * @return string + * + * @throws \CiviCRM_API3_Exception + */ + protected function getRevenueRecognitionDate() { + if (Civi::settings()->get('deferred_revenue_enabled')) { + $eventStartDate = $this->getEventValue('start_date'); + if (strtotime($eventStartDate) > strtotime(date('Ymt'))) { + return date('Ymd', strtotime($eventStartDate)); + } + } + return ''; + } + } diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 69a3d54a61caee4127be8ed2376c710eea6e9941..f6a19f5d864954ab74b9cc86f605c382fdf71958 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -692,7 +692,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { } // add participant record - $participant = CRM_Event_Form_Registration::addParticipant($this, $contactID); + $participant = $this->addParticipant($this, $contactID); $this->_participantIDS[] = $participant->id; //setting register_by_id field and primaryContactId @@ -778,10 +778,11 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { * @return \CRM_Event_BAO_Participant * @throws \CiviCRM_API3_Exception */ - public static function addParticipant(&$form, $contactID) { + protected function addParticipant(&$form, $contactID) { if (empty($form->_params)) { return NULL; } + // Note this used to be shared with the backoffice form & no longer is, some code may no longer be required. $params = $form->_params; $transaction = new CRM_Core_Transaction(); @@ -805,7 +806,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { 'status_id' => CRM_Utils_Array::value('participant_status', $params, 1 ), - 'role_id' => CRM_Utils_Array::value('participant_role_id', $params) ?: self::getDefaultRoleID(), + 'role_id' => CRM_Utils_Array::value('participant_role_id', $params) ?: CRM_Event_BAO_Participant::getDefaultRoleID(), 'register_date' => ($registerDate) ? $registerDate : date('YmdHis'), 'source' => CRM_Utils_String::ellipsify( isset($params['participant_source']) ? CRM_Utils_Array::value('participant_source', $params) : CRM_Utils_Array::value('description', $params), @@ -857,21 +858,6 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { return $participant; } - /** - * Get the ID of the default (first) participant role - * - * @return int - * @throws \CiviCRM_API3_Exception - */ - private static function getDefaultRoleID() { - return (int) civicrm_api3('OptionValue', 'getvalue', [ - 'return' => "value", - 'option_group_id' => "participant_role", - 'is_active' => 1, - 'options' => ['limit' => 1, 'sort' => "is_default DESC"], - ]); - } - /** * Calculate the total participant count as per params. * diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php index 230001b9b6264dac15224d1ad7d7a18c27a8d0a9..735679d5793f335eed8e67f3580520d3ca5a1da7 100644 --- a/civicrm/CRM/Event/Form/Registration/Confirm.php +++ b/civicrm/CRM/Event/Form/Registration/Confirm.php @@ -553,7 +553,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { list($result, $value) = $this->processPayment($payment, $value); } else { - CRM_Core_Error::fatal($paymentObjError); + throw new CRM_Core_Exception($paymentObjError); } } @@ -576,13 +576,12 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { // if paid event add a contribution record //if primary participant contributing additional amount //append (multiple participants) to its fee level. CRM-4196. - $isAdditionalAmount = FALSE; if (count($params) > 1) { - $isAdditionalAmount = TRUE; + $value['amount_level'] .= ts(' (multiple participants)') . CRM_Core_DAO::VALUE_SEPARATOR; } //passing contribution id is already registered. - $contribution = self::processContribution($this, $value, $result, $contactID, $pending, $isAdditionalAmount, $this->_paymentProcessor); + $contribution = $this->processContribution($this, $value, $result, $contactID, $pending, $this->_paymentProcessor); $value['contributionID'] = $contribution->id; $value['contributionTypeID'] = $contribution->financial_type_id; $value['receive_date'] = $contribution->receive_date; @@ -794,7 +793,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { $this->processPayment($payment, $primaryParticipant); } else { - CRM_Core_Error::fatal($paymentObjError); + throw new CRM_Core_Exception($paymentObjError); } } } @@ -904,7 +903,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { * @param array $result * @param int $contactID * @param bool $pending - * @param bool $isAdditionalAmount * @param array $paymentProcessor * * @return \CRM_Contribute_BAO_Contribution @@ -912,11 +910,12 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function processContribution( + protected function processContribution( &$form, $params, $result, $contactID, - $pending = FALSE, $isAdditionalAmount = FALSE, + $pending = FALSE, $paymentProcessor = NULL ) { + // Note this used to be shared with the backoffice form & no longer is, some code may no longer be required. $transaction = new CRM_Core_Transaction(); $now = date('YmdHis'); @@ -925,10 +924,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { if (!empty($form->_values['event']['is_email_confirm'])) { $receiptDate = $now; } - //CRM-4196 - if ($isAdditionalAmount) { - $params['amount_level'] = $params['amount_level'] . ts(' (multiple participants)') . CRM_Core_DAO::VALUE_SEPARATOR; - } // CRM-20264: fetch CC type ID and number (last 4 digit) and assign it back to $params CRM_Contribute_Form_AbstractEditPayment::formatCreditCardDetails($params); diff --git a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php index 89fa02985bf296e4e6612cc9361e1a4443aaf1a8..6c23fce62082c6485a651619290441562f2ae925 100644 --- a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php +++ b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php @@ -98,7 +98,7 @@ class CRM_Event_Form_Registration_ParticipantConfirm extends CRM_Event_Form_Regi //need to confirm that though participant confirming //registration - but is there enough space to confirm. - $emptySeats = CRM_Event_BAO_Participant::pendingToConfirmSpaces($this->_eventId); + $emptySeats = CRM_Event_BAO_Participant::eventFull($this->_eventId, TRUE, FALSE, TRUE, FALSE, TRUE); $additonalIds = CRM_Event_BAO_Participant::getAdditionalParticipantIds($this->_participantId); $requireSpace = 1 + count($additonalIds); if ($emptySeats !== NULL && ($requireSpace > $emptySeats)) { diff --git a/civicrm/CRM/Event/Form/Registration/Register.php b/civicrm/CRM/Event/Form/Registration/Register.php index 4065bed5db3922df38db4bcfda60d6ad6aa1bd95..be483125d794c71b4cf4cbe4836d26cc92671c69 100644 --- a/civicrm/CRM/Event/Form/Registration/Register.php +++ b/civicrm/CRM/Event/Form/Registration/Register.php @@ -1186,7 +1186,8 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { } $participant->is_test = 0; $participant->find(); - $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1'); + // Event#30 - Anyone whose status type has `is_counted` OR is on the waitlist should be considered as registered. + $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1') + CRM_Event_PseudoConstant::participantStatus(NULL, "name = 'On waitlist'"); while ($participant->fetch()) { if (array_key_exists($participant->status_id, $statusTypes)) { if (!$isAdditional && !$form->_values['event']['allow_same_participant_emails']) { @@ -1196,8 +1197,9 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration { if ($form->_pcpId) { $registerUrl .= '&pcpId=' . $form->_pcpId; } - - $status = ts("It looks like you are already registered for this event. If you want to change your registration, or you feel that you've received this message in error, please contact the site administrator.") . ' ' . ts('You can also <a href="%1">register another participant</a>.', [1 => $registerUrl]); + $registrationType = (CRM_Event_PseudoConstant::getKey('CRM_Event_BAO_Participant', 'participant_status_id', 'On waitlist') == $participant->status_id) ? 'waitlisted' : 'registered'; + $status = ts("It looks like you are already %1 for this event. If you want to change your registration, or you feel that you've received this message in error, please contact the site administrator.", [1 => $registrationType]); + $status .= ' ' . ts('You can also <a href="%1">register another participant</a>.', [1 => $registerUrl]); CRM_Core_Session::singleton()->setStatus($status, ts('Oops.'), 'alert'); $url = CRM_Utils_System::url('civicrm/event/info', "reset=1&id={$form->_values['event']['id']}&noFullMsg=true" diff --git a/civicrm/CRM/Event/Form/Search.php b/civicrm/CRM/Event/Form/Search.php index 6c2c7534b428425ab75da77664bfc3a00c489926..d1d0c9cdf81d3b74e25499699531b3df0bdae421 100644 --- a/civicrm/CRM/Event/Form/Search.php +++ b/civicrm/CRM/Event/Form/Search.php @@ -84,7 +84,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { /** * set the button names */ - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; @@ -100,7 +99,7 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { $this->_context ); $prefix = NULL; - if ($this->_context == 'user') { + if ($this->_context === 'user') { $prefix = $this->_prefix; } @@ -127,6 +126,7 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { * @return void * * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function buildQuickForm() { parent::buildQuickForm(); @@ -302,8 +302,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { return; } - $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues, 0, FALSE, NULL, ['event_id']); - $selector = new CRM_Event_Selector_Search($this->_queryParams, $this->_action, NULL, @@ -439,6 +437,7 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search { * * @return array * the default array reference + * @throws \CRM_Core_Exception */ public function setDefaultValues() { $this->_defaults = array_merge(parent::setDefaultValues(), (array) $this->_formValues); diff --git a/civicrm/CRM/Event/Page/EventInfo.php b/civicrm/CRM/Event/Page/EventInfo.php index c2410b7670fe86984430a9fbfb167bb08537a46e..664105fabea172ef438892b604804465ee88174f 100644 --- a/civicrm/CRM/Event/Page/EventInfo.php +++ b/civicrm/CRM/Event/Page/EventInfo.php @@ -338,7 +338,7 @@ class CRM_Event_Page_EventInfo extends CRM_Core_Page { } $this->assign('location', $values['location']); - if (CRM_Core_Permission::check('access CiviEvent')) { + if (CRM_Core_Permission::check(['access CiviEvent', 'edit all events'])) { $enableCart = Civi::settings()->get('enable_cart'); $this->assign('manageEventLinks', CRM_Event_Page_ManageEvent::tabs($enableCart)); } diff --git a/civicrm/CRM/Export/BAO/Export.php b/civicrm/CRM/Export/BAO/Export.php index 0c4e50c844b19a77288cb28514b5b97c432023cc..5ddf6cb6798982e5e41cc8d4a47462ecfe3e6ae7 100644 --- a/civicrm/CRM/Export/BAO/Export.php +++ b/civicrm/CRM/Export/BAO/Export.php @@ -330,7 +330,7 @@ FROM $tableName $sqlClause[] = '(' . implode(',', $valueString) . ')'; } $sqlColumns = array_merge(['id' => 1], $processor->getSQLColumns()); - $sqlColumnString = '(' . implode(',', array_keys($sqlColumns)) . ')'; + $sqlColumnString = '(`' . implode('`, `', array_keys($sqlColumns)) . '`)'; $sqlValueString = implode(",\n", $sqlClause); diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php index bffb062de0022ace04fcb0df5539ad47055bf682..8453d02475b4fdc138e685ef0a970f164e8b7074 100644 --- a/civicrm/CRM/Export/BAO/ExportProcessor.php +++ b/civicrm/CRM/Export/BAO/ExportProcessor.php @@ -399,7 +399,7 @@ class CRM_Export_BAO_ExportProcessor { $this->setQueryOperator($queryOperator); $this->setRequestedFields($requestedFields); $this->setRelationshipTypes(); - $this->setIsMergeSameHousehold($isMergeSameHousehold); + $this->setIsMergeSameHousehold($isMergeSameHousehold || $isMergeSameAddress); $this->setIsPostalableOnly($isPostalableOnly); $this->setIsMergeSameAddress($isMergeSameAddress); $this->setReturnProperties($this->determineReturnProperties()); @@ -754,7 +754,8 @@ class CRM_Export_BAO_ExportProcessor { // This will require a generalised handling cleanup return ts('Campaign ID'); } - if ($this->isMergeSameHousehold() && $field === 'id') { + if ($this->isMergeSameHousehold() && !$this->isMergeSameAddress() && $field === 'id') { + // This is weird - even if we are merging households not every contact in the export is a household so this would not be accurate. return ts('Household ID'); } elseif (isset($this->getQueryFields()[$field]['title'])) { @@ -1431,7 +1432,7 @@ class CRM_Export_BAO_ExportProcessor { // in the DB it is an ID, but in the export, we retrive the display_name of the master record // also for current_employer, CRM-16939 if ($columnName == 'master_id' || $columnName == 'current_employer') { - return "$fieldName varchar(128)"; + return "`$fieldName` varchar(128)"; } $queryFields = $this->getQueryFields(); @@ -1446,23 +1447,23 @@ class CRM_Export_BAO_ExportProcessor { case CRM_Utils_Type::T_INT: case CRM_Utils_Type::T_BOOLEAN: if (in_array(CRM_Utils_Array::value('data_type', $fieldSpec), ['Country', 'StateProvince', 'ContactReference'])) { - return "$fieldName varchar(255)"; + return "`$fieldName` varchar(255)"; } - return "$fieldName varchar(16)"; + return "`$fieldName` varchar(16)"; case CRM_Utils_Type::T_STRING: if (isset($queryFields[$columnName]['maxlength'])) { - return "$fieldName varchar({$queryFields[$columnName]['maxlength']})"; + return "`$fieldName` varchar({$queryFields[$columnName]['maxlength']})"; } else { - return "$fieldName varchar(255)"; + return "`$fieldName` varchar(255)"; } case CRM_Utils_Type::T_TEXT: case CRM_Utils_Type::T_LONGTEXT: case CRM_Utils_Type::T_BLOB: case CRM_Utils_Type::T_MEDIUMBLOB: - return "$fieldName longtext"; + return "`$fieldName` longtext"; case CRM_Utils_Type::T_FLOAT: case CRM_Utils_Type::T_ENUM: @@ -1474,15 +1475,15 @@ class CRM_Export_BAO_ExportProcessor { case CRM_Utils_Type::T_URL: case CRM_Utils_Type::T_CCNUM: default: - return "$fieldName varchar(32)"; + return "`$fieldName` varchar(32)"; } } else { if (substr($fieldName, -3, 3) == '_id') { - return "$fieldName varchar(255)"; + return "`$fieldName` varchar(255)"; } elseif (substr($fieldName, -5, 5) == '_note') { - return "$fieldName text"; + return "`$fieldName` text"; } else { $changeFields = [ @@ -1492,7 +1493,7 @@ class CRM_Export_BAO_ExportProcessor { ]; if (in_array($fieldName, $changeFields)) { - return "$fieldName text"; + return "`$fieldName` text"; } else { // set the sql columns for custom data @@ -1502,20 +1503,20 @@ class CRM_Export_BAO_ExportProcessor { case 'String': // May be option labels, which could be up to 512 characters $length = max(512, CRM_Utils_Array::value('text_length', $queryFields[$columnName])); - return "$fieldName varchar($length)"; + return "`$fieldName` varchar($length)"; case 'Link': - return "$fieldName varchar(255)"; + return "`$fieldName` varchar(255)"; case 'Memo': - return "$fieldName text"; + return "`$fieldName` text"; default: - return "$fieldName varchar(255)"; + return "`$fieldName` varchar(255)"; } } else { - return "$fieldName text"; + return "`$fieldName` text"; } } } @@ -1927,9 +1928,8 @@ class CRM_Export_BAO_ExportProcessor { * Build array for merging same addresses. * * @param string $sql - * @param bool $sharedAddress */ - public function buildMasterCopyArray($sql, $sharedAddress = FALSE) { + public function buildMasterCopyArray($sql) { $parents = []; $dao = CRM_Core_DAO::executeQuery($sql); @@ -1961,7 +1961,7 @@ class CRM_Export_BAO_ExportProcessor { } $parents[$copyID] = $masterID; - if (!$sharedAddress && !array_key_exists($copyID, $this->contactsToMerge[$masterID]['copy'])) { + if (!array_key_exists($copyID, $this->contactsToMerge[$masterID]['copy'])) { $copyPostalGreeting = $this->getContactPortionOfGreeting((int) $dao->copy_contact_id, (int) $dao->copy_postal_greeting_id, 'postal_greeting', $dao->copy_postal_greeting); if ($copyPostalGreeting) { $this->contactsToMerge[$masterID]['postalGreeting'] = "{$this->contactsToMerge[$masterID]['postalGreeting']}, {$copyPostalGreeting}"; @@ -1987,26 +1987,6 @@ class CRM_Export_BAO_ExportProcessor { public function mergeSameAddress() { $tableName = $this->getTemporaryTable(); - // check if any records are present based on if they have used shared address feature, - // and not based on if city / state .. matches. - $sql = " -SELECT r1.id as copy_id, - r1.civicrm_primary_id as copy_contact_id, - r1.addressee as copy_addressee, - r1.addressee_id as copy_addressee_id, - r1.postal_greeting as copy_postal_greeting, - r1.postal_greeting_id as copy_postal_greeting_id, - r2.id as master_id, - r2.civicrm_primary_id as master_contact_id, - r2.postal_greeting as master_postal_greeting, - r2.postal_greeting_id as master_postal_greeting_id, - r2.addressee as master_addressee, - r2.addressee_id as master_addressee_id -FROM $tableName r1 -INNER JOIN civicrm_address adr ON r1.master_id = adr.id -INNER JOIN $tableName r2 ON adr.contact_id = r2.civicrm_primary_id -ORDER BY r1.id"; - $this->buildMasterCopyArray($sql, TRUE); // find all the records that have the same street address BUT not in a household // require match on city and state as well @@ -2025,11 +2005,9 @@ SELECT r1.id as master_id, r2.addressee_id as copy_addressee_id FROM $tableName r1 LEFT JOIN $tableName r2 ON ( r1.street_address = r2.street_address AND - r1.city = r2.city AND - r1.state_province_id = r2.state_province_id ) -WHERE ( r1.household_name IS NULL OR r1.household_name = '' ) -AND ( r2.household_name IS NULL OR r2.household_name = '' ) -AND ( r1.street_address != '' ) + r1.city = r2.city AND + r1.state_province_id = r2.state_province_id ) +WHERE ( r1.street_address != '' ) AND r2.id > r1.id ORDER BY r1.id "; diff --git a/civicrm/CRM/Export/Form/Map.php b/civicrm/CRM/Export/Form/Map.php index 7f4bfa06bd99a9dc2e48c82b13e972442550b996..25dd3816eafdf03e384143aff8917f43b5c056e4 100644 --- a/civicrm/CRM/Export/Form/Map.php +++ b/civicrm/CRM/Export/Form/Map.php @@ -22,20 +22,6 @@ */ class CRM_Export_Form_Map extends CRM_Core_Form { - /** - * Mapper fields - * - * @var array - */ - protected $_mapperFields; - - /** - * Number of columns in import file - * - * @var int - */ - protected $_exportColumnCount; - /** * Loaded mapping ID * @@ -45,37 +31,45 @@ class CRM_Export_Form_Map extends CRM_Core_Form { /** * Build the form object. - * - * @return void */ public function preProcess() { - $this->_exportColumnCount = $this->get('exportColumnCount'); $this->_mappingId = $this->get('mappingId'); - if (!$this->_exportColumnCount) { - // Set default from saved mapping - if ($this->_mappingId) { - $mapping = new CRM_Core_DAO_MappingField(); - $mapping->mapping_id = $this->_mappingId; - $this->_exportColumnCount = $mapping->count(); - } - else { - $this->_exportColumnCount = 10; - } - } - else { - $this->_exportColumnCount += 10; + $contactTypes = array_column(CRM_Utils_Array::makeNonAssociative(CRM_Contact_BAO_ContactType::basicTypePairs(), 'id', 'text'), NULL, 'id'); + foreach (CRM_Contact_BAO_ContactType::subTypeInfo() as $subType) { + $contactTypes[$subType['parent']]['children'][] = [ + 'id' => $subType['name'], + 'text' => $subType['label'], + 'description' => $subType['description'] ?? NULL, + ]; } + $mappingTypeId = $this->get('mappingTypeId'); + $mappings = civicrm_api3('Mapping', 'get', ['return' => ['name', 'description'], 'mapping_type_id' => $mappingTypeId, 'options' => ['limit' => 0]]); + + Civi::resources()->addVars('exportUi', [ + 'fields' => CRM_Export_Utils::getExportFields($this->get('exportMode')), + 'contact_types' => array_values($contactTypes), + 'location_type_id' => CRM_Utils_Array::makeNonAssociative(CRM_Core_BAO_Address::buildOptions('location_type_id'), 'id', 'text'), + 'preview_data' => $this->getPreviewData(), + 'mapping_id' => $this->_mappingId, + 'mapping_description' => $mappings['values'][$this->_mappingId]['description'] ?? '', + 'mapping_type_id' => $mappingTypeId, + 'mapping_names' => CRM_Utils_Array::collect('name', $mappings['values']), + 'option_list' => [ + 'phone_type_id' => CRM_Utils_Array::makeNonAssociative(CRM_Core_BAO_Phone::buildOptions('phone_type_id'), 'id', 'text'), + 'website_type_id' => CRM_Utils_Array::makeNonAssociative(CRM_Core_BAO_Website::buildOptions('website_type_id'), 'id', 'text'), + 'im_provider_id' => CRM_Utils_Array::makeNonAssociative(CRM_Core_BAO_IM::buildOptions('provider_id'), 'id', 'text'), + ], + ]); + + // Bootstrap angular and load exportui app + $loader = new Civi\Angular\AngularLoader(); + $loader->setModules(['exportui']); + $loader->load(); } public function buildQuickForm() { - CRM_Core_BAO_Mapping::buildMappingForm($this, - 'Export', - $this->_mappingId, - $this->_exportColumnCount, - 2, - $this->get('exportMode') - ); + $this->add('hidden', 'export_field_map'); $this->addButtons([ [ @@ -83,128 +77,54 @@ class CRM_Export_Form_Map extends CRM_Core_Form { 'name' => ts('Previous'), ], [ - 'type' => 'next', - 'name' => ts('Export'), - 'spacing' => ' ', + 'type' => 'done', + 'icon' => 'fa-ban', + 'name' => ts('Return to Search'), ], [ - 'type' => 'done', - 'icon' => 'fa-times', - 'name' => ts('Done'), + 'type' => 'next', + 'icon' => 'fa-download', + 'name' => ts('Download File'), ], ]); } - /** - * Global validation rules for the form. - * - * @param array $fields - * Posted values of the form. - * - * @param $values - * @param int $mappingTypeId - * - * @return array - * list of errors to be posted back to the form - */ - public static function formRule($fields, $values, $mappingTypeId) { - $errors = []; - - if (!empty($fields['saveMapping']) && !empty($fields['_qf_Map_next'])) { - $nameField = CRM_Utils_Array::value('saveMappingName', $fields); - if (empty($nameField)) { - $errors['saveMappingName'] = ts('Name is required to save Export Mapping'); - } - else { - //check for Duplicate mappingName - if (CRM_Core_BAO_Mapping::checkMapping($nameField, $mappingTypeId)) { - $errors['saveMappingName'] = ts('Duplicate Export Mapping Name'); - } - } - } - - if (!empty($errors)) { - $_flag = 1; - $assignError = new CRM_Core_Page(); - $assignError->assign('mappingDetailsError', $_flag); - return $errors; - } - else { - return TRUE; + public function setDefaultValues() { + $defaults = []; + if ($this->_mappingId) { + $mappingFields = civicrm_api3('mappingField', 'get', ['mapping_id' => $this->_mappingId, 'options' => ['limit' => 0, 'sort' => 'column_number']]); + $defaults['export_field_map'] = json_encode(array_values($mappingFields['values'])); } + return $defaults; } /** - * Process the uploaded file. - * - * @return void + * Process the form submission. */ public function postProcess() { $params = $this->controller->exportValues($this->_name); $exportParams = $this->controller->exportValues('Select'); - $currentPath = CRM_Utils_System::currentPath(); - - $urlParams = NULL; - $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); - if (CRM_Utils_Rule::qfKey($qfKey)) { - $urlParams = "&qfKey=$qfKey"; - } - - //get the button name - $buttonName = $this->controller->getButtonName('done'); - $buttonName1 = $this->controller->getButtonName('next'); - if ($buttonName == '_qf_Map_done') { - $this->set('exportColumnCount', NULL); + // Redirect back to search if "done" button pressed + if ($this->controller->getButtonName('done') == '_qf_Map_done') { + $currentPath = CRM_Utils_System::currentPath(); + $urlParams = NULL; + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + if (CRM_Utils_Rule::qfKey($qfKey)) { + $urlParams = "&qfKey=$qfKey"; + } $this->controller->resetPage($this->_name); return CRM_Utils_System::redirect(CRM_Utils_System::url($currentPath, 'force=1' . $urlParams)); } - if ($this->controller->exportValue($this->_name, 'addMore')) { - $this->set('exportColumnCount', $this->_exportColumnCount); - return; - } - - $mapperKeys = $params['mapper'][1]; - - $mappedFields = []; - foreach ((array) $mapperKeys as $field) { - if (!empty($field[1])) { - $mappedFields[] = CRM_Core_BAO_Mapping::getMappingParams([], $field); - } - } - - if (!$mappedFields) { - $this->set('mappingId', NULL); - CRM_Utils_System::redirect(CRM_Utils_System::url($currentPath, '_qf_Map_display=true' . $urlParams)); - } - - if ($buttonName1 == '_qf_Map_next') { - if (!empty($params['updateMapping'])) { - //save mapping fields - CRM_Core_BAO_Mapping::saveMappingFields($params, $params['mappingId']); - } - - if (!empty($params['saveMapping'])) { - $mappingParams = [ - 'name' => $params['saveMappingName'], - 'description' => $params['saveMappingDesc'], - 'mapping_type_id' => $this->get('mappingTypeId'), - ]; - - $saveMapping = CRM_Core_BAO_Mapping::add($mappingParams); - - //save mapping fields - CRM_Core_BAO_Mapping::saveMappingFields($params, $saveMapping->id); - } - } + $selectedFields = json_decode($params['export_field_map'], TRUE); //get the csv file CRM_Export_BAO_Export::exportComponents($this->get('selectAll'), $this->get('componentIds'), (array) $this->get('queryParams'), $this->get(CRM_Utils_Sort::SORT_ORDER), - $mappedFields, + $selectedFields, $this->get('returnProperties'), $this->get('exportMode'), $this->get('componentClause'), @@ -216,6 +136,38 @@ class CRM_Export_Form_Map extends CRM_Core_Form { ); } + /** + * @return array + */ + protected function getPreviewData() { + $exportParams = $this->controller->exportValues('Select'); + $isPostalOnly = ( + isset($exportParams['postal_mailing_export']['postal_mailing_export']) && + $exportParams['postal_mailing_export']['postal_mailing_export'] == 1 + ); + $processor = new CRM_Export_BAO_ExportProcessor($this->get('exportMode'), NULL, $this->get('queryOperator'), $this->get('mergeSameHousehold'), $isPostalOnly, $this->get('mergeSameAddress')); + $processor->setComponentTable($this->get('componentTable')); + $processor->setComponentClause($this->get('componentClause')); + $data = $processor->getPreview(4); + $ids = CRM_Utils_Array::collect('id', $data); + $data = array_pad($data, 4, []); + + // Add location-type-specific data + if ($ids) { + foreach (['address', 'phone', 'email'] as $ent) { + foreach (civicrm_api3($ent, 'get', ['options' => ['limit' => 0], 'contact_id' => ['IN' => $ids]])['values'] as $loc) { + $row = array_search($loc['contact_id'], $ids); + $suffix = '_' . $loc['location_type_id'] . ($ent == 'phone' ? '_' . $loc['phone_type_id'] : ''); + CRM_Utils_Array::remove($loc, 'id', 'contact_id', 'location_type_id', 'phone_type_id'); + foreach ($loc as $name => $val) { + $data[$row][$name . $suffix] = $val; + } + } + } + } + return $data; + } + /** * Return a descriptive name for the page, used in wizard header * diff --git a/civicrm/CRM/Export/Utils.php b/civicrm/CRM/Export/Utils.php new file mode 100644 index 0000000000000000000000000000000000000000..adfed821b3cc712a0158496e906d6929b6076353 --- /dev/null +++ b/civicrm/CRM/Export/Utils.php @@ -0,0 +1,110 @@ +<?php + +class CRM_Export_Utils { + + /** + * This transforms the lists of fields for each contact type & component + * into a single unified list suitable for select2. + * + * The return values of CRM_Core_BAO_Mapping::getBasicFields contain a separate field list + * for every contact type and sub-type. This is extremely redundant as 90%+ of the fields + * in each list are the same. To avoid sending bloated data to the client-side, we turn + * it into a single list where fields not shared by every contact type get a contact_type + * attribute so they can be filtered appropriately by the selector. + * + * We also sort fields into optgroup categories, and add component fields appropriate to this export. + * + * @param $exportMode + * @return array + * @throws CiviCRM_API3_Exception + */ + public static function getExportFields($exportMode) { + $fieldGroups = CRM_Core_BAO_Mapping::getBasicFields('Export'); + + $categories = [ + 'contact' => ['text' => ts('Contact Fields'), 'is_contact' => TRUE], + 'address' => ['text' => ts('Address Fields'), 'is_contact' => TRUE], + 'communication' => ['text' => ts('Communication Fields'), 'is_contact' => TRUE], + ]; + $optionMap = [ + 'civicrm_website' => 'website_type_id', + 'civicrm_phone' => 'phone_type_id', + 'civicrm_im' => 'im_provider_id', + ]; + // Whitelist of field properties we actually care about; others will be discarded + $fieldProps = ['id', 'text', 'has_location', 'option_list', 'relationship_type_id', 'related_contact_type']; + $relTypes = civicrm_api3('RelationshipType', 'get', ['options' => ['limit' => 0]])['values']; + + // Add component fields + $compFields = []; + $compLabels = CRM_Core_BAO_Mapping::addComponentFields($compFields, 'Export', $exportMode); + foreach ($compLabels as $comp => $label) { + $categories[$comp] = ['text' => $label]; + foreach ($compFields[$comp] as $key => $field) { + $field['text'] = $field['title']; + $field['id'] = $key; + $categories[$comp]['children'][] = array_intersect_key($field, array_flip($fieldProps)); + } + } + + // Unset groups, tags, notes for component export + if ($exportMode != CRM_Export_Form_Select::CONTACT_EXPORT) { + foreach (array_keys($fieldGroups) as $contactType) { + CRM_Utils_Array::remove($fieldGroups[$contactType], 'groups', 'tags', 'notes'); + } + } + + // Now combine all those redundant lists of fields into a single list with categories + foreach ($fieldGroups as $contactType => $fields) { + // 'related' was like a poor-mans optgroup. + unset($fields['related']); + foreach ($fields as $key => $field) { + $group = 'contact'; + $field['text'] = $field['title']; + $field['id'] = $key; + $field['has_location'] = !empty($field['hasLocationType']); + if (isset($field['table_name']) && isset($optionMap[$field['table_name']])) { + $field['option_list'] = $optionMap[$field['table_name']]; + $group = 'communication'; + } + elseif (!empty($field['has_location'])) { + $group = 'address'; + } + if ($key == 'email') { + $group = 'communication'; + } + if (!empty($field['custom_group_id'])) { + $group = $field['custom_group_id']; + $categories[$group]['text'] = $field['groupTitle']; + $categories[$group]['is_contact'] = TRUE; + } + if (!empty($field['related'])) { + $group = 'related'; + $categories[$group]['text'] = ts('Related Contact Info'); + list($type, , $dir) = explode('_', $key); + $field['related_contact_type'] = $relTypes[$type]["contact_sub_type_$dir"] ?? $relTypes[$type]["contact_type_$dir"] ?? '*'; + // Skip relationship types targeting disabled contacts + if ($field['related_contact_type'] != '*' && !isset($fieldGroups[$field['related_contact_type']])) { + continue; + } + } + if (empty($categories[$group]['children'][$key])) { + // Discard unwanted field props to save space + $categories[$group]['children'][$key] = array_intersect_key($field, array_flip($fieldProps)); + } + // Set contact_type, which gets added to on every iteration + $categories[$group]['children'][$key]['contact_type'][] = $contactType; + // If a field applies to every contact type, remove the contact_type flag as it's redundant + if (count($fieldGroups) == count($categories[$group]['children'][$key]['contact_type'])) { + unset($categories[$group]['children'][$key]['contact_type']); + } + } + } + // We needed meaningful keys while organizing fields but if we send them client-side they'll just be in the way + foreach ($categories as &$category) { + $category['children'] = array_values($category['children']); + } + return array_values($categories); + } + +} diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index bd695bb5841f6df733c9847245d0996b65da24fc..c551d6752987e3f7c555158474a1e061d9727e0a 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -153,7 +153,7 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { $entityFinancialType->entity_id = $financialTypeId; $entityFinancialType->entity_table = 'civicrm_financial_type'; $entityFinancialType->delete(); - return FALSE; + return TRUE; } /** diff --git a/civicrm/CRM/Financial/BAO/Payment.php b/civicrm/CRM/Financial/BAO/Payment.php index 7da4925b20f0b62b88c726b84781e9cf812dec78..122f13cb918ec4cbe2fecc230e74d92faa3fe18d 100644 --- a/civicrm/CRM/Financial/BAO/Payment.php +++ b/civicrm/CRM/Financial/BAO/Payment.php @@ -149,6 +149,11 @@ class CRM_Financial_BAO_Payment { elseif ($contributionStatus === 'Pending' && $params['total_amount'] > 0) { self::updateContributionStatus($contribution['id'], 'Partially Paid'); } + elseif ($contributionStatus === 'Completed' && ((float) CRM_Core_BAO_FinancialTrxn::getTotalPayments($contribution['id'], TRUE) === 0.0)) { + // If the contribution has previously been completed (fully paid) and now has total payments adding up to 0 + // change status to refunded. + self::updateContributionStatus($contribution['id'], 'Refunded'); + } CRM_Contribute_BAO_Contribution::recordPaymentActivity($params['contribution_id'], CRM_Utils_Array::value('participant_id', $params), $params['total_amount'], $trxn->currency, $trxn->trxn_date); return $trxn; } diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessor.php b/civicrm/CRM/Financial/BAO/PaymentProcessor.php index 0ce7d3941ce0db45a6c07bf636e7aa5c55e9c766..65dae3da36241ca4ec63b36b561654afa8705904 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessor.php @@ -35,6 +35,13 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces * @throws Exception */ public static function create($params) { + // If we are creating a new PaymentProcessor and have not specified the payment instrument to use, get the default from the Payment Processor Type. + if (empty($params['id']) && empty($params['payment_instrument_id'])) { + $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [ + 'id' => $params['payment_processor_type_id'], + 'return' => 'payment_instrument_id', + ]); + } $processor = new CRM_Financial_DAO_PaymentProcessor(); $processor->copyValues($params); diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php index 1ec35e96d775899979b5d85246405c5ba8238e7c..fc9627c090651b730d78867fd1414f6f86f2a29b 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/PaymentProcessorType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5c1b8ad9b5ebf8ee399cf5d5268349bc) + * (GenCodeChecksum:1133a3c9eb58738c315a8509fea39d72) */ /** @@ -36,7 +36,7 @@ class CRM_Financial_DAO_PaymentProcessorType extends CRM_Core_DAO { public $id; /** - * Payment Processor Name. + * Payment Processor Type Name. * * @var string */ @@ -194,8 +194,8 @@ class CRM_Financial_DAO_PaymentProcessorType extends CRM_Core_DAO { 'name' => [ 'name' => 'name', 'type' => CRM_Utils_Type::T_STRING, - 'title' => ts('Payment Processor variable name to be used in code'), - 'description' => ts('Payment Processor Name.'), + 'title' => ts('Payment Processor Type variable name to be used in code'), + 'description' => ts('Payment Processor Type Name.'), 'required' => TRUE, 'maxlength' => 64, 'size' => CRM_Utils_Type::BIG, diff --git a/civicrm/CRM/Financial/Form/FinancialType.php b/civicrm/CRM/Financial/Form/FinancialType.php index 9dd624538c81bdc11765098f5af4e50eb6dca6bc..2e5e1ea46bf034126c0fb20fb32ffd05f8bcb82c 100644 --- a/civicrm/CRM/Financial/Form/FinancialType.php +++ b/civicrm/CRM/Financial/Form/FinancialType.php @@ -118,7 +118,7 @@ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form { public function postProcess() { if ($this->_action & CRM_Core_Action::DELETE) { $errors = CRM_Financial_BAO_FinancialType::del($this->_id); - if (!empty($errors)) { + if (is_array($errors) && !empty($errors)) { CRM_Core_Error::statusBounce($errors['error_message'], CRM_Utils_System::url('civicrm/admin/financial/financialType', "reset=1&action=browse"), ts('Cannot Delete')); } CRM_Core_Session::setStatus(ts('Selected financial type has been deleted.'), ts('Record Deleted'), 'success'); diff --git a/civicrm/CRM/Grant/Form/Search.php b/civicrm/CRM/Grant/Form/Search.php index 4c54877d0786c99de0a3c5d4de381ab3876ff072..1ea774db22173ae52d99754986bdb3cd101ec889 100644 --- a/civicrm/CRM/Grant/Form/Search.php +++ b/civicrm/CRM/Grant/Form/Search.php @@ -72,7 +72,6 @@ class CRM_Grant_Form_Search extends CRM_Core_Form_Search { /** * set the button names */ - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; diff --git a/civicrm/CRM/Invoicing/Utils.php b/civicrm/CRM/Invoicing/Utils.php index 06b56fbab096b4a170d8c9f13b5f1995035683e2..6f0bc50cf263d6d3defa53db3e7b78e1edf4875f 100644 --- a/civicrm/CRM/Invoicing/Utils.php +++ b/civicrm/CRM/Invoicing/Utils.php @@ -24,6 +24,8 @@ class CRM_Invoicing_Utils { * @param bool $oldValue * @param bool $newValue * @param array $metadata + * + * @throws \CiviCRM_API3_Exception */ public static function onToggle($oldValue, $newValue, $metadata) { if ($oldValue == $newValue) { @@ -32,7 +34,7 @@ class CRM_Invoicing_Utils { $existingUserViewOptions = civicrm_api3('Setting', 'get', ['return' => 'user_dashboard_options'])['values'][CRM_Core_Config::domainID()]['user_dashboard_options']; $optionValues = civicrm_api3('Setting', 'getoptions', ['field' => 'user_dashboard_options'])['values']; $invoiceKey = array_search('Invoices / Credit Notes', $optionValues); - $existingIndex = in_array($invoiceKey, $existingUserViewOptions); + $existingIndex = array_search($invoiceKey, $existingUserViewOptions); if ($newValue && $existingIndex === FALSE) { $existingUserViewOptions[] = $invoiceKey; diff --git a/civicrm/CRM/Logging/Schema.php b/civicrm/CRM/Logging/Schema.php index 176020b7056ff0d01bce3036170544d78b1056e7..9a8e7133a216cb1f42fa2cf31ec8c0c4fcdd991a 100644 --- a/civicrm/CRM/Logging/Schema.php +++ b/civicrm/CRM/Logging/Schema.php @@ -774,7 +774,7 @@ WHERE table_schema IN ('{$this->db}', '{$civiDB}')"; // rewrite the queries into CREATE TABLE queries for log tables: $cols = <<<COLS , - log_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + log_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, log_conn_id VARCHAR(17), log_user_id INTEGER, log_action ENUM('Initialization', 'Insert', 'Update', 'Delete') diff --git a/civicrm/CRM/Mailing/BAO/Mailing.php b/civicrm/CRM/Mailing/BAO/Mailing.php index a1ad4c8392a8605017be88b36182d972e21a4c1a..42c3281e6fa0eec8cd8cc16e639e8e8184255385 100644 --- a/civicrm/CRM/Mailing/BAO/Mailing.php +++ b/civicrm/CRM/Mailing/BAO/Mailing.php @@ -689,6 +689,7 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { $this->templates['subject'] = implode("\n", $template); } + $this->templates['mailingID'] = $this->id; CRM_Utils_Hook::alterMailContent($this->templates); } return $this->templates; @@ -1139,8 +1140,8 @@ ORDER BY civicrm_email.is_bulkmail DESC // push the tracking url on to the html email if necessary if ($this->open_tracking && $html) { - array_push($html, "\n" . '<img src="' . $config->userFrameworkResourceURL . - "extern/open.php?q=$event_queue_id\" width='1' height='1' alt='' border='0'>" + array_push($html, "\n" . '<img src="' . CRM_Utils_System::externUrl('extern/open', "q=$event_queue_id") + . '" width="1" height="1" alt="" border="0">' ); } @@ -1514,7 +1515,9 @@ ORDER BY civicrm_email.is_bulkmail DESC * * @return object * $mailing The new mailing object - * @throws \Exception + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function create(&$params, $ids = []) { @@ -1546,8 +1549,7 @@ ORDER BY civicrm_email.is_bulkmail DESC $domain_name = 'EXAMPLE.ORG'; } if (!isset($params['created_id'])) { - $session =& CRM_Core_Session::singleton(); - $params['created_id'] = $session->get('userID'); + $params['created_id'] = CRM_Core_Session::getLoggedInContactID(); } $defaults = [ // load the default config settings for each diff --git a/civicrm/CRM/Mailing/BAO/TrackableURL.php b/civicrm/CRM/Mailing/BAO/TrackableURL.php index 23c01cf5cc0aa862e28232929503dcdf25dc344f..86650e3afe3dab47bf4baadd4e46f2b0d36a73a2 100644 --- a/civicrm/CRM/Mailing/BAO/TrackableURL.php +++ b/civicrm/CRM/Mailing/BAO/TrackableURL.php @@ -57,7 +57,6 @@ class CRM_Mailing_BAO_TrackableURL extends CRM_Mailing_DAO_TrackableURL { else { $hrefExists = FALSE; - $config = CRM_Core_Config::singleton(); $tracker = new CRM_Mailing_BAO_TrackableURL(); if (preg_match('/^href/i', $url)) { @@ -73,11 +72,11 @@ class CRM_Mailing_BAO_TrackableURL extends CRM_Mailing_DAO_TrackableURL { } $id = $tracker->id; - $redirect = $config->userFrameworkResourceURL . "extern/url.php?u=$id"; + $redirect = CRM_Utils_System::externUrl('extern/url', "u=$id"); $urlCache[$mailing_id . $url] = $redirect; } - $returnUrl = "{$urlCache[$mailing_id . $url]}&qid={$queue_id}"; + $returnUrl = CRM_Utils_System::externUrl('extern/url', "u=$id&qid=$queue_id"); if ($hrefExists) { $returnUrl = "href='{$returnUrl}' rel='nofollow'"; diff --git a/civicrm/CRM/Mailing/MailStore.php b/civicrm/CRM/Mailing/MailStore.php index 7f1447475f0c46552b54efdd2b472b8d4d8ef4cd..90db173cdc97764a7a304c67af399ac10df7caca 100644 --- a/civicrm/CRM/Mailing/MailStore.php +++ b/civicrm/CRM/Mailing/MailStore.php @@ -39,7 +39,7 @@ class CRM_Mailing_MailStore { throw new Exception("Could not find entry named $name in civicrm_mail_settings"); } - $protocols = CRM_Core_PseudoConstant::get('CRM_Core_DAO_MailSettings', 'protocol'); + $protocols = CRM_Core_PseudoConstant::get('CRM_Core_DAO_MailSettings', 'protocol', [], 'validate'); if (empty($protocols[$dao->protocol])) { throw new Exception("Empty mail protocol"); } @@ -48,6 +48,9 @@ class CRM_Mailing_MailStore { case 'IMAP': return new CRM_Mailing_MailStore_Imap($dao->server, $dao->username, $dao->password, (bool) $dao->is_ssl, $dao->source); + case 'IMAP_XOAUTH2': + return new CRM_Mailing_MailStore_Imap($dao->server, $dao->username, $dao->password, (bool) $dao->is_ssl, $dao->source, TRUE); + case 'POP3': return new CRM_Mailing_MailStore_Pop3($dao->server, $dao->username, $dao->password, (bool) $dao->is_ssl); diff --git a/civicrm/CRM/Mailing/MailStore/Imap.php b/civicrm/CRM/Mailing/MailStore/Imap.php index 335dc182dee5482a9cda8a0c54a1e9c2e9b992a7..c24943e2db41c69f9c747adcd3cd0a1197dcaf8a 100644 --- a/civicrm/CRM/Mailing/MailStore/Imap.php +++ b/civicrm/CRM/Mailing/MailStore/Imap.php @@ -33,10 +33,12 @@ class CRM_Mailing_MailStore_Imap extends CRM_Mailing_MailStore { * Whether to use IMAP or IMAPS. * @param string $folder * Name of the inbox folder. + * @param bool $useXOAUTH2 + * Use XOAUTH2 authentication method * * @return \CRM_Mailing_MailStore_Imap */ - public function __construct($host, $username, $password, $ssl = TRUE, $folder = 'INBOX') { + public function __construct($host, $username, $password, $ssl = TRUE, $folder = 'INBOX', $useXOAUTH2 = FALSE) { // default to INBOX if an empty string if (!$folder) { $folder = 'INBOX'; @@ -48,9 +50,18 @@ class CRM_Mailing_MailStore_Imap extends CRM_Mailing_MailStore { } - $options = ['ssl' => $ssl, 'uidReferencing' => TRUE]; + $options = [ + 'listLimit' => defined('MAIL_BATCH_SIZE') ? MAIL_BATCH_SIZE : 1000, + 'ssl' => $ssl, + 'uidReferencing' => TRUE, + ]; $this->_transport = new ezcMailImapTransport($host, NULL, $options); - $this->_transport->authenticate($username, $password); + if ($useXOAUTH2) { + $this->_transport->authenticate($username, $password, ezcMailImapTransport::AUTH_XOAUTH2); + } + else { + $this->_transport->authenticate($username, $password); + } $this->_transport->selectMailbox($folder); $this->_ignored = implode($this->_transport->getHierarchyDelimiter(), [$folder, 'CiviMail', 'ignored']); diff --git a/civicrm/CRM/Mailing/Page/View.php b/civicrm/CRM/Mailing/Page/View.php index b82abe8f59a9a763cc23b78df24c03e7976b32fc..7b858c33a726eb34c3ef999542f18c0f855b46b3 100644 --- a/civicrm/CRM/Mailing/Page/View.php +++ b/civicrm/CRM/Mailing/Page/View.php @@ -81,6 +81,10 @@ class CRM_Mailing_Page_View extends CRM_Core_Page { $this->_mailingID = CRM_Utils_Request::retrieve('id', 'String', CRM_Core_DAO::$_nullObject, TRUE); } + // Retrieve contact ID and checksum from the URL + $cs = CRM_Utils_Request::retrieve('cs', 'String'); + $cid = CRM_Utils_Request::retrieve('cid', 'Int'); + // # CRM-7651 // override contactID from the function level if passed in if (isset($contactID) && @@ -88,6 +92,12 @@ class CRM_Mailing_Page_View extends CRM_Core_Page { ) { $this->_contactID = $contactID; } + + // Support checksummed view of the mailing to replace tokens + elseif (!empty($cs) && !empty($cid) && CRM_Contact_BAO_Contact_Utils::validChecksum($cid, $cs)) { + $this->_contactID = $cid; + } + else { $this->_contactID = CRM_Core_Session::getLoggedInContactID(); } diff --git a/civicrm/CRM/Mailing/Tokens.php b/civicrm/CRM/Mailing/Tokens.php index 79bdba3a786ab1dd63fdd85e1719c026448b1f7b..f8b79336ad070c8e9568d0cc5d4b42cf52a41eaf 100644 --- a/civicrm/CRM/Mailing/Tokens.php +++ b/civicrm/CRM/Mailing/Tokens.php @@ -26,6 +26,7 @@ class CRM_Mailing_Tokens extends \Civi\Token\AbstractTokenSubscriber { public function __construct() { parent::__construct('mailing', [ 'id' => ts('Mailing ID'), + 'key' => ts('Mailing Key'), 'name' => ts('Mailing Name'), 'group' => ts('Mailing Group(s)'), 'subject' => ts('Mailing Subject'), diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index 3fff6f955f935aeaa0fc959ac328a08cd654adc0..8386983c67646cb7b9b03a68a2cb4067f57af704 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -43,13 +43,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { * * @param array $params * (reference ) an assoc array of name/value pairs. - * @param array $ids - * The array that holds all the db ids. * * @return CRM_Member_BAO_Membership * @throws \CiviCRM_API3_Exception */ - public static function add(&$params, $ids = []) { + public static function add(&$params) { $oldStatus = $oldType = NULL; if ($params['id']) { CRM_Utils_Hook::pre('edit', 'Membership', $params['id'], $params); @@ -105,13 +103,12 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { 'max_related' => $membership->max_related, ]; - $session = CRM_Core_Session::singleton(); - // If we have an authenticated session, set modified_id to that user's contact_id, else set to membership.contact_id - if ($session->get('userID')) { - $membershipLog['modified_id'] = $session->get('userID'); + if (!empty($params['modified_id'])) { + $membershipLog['modified_id'] = $params['modified_id']; } - elseif (!empty($ids['userId'])) { - $membershipLog['modified_id'] = $ids['userId']; + // If we have an authenticated session, set modified_id to that user's contact_id, else set to membership.contact_id + elseif (CRM_Core_Session::singleton()->get('userID')) { + $membershipLog['modified_id'] = CRM_Core_Session::singleton()->get('userID'); } else { $membershipLog['modified_id'] = $membership->contact_id; @@ -133,8 +130,16 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { $targetContactID = $membership->contact_id; if (!empty($params['is_for_organization'])) { - $targetContactID = CRM_Utils_Array::value('userId', $ids); + // @todo - deprecate is_for_organization, require modified_id + $targetContactID = CRM_Utils_Array::value('modified_id', $params); } + + // add custom field values + if (!empty($params['custom']) && is_array($params['custom']) + ) { + CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_membership', $membership->id); + } + if ($id) { if ($membership->status_id != $oldStatus) { CRM_Activity_BAO_Activity::addActivity($membership, @@ -297,19 +302,17 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { // @todo remove $ids from here $ids['userId'] is still used $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids)); - $membership = self::add($params, $ids); + if (empty($params['modified_id']) && !empty($ids['userID'])) { + CRM_Core_Error::deprecatedFunctionWarning('$ids["userID"] no longer supported - use $params["modified_id"]'); + $params['modified_id'] = $ids['userID']; + } + $membership = self::add($params); if (is_a($membership, 'CRM_Core_Error')) { $transaction->rollback(); return $membership; } - // add custom field values - if (!empty($params['custom']) && is_array($params['custom']) - ) { - CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_membership', $membership->id); - } - $params['membership_id'] = $membership->id; // @todo further cleanup required to remove use of $ids['contribution'] from here if (isset($ids['membership'])) { @@ -993,6 +996,13 @@ INNER JOIN civicrm_membership_type type ON ( type.id = membership.membership_ty * start_date is between $startDate and $endDate */ public static function getMembershipStarts($membershipTypeId, $startDate, $endDate, $isTest = 0, $isOwner = 0) { + // Ensure that the dates that are passed to the query are in the format of yyyy-mm-dd + $dates = ['startDate', 'endDate']; + foreach ($dates as $date) { + if (strlen($$date) === 8) { + $$date = date('Y-m-d', strtotime($$date)); + } + } $testClause = 'membership.is_test = 1'; if (!$isTest) { @@ -1537,55 +1547,19 @@ WHERE civicrm_membership.contact_id = civicrm_contact.id * behaviour unchanged). * * @return array + * + * @throws \CiviCRM_API3_Exception */ - public static function buildMembershipTypeValues(&$form, $membershipTypeID = [], $activeOnly = FALSE) { - $whereClause = " WHERE domain_id = " . CRM_Core_Config::domainID(); + public static function buildMembershipTypeValues($form, $membershipTypeID = [], $activeOnly = FALSE) { $membershipTypeIDS = (array) $membershipTypeID; + $membershipTypeValues = CRM_Member_BAO_MembershipType::getPermissionedMembershipTypes(); - if ($activeOnly) { - $whereClause .= " AND is_active = 1 "; - } - if (!empty($membershipTypeIDS)) { - $allIDs = implode(',', $membershipTypeIDS); - $whereClause .= " AND id IN ( $allIDs )"; - } - CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, CRM_Core_Action::ADD); - - if ($financialTypes) { - $whereClause .= " AND financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; - } - else { - $whereClause .= " AND financial_type_id IN (0)"; - } - - $query = " -SELECT * -FROM civicrm_membership_type - $whereClause; -"; - $dao = CRM_Core_DAO::executeQuery($query); - - $membershipTypeValues = []; - $membershipTypeFields = [ - 'id', - 'minimum_fee', - 'name', - 'is_active', - 'description', - 'financial_type_id', - 'auto_renew', - 'member_of_contact_id', - 'relationship_type_id', - 'relationship_direction', - 'max_related', - 'duration_unit', - 'duration_interval', - ]; - - while ($dao->fetch()) { - $membershipTypeValues[$dao->id] = []; - foreach ($membershipTypeFields as $mtField) { - $membershipTypeValues[$dao->id][$mtField] = $dao->$mtField; + // MembershipTypes are already filtered by domain, filter as appropriate by is_active & a passed in list of ids. + foreach ($membershipTypeValues as $id => $type) { + if (($activeOnly && empty($type['is_active'])) + || (!empty($membershipTypeIDS) && !in_array($id, $membershipTypeIDS, FALSE)) + ) { + unset($membershipTypeValues[$id]); } } @@ -1594,11 +1568,10 @@ FROM civicrm_membership_type if (is_numeric($membershipTypeID) && $membershipTypeID > 0 ) { + CRM_Core_Error::deprecatedFunctionWarning('Non arrays deprecated'); return $membershipTypeValues[$membershipTypeID]; } - else { - return $membershipTypeValues; - } + return $membershipTypeValues; } /** @@ -2009,12 +1982,10 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND //CRM-4027, create log w/ individual contact. if ($modifiedID) { - $ids['userId'] = $modifiedID; + // @todo this param is likely unused now. $memParams['is_for_organization'] = TRUE; } - else { - $ids['userId'] = $contactID; - } + $params['modified_id'] = $modifiedID ?? $contactID; //inherit campaign from contrib page. if (isset($campaignId)) { @@ -2288,10 +2259,9 @@ WHERE civicrm_membership.is_test = 0 // CRM-7248: added excludeIsAdmin param to the following fn call to prevent moving to admin statuses //get the membership status as per id. - $newStatus = civicrm_api('membership_status', 'calc', + $newStatus = civicrm_api3('membership_status', 'calc', [ 'membership_id' => $dao2->membership_id, - 'version' => 3, 'ignore_admin_only' => TRUE, ], TRUE ); diff --git a/civicrm/CRM/Member/BAO/MembershipType.php b/civicrm/CRM/Member/BAO/MembershipType.php index 3ca7caf5d0b0a0f8ecf12806cccf2382c11961d9..add9aacac30a8e32d5731033f7648fc2f639b263 100644 --- a/civicrm/CRM/Member/BAO/MembershipType.php +++ b/civicrm/CRM/Member/BAO/MembershipType.php @@ -818,7 +818,29 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { */ public static function getAllMembershipTypes() { if (!Civi::cache('metadata')->has(__CLASS__ . __FUNCTION__)) { - Civi::cache('metadata')->set(__CLASS__ . __FUNCTION__, civicrm_api3('MembershipType', 'get', ['options' => ['limit' => 0, 'sort' => 'weight']])['values']); + $types = civicrm_api3('MembershipType', 'get', ['options' => ['limit' => 0, 'sort' => 'weight']])['values']; + $taxRates = CRM_Core_PseudoConstant::getTaxRates(); + $keys = ['description', 'relationship_type_id', 'relationship_direction', 'max_related']; + // In order to avoid down-stream e-notices we undo api v3 filtering of NULL values. This is covered + // in Unit tests & ideally we might switch to apiv4 but I would argue we should build caching + // of metadata entities like this directly into apiv4. + foreach ($types as $id => $type) { + foreach ($keys as $key) { + if (!isset($type[$key])) { + $types[$id][$key] = NULL; + } + } + if (isset($type['contribution_type_id'])) { + unset($types[$id]['contribution_type_id']); + } + $types[$id]['tax_rate'] = (float) ($taxRates[$type['financial_type_id']] ?? 0.0); + $multiplier = 1; + if ($types[$id]['tax_rate'] !== 0.0) { + $multiplier += ($types[$id]['tax_rate'] / 100); + } + $types[$id]['minimum_fee_with_tax'] = (float) $types[$id]['minimum_fee'] * $multiplier; + } + Civi::cache('metadata')->set(__CLASS__ . __FUNCTION__, $types); } return Civi::cache('metadata')->get(__CLASS__ . __FUNCTION__); } @@ -835,4 +857,21 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { return self::getAllMembershipTypes()[$id]; } + /** + * Get an array of all membership types the contact is permitted to access. + * + * @throws \CiviCRM_API3_Exception + */ + public static function getPermissionedMembershipTypes() { + $types = self::getAllMembershipTypes(); + $financialTypes = NULL; + $financialTypes = CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, CRM_Core_Action::ADD); + foreach ($types as $id => $type) { + if (!isset($financialTypes[$type['financial_type_id']])) { + unset($types[$id]); + } + } + return $types; + } + } diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index b9f272b126eecb7f7c46d4c9fcd17fb47a39e535..8129a226b549aca5c2f3132dfc6c850ce7fd3f3b 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -1082,7 +1082,6 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { if ($this->_id) { $ids['membership'] = $params['id'] = $this->_id; } - $ids['userId'] = CRM_Core_Session::singleton()->get('userID'); // Set variables that we normally get from context. // In form mode these are set in preProcess. @@ -1241,7 +1240,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $membershipType = implode(', ', $membershipTypes); // Retrieve the name and email of the current user - this will be the FROM for the receipt email - list($userName) = CRM_Contact_BAO_Contact_Location::getEmailDetails($ids['userId']); + list($userName) = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID()); //CRM-13981, allow different person as a soft-contributor of chosen type if ($this->_contributorContactID != $this->_contactID) { diff --git a/civicrm/CRM/Member/Form/Search.php b/civicrm/CRM/Member/Form/Search.php index 0b8774e903e9d6ef84c0ebc4d56b26458000c8f5..c12df997971e801c333fd0858df16d0175ed12bb 100644 --- a/civicrm/CRM/Member/Form/Search.php +++ b/civicrm/CRM/Member/Form/Search.php @@ -65,7 +65,6 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { public function preProcess() { $this->set('searchFormName', 'Search'); - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; @@ -81,7 +80,7 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { $this->_context ); $prefix = NULL; - if ($this->_context == 'basic') { + if ($this->_context === 'basic') { $prefix = $this->_prefix; } @@ -189,6 +188,8 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { * done. * The processing consists of using a Selector / Controller framework for getting the * search results. + * + * @throws \CRM_Core_Exception */ public function postProcess() { if ($this->_done) { @@ -234,7 +235,7 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { $selector->setKey($this->controller->_key); $prefix = NULL; - if ($this->_context == 'basic') { + if ($this->_context === 'basic') { $prefix = $this->_prefix; } @@ -247,8 +248,6 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { $prefix ); $controller->setEmbedded(TRUE); - - $query = &$selector->getQuery(); $controller->run(); } @@ -256,6 +255,8 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { * If this search has been forced then see if there are any get values, and if so over-ride the post values. * * Note that this means that GET over-rides POST :) & that force with no parameters can be very destructive. + * + * @throws \CRM_Core_Exception */ public function fixFormValues() { if (!$this->_force) { diff --git a/civicrm/CRM/Member/Form/Task.php b/civicrm/CRM/Member/Form/Task.php index 72c9e23374d36417d9e0ccdf7f4d94a69ad4575f..5f5791d01ab0f3019f7f4f976364c6f5c5485101 100644 --- a/civicrm/CRM/Member/Form/Task.php +++ b/civicrm/CRM/Member/Form/Task.php @@ -13,8 +13,6 @@ * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ - * */ /** @@ -36,6 +34,7 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { * @param * * @return void + * @throws \CRM_Core_Exception */ public function preProcess() { self::preProcessCommon($this); @@ -43,6 +42,8 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { /** * @param CRM_Core_Form $form + * + * @throws \CRM_Core_Exception */ public static function preProcessCommon(&$form) { $form->_memberIds = []; @@ -57,7 +58,7 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { $form->assign('taskName', $tasks[$form->_task]); $ids = []; - if ($values['radio_ts'] == 'ts_sel') { + if ($values['radio_ts'] === 'ts_sel') { foreach ($values as $name => $value) { if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { $ids[] = substr($name, CRM_Core_Form::CB_PREFIX_LEN); @@ -99,7 +100,7 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { } $searchFormName = strtolower($form->get('searchFormName')); - if ($searchFormName == 'search') { + if ($searchFormName === 'search') { $session->replaceUserContext(CRM_Utils_System::url('civicrm/member/search', $urlParams)); } else { @@ -119,30 +120,4 @@ class CRM_Member_Form_Task extends CRM_Core_Form_Task { ); } - /** - * Simple shell that derived classes can call to add buttons to. - * the form with a customized title for the main Submit - * - * @param string $title - * Title of the main button. - * @param string $nextType - * @param string $backType - * @param bool $submitOnce - * - * @return void - */ - public function addDefaultButtons($title, $nextType = 'next', $backType = 'back', $submitOnce = FALSE) { - $this->addButtons([ - [ - 'type' => $nextType, - 'name' => $title, - 'isDefault' => TRUE, - ], - [ - 'type' => $backType, - 'name' => ts('Cancel'), - ], - ]); - } - } diff --git a/civicrm/CRM/PCP/BAO/PCP.php b/civicrm/CRM/PCP/BAO/PCP.php index 586b1383349b271cd9a62e31d17a6deffdd51d0b..6b4660548e3e3619ee2433c70c8327519bebb753 100644 --- a/civicrm/CRM/PCP/BAO/PCP.php +++ b/civicrm/CRM/PCP/BAO/PCP.php @@ -65,7 +65,7 @@ class CRM_PCP_BAO_PCP extends CRM_PCP_DAO_PCP { * Id for the PCP. * * @return null|string - * Dispaly name of the contact if found + * Display name of the contact if found */ public static function displayName($id) { $id = CRM_Utils_Type::escape($id, 'Integer'); @@ -409,32 +409,53 @@ WHERE pcp.id = %1 AND cc.contribution_status_id = %2 AND cc.is_test = 0"; } /** - * Add PCP form elements to a form. + * This function builds the supporter text for the pcp * - * @param int $pcpId - * @param CRM_Core_Form $page - * @param null $elements + * @param int $pcpID + * the personal campaign page ID + * @param int $contributionPageID + * @param string $component + * one of 'contribute' or 'event' + * + * @return string */ - public static function buildPcp($pcpId, &$page, &$elements = NULL) { - - $prms = ['id' => $pcpId]; - CRM_Core_DAO::commonRetrieve('CRM_PCP_DAO_PCP', $prms, $pcpInfo); - if ($pcpSupporter = CRM_PCP_BAO_PCP::displayName($pcpId)) { - if ($pcpInfo['page_type'] == 'event') { + public static function getPcpSupporterText($pcpID, $contributionPageID, $component) { + $pcp_supporter_text = ''; + $text = CRM_PCP_BAO_PCP::getPcpBlockStatus($contributionPageID, $component); + $pcpSupporter = CRM_PCP_BAO_PCP::displayName($pcpID); + switch ($component) { + case 'event': $pcp_supporter_text = ts('This event registration is being made thanks to the efforts of <strong>%1</strong>, who supports our campaign. ', [1 => $pcpSupporter]); - $text = CRM_PCP_BAO_PCP::getPcpBlockStatus($pcpInfo['page_id'], 'event'); if (!empty($text)) { - $pcp_supporter_text .= "You can support it as well - once you complete the registration, you will be able to create your own Personal Campaign Page!"; + $pcp_supporter_text .= ts('You can support it as well - once you complete the registration, you will be able to create your own Personal Campaign Page!'); } - } - else { + break; + + case 'contribute': $pcp_supporter_text = ts('This contribution is being made thanks to the efforts of <strong>%1</strong>, who supports our campaign. ', [1 => $pcpSupporter]); - $text = CRM_PCP_BAO_PCP::getPcpBlockStatus($pcpInfo['page_id'], 'contribute'); if (!empty($text)) { - $pcp_supporter_text .= "You can support it as well - once you complete the donation, you will be able to create your own Personal Campaign Page!"; + $pcp_supporter_text .= ts('You can support it as well - once you complete the donation, you will be able to create your own Personal Campaign Page!'); } - } + break; + } + return $pcp_supporter_text; + } + + /** + * Add PCP form elements to a form. + * + * @param int $pcpId + * @param CRM_Core_Form $page + * @param array $elements + * + * @throws \CiviCRM_API3_Exception + */ + public static function buildPcp($pcpId, &$page, &$elements = NULL) { + $prms = ['id' => $pcpId]; + CRM_Core_DAO::commonRetrieve('CRM_PCP_DAO_PCP', $prms, $pcpInfo); + if (CRM_PCP_BAO_PCP::displayName($pcpId)) { + $pcp_supporter_text = self::getPcpSupporterText($pcpId, $pcpInfo['page_id'], $pcpInfo['page_type']); $page->assign('pcpSupporterText', $pcp_supporter_text); } $page->assign('pcp', TRUE); diff --git a/civicrm/CRM/PCP/Page/PCP.php b/civicrm/CRM/PCP/Page/PCP.php index 2d72a6611c8c30ad373435840ac3cc4efe91dc14..c6f9d04bd3b84905b610625224057005465b4105 100644 --- a/civicrm/CRM/PCP/Page/PCP.php +++ b/civicrm/CRM/PCP/Page/PCP.php @@ -13,7 +13,6 @@ * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ * */ @@ -50,45 +49,45 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { // helper variable for nicer formatting $deleteExtra = ts('Are you sure you want to delete this Campaign Page ?'); - self::$_links = array( - CRM_Core_Action::UPDATE => array( + self::$_links = [ + CRM_Core_Action::UPDATE => [ 'name' => ts('Edit'), 'url' => 'civicrm/pcp/info', 'qs' => 'action=update&reset=1&id=%%id%%&context=dashboard', 'title' => ts('Edit Personal Campaign Page'), - ), - CRM_Core_Action::RENEW => array( + ], + CRM_Core_Action::RENEW => [ 'name' => ts('Approve'), 'url' => 'civicrm/admin/pcp', 'qs' => 'action=renew&id=%%id%%', 'title' => ts('Approve Personal Campaign Page'), - ), - CRM_Core_Action::REVERT => array( + ], + CRM_Core_Action::REVERT => [ 'name' => ts('Reject'), 'url' => 'civicrm/admin/pcp', 'qs' => 'action=revert&id=%%id%%', 'title' => ts('Reject Personal Campaign Page'), - ), - CRM_Core_Action::DELETE => array( + ], + CRM_Core_Action::DELETE => [ 'name' => ts('Delete'), 'url' => 'civicrm/admin/pcp', 'qs' => 'action=delete&id=%%id%%', 'extra' => 'onclick = "return confirm(\'' . $deleteExtra . '\');"', 'title' => ts('Delete Personal Campaign Page'), - ), - CRM_Core_Action::ENABLE => array( + ], + CRM_Core_Action::ENABLE => [ 'name' => ts('Enable'), 'url' => 'civicrm/admin/pcp', 'qs' => 'action=enable&id=%%id%%', 'title' => ts('Enable'), - ), - CRM_Core_Action::DISABLE => array( + ], + CRM_Core_Action::DISABLE => [ 'name' => ts('Disable'), 'url' => 'civicrm/admin/pcp', 'qs' => 'action=disable&id=%%id%%', 'title' => ts('Disable'), - ), - ); + ], + ]; } return self::$_links; } @@ -100,9 +99,8 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { * type of action and executes that action. * Finally it calls the parent's run method. * - * @param - * - * @return void + * @return mixed|null + * @throws \CRM_Core_Exception */ public function run() { $id = $this->getIdAndAction(); @@ -140,10 +138,9 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { /** * Browse all custom data groups. * + * @param int $action * - * @param null $action - * - * @return void + * @throws \CRM_Core_Exception */ public function browse($action = NULL) { CRM_Core_Resources::singleton()->addStyleFile('civicrm', 'css/searchForm.css', 1, 'html-header'); @@ -160,32 +157,32 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { $status = CRM_PCP_BAO_PCP::buildOptions('status_id', 'create'); - $pcpSummary = $params = array(); + $pcpSummary = $params = []; $whereClause = NULL; if (!empty($_POST) || !empty($_GET['page_type'])) { if (!empty($_POST['status_id'])) { $whereClause = ' AND cp.status_id = %1'; - $params['1'] = array($_POST['status_id'], 'Integer'); + $params['1'] = [$_POST['status_id'], 'Integer']; } if (!empty($_POST['page_type'])) { $whereClause .= ' AND cp.page_type = %2'; - $params['2'] = array($_POST['page_type'], 'String'); + $params['2'] = [$_POST['page_type'], 'String']; } elseif (!empty($_GET['page_type'])) { $whereClause .= ' AND cp.page_type = %2'; - $params['2'] = array($_GET['page_type'], 'String'); + $params['2'] = [$_GET['page_type'], 'String']; } if (!empty($_POST['page_id'])) { $whereClause .= ' AND cp.page_id = %4 AND cp.page_type = "contribute"'; - $params['4'] = array($_POST['page_id'], 'Integer'); + $params['4'] = [$_POST['page_id'], 'Integer']; } if (!empty($_POST['event_id'])) { $whereClause .= ' AND cp.page_id = %5 AND cp.page_type = "event"'; - $params['5'] = array($_POST['event_id'], 'Integer'); + $params['5'] = [$_POST['event_id'], 'Integer']; } if ($whereClause) { @@ -226,7 +223,7 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { $pages['event'][$epages->id]['end_date'] = $epages->registration_end_date; } - $params = $this->get('params') ? $this->get('params') : array(); + $params = $this->get('params') ? $this->get('params') : []; $title = '1'; if ($this->_sortByCharacter !== NULL) { @@ -289,7 +286,7 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { $pageUrl = CRM_Utils_System::url('civicrm/' . $page_type . '/register', 'reset=1&id=' . $pcp->page_id); } - $pcpSummary[$pcp->id] = array( + $pcpSummary[$pcp->id] = [ 'id' => $pcp->id, 'start_date' => $pages[$page_type][$page_id]['start_date'], 'end_date' => $pages[$page_type][$page_id]['end_date'], @@ -301,11 +298,11 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { 'page_url' => $pageUrl, 'page_type' => $page_type, 'action' => CRM_Core_Action::formLink(self::links(), $action, - array('id' => $pcp->id), ts('more'), FALSE, 'contributionpage.pcp.list', 'PCP', $pcp->id + ['id' => $pcp->id], ts('more'), FALSE, 'contributionpage.pcp.list', 'PCP', $pcp->id ), 'title' => $pcp->title, 'class' => $class, - ); + ]; } $this->search(); @@ -323,7 +320,6 @@ class CRM_PCP_Page_PCP extends CRM_Core_Page_Basic { } public function search() { - if ($this->_action & CRM_Core_Action::DELETE) { return; } diff --git a/civicrm/CRM/Pledge/Form/Search.php b/civicrm/CRM/Pledge/Form/Search.php index 92158a070cb58c200ca1ebec2952b389a1062dc5..7f7e75c529882ed5496beb1e81ed7418382cfb31 100644 --- a/civicrm/CRM/Pledge/Form/Search.php +++ b/civicrm/CRM/Pledge/Form/Search.php @@ -59,7 +59,6 @@ class CRM_Pledge_Form_Search extends CRM_Core_Form_Search { */ public function preProcess() { - $this->_searchButtonName = $this->getButtonName('refresh'); $this->_actionButtonName = $this->getButtonName('next', 'action'); $this->_done = FALSE; diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php index efa24b312bacbcd24f10b9b67db7a9aad7b6e19b..c1f017f435a2cf04ef4b014af9a9428e2a9e1371 100644 --- a/civicrm/CRM/Price/BAO/LineItem.php +++ b/civicrm/CRM/Price/BAO/LineItem.php @@ -181,11 +181,10 @@ WHERE li.contribution_id = %1"; * @param bool $isQtyZero * @param bool $relatedEntity * - * @param bool $invoice * @return array * Array of line items */ - public static function getLineItems($entityId, $entity = 'participant', $isQuick = FALSE, $isQtyZero = TRUE, $relatedEntity = FALSE, $invoice = FALSE) { + public static function getLineItems($entityId, $entity = 'participant', $isQuick = FALSE, $isQtyZero = TRUE, $relatedEntity = FALSE) { $whereClause = $fromClause = NULL; $selectClause = " SELECT li.id, @@ -218,17 +217,7 @@ WHERE li.contribution_id = %1"; LEFT JOIN civicrm_line_item li ON ({$condition}) LEFT JOIN civicrm_price_field_value pfv ON ( pfv.id = li.price_field_value_id ) LEFT JOIN civicrm_price_field pf ON (pf.id = li.price_field_id )"; - $whereClause = " - WHERE %2.id = %1"; - - // CRM-16250 get additional participant's fee selection details only for invoice PDF (if any) - if ($entity == 'participant' && $invoice) { - $additionalParticipantIDs = CRM_Event_BAO_Participant::getAdditionalParticipantIds($entityId); - if (!empty($additionalParticipantIDs)) { - $whereClause = "WHERE %2.id IN (%1, " . implode(', ', $additionalParticipantIDs) . ")"; - } - } - + $whereClause = " WHERE %2.id = %1"; $orderByClause = " ORDER BY pf.weight, pfv.weight"; if ($isQuick) { @@ -402,7 +391,7 @@ WHERE li.contribution_id = %1"; * Process price set and line items. * * @param int $entityId - * @param array $lineItem + * @param array $lineItems * Line item array. * @param object $contributionDetails * @param string $entityTable @@ -413,14 +402,14 @@ WHERE li.contribution_id = %1"; * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function processPriceSet($entityId, $lineItem, $contributionDetails = NULL, $entityTable = 'civicrm_contribution', $update = FALSE) { - if (!$entityId || !is_array($lineItem) - || CRM_Utils_System::isNull($lineItem) + public static function processPriceSet($entityId, $lineItems, $contributionDetails = NULL, $entityTable = 'civicrm_contribution', $update = FALSE) { + if (!$entityId || !is_array($lineItems) + || CRM_Utils_System::isNull($lineItems) ) { return; } - foreach ($lineItem as $priceSetId => &$values) { + foreach ($lineItems as $priceSetId => &$values) { if (!$priceSetId) { continue; } @@ -456,18 +445,18 @@ WHERE li.contribution_id = %1"; if (!empty($line['price_field_value_id']) && empty($line['financial_type_id'])) { $line['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceFieldValue', $line['price_field_value_id'], 'financial_type_id'); } - $lineItems = CRM_Price_BAO_LineItem::create($line); + $createdLineItem = CRM_Price_BAO_LineItem::create($line); if (!$update && $contributionDetails) { - $financialItem = CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails); + $financialItem = CRM_Financial_BAO_FinancialItem::add($createdLineItem, $contributionDetails); $line['financial_item_id'] = $financialItem->id; if (!empty($line['tax_amount'])) { - CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails, TRUE); + CRM_Financial_BAO_FinancialItem::add($createdLineItem, $contributionDetails, TRUE); } } } } if (!$update && $contributionDetails) { - CRM_Core_BAO_FinancialTrxn::createDeferredTrxn($lineItem, $contributionDetails); + CRM_Core_BAO_FinancialTrxn::createDeferredTrxn($lineItems, $contributionDetails); } } @@ -604,7 +593,7 @@ WHERE li.contribution_id = %1"; * These are per the way the form processes them - ie * ['price_1' => 1, 'price_2' => 8] * This would mean price field id 1, option 1 (or 1 unit if using is_enter_qty). - * @param float|NULL $overrideAmount + * @param float|null $overrideAmount * Optional override of the amount. * * @param int|null $financialTypeID diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index 5ac93721fd9a9d804309a47935c587fa969d8b68..f9e24c14d9424b5dbf3e4f2d3aec2988dbccd01d 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -661,23 +661,13 @@ WHERE id = %1"; * @param $lineItem * Line item array to be altered. * @param int $priceSetID + * + * @todo $priceSetID is a pseudoparam for permit override - we should stop passing it where we + * don't specifically need it & find a better way where we do. */ public static function processAmount($fields, &$params, &$lineItem, $priceSetID = NULL) { // using price set $totalPrice = $totalTax = 0; - // CRM-18701 Sometimes the amount in the price set is overridden by the amount on the form. - // This is notably the case with memberships and we need to put this amount - // on the line item rather than the calculated amount. - // This seems to only affect radio link items as that is the use case for the 'quick config' - // set up (which allows a free form field). - $amount_override = NULL; - - if ($priceSetID) { - $priceFields = self::filterPriceFieldsFromParams($priceSetID, $params); - if (count($priceFields) == 1) { - $amount_override = CRM_Utils_Array::value('partial_payment_total', $params, CRM_Utils_Array::value('total_amount', $params)); - } - } foreach ($fields as $id => $field) { if (empty($params["price_{$id}"]) || (empty($params["price_{$id}"]) && $params["price_{$id}"] == NULL) @@ -686,67 +676,7 @@ WHERE id = %1"; continue; } - switch ($field['html_type']) { - case 'Text': - $firstOption = reset($field['options']); - $params["price_{$id}"] = [$firstOption['id'] => $params["price_{$id}"]]; - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); - $optionValueId = key($field['options']); - - if (CRM_Utils_Array::value('name', $field['options'][$optionValueId]) == 'contribution_amount') { - $taxRates = CRM_Core_PseudoConstant::getTaxRates(); - if (array_key_exists($params['financial_type_id'], $taxRates)) { - $field['options'][key($field['options'])]['tax_rate'] = $taxRates[$params['financial_type_id']]; - $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($field['options'][$optionValueId]['amount'], $field['options'][$optionValueId]['tax_rate']); - $field['options'][$optionValueId]['tax_amount'] = round($taxAmount['tax_amount'], 2); - } - } - if (!empty($field['options'][$optionValueId]['tax_rate'])) { - $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); - } - $totalPrice += $lineItem[$firstOption['id']]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[key($field['options'])]); - break; - - case 'Radio': - //special case if user select -none- - if ($params["price_{$id}"] <= 0) { - break; - } - $params["price_{$id}"] = [$params["price_{$id}"] => 1]; - $optionValueId = CRM_Utils_Array::key(1, $params["price_{$id}"]); - - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, $amount_override); - if (!empty($field['options'][$optionValueId]['tax_rate'])) { - $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); - if ($amount_override) { - $lineItem[$optionValueId]['line_total'] = $lineItem[$optionValueId]['unit_price'] = CRM_Utils_Rule::cleanMoney($lineItem[$optionValueId]['line_total'] - $lineItem[$optionValueId]['tax_amount']); - } - } - $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); - break; - - case 'Select': - $params["price_{$id}"] = [$params["price_{$id}"] => 1]; - $optionValueId = CRM_Utils_Array::key(1, $params["price_{$id}"]); - - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); - if (!empty($field['options'][$optionValueId]['tax_rate'])) { - $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); - } - $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); - break; - - case 'CheckBox': - - CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); - foreach ($params["price_{$id}"] as $optionId => $option) { - if (!empty($field['options'][$optionId]['tax_rate'])) { - $lineItem = self::setLineItem($field, $lineItem, $optionId, $totalTax); - } - $totalPrice += $lineItem[$optionId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionId]); - } - break; - } + list($params, $lineItem, $totalTax, $totalPrice) = self::getLine($params, $lineItem, $priceSetID, $field, $id, $totalPrice); } $amount_level = []; @@ -769,7 +699,7 @@ WHERE id = %1"; // will get us by. // Crucially a test has been added so a better solution can be implemented later with some comfort. // @todo - stop setting amount level in this function & call the getAmountLevel function to retrieve it. - if ($values['label'] != ts('Contribution Amount')) { + if ($values['label'] !== ts('Contribution Amount')) { $amount_level[] = $values['label'] . ' - ' . (float) $values['qty']; } } @@ -819,7 +749,7 @@ WHERE id = %1"; // We deliberately & specifically exclude contribution amount as it has a specific meaning. // ie. it represents the default price field for a contribution. Another approach would be not // to give it a label if we don't want it to show. - if ($field['label'] != ts('Contribution Amount')) { + if ($field['label'] !== ts('Contribution Amount')) { $amount_level[] = $field['label'] . $qtyString; } } @@ -1749,4 +1679,96 @@ WHERE ct.id = cp.financial_type_id AND return $usedBy; } + /** + * Get the relevant line item. + * + * Note this is part of code being cleaned up / refactored & may change. + * + * @param array $params + * @param array $lineItem + * @param int $priceSetID + * @param array $field + * @param int $id + * @param float $totalPrice + * + * @return array + */ + protected static function getLine(&$params, &$lineItem, $priceSetID, $field, $id, $totalPrice): array { + $totalTax = 0; + switch ($field['html_type']) { + case 'Text': + $firstOption = reset($field['options']); + $params["price_{$id}"] = [$firstOption['id'] => $params["price_{$id}"]]; + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + $optionValueId = key($field['options']); + + if (CRM_Utils_Array::value('name', $field['options'][$optionValueId]) === 'contribution_amount') { + $taxRates = CRM_Core_PseudoConstant::getTaxRates(); + if (array_key_exists($params['financial_type_id'], $taxRates)) { + $field['options'][key($field['options'])]['tax_rate'] = $taxRates[$params['financial_type_id']]; + $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($field['options'][$optionValueId]['amount'], $field['options'][$optionValueId]['tax_rate']); + $field['options'][$optionValueId]['tax_amount'] = round($taxAmount['tax_amount'], 2); + } + } + if (!empty($field['options'][$optionValueId]['tax_rate'])) { + $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); + } + $totalPrice += $lineItem[$firstOption['id']]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[key($field['options'])]); + break; + + case 'Radio': + //special case if user select -none- + if ($params["price_{$id}"] <= 0) { + break; + } + $params["price_{$id}"] = [$params["price_{$id}"] => 1]; + $optionValueId = CRM_Utils_Array::key(1, $params["price_{$id}"]); + + // CRM-18701 Sometimes the amount in the price set is overridden by the amount on the form. + // This is notably the case with memberships and we need to put this amount + // on the line item rather than the calculated amount. + // This seems to only affect radio link items as that is the use case for the 'quick config' + // set up (which allows a free form field). + // @todo $priceSetID is a pseudoparam for permit override - we should stop passing it where we + // don't specifically need it & find a better way where we do. + $amount_override = NULL; + + if ($priceSetID && count(self::filterPriceFieldsFromParams($priceSetID, $params)) === 1) { + $amount_override = CRM_Utils_Array::value('partial_payment_total', $params, CRM_Utils_Array::value('total_amount', $params)); + } + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, $amount_override); + if (!empty($field['options'][$optionValueId]['tax_rate'])) { + $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); + if ($amount_override) { + $lineItem[$optionValueId]['line_total'] = $lineItem[$optionValueId]['unit_price'] = CRM_Utils_Rule::cleanMoney($lineItem[$optionValueId]['line_total'] - $lineItem[$optionValueId]['tax_amount']); + } + } + $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); + break; + + case 'Select': + $params["price_{$id}"] = [$params["price_{$id}"] => 1]; + $optionValueId = CRM_Utils_Array::key(1, $params["price_{$id}"]); + + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + if (!empty($field['options'][$optionValueId]['tax_rate'])) { + $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax); + } + $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]); + break; + + case 'CheckBox': + + CRM_Price_BAO_LineItem::format($id, $params, $field, $lineItem, CRM_Utils_Array::value('partial_payment_total', $params)); + foreach ($params["price_{$id}"] as $optionId => $option) { + if (!empty($field['options'][$optionId]['tax_rate'])) { + $lineItem = self::setLineItem($field, $lineItem, $optionId, $totalTax); + } + $totalPrice += $lineItem[$optionId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionId]); + } + break; + } + return [$params, $lineItem, $totalTax, $totalPrice]; + } + } diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 2d521ec8a884deb35bc47c6af9608329eeef5c86..669386a5b3930f95177f5266e59c964cef9a52f6 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -139,9 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form { */ protected $_groupFilter = FALSE; - // [ML] Required for civiexportexcel - public $supportsExportExcel = TRUE; - /** * Has the report been optimised for group filtering. * @@ -2551,6 +2548,23 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND return $value; } + /** + * @param $value + * @param $row + * @param $fieldname + * + * @return mixed + */ + protected function alterCommunicationtMethod($value, &$row, $fieldname) { + $communicationMethods = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method'); + + // Explode padded values. + $values = CRM_utils_array::explodePadded($value); + // Flip values, compute intersection with $communicationMethods, and implode with commas. + $value = implode(', ', array_intersect_key($communicationMethods, array_flip($values))); + return $value; + } + /** * @param $value * @@ -2831,11 +2845,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $this->_absoluteUrl = TRUE; $this->addPaging = FALSE; } - elseif ($this->_outputMode == 'excel2007') { - $printOnly = TRUE; - $this->_absoluteUrl = TRUE; - $this->addPaging = FALSE; - } elseif ($this->_outputMode == 'group') { $this->assign('outputMode', 'group'); } @@ -3478,9 +3487,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND elseif ($this->_outputMode == 'csv') { CRM_Report_Utils_Report::export2csv($this, $rows); } - elseif ($this->_outputMode == 'excel2007') { - CRM_CiviExportExcel_Utils_Report::export2excel2007($this, $rows); - } elseif ($this->_outputMode == 'group') { $group = $this->_params['groups']; $this->add2group($group); @@ -5474,6 +5480,15 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a 'is_group_bys' => TRUE, 'is_order_bys' => TRUE, ], + $options['prefix'] . 'preferred_communication_method' => [ + 'title' => $options['prefix_label'] . ts('Preferred Communication Method'), + 'alter_display' => 'alterCommunicationtMethod', + 'name' => 'preferred_communication_method', + 'is_fields' => TRUE, + 'is_filters' => FALSE, + 'is_group_bys' => FALSE, + 'is_order_bys' => FALSE, + ], ]; foreach ([ 'postal_greeting_display' => 'Postal Greeting', @@ -5708,7 +5723,7 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a $options['prefix'] . 'postal_code' => [ 'title' => $options['prefix_label'] . ts('Postal Code'), 'name' => 'postal_code', - 'type' => 1, + 'type' => 2, 'is_fields' => TRUE, 'is_filters' => TRUE, 'is_group_bys' => TRUE, @@ -5717,7 +5732,7 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a $options['prefix'] . 'postal_code_suffix' => [ 'title' => $options['prefix_label'] . ts('Postal Code Suffix'), 'name' => 'postal_code_suffix', - 'type' => 1, + 'type' => 2, 'is_fields' => TRUE, 'is_filters' => TRUE, 'is_group_bys' => TRUE, diff --git a/civicrm/CRM/Report/Form/Contribute/Detail.php b/civicrm/CRM/Report/Form/Contribute/Detail.php index 3a38e2d631ae268eb9e90029efb016e26acf87a2..294c40ecdd5029e0c72a94a2213af52d53025c10 100644 --- a/civicrm/CRM/Report/Form/Contribute/Detail.php +++ b/civicrm/CRM/Report/Form/Contribute/Detail.php @@ -70,280 +70,285 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { */ public function __construct() { $this->_autoIncludeIndexedFieldsAsOrderBys = 1; - $this->_columns = array_merge($this->getColumns('Contact', [ - 'order_bys_defaults' => ['sort_name' => 'ASC '], - 'fields_defaults' => ['sort_name'], - 'fields_excluded' => ['id'], - 'fields_required' => ['id'], - 'filters_defaults' => ['is_deleted' => 0], - 'no_field_disambiguation' => TRUE, - ]), [ - 'civicrm_email' => [ - 'dao' => 'CRM_Core_DAO_Email', - 'fields' => [ - 'email' => [ - 'title' => ts('Donor Email'), - 'default' => TRUE, + $this->_columns = array_merge( + $this->getColumns('Contact', [ + 'order_bys_defaults' => ['sort_name' => 'ASC '], + 'fields_defaults' => ['sort_name'], + 'fields_excluded' => ['id'], + 'fields_required' => ['id'], + 'filters_defaults' => ['is_deleted' => 0], + 'no_field_disambiguation' => TRUE, + ]), + [ + 'civicrm_email' => [ + 'dao' => 'CRM_Core_DAO_Email', + 'fields' => [ + 'email' => [ + 'title' => ts('Donor Email'), + 'default' => TRUE, + ], ], + 'grouping' => 'contact-fields', ], - 'grouping' => 'contact-fields', - ], - 'civicrm_line_item' => [ - 'dao' => 'CRM_Price_DAO_LineItem', - ], - 'civicrm_phone' => [ - 'dao' => 'CRM_Core_DAO_Phone', - 'fields' => [ - 'phone' => [ - 'title' => ts('Donor Phone'), - 'default' => TRUE, - 'no_repeat' => TRUE, - ], + 'civicrm_line_item' => [ + 'dao' => 'CRM_Price_DAO_LineItem', ], - 'grouping' => 'contact-fields', - ], - 'civicrm_contribution' => [ - 'dao' => 'CRM_Contribute_DAO_Contribution', - 'fields' => [ - 'contribution_id' => [ - 'name' => 'id', - 'no_display' => TRUE, - 'required' => TRUE, - ], - 'list_contri_id' => [ - 'name' => 'id', - 'title' => ts('Contribution ID'), - ], - 'financial_type_id' => [ - 'title' => ts('Financial Type'), - 'default' => TRUE, - ], - 'contribution_status_id' => [ - 'title' => ts('Contribution Status'), - ], - 'contribution_page_id' => [ - 'title' => ts('Contribution Page'), - ], - 'source' => [ - 'title' => ts('Source'), - ], - 'payment_instrument_id' => [ - 'title' => ts('Payment Type'), - ], - 'check_number' => [ - 'title' => ts('Check Number'), - ], - 'currency' => [ - 'required' => TRUE, - 'no_display' => TRUE, - ], - 'trxn_id' => NULL, - 'receive_date' => ['default' => TRUE], - 'receipt_date' => NULL, - 'thankyou_date' => NULL, - 'total_amount' => [ - 'title' => ts('Amount'), - 'required' => TRUE, - ], - 'non_deductible_amount' => [ - 'title' => ts('Non-deductible Amount'), - ], - 'fee_amount' => NULL, - 'net_amount' => NULL, - 'contribution_or_soft' => [ - 'title' => ts('Contribution OR Soft Credit?'), - 'dbAlias' => "'Contribution'", - ], - 'soft_credits' => [ - 'title' => ts('Soft Credits'), - 'dbAlias' => "NULL", - ], - 'soft_credit_for' => [ - 'title' => ts('Soft Credit For'), - 'dbAlias' => "NULL", - ], - 'cancel_date' => [ - 'title' => ts('Cancelled / Refunded Date'), - 'name' => 'contribution_cancel_date', - ], - 'cancel_reason' => [ - 'title' => ts('Cancellation / Refund Reason'), + 'civicrm_phone' => [ + 'dao' => 'CRM_Core_DAO_Phone', + 'fields' => [ + 'phone' => [ + 'title' => ts('Donor Phone'), + 'default' => TRUE, + 'no_repeat' => TRUE, + ], ], + 'grouping' => 'contact-fields', ], - 'filters' => [ - 'contribution_or_soft' => [ - 'title' => ts('Contribution OR Soft Credit?'), - 'clause' => "(1)", - 'operatorType' => CRM_Report_Form::OP_SELECT, - 'type' => CRM_Utils_Type::T_STRING, - 'options' => [ - 'contributions_only' => ts('Contributions Only'), - 'soft_credits_only' => ts('Soft Credits Only'), - 'both' => ts('Both'), + 'civicrm_contribution' => [ + 'dao' => 'CRM_Contribute_DAO_Contribution', + 'fields' => [ + 'contribution_id' => [ + 'name' => 'id', + 'no_display' => TRUE, + 'required' => TRUE, + ], + 'list_contri_id' => [ + 'name' => 'id', + 'title' => ts('Contribution ID'), + ], + 'financial_type_id' => [ + 'title' => ts('Financial Type'), + 'default' => TRUE, + ], + 'contribution_status_id' => [ + 'title' => ts('Contribution Status'), + ], + 'contribution_page_id' => [ + 'title' => ts('Contribution Page'), + ], + 'source' => [ + 'title' => ts('Source'), + ], + 'payment_instrument_id' => [ + 'title' => ts('Payment Type'), + ], + 'check_number' => [ + 'title' => ts('Check Number'), + ], + 'currency' => [ + 'required' => TRUE, + 'no_display' => TRUE, + ], + 'trxn_id' => NULL, + 'receive_date' => ['default' => TRUE], + 'receipt_date' => NULL, + 'thankyou_date' => NULL, + 'total_amount' => [ + 'title' => ts('Amount'), + 'required' => TRUE, + ], + 'non_deductible_amount' => [ + 'title' => ts('Non-deductible Amount'), + ], + 'fee_amount' => NULL, + 'net_amount' => NULL, + 'contribution_or_soft' => [ + 'title' => ts('Contribution OR Soft Credit?'), + 'dbAlias' => "'Contribution'", + ], + 'soft_credits' => [ + 'title' => ts('Soft Credits'), + 'dbAlias' => "NULL", + ], + 'soft_credit_for' => [ + 'title' => ts('Soft Credit For'), + 'dbAlias' => "NULL", + ], + 'cancel_date' => [ + 'title' => ts('Cancelled / Refunded Date'), + 'name' => 'contribution_cancel_date', + ], + 'cancel_reason' => [ + 'title' => ts('Cancellation / Refund Reason'), ], ], - 'receive_date' => ['operatorType' => CRM_Report_Form::OP_DATE], - 'thankyou_date' => ['operatorType' => CRM_Report_Form::OP_DATE], - 'contribution_source' => [ - 'title' => ts('Source'), - 'name' => 'source', - 'type' => CRM_Utils_Type::T_STRING, - ], - 'currency' => [ - 'title' => ts('Currency'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Core_OptionGroup::values('currencies_enabled'), - 'default' => NULL, - 'type' => CRM_Utils_Type::T_STRING, - ], - 'non_deductible_amount' => [ - 'title' => ts('Non-deductible Amount'), - ], - 'financial_type_id' => [ - 'title' => ts('Financial Type'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), - 'type' => CRM_Utils_Type::T_INT, - ], - 'contribution_page_id' => [ - 'title' => ts('Contribution Page'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Contribute_PseudoConstant::contributionPage(), - 'type' => CRM_Utils_Type::T_INT, - ], - 'payment_instrument_id' => [ - 'title' => ts('Payment Type'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Contribute_PseudoConstant::paymentInstrument(), - 'type' => CRM_Utils_Type::T_INT, - ], - 'contribution_status_id' => [ - 'title' => ts('Contribution Status'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'), - 'default' => [1], - 'type' => CRM_Utils_Type::T_INT, - ], - 'total_amount' => ['title' => ts('Contribution Amount')], - 'cancel_date' => [ - 'title' => ts('Cancelled / Refunded Date'), - 'operatorType' => CRM_Report_Form::OP_DATE, - 'name' => 'contribution_cancel_date', - ], - 'cancel_reason' => [ - 'title' => ts('Cancellation / Refund Reason'), + 'filters' => [ + 'contribution_or_soft' => [ + 'title' => ts('Contribution OR Soft Credit?'), + 'clause' => "(1)", + 'operatorType' => CRM_Report_Form::OP_SELECT, + 'type' => CRM_Utils_Type::T_STRING, + 'options' => [ + 'contributions_only' => ts('Contributions Only'), + 'soft_credits_only' => ts('Soft Credits Only'), + 'both' => ts('Both'), + ], + ], + 'receive_date' => ['operatorType' => CRM_Report_Form::OP_DATE], + 'thankyou_date' => ['operatorType' => CRM_Report_Form::OP_DATE], + 'contribution_source' => [ + 'title' => ts('Source'), + 'name' => 'source', + 'type' => CRM_Utils_Type::T_STRING, + ], + 'currency' => [ + 'title' => ts('Currency'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Core_OptionGroup::values('currencies_enabled'), + 'default' => NULL, + 'type' => CRM_Utils_Type::T_STRING, + ], + 'non_deductible_amount' => [ + 'title' => ts('Non-deductible Amount'), + ], + 'financial_type_id' => [ + 'title' => ts('Financial Type'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'type' => CRM_Utils_Type::T_INT, + ], + 'contribution_page_id' => [ + 'title' => ts('Contribution Page'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Contribute_PseudoConstant::contributionPage(), + 'type' => CRM_Utils_Type::T_INT, + ], + 'payment_instrument_id' => [ + 'title' => ts('Payment Type'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Contribute_PseudoConstant::paymentInstrument(), + 'type' => CRM_Utils_Type::T_INT, + ], + 'contribution_status_id' => [ + 'title' => ts('Contribution Status'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'), + 'default' => [1], + 'type' => CRM_Utils_Type::T_INT, + ], + 'total_amount' => ['title' => ts('Contribution Amount')], + 'cancel_date' => [ + 'title' => ts('Cancelled / Refunded Date'), + 'operatorType' => CRM_Report_Form::OP_DATE, + 'name' => 'contribution_cancel_date', + ], + 'cancel_reason' => [ + 'title' => ts('Cancellation / Refund Reason'), + ], ], - ], - 'order_bys' => [ - 'financial_type_id' => ['title' => ts('Financial Type')], - 'contribution_status_id' => ['title' => ts('Contribution Status')], - 'payment_instrument_id' => ['title' => ts('Payment Method')], - 'receive_date' => ['title' => ts('Date Received')], - 'thankyou_date' => ['title' => ts('Thank-you Date')], - ], - 'group_bys' => [ - 'contribution_id' => [ - 'name' => 'id', - 'required' => TRUE, - 'default' => TRUE, - 'title' => ts('Contribution'), + 'order_bys' => [ + 'financial_type_id' => ['title' => ts('Financial Type')], + 'contribution_status_id' => ['title' => ts('Contribution Status')], + 'payment_instrument_id' => ['title' => ts('Payment Method')], + 'receive_date' => ['title' => ts('Date Received')], + 'thankyou_date' => ['title' => ts('Thank-you Date')], + ], + 'group_bys' => [ + 'contribution_id' => [ + 'name' => 'id', + 'required' => TRUE, + 'default' => TRUE, + 'title' => ts('Contribution'), + ], ], + 'grouping' => 'contri-fields', ], - 'grouping' => 'contri-fields', - ], - 'civicrm_contribution_soft' => [ - 'dao' => 'CRM_Contribute_DAO_ContributionSoft', - 'fields' => [ - 'soft_credit_type_id' => ['title' => ts('Soft Credit Type')], - 'soft_credit_amount' => ['title' => ts('Soft Credit amount'), 'name' => 'amount', 'type' => CRM_Utils_Type::T_MONEY], - ], - 'filters' => [ - 'soft_credit_type_id' => [ - 'title' => ts('Soft Credit Type'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Core_OptionGroup::values('soft_credit_type'), - 'default' => NULL, - 'type' => CRM_Utils_Type::T_STRING, + 'civicrm_contribution_soft' => [ + 'dao' => 'CRM_Contribute_DAO_ContributionSoft', + 'fields' => [ + 'soft_credit_type_id' => ['title' => ts('Soft Credit Type')], + 'soft_credit_amount' => ['title' => ts('Soft Credit amount'), 'name' => 'amount', 'type' => CRM_Utils_Type::T_MONEY], + ], + 'filters' => [ + 'soft_credit_type_id' => [ + 'title' => ts('Soft Credit Type'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Core_OptionGroup::values('soft_credit_type'), + 'default' => NULL, + 'type' => CRM_Utils_Type::T_STRING, + ], ], - ], - 'group_bys' => [ - 'soft_credit_id' => [ - 'name' => 'id', - 'title' => ts('Soft Credit'), + 'group_bys' => [ + 'soft_credit_id' => [ + 'name' => 'id', + 'title' => ts('Soft Credit'), + ], ], ], - ], - 'civicrm_financial_trxn' => [ - 'dao' => 'CRM_Financial_DAO_FinancialTrxn', - 'fields' => [ - 'card_type_id' => [ - 'title' => ts('Credit Card Type'), + 'civicrm_financial_trxn' => [ + 'dao' => 'CRM_Financial_DAO_FinancialTrxn', + 'fields' => [ + 'card_type_id' => [ + 'title' => ts('Credit Card Type'), + ], ], - ], - 'filters' => [ - 'card_type_id' => [ - 'title' => ts('Credit Card Type'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id'), - 'default' => NULL, - 'type' => CRM_Utils_Type::T_STRING, + 'filters' => [ + 'card_type_id' => [ + 'title' => ts('Credit Card Type'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id'), + 'default' => NULL, + 'type' => CRM_Utils_Type::T_STRING, + ], ], ], - ], - 'civicrm_batch' => [ - 'dao' => 'CRM_Batch_DAO_EntityBatch', - 'grouping' => 'contri-fields', - 'fields' => [ - 'batch_id' => [ - 'name' => 'batch_id', - 'title' => ts('Batch Name'), + 'civicrm_batch' => [ + 'dao' => 'CRM_Batch_DAO_EntityBatch', + 'grouping' => 'contri-fields', + 'fields' => [ + 'batch_id' => [ + 'name' => 'batch_id', + 'title' => ts('Batch Name'), + ], ], - ], - 'filters' => [ - 'bid' => [ - 'title' => ts('Batch Name'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Batch_BAO_Batch::getBatches(), - 'type' => CRM_Utils_Type::T_INT, - 'dbAlias' => 'batch_civireport.batch_id', + 'filters' => [ + 'bid' => [ + 'title' => ts('Batch Name'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => CRM_Batch_BAO_Batch::getBatches(), + 'type' => CRM_Utils_Type::T_INT, + 'dbAlias' => 'batch_civireport.batch_id', + ], ], ], - ], - 'civicrm_contribution_ordinality' => [ - 'dao' => 'CRM_Contribute_DAO_Contribution', - 'alias' => 'cordinality', - 'filters' => [ - 'ordinality' => [ - 'title' => ts('Contribution Ordinality'), - 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => [ - 0 => 'First by Contributor', - 1 => 'Second or Later by Contributor', - ], - 'type' => CRM_Utils_Type::T_INT, + 'civicrm_contribution_ordinality' => [ + 'dao' => 'CRM_Contribute_DAO_Contribution', + 'alias' => 'cordinality', + 'filters' => [ + 'ordinality' => [ + 'title' => ts('Contribution Ordinality'), + 'operatorType' => CRM_Report_Form::OP_MULTISELECT, + 'options' => [ + 0 => 'First by Contributor', + 1 => 'Second or Later by Contributor', + ], + 'type' => CRM_Utils_Type::T_INT, + ], ], ], - ], - 'civicrm_note' => [ - 'dao' => 'CRM_Core_DAO_Note', - 'fields' => [ - 'contribution_note' => [ - 'name' => 'note', - 'title' => ts('Contribution Note'), + 'civicrm_note' => [ + 'dao' => 'CRM_Core_DAO_Note', + 'fields' => [ + 'contribution_note' => [ + 'name' => 'note', + 'title' => ts('Contribution Note'), + ], ], - ], - 'filters' => [ - 'note' => [ - 'name' => 'note', - 'title' => ts('Contribution Note'), - 'operator' => 'like', - 'type' => CRM_Utils_Type::T_STRING, + 'filters' => [ + 'note' => [ + 'name' => 'note', + 'title' => ts('Contribution Note'), + 'operator' => 'like', + 'type' => CRM_Utils_Type::T_STRING, + ], ], ], ], - ]) + $this->addAddressFields(FALSE); + $this->getColumns('Address') + ); // The tests test for this variation of the sort_name field. Don't argue with the tests :-). $this->_columns['civicrm_contact']['fields']['sort_name']['title'] = ts('Donor Name'); + $this->_groupFilter = TRUE; $this->_tagFilter = TRUE; // If we have campaigns enabled, add those elements to both the fields, filters and sorting diff --git a/civicrm/CRM/Report/Form/Contribute/History.php b/civicrm/CRM/Report/Form/Contribute/History.php index e0c79133e65bd9754b508044bea809815b6373f2..99983fcf3f07fe38ff9843322470c62c8b6aa2bc 100644 --- a/civicrm/CRM/Report/Form/Contribute/History.php +++ b/civicrm/CRM/Report/Form/Contribute/History.php @@ -39,6 +39,9 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form { protected $_yearStatisticsTo = ''; /** + * Class constructor. + * + * @throws \CRM_Core_Exception */ public function __construct() { $this->_autoIncludeIndexedFieldsAsOrderBys = 1; diff --git a/civicrm/CRM/Report/Form/Contribute/Summary.php b/civicrm/CRM/Report/Form/Contribute/Summary.php index fe273cd31a5acf0df9c231b6bbdeaabdc894101c..ab65d97d302abc0a2c9bd766e108c737c6c56197 100644 --- a/civicrm/CRM/Report/Form/Contribute/Summary.php +++ b/civicrm/CRM/Report/Form/Contribute/Summary.php @@ -611,8 +611,14 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { $group = "\nGROUP BY {$this->_aliases['civicrm_contribution']}.currency"; $this->from('contribution'); + if ($softCredit) { + $this->from(); + } $this->customDataFrom(); + // Ensure that Extensions that modify the from statement in the sql also modify it in the statistics. + CRM_Utils_Hook::alterReportVar('sql', $this, $this); + $contriQuery = " COUNT({$this->_aliases['civicrm_contribution']}.total_amount ) as civicrm_contribution_total_amount_count, SUM({$this->_aliases['civicrm_contribution']}.total_amount ) as civicrm_contribution_total_amount_sum, @@ -621,8 +627,6 @@ ROUND(AVG({$this->_aliases['civicrm_contribution']}.total_amount), 2) as civicrm {$this->_from} {$this->_where}"; if ($softCredit) { - $this->from(); - $this->customDataFrom(); $select = " COUNT({$this->_aliases['civicrm_contribution_soft']}.amount ) as civicrm_contribution_soft_soft_amount_count, SUM({$this->_aliases['civicrm_contribution_soft']}.amount ) as civicrm_contribution_soft_soft_amount_sum, diff --git a/civicrm/CRM/Report/Form/Instance.php b/civicrm/CRM/Report/Form/Instance.php index 8f00408a17909462abaeb7656c7f7a811569b64d..4ca1b81ad2e162a4cf109f09661acbef2a4e8e97 100644 --- a/civicrm/CRM/Report/Form/Instance.php +++ b/civicrm/CRM/Report/Form/Instance.php @@ -109,11 +109,7 @@ class CRM_Report_Form_Instance { ); // prepare user_roles to save as names not as ids - if (function_exists('user_roles')) { - $user_roles_array = user_roles(); - foreach ($user_roles_array as $key => $value) { - $user_roles[$value] = $value; - } + if ($user_roles = CRM_Core_Config::singleton()->userSystem->getRoleNames()) { $grouprole = $form->addElement('advmultiselect', 'grouprole', ts('ACL Group/Role'), diff --git a/civicrm/CRM/SMS/Form/Schedule.php b/civicrm/CRM/SMS/Form/Schedule.php index 5cdf860cac108dfcf7781c40a73b7709d32709f9..a3f0a76374ed09a969399b6b05ac5fadf2c96a48 100644 --- a/civicrm/CRM/SMS/Form/Schedule.php +++ b/civicrm/CRM/SMS/Form/Schedule.php @@ -131,9 +131,9 @@ class CRM_SMS_Form_Schedule extends CRM_Core_Form { public function postProcess() { $params = []; - $params['mailing_id'] = $ids['mailing_id'] = $this->_mailingID; + $params['id'] = $this->_mailingID; - if (empty($params['mailing_id'])) { + if (empty($params['id'])) { CRM_Core_Error::statusBounce(ts('Could not find a mailing id')); } @@ -157,7 +157,7 @@ class CRM_SMS_Form_Schedule extends CRM_Core_Form { } // Build the mailing object. - CRM_Mailing_BAO_Mailing::create($params, $ids); + CRM_Mailing_BAO_Mailing::create($params); $session = CRM_Core_Session::singleton(); $session->pushUserContext(CRM_Utils_System::url('civicrm/mailing/browse/scheduled', diff --git a/civicrm/CRM/SMS/Form/Upload.php b/civicrm/CRM/SMS/Form/Upload.php index 1c5f6aa80c4be281aef8ac2f663428116b15c99a..922b2812257e66eadd9905c661b0e88cd2412cdf 100644 --- a/civicrm/CRM/SMS/Form/Upload.php +++ b/civicrm/CRM/SMS/Form/Upload.php @@ -144,7 +144,7 @@ class CRM_SMS_Form_Upload extends CRM_Core_Form { } public function postProcess() { - $params = $ids = []; + $params = []; $uploadParams = ['from_name']; $formValues = $this->controller->exportValues($this->_name); @@ -232,10 +232,10 @@ class CRM_SMS_Form_Upload extends CRM_Core_Form { $this->set('template', $params['msg_template_id']); } - $ids['mailing_id'] = $this->_mailingID; + $params['id'] = $this->_mailingID; // Build SMS in mailing table. - CRM_Mailing_BAO_Mailing::create($params, $ids); + CRM_Mailing_BAO_Mailing::create($params); } /** diff --git a/civicrm/CRM/UF/Form/Group.php b/civicrm/CRM/UF/Form/Group.php index e000616f5ecf16f661f9517b19dee458e19d8fc9..f531dfbbb840d47509f99c39c5eda606564220a5 100644 --- a/civicrm/CRM/UF/Form/Group.php +++ b/civicrm/CRM/UF/Form/Group.php @@ -390,7 +390,7 @@ class CRM_UF_Form_Group extends CRM_Core_Form { if (!empty($params['is_active'])) { //make entry in uf join table - CRM_Core_BAO_UFGroup::createUFJoin($params, $ufGroup->id); + CRM_Core_BAO_UFGroup::createUFJoin($params['weight'], $params['uf_group_type'] ?? [], $ufGroup->id); } elseif ($this->_id) { // this profile has been set to inactive, delete all corresponding UF Join's diff --git a/civicrm/CRM/UF/Page/ProfileEditor.php b/civicrm/CRM/UF/Page/ProfileEditor.php index 9d4e38a7b1bcf58942a4d62e02f02147542c5f3e..bbd6c1f49b9abd120a77cf2acbd7df2b026a7629 100644 --- a/civicrm/CRM/UF/Page/ProfileEditor.php +++ b/civicrm/CRM/UF/Page/ProfileEditor.php @@ -54,17 +54,17 @@ class CRM_UF_Page_ProfileEditor extends CRM_Core_Page { 'profilePreviewKey' => CRM_Core_Key::get('CRM_UF_Form_Inline_Preview', TRUE), ]; }) - ->addScriptFile('civicrm', 'packages/backbone/json2.js', 100, 'html-header', FALSE) - ->addScriptFile('civicrm', 'packages/backbone/backbone.js', 120, 'html-header') - ->addScriptFile('civicrm', 'packages/backbone/backbone.marionette.js', 125, 'html-header', FALSE) - ->addScriptFile('civicrm', 'packages/backbone/backbone.collectionsubset.js', 125, 'html-header', FALSE) - ->addScriptFile('civicrm', 'packages/backbone-forms/distribution/backbone-forms.js', 130, 'html-header', FALSE) - ->addScriptFile('civicrm', 'packages/backbone-forms/distribution/adapters/backbone.bootstrap-modal.min.js', 140, 'html-header', FALSE) - ->addScriptFile('civicrm', 'packages/backbone-forms/distribution/editors/list.min.js', 140, 'html-header', FALSE) - ->addStyleFile('civicrm', 'packages/backbone-forms/distribution/templates/default.css', 140, 'html-header') + ->addScriptFile('civicrm.packages', 'backbone/json2.js', 100, 'html-header', FALSE) + ->addScriptFile('civicrm.packages', 'backbone/backbone.js', 120, 'html-header') + ->addScriptFile('civicrm.packages', 'backbone/backbone.marionette.js', 125, 'html-header', FALSE) + ->addScriptFile('civicrm.packages', 'backbone/backbone.collectionsubset.js', 125, 'html-header', FALSE) + ->addScriptFile('civicrm.packages', 'backbone-forms/distribution/backbone-forms.js', 130, 'html-header', FALSE) + ->addScriptFile('civicrm.packages', 'backbone-forms/distribution/adapters/backbone.bootstrap-modal.min.js', 140, 'html-header', FALSE) + ->addScriptFile('civicrm.packages', 'backbone-forms/distribution/editors/list.min.js', 140, 'html-header', FALSE) + ->addStyleFile('civicrm.packages', 'backbone-forms/distribution/templates/default.css', 140, 'html-header') ->addScript('CRM.BB = Backbone.noConflict();', 300, 'html-header') - ->addScriptFile('civicrm', 'packages/jquery/plugins/jstree/jquery.jstree.js', 0, 'html-header', FALSE) - ->addStyleFile('civicrm', 'packages/jquery/plugins/jstree/themes/default/style.css', 0, 'html-header') + ->addScriptFile('civicrm.packages', 'jquery/plugins/jstree/jquery.jstree.js', 0, 'html-header', FALSE) + ->addStyleFile('civicrm.packages', 'jquery/plugins/jstree/themes/default/style.css', 0, 'html-header') ->addStyleFile('civicrm', 'css/crm.designer.css', 140, 'html-header') ->addScriptFile('civicrm', 'js/crm.backbone.js', 150) ->addScriptFile('civicrm', 'js/model/crm.schema-mapped.js', 200) diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index 4d9f5ea5f55ec040c60d9321dbe4940be9adef00..ab3de5688f6b734c6a740927c9735c6bf9acbb56 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -35,6 +35,8 @@ class CRM_Upgrade_Form extends CRM_Core_Form { * Minimum php version required to run (equal to or lower than the minimum install version) * * As of Civi 5.16, using PHP 5.x will lead to a hard crash during bootstrap. + * + * Tip: Keep in sync with composer.json ("config => platform => php") */ const MINIMUM_PHP_VERSION = '7.0.0'; diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index bde6bb675bd462e23ab3906442cce03a7f2a9e18..0faa6012e410c025b9023327cc4cef5e047e70dc 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Core\SettingsBag; + /** * Base class for incremental upgrades */ @@ -195,11 +197,16 @@ class CRM_Upgrade_Incremental_Base { * @return bool */ public static function updateContributeSettings($ctx) { - $settings = Civi::settings()->get('contribution_invoice_settings'); - $metadata = \Civi\Core\SettingsMetadata::getMetadata(); - $conversions = array_intersect_key((array) $settings, $metadata); - foreach ($conversions as $key => $conversion) { - Civi::settings()->set($key, $conversion); + // Use a direct query as api now does some handling on this. + $settings = CRM_Core_DAO::executeQuery("SELECT value, domain_id FROM civicrm_setting WHERE name = 'contribution_invoice_settings'"); + + while ($settings->fetch()) { + $contributionSettings = (array) CRM_Utils_String::unserialize($settings->value); + foreach (array_merge(SettingsBag::getContributionInvoiceSettingKeys(), ['deferred_revenue_enabled' => 'deferred_revenue_enabled']) as $possibleKeyName => $settingName) { + if (!empty($contributionSettings[$possibleKeyName]) && empty(Civi::settings($settings->domain_id)->getExplicit($settingName))) { + Civi::settings($settings->domain_id)->set($settingName, $contributionSettings[$possibleKeyName]); + } + } } return TRUE; } diff --git a/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php b/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php index 21ecf3ec004d57794a13ae0455763f8f543aa04c..1a7c945a800c33c6f535e87097f0dbcd0b0f1e8e 100644 --- a/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php +++ b/civicrm/CRM/Upgrade/Incremental/MessageTemplates.php @@ -199,6 +199,15 @@ class CRM_Upgrade_Incremental_MessageTemplates { ['name' => 'membership_online_receipt', 'type' => 'html'], ], ], + [ + 'version' => '5.23.alpha1', + 'upgrade_descriptor' => ts('Add Contributor Name to Offline Contribution receipts; fix bad event self-service URL'), + 'templates' => [ + ['name' => 'contribution_offline_receipt', 'type' => 'text'], + ['name' => 'contribution_offline_receipt', 'type' => 'html'], + ['name' => 'participant_confirm', 'type' => 'html'], + ], + ], ]; } diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyThree.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyThree.php new file mode 100644 index 0000000000000000000000000000000000000000..4803387fc0966454f0fe0736a1283302fd70bddb --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyThree.php @@ -0,0 +1,170 @@ +<?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 FiveTwentyThree */ +class CRM_Upgrade_Incremental_php_FiveTwentyThree extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each upcoming + * revision to the database. + * + * @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) { + // 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>'; + // } + if ($rev == '5.23.alpha1' && version_compare($currentVer, '4.7', '>=')) { + if ($this->hasConfigBackendData()) { + $preUpgradeMessage .= '<br/>' . ts("WARNING: The column \"<code>civicrm_domain.config_backend</code>\" is <a href='%2'>flagged for removal</a>. However, the upgrader has detected data in this copy of \"<code>civicrm_domain.config_backend</code>\". Please <a href='%1' target='_blank'>report</a> anything you can about the usage of this column. In the mean-time, the data will be preserved.", [ + 1 => 'https://civicrm.org/bug-reporting', + 2 => 'https://lab.civicrm.org/dev/core/issues/1387', + ]); + } + } + } + + /** + * 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) { + // 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'."); + // } + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + // /** + // * Upgrade function. + // * + // * @param string $rev + // */ + // public function upgrade_5_0_x($rev) { + // $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + // $this->addTask('Do the foo change', 'taskFoo', ...); + // // Additional tasks here... + // // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. + // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. + // } + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_23_alpha1($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('Remove Google + location option', 'removeGooglePlusOption'); + $this->addTask('dev/mailing#59 Add in IMAP_XOAUTH2 protocol option for mailbox access', 'addXoauth2ProtocolOption'); + $this->addTask('dev/translation#34 Fix contact-reference option for Postal Code', 'fixContactRefOptionPostalCode'); + + // (dev/core#1387) This column was dropped in 4.7.alpha1, but it was still created on new installs. + if (!$this->hasConfigBackendData()) { + $this->addTask('Drop column "civicrm_domain.config_backend"', 'dropColumn', 'civicrm_domain', 'config_backend'); + } + } + + /** + * Add in the IMAP XOAUTH2 mailing protocol option + */ + public static function addXoauth2ProtocolOption(CRM_Queue_TaskContext $ctx) { + CRM_Core_BAO_OptionValue::ensureOptionValueExists([ + 'option_group_id' => 'mail_protocol', + 'name' => 'IMAP_XOAUTH2', + 'label' => 'IMAP XOAUTH2', + 'is_active' => FALSE, + ]); + return TRUE; + } + + /** + * Remove Google + option value option for website type + * only if there is no websites using it + */ + public static function removeGooglePlusOption(CRM_Queue_TaskContext $ctx) { + $googlePlusValue = CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Website', 'website_type_id', 'Google_'); + if ($googlePlusValue) { + $values = CRM_Core_DAO::executeQuery("SELECT * FROM civicrm_website WHERE website_type_id = %1", [1 => [$googlePlusValue, 'Positive']])->fetchAll(); + if (empty($values)) { + $optionGroup = CRM_Core_DAO::singleValueQuery("SELECT id FROM civicrm_option_group WHERE name = 'website_type'"); + \Civi\Api4\OptionValue::delete() + ->addWhere('value', '=', $googlePlusValue) + ->addWhere('option_group_id', '=', $optionGroup) + ->setCheckPermissions(FALSE) + ->execute(); + } + } + return TRUE; + } + + /** + * Fix the Contact Reference 'Postal Code' option. + */ + public static function fixContactRefOptionPostalCode(CRM_Queue_TaskContext $ctx) { + $optionGroup = \Civi\Api4\OptionGroup::get() + ->setSelect(['id']) + ->addWhere('name', '=', 'contact_reference_options') + ->setCheckPermissions(FALSE) + ->execute() + ->first(); + + if (!$optionGroup) { + return TRUE; + } + + $optionValue = \Civi\Api4\OptionValue::get() + ->setSelect(['id', 'name']) + ->addWhere('option_group_id', '=', $optionGroup['id']) + ->addWhere('label', '=', ts('Postal Code')) + ->setCheckPermissions(FALSE) + ->execute() + ->first(); + + if (!$optionValue || $optionValue['name'] == 'postal_code') { + return TRUE; + } + + \Civi\Api4\OptionValue::update() + ->addWhere('id', '=', $optionValue['id']) + ->addValue('name', 'postal_code') + ->setCheckPermissions(FALSE) + ->execute(); + + return TRUE; + } + + /** + * @return bool + */ + private function hasConfigBackendData() { + return CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_domain', 'config_backend') + && CRM_Core_DAO::singleValueQuery('SELECT count(*) c FROM `civicrm_domain` WHERE config_backend IS NOT NULL') > 0; + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php b/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php index eee123e7ce7b8c2fb0ed5c683f0f300450c5f524..30724c0508a7b17bdc644f3426a9a5c65748e681 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php @@ -455,9 +455,10 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); $this->addTask('CRM-20572: Fix date fields in save search criteria of Contrib Sybunt custom search ', 'fixDateFieldsInSmartGroups'); // CRM-20868 : Update invoice_numbers (in batch) with value in [invoice prefix][contribution id] format - if ($invoicePrefix = CRM_Contribute_BAO_Contribution::checkContributeSettings('invoice_prefix', TRUE)) { + $contributionSettings = Civi::settings()->get('contribution_invoice_settings'); + if (!empty($contributionSettings['invoicing']) && !empty($contributionSettings['invoice_prefix'])) { list($minId, $maxId) = CRM_Core_DAO::executeQuery("SELECT coalesce(min(id),0), coalesce(max(id),0) - FROM civicrm_contribution ")->getDatabaseResult()->fetchRow(); + FROM civicrm_contribution ")->getDatabaseResult()->fetchRow(); for ($startId = $minId; $startId <= $maxId; $startId += self::BATCH_SIZE) { $endId = $startId + self::BATCH_SIZE - 1; $title = ts("Upgrade DB to %1: Update Contribution Invoice number (%2 => %3)", [ @@ -465,7 +466,7 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base 2 => $startId, 3 => $endId, ]); - $this->addTask($title, 'updateContributionInvoiceNumber', $startId, $endId, $invoicePrefix); + $this->addTask($title, 'updateContributionInvoiceNumber', $startId, $endId, $contributionSettings['invoice_prefix']); } } diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.3.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.3.4.mysql.tpl index d564c44fb7e9851d00263540d4abb5c6614120e4..4da5c51ee89800a7e0edad3dd1a3cf59b629d342 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.3.4.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.3.4.mysql.tpl @@ -9,8 +9,8 @@ VALUES SELECT @option_group_id_csgOpt := max(id) FROM civicrm_option_group WHERE name = 'contact_smart_group_display'; INSERT INTO -civicrm_option_value (option_group_id, {localize field='label'}label{/localize}, value, name, grouping, filter, -is_default, weight) +civicrm_option_value (`option_group_id`, {localize field='label'}label{/localize}, `value`, `name`, `grouping`, `filter`, +`is_default`, `weight`) VALUES (@option_group_id_csgOpt, {localize}'Show Smart Groups on Demand'{/localize}, 1, 'showondemand', NULL, 0, 0, 1), (@option_group_id_csgOpt, {localize}'Always Show Smart Groups'{/localize}, 2, 'alwaysshow', NULL, 0, 0, 2), diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.10.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.10.mysql.tpl index 52e04cca5f9dfab2ea9e3faf83bc2644279d211c..fb4220c7555a77759bbe3da3c65b3cc8e5c1a469 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.7.10.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.10.mysql.tpl @@ -3,7 +3,7 @@ SELECT @option_group_id_report := max(id) from civicrm_option_group where name = SELECT @contributeCompId := max(id) FROM civicrm_component where name = 'CiviContribute'; SELECT @option_group_id_report_wt := MAX(weight) FROM civicrm_option_value WHERE option_group_id = @option_group_id_report; 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) + 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_report, {localize}'{ts escape="sql"}Deferred Revenue Details{/ts}'{/localize}, 'contribute/deferredrevenue', 'CRM_Report_Form_Contribute_DeferredRevenue', NULL, 0, NULL, @option_group_id_report_wt+1, {localize}'{ts escape="sql"}Deferred Revenue Details Report{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.25.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.25.mysql.tpl index 7bb3bcebaadd68b4e060e71f8a7a0fe8e6560b94..d6d7aba13beb9b43882f1ceecbe13323c7f86d7d 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.7.25.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.25.mysql.tpl @@ -8,7 +8,7 @@ INSERT INTO civicrm_option_group (name, {localize field='title'}title{/localize}, is_reserved, is_active) VALUES ('environment', {localize}'{ts escape="sql"}Environment{/ts}'{/localize}, 0, 1); SELECT @option_group_id_env := max(id) from civicrm_option_group where name = 'environment'; -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) +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_env, {localize}'{ts escape="sql"}Production{/ts}'{/localize}, 'Production', 'Production', NULL, 0, 1, 1, {localize}'{ts escape="sql"}Production Environment{/ts}'{/localize}, 0, 0, 1, NULL, NULL), (@option_group_id_env, {localize}'{ts escape="sql"}Staging{/ts}'{/localize}, 'Staging', 'Staging', NULL, 0, NULL, 2, {localize}'{ts escape="sql"}Staging Environment{/ts}'{/localize}, 0, 0, 1, NULL, NULL), diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.beta1.mysql.tpl index 47843e9ecc6a4733b4c13e2d92bc1ec19eb11355..1f3d76106b5dd7ce6c3078ddc8fa8d52876b5a6c 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.7.beta1.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.beta1.mysql.tpl @@ -4,7 +4,7 @@ SELECT @option_group_id_report := max(id) from civicrm_option_group where name = 'report_template'; 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) + 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_report, {localize}'{ts escape="sql"}Recurring Contributions Summary{/ts}'{/localize}, 'contribute/recursummary', 'CRM_Report_Form_Contribute_RecurSummary', NULL, 0, NULL, 49, {localize}'{ts escape="sql"}Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit etc.), showing within a given date range.{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl deleted file mode 100644 index 2326708b087fa99ea27b4dfc7fb44a7e4096840b..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.22.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.1.mysql.tpl deleted file mode 100644 index 4ef6a0d710e0f1446aa101fced7d5ae60249bd68..0000000000000000000000000000000000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.22.1.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.22.1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.23.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.23.0.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..03483bee69b7ce8440fd1cdc1605f9a72f1c171b --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.23.0.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.23.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.23.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.23.alpha1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..54cb0a387166ada595138899dbc6233c4d2ac272 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.23.alpha1.mysql.tpl @@ -0,0 +1,11 @@ +{* file to handle db changes in 5.23.alpha1 during upgrade *} +UPDATE civicrm_payment_processor SET is_default = 0 WHERE is_default IS NULL; +UPDATE civicrm_payment_processor SET is_active = 1 WHERE is_active IS NULL; +UPDATE civicrm_payment_processor SET is_test = 0 WHERE is_test IS NULL; +UPDATE civicrm_payment_processor_type SET is_active = 1 WHERE is_active IS NULL; +UPDATE civicrm_payment_processor_type SET is_default = 0 WHERE is_default IS NULL; +ALTER TABLE civicrm_payment_processor ALTER COLUMN is_default SET DEFAULT 0; +ALTER TABLE civicrm_payment_processor ALTER COLUMN is_active SET DEFAULT 1; +ALTER TABLE civicrm_payment_processor ALTER COLUMN is_test SET DEFAULT 0; +ALTER TABLE civicrm_payment_processor_type ALTER COLUMN is_active SET DEFAULT 1; +ALTER TABLE civicrm_payment_processor_type ALTER COLUMN is_default SET DEFAULT 0; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.23.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.23.beta1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c31449ad8c534211a3a2148dbc8d44b37a214670 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.23.beta1.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.23.beta1 during upgrade *} diff --git a/civicrm/CRM/Utils/API/HTMLInputCoder.php b/civicrm/CRM/Utils/API/HTMLInputCoder.php index adf528920cb94c042f4b8d1a9e404a392d487919..fa5de2b9643defb793ab88509ec44e33770f81a7 100644 --- a/civicrm/CRM/Utils/API/HTMLInputCoder.php +++ b/civicrm/CRM/Utils/API/HTMLInputCoder.php @@ -105,6 +105,10 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { 'content', // CiviCampaign Goal Details 'goal_general', + // https://lab.civicrm.org/dev/core/issues/1286 + 'header', + // https://lab.civicrm.org/dev/core/issues/1286 + 'footer', ]; $custom = CRM_Core_DAO::executeQuery('SELECT id FROM civicrm_custom_field WHERE html_type = "RichTextEditor"'); while ($custom->fetch()) { diff --git a/civicrm/CRM/Utils/Check/Component/Schema.php b/civicrm/CRM/Utils/Check/Component/Schema.php index 8486a18bc8269858cec7f695d7abcb688a261be5..5de044b1b7a6999a24eff615f4ed9ff3ae70919c 100644 --- a/civicrm/CRM/Utils/Check/Component/Schema.php +++ b/civicrm/CRM/Utils/Check/Component/Schema.php @@ -88,4 +88,80 @@ class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component { return $messages; } + /** + * @return array + */ + public function checkSmartGroupCustomFieldCriteria() { + $messages = $problematicSG = []; + $customFieldIds = array_keys(CRM_Core_BAO_CustomField::getFields('ANY', FALSE, FALSE, NULL, NULL, FALSE, FALSE, FALSE)); + $smartGroups = civicrm_api3('SavedSearch', 'get', [ + 'sequential' => 1, + 'options' => ['limit' => 0], + ]); + if (empty($smartGroups['values'])) { + return $messages; + } + foreach ($smartGroups['values'] as $group) { + if (empty($group['form_values'])) { + continue; + } + foreach ($group['form_values'] as $formValues) { + if (substr($formValues[0], 0, 7) == 'custom_') { + list(, $customFieldID) = explode('custom_', $formValues[0]); + if (!in_array($customFieldID, $customFieldIds)) { + $problematicSG[CRM_Contact_BAO_SavedSearch::getName($group['id'], 'id')] = [ + 'title' => CRM_Contact_BAO_SavedSearch::getName($group['id'], 'title'), + 'cfid' => $customFieldID, + 'ssid' => $group['id'], + ]; + } + } + } + } + + if (!empty($problematicSG)) { + $html = ''; + foreach ($problematicSG as $id => $field) { + if (!empty($field['cfid'])) { + try { + $customField = civicrm_api3('CustomField', 'getsingle', [ + 'sequential' => 1, + 'id' => $field['cfid'], + ]); + $fieldName = ts('<a href="%1" title="Edit Custom Field"> %2 </a>', [ + 1 => CRM_Utils_System::url('civicrm/admin/custom/group/field/update', + "action=update&reset=1&gid={$customField['custom_group_id']}&id={$field['cfid']}", TRUE + ), + 2 => $customField['label'], + ]); + } + catch (Exception $e) { + $fieldName = ' <span style="color:red"> - Deleted - </span> '; + } + } + $groupEdit = '<a href="' . CRM_Utils_System::url('civicrm/contact/search/advanced', "?reset=1&ssID={$field['ssid']}", TRUE) . '" title="' . ts('Edit search criteria') . '"> <i class="crm-i fa-pencil"></i> </a>'; + $groupConfig = '<a href="' . CRM_Utils_System::url('civicrm/group', "?reset=1&action=update&id={$id}", TRUE) . '" title="' . ts('Group settings') . '"> <i class="crm-i fa-gear"></i> </a>'; + $html .= "<tr><td>{$id} - {$field['title']} </td><td>{$groupEdit} {$groupConfig}</td><td class='disabled'>{$fieldName}</td>"; + } + + $message = "<p>The following smart groups include custom fields which are disabled/deleted from the database. This may cause errors on group page. + You might need to edit their search criteria and update them to clean outdated fields from saved search OR disable them in order to fix the error.</p> + <p><table><thead><tr><th>Group</th><th></th><th>Custom Field</th> + </tr></thead><tbody> + $html + </tbody></table></p> + "; + + $msg = new CRM_Utils_Check_Message( + __FUNCTION__, + ts($message), + ts('Disabled/Deleted fields on Smart Groups'), + \Psr\Log\LogLevel::WARNING, + 'fa-server' + ); + $messages[] = $msg; + } + return $messages; + } + } diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index 7b57e520dd433b876f6e9a23e84237738f3a7051..5accb77e7a393ca3d25fbe6f022d99ecb8f4904d 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -2033,19 +2033,6 @@ class CRM_Utils_Date { } } - // now we set display date using js, hence we should always setdefault - // 'm/d/Y' format. So that submitted value is alwats mm/dd/YY format - // note that for date display we dynamically create text field - /* - if ( !$format ) { - $format = $config->dateInputFormat; - } - - // get actual format - $actualPHPFormats = CRM_Core_SelectValues::datePluginToPHPFormats( ); - $dateFormat = CRM_Utils_Array::value( $format, $actualPHPFormats ); - */ - $dateFormat = 'm/d/Y'; $date = date($dateFormat, strtotime($mysqlDate)); diff --git a/civicrm/CRM/Utils/Money.php b/civicrm/CRM/Utils/Money.php index a523fed925b924dd1d31419020e0b63b5d7c7261..0e8cd6d76cc9497462ee6eaf066d9ae67f8176a7 100644 --- a/civicrm/CRM/Utils/Money.php +++ b/civicrm/CRM/Utils/Money.php @@ -122,6 +122,10 @@ class CRM_Utils_Money { /** * Subtract currencies using integers instead of floats, to preserve precision * + * @param string|float $leftOp + * @param string|float $rightOp + * @param string $currency + * * @return float * Result of subtracting $rightOp from $leftOp to the precision of $currency */ diff --git a/civicrm/CRM/Utils/Rule.php b/civicrm/CRM/Utils/Rule.php index bb8be3aa21f310aac092a355a97531ebc570e06a..e7f890b3efe690d69c66c84d3d5b98e9c6e698e8 100644 --- a/civicrm/CRM/Utils/Rule.php +++ b/civicrm/CRM/Utils/Rule.php @@ -596,19 +596,6 @@ class CRM_Utils_Rule { * @return bool */ public static function money($value) { - $config = CRM_Core_Config::singleton(); - - // only edge case when we have a decimal point in the input money - // field and not defined in the decimal Point in config settings - if ($config->monetaryDecimalPoint && - $config->monetaryDecimalPoint != '.' && - // CRM-7122 also check for Thousands Separator in config settings - $config->monetaryThousandSeparator != '.' && - substr_count($value, '.') - ) { - return FALSE; - } - $value = self::cleanMoney($value); if (self::integer($value)) { diff --git a/civicrm/CRM/Utils/SQL/TempTable.php b/civicrm/CRM/Utils/SQL/TempTable.php index 0681978495b7a2cbd94d8bff009208afe2a693d0..f8c4e82d563f9907e988c98baf81c50ec000c4ee 100644 --- a/civicrm/CRM/Utils/SQL/TempTable.php +++ b/civicrm/CRM/Utils/SQL/TempTable.php @@ -125,7 +125,7 @@ class CRM_Utils_SQL_TempTable { $sql = sprintf('%s %s %s AS %s', $this->toSQL('CREATE'), $this->memory ? self::MEMORY : self::INNODB, - $this->utf8 ? self::UTF8 : '', + $this->getUtf8String(), ($selectQuery instanceof CRM_Utils_SQL_Select ? $selectQuery->toSQL() : $selectQuery) ); CRM_Core_DAO::executeQuery($sql, [], TRUE, NULL, TRUE, FALSE); @@ -133,6 +133,29 @@ class CRM_Utils_SQL_TempTable { return $this; } + /** + * Get the utf8 string for the table. + * + * If the db collation is already utf8 by default (either + * utf8 or utf84mb) then rely on that. Otherwise set to utf8. + * + * Respecting the DB collation supports utf8mb4 adopters, which is currently + * not the norm in civi installs. + * + * @return string + */ + public function getUtf8String() { + if (!$this->utf8) { + return ''; + } + $dbUTF = CRM_Core_BAO_SchemaHandler::getDBCollation(); + if (in_array($dbUTF, ['utf8_unicode_ci', 'utf8mb4_unicode_ci']) + && in_array($dbUTF, ['utf8', 'utf8mb4'])) { + return ''; + } + return self::UTF8; + } + /** * Create the empty table. * diff --git a/civicrm/CRM/Utils/String.php b/civicrm/CRM/Utils/String.php index 95eda6658d340e5bad3215a370b397249c0bbe93..1c878580af9a2dd1c74e484d5aff80702d426905 100644 --- a/civicrm/CRM/Utils/String.php +++ b/civicrm/CRM/Utils/String.php @@ -433,7 +433,7 @@ class CRM_Utils_String { * the converted string */ public static function htmlToText($html) { - require_once 'packages/html2text/rcube_html2text.php'; + require_once 'html2text/rcube_html2text.php'; $token_html = preg_replace('!\{([a-z_.]+)\}!i', 'token:{$1}', $html); $converter = new rcube_html2text($token_html); $token_text = $converter->get_text(); @@ -952,4 +952,23 @@ class CRM_Utils_String { } } + /** + * Returns the plural form of an English word. + * + * @param string $str + * @return string + */ + public static function pluralize($str) { + switch (substr($str, -1)) { + case 's': + return $str . 'es'; + + case 'y': + return substr($str, 0, -1) . 'ies'; + + default: + return $str . 's'; + } + } + } diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index 21cfda96a144c38658cb276bbe3c2f6371b87b0b..29b043f1568eff6d62002f278ac4c0fdba52e5f6 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -284,6 +284,43 @@ class CRM_Utils_System { return $url; } + /** + * Generates an extern url. + * + * @param string $path + * The extern path, such as "extern/url". + * @param string $query + * A query string to append to the link. + * @param string $fragment + * A fragment identifier (named anchor) to append to the link. + * @param bool $absolute + * Whether to force the output to be an absolute link (beginning with a + * URI-scheme such as 'http:'). + * @param bool $isSSL + * NULL to autodetect. TRUE to force to SSL. + * + * @return string rawencoded URL. + */ + public static function externUrl($path = NULL, $query = NULL, $fragment = NULL, $absolute = TRUE, $isSSL = NULL) { + $query = self::makeQueryString($query); + + $url = Civi::paths()->getUrl("[civicrm.root]/{$path}.php", $absolute ? 'absolute' : 'relative', $isSSL) + . ($query ? "?$query" : "") + . ($fragment ? "#$fragment" : ""); + + $parsedUrl = CRM_Utils_Url::parseUrl($url); + $event = \Civi\Core\Event\GenericHookEvent::create([ + 'url' => &$parsedUrl, + 'path' => $path, + 'query' => $query, + 'fragment' => $fragment, + 'absolute' => $absolute, + 'isSSL' => $isSSL, + ]); + Civi::service('dispatcher')->dispatch('hook_civicrm_alterExternUrl', $event); + return urldecode(CRM_Utils_Url::unparseUrl($event->url)); + } + /** * Path of the current page e.g. 'civicrm/contact/view' * @@ -1443,6 +1480,9 @@ class CRM_Utils_System { // reset ACL cache CRM_ACL_BAO_Cache::resetCache(); + // clear asset builder folder + \Civi::service('asset_builder')->clear(FALSE); + // reset various static arrays used here CRM_Contact_BAO_Contact::$_importableFields = CRM_Contact_BAO_Contact::$_exportableFields = CRM_Contribute_BAO_Contribution::$_importableFields @@ -1746,13 +1786,14 @@ class CRM_Utils_System { } else { $config = CRM_Core_Config::singleton(); + $tsLocale = CRM_Core_I18n::getLocale(); $vars = [ '{ver}' => CRM_Utils_System::version(), '{uf}' => $config->userFramework, '{php}' => phpversion(), '{sid}' => self::getSiteID(), '{baseUrl}' => $config->userFrameworkBaseURL, - '{lang}' => $config->lcMessages, + '{lang}' => $tsLocale, '{co}' => $config->defaultContactCountry, ]; return strtr($url, array_map('urlencode', $vars)); diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index 8f16278794ae39a4f629981a23bd4c55f7c84447..c49b8afba2db3caa8499066acbe59a2f7a67da3b 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -974,4 +974,20 @@ abstract class CRM_Utils_System_Base { CRM_Utils_System::civiExit(); } + /** + * Start a new session. + */ + public function sessionStart() { + session_start(); + } + + /** + * Get role names + * + * @return array|null + */ + public function getRoleNames() { + return NULL; + } + } diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index 68a91361e3ea2df9274ce35b887686925a18b660..a548406ddf5c6e304d734904576e2c718d4777ab 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -761,7 +761,7 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { if ($addLanguagePart && !empty($config['prefixes'][$language])) { $url .= $config['prefixes'][$language] . '/'; } - if ($removeLanguagePart) { + if ($removeLanguagePart && !empty($config['prefixes'][$language])) { $url = str_replace("/" . $config['prefixes'][$language] . "/", '/', $url); } } @@ -794,4 +794,13 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { return $url; } + /** + * Get role names + * + * @return array|null + */ + public function getRoleNames() { + return user_role_names(); + } + } diff --git a/civicrm/CRM/Utils/System/DrupalBase.php b/civicrm/CRM/Utils/System/DrupalBase.php index 5521bd4efd22f16b7fba5aeb8386de0ae2d1e273..380a9f07d90469151dc6ce786d918c9941207252 100644 --- a/civicrm/CRM/Utils/System/DrupalBase.php +++ b/civicrm/CRM/Utils/System/DrupalBase.php @@ -13,8 +13,6 @@ * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id$ - * */ /** @@ -667,4 +665,29 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base { return FALSE; } + /** + * Start a new session. + */ + public function sessionStart() { + if (function_exists('drupal_session_start')) { + // https://issues.civicrm.org/jira/browse/CRM-14356 + if (!(isset($GLOBALS['lazy_session']) && $GLOBALS['lazy_session'] == TRUE)) { + drupal_session_start(); + } + $_SESSION = []; + } + else { + session_start(); + } + } + + /** + * Get role names + * + * @return array|null + */ + public function getRoleNames() { + return array_combine(user_roles(), user_roles()); + } + } diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index f83c1f3c7bd7b1c03c5f5b21605b4767d5be2975..d1cbaec0872b4d20f01f1b55dfe6a6899f2e7b11 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -417,8 +417,11 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { elseif (defined('ICL_LANGUAGE_CODE')) { $language = ICL_LANGUAGE_CODE; } - - // TODO: set language variable for others WordPress plugin + // Wordpress "standard" single language mode + // We still have to check if the function exists as it may not during bootstrap + elseif (function_exists('get_locale')) { + $language = get_locale(); + } if (!empty($language)) { return CRM_Core_I18n_PseudoConstant::longForShort(substr($language, 0, 2)); @@ -835,13 +838,11 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { $contactCreated = 0; $contactMatching = 0; - // previously used $wpdb - which means WordPress *must* be bootstrapped - $wpUsers = get_users(array( - 'blog_id' => get_current_blog_id(), - 'number' => -1, - )); + global $wpdb; + $wpUserIds = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users"); - foreach ($wpUsers as $wpUserData) { + foreach ($wpUserIds as $wpUserId) { + $wpUserData = get_userdata($wpUserId); $contactCount++; if ($match = CRM_Core_BAO_UFMatch::synchronizeUFMatch($wpUserData, $wpUserData->$id, diff --git a/civicrm/CRM/Utils/Token.php b/civicrm/CRM/Utils/Token.php index 4f8729229981ef6167c752bb15e413032e96c3f6..156f87a279d751b95f13246a047426364506da25 100644 --- a/civicrm/CRM/Utils/Token.php +++ b/civicrm/CRM/Utils/Token.php @@ -35,6 +35,7 @@ class CRM_Utils_Token { ], 'mailing' => [ 'id', + 'key', 'name', 'group', 'subject', @@ -450,6 +451,14 @@ class CRM_Utils_Token { $value = $mailing ? $mailing->id : 'undefined'; break; + // Key is the ID, or the hash when the hash URLs setting is enabled + case 'key': + $value = $mailing->id; + if ($hash = CRM_Mailing_BAO_Mailing::getMailingHash($value)) { + $value = $hash; + } + break; + case 'name': $value = $mailing ? $mailing->name : 'Mailing Name'; break; @@ -1603,7 +1612,7 @@ class CRM_Utils_Token { /** * @param int $caseId - * @param int $str + * @param string $str * @param array $knownTokens * @param bool $escapeSmarty * @return string @@ -1875,7 +1884,7 @@ class CRM_Utils_Token { else { $split = explode('.', trim($k, '{}')); if (isset($split[1])) { - $entity = array_key_exists($split[1], CRM_Core_DAO_Address::export()) ? 'Address' : ucfirst($split[0]); + $entity = array_key_exists($split[1], CRM_Core_DAO_Address::export()) ? 'Address' : ucwords(str_replace('_', ' ', $split[0])); } else { $entity = 'Contact'; diff --git a/civicrm/CRM/Utils/XML.php b/civicrm/CRM/Utils/XML.php index 278ca494c3afb963c41af31d416aaad41c815c27..47619c1c6a5a13eca6554b2e2389a744adadf97e 100644 --- a/civicrm/CRM/Utils/XML.php +++ b/civicrm/CRM/Utils/XML.php @@ -36,9 +36,10 @@ class CRM_Utils_XML { $oldLibXMLErrors = libxml_use_internal_errors(); libxml_use_internal_errors(TRUE); - $xml = simplexml_load_file($file, - 'SimpleXMLElement', LIBXML_NOCDATA - ); + // Note that under obscure circumstances calling simplexml_load_file + // hit https://bugs.php.net/bug.php?id=62577 + $string = file_get_contents($file); + $xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA); if ($xml === FALSE) { $error = self::formatErrors(libxml_get_errors()); } diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php index c23658b952912e416dd996f6546249c764a045b7..9aaa03a274845fbebd510227aa71387f34c5d8a2 100644 --- a/civicrm/Civi/API/Kernel.php +++ b/civicrm/Civi/API/Kernel.php @@ -132,12 +132,12 @@ class Kernel { } /** - * Execute an API request. + * Execute an API v3 or v4 request. * * The request must be in canonical format. Exceptions will be propagated out. * - * @param array $apiRequest - * @return array + * @param array|\Civi\Api4\Generic\AbstractAction $apiRequest + * @return array|\Civi\Api4\Generic\Result * @throws \API_Exception * @throws \Civi\API\Exception\NotImplementedException * @throws \Civi\API\Exception\UnauthorizedException @@ -157,17 +157,16 @@ class Kernel { /** * Bootstrap - Load basic dependencies and sanity-check inputs. * - * @param \Civi\API\V4\Action|array $apiRequest + * @param \Civi\Api4\Generic\AbstractAction|array $apiRequest * @throws \API_Exception */ public function boot($apiRequest) { require_once 'api/Exception.php'; - - if (!is_array($apiRequest['params'])) { - throw new \API_Exception('Input variable `params` is not an array', 2000); - } switch ($apiRequest['version']) { case 3: + if (!is_array($apiRequest['params'])) { + throw new \API_Exception('Input variable `params` is not an array', 2000); + } require_once 'api/v3/utils.php'; _civicrm_api3_initialize(); break; diff --git a/civicrm/Civi/API/Subscriber/XDebugSubscriber.php b/civicrm/Civi/API/Subscriber/XDebugSubscriber.php index 4b2f6d9a24d8fe7c88890795fff15596a0dc3f25..aec0c1259e935c838fe4b51ee7e651f1503daae0 100644 --- a/civicrm/Civi/API/Subscriber/XDebugSubscriber.php +++ b/civicrm/Civi/API/Subscriber/XDebugSubscriber.php @@ -36,14 +36,26 @@ class XDebugSubscriber implements EventSubscriberInterface { public function onApiRespond(\Civi\API\Event\RespondEvent $event) { $apiRequest = $event->getApiRequest(); $result = $event->getResponse(); - if (function_exists('xdebug_time_index') - && \CRM_Utils_Array::value('debug', $apiRequest['params']) - // result would not be an array for getvalue - && is_array($result) + if ( + function_exists('xdebug_time_index') + && !empty($apiRequest['params']['debug']) + && (empty($apiRequest['params']['check_permissions']) || \CRM_Core_Permission::check('view debug output')) ) { - $result['xdebug']['peakMemory'] = xdebug_peak_memory_usage(); - $result['xdebug']['memory'] = xdebug_memory_usage(); - $result['xdebug']['timeIndex'] = xdebug_time_index(); + if (is_a($result, '\Civi\Api4\Generic\Result')) { + $result->debug = $result->debug ?? []; + $debug =& $result->debug; + } + // result would not be an array for api3 getvalue + elseif (is_array($result)) { + $result['xdebug'] = $result['xdebug'] ?? []; + $debug =& $result['xdebug']; + } + else { + return; + } + $debug['peakMemory'] = xdebug_peak_memory_usage(); + $debug['memory'] = xdebug_memory_usage(); + $debug['timeIndex'] = xdebug_time_index(); $event->setResponse($result); } } diff --git a/civicrm/Civi/ActionSchedule/RecipientBuilder.php b/civicrm/Civi/ActionSchedule/RecipientBuilder.php index cb267eac2d378f15a74b4c02aa7f64252a647dcd..a54bca3b83ea1ccb150c94f8218498c7f14c4fd9 100644 --- a/civicrm/Civi/ActionSchedule/RecipientBuilder.php +++ b/civicrm/Civi/ActionSchedule/RecipientBuilder.php @@ -138,7 +138,7 @@ class RecipientBuilder { public function build() { $this->buildRelFirstPass(); - if ($this->prepareAddlFilter('c.id')) { + if ($this->prepareAddlFilter('c.id') && $this->notTemplate()) { $this->buildAddlFirstPass(); } @@ -603,4 +603,25 @@ reminder.action_schedule_id = {$this->actionSchedule->id}"; return $this->mapping->resetOnTriggerDateChange($this->actionSchedule); } + /** + * Confirm this object isn't attached to a template. + * Returns TRUE if this action schedule isn't attached to a template. + * Templates are (currently) unique to events, so we only evaluate those. + * + * @return bool; + */ + private function notTemplate() { + if ($this->mapping->getEntity() === 'civicrm_participant') { + $entityId = $this->actionSchedule->entity_value; + $query = new \CRM_Utils_SQL_Select('civicrm_event e'); + $sql = $query + ->select('is_template') + ->where("e.id = {$entityId}") + ->toSQL(); + $dao = \CRM_Core_DAO::executeQuery($sql); + return !(bool) $dao->fetchValue(); + } + return TRUE; + } + } diff --git a/civicrm/Civi/Angular/Manager.php b/civicrm/Civi/Angular/Manager.php index e5f169a385be53311335799bf65b600aeac1df20..4b21537d3fba5b0446152f54c12e8cbcf250b547 100644 --- a/civicrm/Civi/Angular/Manager.php +++ b/civicrm/Civi/Angular/Manager.php @@ -98,6 +98,7 @@ class Manager { $angularModules['ui.sortable'] = include "$civicrm_root/ang/ui.sortable.ang.php"; $angularModules['unsavedChanges'] = include "$civicrm_root/ang/unsavedChanges.ang.php"; $angularModules['statuspage'] = include "$civicrm_root/ang/crmStatusPage.ang.php"; + $angularModules['exportui'] = include "$civicrm_root/ang/exportui.ang.php"; $angularModules['api4Explorer'] = include "$civicrm_root/ang/api4Explorer.ang.php"; $angularModules['api4'] = include "$civicrm_root/ang/api4.ang.php"; diff --git a/civicrm/Civi/Api4/ACL.php b/civicrm/Civi/Api4/ACL.php index 7e037a5b38997227e70841930f7c4b75aae1a815..8501391d8e0cdc3b73072565f81b7a527240467d 100644 --- a/civicrm/Civi/Api4/ACL.php +++ b/civicrm/Civi/Api4/ACL.php @@ -22,15 +22,17 @@ namespace Civi\Api4; /** - * ACL Entity. + * ACL (Access Control List). * - * This entity holds the ACL informatiom. With this entity you add/update/delete an ACL permission which consists of - * an Operation (e.g. 'View' or 'Edit'), a set of Data that the operation can be performed on (e.g. a group of contacts), - * and a Role that has permission to do this operation. For more info refer to - * https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control for more info. + * An ACL record consists of: * - * Creating a new ACL requires at minimum a entity table, entity ID and object_table + * 1. An Operation (e.g. 'View' or 'Edit'). + * 2. A set of Data that the operation can be performed on (e.g. a group of contacts). + * 3. A Role that has permission to do this operation. * + * Creating a new ACL requires at minimum an entity table, entity ID and object_table. + * + * @see https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control * @package Civi\Api4 */ class ACL extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Action/Contact/GetFields.php b/civicrm/Civi/Api4/Action/Contact/GetFields.php index 041b91d291176f5b36e5494671101e7e05896d53..da6fc33409f440392d68714e6b5e96f6c59f5e97 100644 --- a/civicrm/Civi/Api4/Action/Contact/GetFields.php +++ b/civicrm/Civi/Api4/Action/Contact/GetFields.php @@ -22,6 +22,9 @@ namespace Civi\Api4\Action\Contact; use Civi\Api4\Generic\DAOGetFieldsAction; +/** + * @inheritDoc + */ class GetFields extends DAOGetFieldsAction { protected function getRecords() { diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 457e11f67f7de756f7558c2e986e7b1773b5833c..2b42ea2375655454098a0dec0cb941c1a94d97bf 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -25,7 +25,11 @@ use Civi\Api4\CustomGroup; use Civi\Api4\Utils\ReflectionUtils; /** - * Get entities + * Get the names & docblocks of all APIv4 entities. + * + * Scans for api entities in core + enabled extensions. + * + * Also includes pseudo-entities from multi-record custom groups by default. * * @method $this setIncludeCustom(bool $value) * @method bool getIncludeCustom() @@ -44,6 +48,8 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { */ protected function getRecords() { $entities = []; + $toGet = $this->_itemsToGet('name'); + $getDocs = $this->_isFieldSelected('description', 'comment', 'see'); $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')], array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath') ); @@ -53,17 +59,22 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { foreach (glob("$dir/*.php") as $file) { $matches = []; preg_match('/(\w*).php/', $file, $matches); - $entity = ['name' => $matches[1]]; - if ($this->_isFieldSelected('description') || $this->_isFieldSelected('comment')) { - $this->addDocs($entity); + if ( + (!$toGet || in_array($matches[1], $toGet)) + && is_a('\Civi\Api4\\' . $matches[1], '\Civi\Api4\Generic\AbstractEntity', TRUE) + ) { + $entity = ['name' => $matches[1]]; + if ($getDocs) { + $this->addDocs($entity); + } + $entities[$matches[1]] = $entity; } - $entities[$matches[1]] = $entity; } } } - unset($entities['CustomValue']); - if ($this->includeCustom) { + // Fetch custom entities unless we've already fetched everything requested + if ($this->includeCustom && (!$toGet || array_diff($toGet, array_keys($entities)))) { $this->addCustomEntities($entities); } @@ -89,6 +100,10 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { $entities[$fieldName] = [ 'name' => $fieldName, 'description' => $customEntity['title'] . ' custom group - extends ' . $customEntity['extends'], + 'see' => [ + 'https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/#multiple-record-fieldsets', + '\\Civi\\Api4\\CustomGroup', + ], ]; if (!empty($customEntity['help_pre'])) { $entities[$fieldName]['comment'] = $this->plainTextify($customEntity['help_pre']); @@ -117,7 +132,7 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { */ private function addDocs(&$entity) { $reflection = new \ReflectionClass("\\Civi\\Api4\\" . $entity['name']); - $entity += ReflectionUtils::getCodeDocs($reflection); + $entity += ReflectionUtils::getCodeDocs($reflection, NULL, ['entity' => $entity['name']]); unset($entity['package'], $entity['method']); } diff --git a/civicrm/Civi/Api4/Action/GetActions.php b/civicrm/Civi/Api4/Action/GetActions.php index c960bca6a9205de332484f4ca9254fc80283c6b0..b16fb0a285a49835341c1741f7a11b5a00c305e1 100644 --- a/civicrm/Civi/Api4/Action/GetActions.php +++ b/civicrm/Civi/Api4/Action/GetActions.php @@ -27,7 +27,9 @@ use Civi\Api4\Utils\ActionUtil; use Civi\Api4\Utils\ReflectionUtils; /** - * Get actions for an entity with a list of accepted params + * Get all API actions for the $ENTITY entity. + * + * Includes a list of accepted parameters for each action, descriptions and other documentation. */ class GetActions extends BasicGetAction { @@ -42,7 +44,7 @@ class GetActions extends BasicGetAction { foreach ($entityReflection->getMethods(\ReflectionMethod::IS_STATIC | \ReflectionMethod::IS_PUBLIC) as $method) { $actionName = $method->getName(); if ($actionName != 'permissions' && $actionName[0] != '_') { - $this->loadAction($actionName); + $this->loadAction($actionName, $method); } } if (!$this->_actionsToGet || count($this->_actionsToGet) > count($this->_actions)) { @@ -77,18 +79,29 @@ class GetActions extends BasicGetAction { /** * @param $actionName + * @param \ReflectionMethod $method */ - private function loadAction($actionName) { + private function loadAction($actionName, $method = NULL) { try { if (!isset($this->_actions[$actionName]) && (!$this->_actionsToGet || in_array($actionName, $this->_actionsToGet))) { $action = ActionUtil::getAction($this->getEntityName(), $actionName); if (is_object($action)) { $this->_actions[$actionName] = ['name' => $actionName]; - if ($this->_isFieldSelected('description') || $this->_isFieldSelected('comment')) { - $actionReflection = new \ReflectionClass($action); - $actionInfo = ReflectionUtils::getCodeDocs($actionReflection); - unset($actionInfo['method']); - $this->_actions[$actionName] += $actionInfo; + if ($this->_isFieldSelected('description', 'comment', 'see')) { + $vars = ['entity' => $this->getEntityName(), 'action' => $actionName]; + // Docblock from action class + $actionDocs = ReflectionUtils::getCodeDocs($action->reflect(), NULL, $vars); + unset($actionDocs['method']); + // Docblock from action factory function in entity class. This takes precedence since most action classes are generic. + if ($method) { + $methodDocs = ReflectionUtils::getCodeDocs($method, 'Method', $vars); + // Allow method doc to inherit class doc + if (strpos($method->getDocComment(), '@inheritDoc') !== FALSE && !empty($methodDocs['comment']) && !empty($actionDocs['comment'])) { + $methodDocs['comment'] .= "\n\n" . $actionDocs['comment']; + } + $actionDocs = array_filter($methodDocs) + $actionDocs; + } + $this->_actions[$actionName] += $actionDocs; } if ($this->_isFieldSelected('params')) { $this->_actions[$actionName]['params'] = $action->getParamInfo(); @@ -112,18 +125,24 @@ class GetActions extends BasicGetAction { return [ [ 'name' => 'name', - 'data_type' => 'String', + 'description' => 'Action name', ], [ 'name' => 'description', - 'data_type' => 'String', + 'description' => 'Description from docblock', ], [ 'name' => 'comment', - 'data_type' => 'String', + 'description' => 'Comments from docblock', + ], + [ + 'name' => 'see', + 'data_type' => 'Array', + 'description' => 'Any @see annotations from docblock', ], [ 'name' => 'params', + 'description' => 'List of all accepted parameters', 'data_type' => 'Array', ], ]; diff --git a/civicrm/Civi/Api4/Action/Setting/AbstractSettingAction.php b/civicrm/Civi/Api4/Action/Setting/AbstractSettingAction.php index 53b9cdd891c57c2681bc85fecc868f5c17f7cbc1..d4a7a7dbe5a96add9a8f7a6b1e1256bebbec4fb7 100644 --- a/civicrm/Civi/Api4/Action/Setting/AbstractSettingAction.php +++ b/civicrm/Civi/Api4/Action/Setting/AbstractSettingAction.php @@ -58,7 +58,7 @@ abstract class AbstractSettingAction extends \Civi\Api4\Generic\AbstractAction { } /** - * Checks that really ought to be taken care of by Civi::settings + * Checks that really ought to be taken care of by `Civi::settings`. * * @param int $domain * @return array diff --git a/civicrm/Civi/Api4/Action/Setting/Get.php b/civicrm/Civi/Api4/Action/Setting/Get.php index f7ba1ee5d19000f843a37db01c19b8ba14f5d0d2..fd4a0ce3f0370124d61c07624b087d55f318bf68 100644 --- a/civicrm/Civi/Api4/Action/Setting/Get.php +++ b/civicrm/Civi/Api4/Action/Setting/Get.php @@ -26,8 +26,7 @@ use Civi\Api4\Generic\Result; * Get the value of one or more CiviCRM settings. * * @method array getSelect - * @method $this addSelect(string $name) - * @method $this setSelect(array $select) + * @method $this setSelect(array $settingNames) */ class Get extends AbstractSettingAction { @@ -71,4 +70,14 @@ class Get extends AbstractSettingAction { } } + /** + * Add one or more settings to be selected + * @param string ...$settingNames + * @return $this + */ + public function addSelect(string ...$settingNames) { + $this->select = array_merge($this->select, $settingNames); + return $this; + } + } diff --git a/civicrm/Civi/Api4/Action/Setting/Revert.php b/civicrm/Civi/Api4/Action/Setting/Revert.php index 811a854bad443d85e9c2dcf70156335ea0249958..11abc64db40ff51a2259fb2ac0bea4e14e8628c2 100644 --- a/civicrm/Civi/Api4/Action/Setting/Revert.php +++ b/civicrm/Civi/Api4/Action/Setting/Revert.php @@ -26,8 +26,7 @@ use Civi\Api4\Generic\Result; * Revert one or more CiviCRM settings to their default value. * * @method array getSelect - * @method $this addSelect(string $name) - * @method $this setSelect(array $select) + * @method $this setSelect(array $settingNames) Set settings to be reverted */ class Revert extends AbstractSettingAction { @@ -62,4 +61,14 @@ class Revert extends AbstractSettingAction { } } + /** + * Add one or more settings to be reverted + * @param string ...$settingNames + * @return $this + */ + public function addSelect(string ...$settingNames) { + $this->select = array_merge($this->select, $settingNames); + return $this; + } + } diff --git a/civicrm/Civi/Api4/Action/Setting/Set.php b/civicrm/Civi/Api4/Action/Setting/Set.php index b4d3727a0ea9f9c656369c7a1a95703bda00e378..9353436c82fc2e7536459fdf0727d04daf58d319 100644 --- a/civicrm/Civi/Api4/Action/Setting/Set.php +++ b/civicrm/Civi/Api4/Action/Setting/Set.php @@ -27,7 +27,6 @@ use Civi\Api4\Generic\Result; * * @method array getValues * @method $this setValues(array $value) - * @method $this addValue(string $name, mixed $value) */ class Set extends AbstractSettingAction { @@ -60,4 +59,15 @@ class Set extends AbstractSettingAction { } } + /** + * Add an item to the values array + * @param string $settingName + * @param mixed $value + * @return $this + */ + public function addValue($settingName, $value) { + $this->values[$settingName] = $value; + return $this; + } + } diff --git a/civicrm/Civi/Api4/ActionSchedule.php b/civicrm/Civi/Api4/ActionSchedule.php index e3539dc92232cb83ea8a5b47541dd83af49c2ca1..7ddcb4ea6578ea0fc9bb94637b653135f2982164 100644 --- a/civicrm/Civi/Api4/ActionSchedule.php +++ b/civicrm/Civi/Api4/ActionSchedule.php @@ -30,6 +30,7 @@ namespace Civi\Api4; * * Creating a new ActionSchedule requires at minimum a title, mapping_id and entity_value. * + * @see https://docs.civicrm.org/user/en/latest/email/scheduled-reminders/ * @package Civi\Api4 */ class ActionSchedule extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Activity.php b/civicrm/Civi/Api4/Activity.php index 8761cd3d5b898cc19146a0e76df4c5de436f3f78..c546502fc14b16bb034db05c5ac114110754bdcd 100644 --- a/civicrm/Civi/Api4/Activity.php +++ b/civicrm/Civi/Api4/Activity.php @@ -32,6 +32,7 @@ namespace Civi\Api4; * * An activity is a record of some type of interaction with one or more contacts. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/activities/ * @package Civi\Api4 */ class Activity extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/ActivityContact.php b/civicrm/Civi/Api4/ActivityContact.php index 237c62e8fb8956b8c8e19b4d3399ce7dc4d7d262..24dbc694237893ca907519b3b8356db06f32fa12 100644 --- a/civicrm/Civi/Api4/ActivityContact.php +++ b/civicrm/Civi/Api4/ActivityContact.php @@ -28,6 +28,7 @@ namespace Civi\Api4; * * Creating a new ActivityContact requires at minimum a contact_id and activity_id. * + * @see \Civi\Api4\Activity * @package Civi\Api4 */ class ActivityContact extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Campaign.php b/civicrm/Civi/Api4/Campaign.php index 361ae34c3ea9b4590a3017ebb7cea50cd88feb3c..719a625e4da06c76da53bc829c778517e33663a8 100644 --- a/civicrm/Civi/Api4/Campaign.php +++ b/civicrm/Civi/Api4/Campaign.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * Campaign entity. * + * @see https://docs.civicrm.org/user/en/latest/campaign/what-is-civicampaign/ * @package Civi\Api4 */ class Campaign extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Contact.php b/civicrm/Civi/Api4/Contact.php index d0257579dba34cf81cd333e54b7966ce1a7cd128..ca650abc7b8c356b572ffa626539ecb084ff6db8 100644 --- a/civicrm/Civi/Api4/Contact.php +++ b/civicrm/Civi/Api4/Contact.php @@ -29,18 +29,28 @@ namespace Civi\Api4; * * Creating a new contact requires at minimum a name or email address. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/ * @package Civi\Api4 */ class Contact extends Generic\DAOEntity { + /** + * @return \Civi\Api4\Action\Contact\GetFields|Generic\DAOGetFieldsAction + */ public static function getFields() { return new Action\Contact\GetFields(__CLASS__, __FUNCTION__); } + /** + * @return \Civi\Api4\Action\Contact\GetChecksum + */ public static function getChecksum() { return new Action\Contact\GetChecksum(__CLASS__, __FUNCTION__); } + /** + * @return \Civi\Api4\Action\Contact\ValidateChecksum + */ public static function validateChecksum() { return new Action\Contact\ValidateChecksum(__CLASS__, __FUNCTION__); } diff --git a/civicrm/Civi/Api4/ContactType.php b/civicrm/Civi/Api4/ContactType.php index 98822f11c66b86aefed8605b23fe8cee9f62e5d8..8cf2d9a134820e2a51018ba392071afcd02367bd 100644 --- a/civicrm/Civi/Api4/ContactType.php +++ b/civicrm/Civi/Api4/ContactType.php @@ -30,6 +30,8 @@ namespace Civi\Api4; * * Creating a new contact type requires at minimum a label and parent_id. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/contacts/#contact-subtypes + * @see \Civi\Api4\Contact * @package Civi\Api4 */ class ContactType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomField.php b/civicrm/Civi/Api4/CustomField.php index 702a5dc3e96cab8d9772cbae724eade75b69d46b..7cee0b982b57b9ef8204e6434f154fa265024ceb 100644 --- a/civicrm/Civi/Api4/CustomField.php +++ b/civicrm/Civi/Api4/CustomField.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * CustomField entity. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ + * * @package Civi\Api4 */ class CustomField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomGroup.php b/civicrm/Civi/Api4/CustomGroup.php index 76ca7c6f39c358a42848fa1081a9e9050a618fe8..47c6ca05fcff5d06fc096a5cba94f438e3872422 100644 --- a/civicrm/Civi/Api4/CustomGroup.php +++ b/civicrm/Civi/Api4/CustomGroup.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * CustomGroup entity. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/ + * * @package Civi\Api4 */ class CustomGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/CustomValue.php b/civicrm/Civi/Api4/CustomValue.php index 2860ea5cdae498daceda8781d6dd5e0c249aecf1..60c6d6c8707400f88cd7eeea83a10d9b42f30f71 100644 --- a/civicrm/Civi/Api4/CustomValue.php +++ b/civicrm/Civi/Api4/CustomValue.php @@ -22,15 +22,25 @@ namespace Civi\Api4; /** - * CustomGroup entity. + * Provides virtual api entities for every multi-record custom group. * + * This class is different from other apis in that it is not itself an entity, but allows every + * multi-record custom group to act like an entity. + * + * Each action takes the name of the custom group as a parameter, or in traditional syntax the entity is prefixed with 'Custom_' + * + * **Ex. OOP:** `\Civi\Api4\CustomValue::get('MyStuff')->addWhere('id', '=', 123);` + * **Non-OOP:** `civicrm_api4('Custom_MyStuff', 'get', ['where' => [['id', '=', 123]]]);` + * + * Note: This class does NOT extend AbstractEntity so it doesn't get mistaken for a "real" entity. * @package Civi\Api4 */ -class CustomValue extends Generic\AbstractEntity { +class CustomValue { /** * @param string $customGroup * @return Action\CustomValue\Get + * @throws \API_Exception */ public static function get($customGroup) { return new Action\CustomValue\Get($customGroup, __FUNCTION__); @@ -39,6 +49,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\GetFields + * @throws \API_Exception */ public static function getFields($customGroup = NULL) { return new Action\CustomValue\GetFields($customGroup, __FUNCTION__); @@ -47,6 +58,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\Save + * @throws \API_Exception */ public static function save($customGroup) { return new Action\CustomValue\Save($customGroup, __FUNCTION__); @@ -55,6 +67,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\Create + * @throws \API_Exception */ public static function create($customGroup) { return new Action\CustomValue\Create($customGroup, __FUNCTION__); @@ -63,6 +76,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\Update + * @throws \API_Exception */ public static function update($customGroup) { return new Action\CustomValue\Update($customGroup, __FUNCTION__); @@ -71,6 +85,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\Delete + * @throws \API_Exception */ public static function delete($customGroup) { return new Action\CustomValue\Delete($customGroup, __FUNCTION__); @@ -79,6 +94,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\Replace + * @throws \API_Exception */ public static function replace($customGroup) { return new Action\CustomValue\Replace($customGroup, __FUNCTION__); @@ -87,6 +103,7 @@ class CustomValue extends Generic\AbstractEntity { /** * @param string $customGroup * @return Action\CustomValue\GetActions + * @throws \API_Exception */ public static function getActions($customGroup = NULL) { return new Action\CustomValue\GetActions($customGroup, __FUNCTION__); diff --git a/civicrm/Civi/Api4/Domain.php b/civicrm/Civi/Api4/Domain.php index 01172433b6e8aebd3bb77459a6ff142f54dcab7a..589f57052e568c13c642ac5f0d53f7d8889fdc5d 100644 --- a/civicrm/Civi/Api4/Domain.php +++ b/civicrm/Civi/Api4/Domain.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * Domains - multisite instances of CiviCRM. * + * @see https://docs.civicrm.org/sysadmin/en/latest/setup/multisite/ + * * @package Civi\Api4 */ class Domain extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Entity.php b/civicrm/Civi/Api4/Entity.php index 090550184eb0987b2eeccc2c528f1485672ac798..430900b663737fbe88f29eb58fc57ea89c9b479d 100644 --- a/civicrm/Civi/Api4/Entity.php +++ b/civicrm/Civi/Api4/Entity.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * Retrieves information about all Api4 entities. * + * @see \Civi\Api4\Generic\AbstractEntity + * * @package Civi\Api4 */ class Entity extends Generic\AbstractEntity { @@ -41,9 +43,23 @@ class Entity extends Generic\AbstractEntity { public static function getFields() { return new \Civi\Api4\Generic\BasicGetFieldsAction('Entity', __FUNCTION__, function() { return [ - ['name' => 'name'], - ['name' => 'description'], - ['name' => 'comment'], + [ + 'name' => 'name', + 'description' => 'Entity name', + ], + [ + 'name' => 'description', + 'description' => 'Description from docblock', + ], + [ + 'name' => 'comment', + 'description' => 'Comments from docblock', + ], + [ + 'name' => 'see', + 'data_type' => 'Array', + 'description' => 'Any @see annotations from docblock', + ], ]; }); } diff --git a/civicrm/Civi/Api4/EntityTag.php b/civicrm/Civi/Api4/EntityTag.php index 7760c1854d36aa09d19250d10a18f2a82d84cdd3..06ae229c19ca06e590550f319af6544b88658a30 100644 --- a/civicrm/Civi/Api4/EntityTag.php +++ b/civicrm/Civi/Api4/EntityTag.php @@ -18,12 +18,13 @@ * */ - namespace Civi\Api4; /** * EntityTag - links tags to contacts, activities, etc. * + * @see \Civi\Api4\Tag + * * @package Civi\Api4 */ class EntityTag extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Event.php b/civicrm/Civi/Api4/Event.php index 09f19fd13a53b45c85ba7272be47c9a78d3b1083..c21a0def34eb4741afeca68a09e6c4442d77bdf5 100644 --- a/civicrm/Civi/Api4/Event.php +++ b/civicrm/Civi/Api4/Event.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * Event entity. * + * @see https://docs.civicrm.org/user/en/latest/events/what-is-civievent/ + * * @package Civi\Api4 */ class Event extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Event/Events.php b/civicrm/Civi/Api4/Event/Events.php index 9586b10181c510e8268e21f38f2adee05807a28e..bb866e287b636ca03b3b3b3ebc2f4d7b54b7b6aa 100644 --- a/civicrm/Civi/Api4/Event/Events.php +++ b/civicrm/Civi/Api4/Event/Events.php @@ -27,7 +27,7 @@ class Events { * Prepare the specification for a request. Fired from within a request to * get fields. * - * @see GetSpecEvent + * @see \Civi\Api4\Event\GetSpecEvent */ const GET_SPEC = 'civi.api.get_spec'; diff --git a/civicrm/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php index e9522b31dce0b114431fbc52d01f972767a73626..84dbca9e795932f0e79eb65acf4d1cebaaf87180 100644 --- a/civicrm/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php +++ b/civicrm/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php @@ -25,6 +25,7 @@ use Civi\Api4\Event\Events; use Civi\Api4\Event\PostSelectQueryEvent; use Civi\Api4\Query\Api4SelectQuery; use Civi\Api4\Utils\ArrayInsertionUtil; +use Civi\Api4\Utils\FormattingUtil; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -33,7 +34,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; class PostSelectQuerySubscriber implements EventSubscriberInterface { /** - * @inheritdoc + * @inheritDoc */ public static function getSubscribedEvents() { return [ @@ -60,8 +61,7 @@ class PostSelectQuerySubscriber implements EventSubscriberInterface { return $results; } - $fieldSpec = $query->getApiFieldSpec(); - $this->unserializeFields($results, $query->getEntity(), $fieldSpec); + FormattingUtil::formatOutputValues($results, $query->getApiFieldSpec(), $query->getEntity()); // Group the selects to avoid queries for each field $groupedSelects = $this->getNtoManyJoinSelects($query); @@ -75,7 +75,7 @@ class PostSelectQuerySubscriber implements EventSubscriberInterface { foreach ($results as &$primaryResult) { $baseId = $primaryResult['id']; $filtered = array_filter($joinResults, function ($res) use ($baseId) { - return ($res['_base_id'] === $baseId); + return ($res['_base_id'] == $baseId); }); $filtered = array_values($filtered); ArrayInsertionUtil::insert($primaryResult, $joinPath, $filtered); @@ -98,25 +98,7 @@ class PostSelectQuerySubscriber implements EventSubscriberInterface { $fields[array_pop($name)] = $field->toArray(); } if ($fields) { - $this->unserializeFields($joinResults, NULL, $fields); - } - } - - /** - * Unserialize values - * - * @param array $results - * @param string $entity - * @param array $fields - */ - protected function unserializeFields(&$results, $entity, $fields = []) { - foreach ($results as &$result) { - foreach ($result as $field => &$value) { - if (!empty($fields[$field]['serialize']) && is_string($value)) { - $serializationType = $fields[$field]['serialize']; - $value = \CRM_Core_DAO::unSerializeField($value, $serializationType); - } - } + FormattingUtil::formatOutputValues($joinResults, $fields, $join->getEntity()); } } @@ -258,9 +240,13 @@ class PostSelectQuerySubscriber implements EventSubscriberInterface { }, $selects, array_keys($selects)); $newSelect = sprintf('SELECT DISTINCT %s', implode(", ", $aliasedSelects)); - $sql = str_replace("\n", ' ', $query->getQuery()->toSQL()); - $originalSelect = substr($sql, 0, strpos($sql, ' FROM')); - $sql = str_replace($originalSelect, $newSelect, $sql); + $sql = $query->getQuery()->toSQL(); + // Replace the "SELECT" clause + $sql = $newSelect . substr($sql, strpos($sql, "\nFROM")); + + if (is_array($query->debugOutput)) { + $query->debugOutput['sql'][] = $sql; + } $relatedResults = []; $resultDAO = \CRM_Core_DAO::executeQuery($sql); diff --git a/civicrm/Civi/Api4/Generic/AbstractAction.php b/civicrm/Civi/Api4/Generic/AbstractAction.php index d81c9aa33a20e481c013b8c0de8920694cde85db..531f11aace52d3b418446174d23831854585793a 100644 --- a/civicrm/Civi/Api4/Generic/AbstractAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractAction.php @@ -26,8 +26,19 @@ use Civi\Api4\Utils\ActionUtil; /** * Base class for all api actions. * - * @method $this setCheckPermissions(bool $value) + * An api Action object stores the parameters of the api call, and defines a _run function to execute the action. + * + * Every `protected` class var is considered a parameter (unless it starts with an underscore). + * + * Adding a `protected` var to your Action named e.g. `$thing` will automatically: + * - Provide a getter/setter (via `__call` MagicMethod) named `getThing()` and `setThing()`. + * - Expose the param in the Api Explorer (be sure to add a doc-block as it displays in the help panel). + * - Require a value for the param if you add the "@required" annotation. + * + * @method $this setCheckPermissions(bool $value) Enable/disable permission checks * @method bool getCheckPermissions() + * @method $this setDebug(bool $value) Enable/disable debug output + * @method bool getDebug() * @method $this setChain(array $chain) * @method array getChain() */ @@ -45,16 +56,21 @@ abstract class AbstractAction implements \ArrayAccess { * * Keys can be any string - this will be the name given to the output. * - * You can reference other values in the api results in this call by prefixing them with $ + * You can reference other values in the api results in this call by prefixing them with `$`. * * For example, you could create a contact and place them in a group by chaining the - * GroupContact api to the Contact api: + * `GroupContact` api to the `Contact` api: * + * ```php * Contact::create() * ->setValue('first_name', 'Hello') - * ->addChain('add_to_a_group', GroupContact::create()->setValue('contact_id', '$id')->setValue('group_id', 123)) + * ->addChain('add_a_group', GroupContact::create() + * ->setValue('contact_id', '$id') + * ->setValue('group_id', 123) + * ) + * ``` * - * This will substitute the id of the newly created contact with $id. + * This will substitute the id of the newly created contact with `$id`. * * @var array */ @@ -70,6 +86,18 @@ abstract class AbstractAction implements \ArrayAccess { */ protected $checkPermissions = TRUE; + /** + * Add debugging info to the api result. + * + * When enabled, `$result->debug` will be populated with information about the api call, + * including sql queries executed. + * + * **Note:** with checkPermissions enabled, debug info will only be returned if the user has "view debug output" permission. + * + * @var bool + */ + protected $debug = FALSE; + /** * @var string */ @@ -107,6 +135,8 @@ abstract class AbstractAction implements \ArrayAccess { */ private $_id; + public $_debugOutput = []; + /** * Action constructor. * @@ -140,7 +170,7 @@ abstract class AbstractAction implements \ArrayAccess { * @throws \API_Exception */ public function setVersion($val) { - if ($val != 4) { + if ($val !== 4 && $val !== '4') { throw new \API_Exception('Cannot modify api version'); } return $this; @@ -150,9 +180,8 @@ abstract class AbstractAction implements \ArrayAccess { * @param string $name * Unique name for this chained request * @param \Civi\Api4\Generic\AbstractAction $apiRequest - * @param string|int $index - * Either a string for how the results should be indexed e.g. 'name' - * or the index of a single result to return e.g. 0 for the first result. + * @param string|int|array $index + * See `civicrm_api4()` for documentation of `$index` param * @return $this */ public function addChain($name, AbstractAction $apiRequest, $index = NULL) { @@ -161,7 +190,7 @@ abstract class AbstractAction implements \ArrayAccess { } /** - * Magic function to provide addFoo, getFoo and setFoo for params. + * Magic function to provide automatic getter/setter for params. * * @param $name * @param $arguments @@ -174,10 +203,6 @@ abstract class AbstractAction implements \ArrayAccess { throw new \API_Exception('Unknown api parameter: ' . $name); } $mode = substr($name, 0, 3); - // Handle plural when adding to e.g. $values with "addValue" method. - if ($mode == 'add' && $this->paramExists($param . 's')) { - $param .= 's'; - } if ($this->paramExists($param)) { switch ($mode) { case 'get': @@ -186,18 +211,6 @@ abstract class AbstractAction implements \ArrayAccess { case 'set': $this->$param = $arguments[0]; return $this; - - case 'add': - if (!is_array($this->$param)) { - throw new \API_Exception('Cannot add to non-array param'); - } - if (array_key_exists(1, $arguments)) { - $this->{$param}[$arguments[0]] = $arguments[1]; - } - else { - $this->{$param}[] = $arguments[0]; - } - return $this; } } throw new \API_Exception('Unknown api parameter: ' . $name); @@ -210,13 +223,21 @@ abstract class AbstractAction implements \ArrayAccess { * This is basically the outer wrapper for api v4. * * @return \Civi\Api4\Generic\Result + * @throws \API_Exception * @throws \Civi\API\Exception\UnauthorizedException */ public function execute() { /** @var \Civi\API\Kernel $kernel */ $kernel = \Civi::service('civi_api_kernel'); - - return $kernel->runRequest($this); + $result = $kernel->runRequest($this); + if ($this->debug && (!$this->checkPermissions || \CRM_Core_Permission::check('view debug output'))) { + $result->debug['actionClass'] = get_class($this); + $result->debug = array_merge($result->debug, $this->_debugOutput); + } + else { + $result->debug = NULL; + } + return $result; } /** @@ -249,10 +270,19 @@ abstract class AbstractAction implements \ArrayAccess { public function getParamInfo($param = NULL) { if (!isset($this->_paramInfo)) { $defaults = $this->getParamDefaults(); + $vars = [ + 'entity' => $this->getEntityName(), + 'action' => $this->getActionName(), + ]; + // For actions like "getFields" and "getActions" they are not getting the entity itself. + // So generic docs will make more sense like this: + if (substr($vars['action'], 0, 3) === 'get' && substr($vars['action'], -1) === 's') { + $vars['entity'] = lcfirst(substr($vars['action'], 3, -1)); + } foreach ($this->reflect()->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) { $name = $property->getName(); if ($name != 'version' && $name[0] != '_') { - $this->_paramInfo[$name] = ReflectionUtils::getCodeDocs($property, 'Property'); + $this->_paramInfo[$name] = ReflectionUtils::getCodeDocs($property, 'Property', $vars); $this->_paramInfo[$name]['default'] = $defaults[$name]; } } @@ -383,12 +413,13 @@ abstract class AbstractAction implements \ArrayAccess { /** * Returns schema fields for this entity & action. * - * Here we bypass the api wrapper and execute the getFields action directly. + * Here we bypass the api wrapper and run the getFields action directly. * This is because we DON'T want the wrapper to check permissions as this is an internal op, * but we DO want permissions to be checked inside the getFields request so e.g. the api_key * field can be conditionally included. * @see \Civi\Api4\Action\Contact\GetFields * + * @throws \API_Exception * @return array */ public function entityFields() { @@ -462,4 +493,25 @@ abstract class AbstractAction implements \ArrayAccess { return (bool) trim(\CRM_Core_Smarty::singleton()->fetchWith('string:' . $tpl, $vars)); } + /** + * When in debug mode, this logs the callback function being used by a Basic*Action class. + * + * @param callable $callable + */ + protected function addCallbackToDebugOutput($callable) { + if ($this->debug && empty($this->_debugOutput['callback'])) { + if (is_scalar($callable)) { + $this->_debugOutput['callback'] = (string) $callable; + } + elseif (is_array($callable)) { + foreach ($callable as $key => $unit) { + $this->_debugOutput['callback'][$key] = is_object($unit) ? get_class($unit) : (string) $unit; + } + } + elseif (is_object($callable)) { + $this->_debugOutput['callback'] = get_class($callable); + } + } + } + } diff --git a/civicrm/Civi/Api4/Generic/AbstractBatchAction.php b/civicrm/Civi/Api4/Generic/AbstractBatchAction.php index 05c078b5870ba911a644b92dc09e293983b8df6d..4945b43291c9b0d1bdac1d2f9285de017f4156d8 100644 --- a/civicrm/Civi/Api4/Generic/AbstractBatchAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractBatchAction.php @@ -31,7 +31,7 @@ namespace Civi\Api4\Generic; abstract class AbstractBatchAction extends AbstractQueryAction { /** - * Criteria for selecting items to process. + * Criteria for selecting $ENTITIES to process. * * @var array * @required diff --git a/civicrm/Civi/Api4/Generic/AbstractCreateAction.php b/civicrm/Civi/Api4/Generic/AbstractCreateAction.php index 20551e5b09bdbd5654a88995b788b1aa24faed16..ea9d3cdb9d2f2b758667ebe0bda9ae54f6bdbe6c 100644 --- a/civicrm/Civi/Api4/Generic/AbstractCreateAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractCreateAction.php @@ -22,10 +22,9 @@ namespace Civi\Api4\Generic; /** - * Base class for all "Create" api actions. + * Base class for all `Create` api actions. * * @method $this setValues(array $values) Set all field values from an array of key => value pairs. - * @method $this addValue($field, $value) Set field value. * @method array getValues() Get field values. * * @package Civi\Api4\Generic @@ -33,19 +32,29 @@ namespace Civi\Api4\Generic; abstract class AbstractCreateAction extends AbstractAction { /** - * Field values to set + * Field values to set for the new $ENTITY. * * @var array */ protected $values = []; /** - * @param string $key - * + * @param string $fieldName * @return mixed|null */ - public function getValue($key) { - return isset($this->values[$key]) ? $this->values[$key] : NULL; + public function getValue(string $fieldName) { + return isset($this->values[$fieldName]) ? $this->values[$fieldName] : NULL; + } + + /** + * Add a field value. + * @param string $fieldName + * @param mixed $value + * @return $this + */ + public function addValue(string $fieldName, $value) { + $this->values[$fieldName] = $value; + return $this; } /** diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index bd0c447fe98623f184cb0d9891055aca9f0798a0..d05697a84ed26659684167d889157d709f4f196c 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -30,17 +30,20 @@ use Civi\API\Exception\NotImplementedException; * * The recommended way to create a non-DAO-based api is to extend this class * and then add a getFields function and any other actions you wish, e.g. - * - a get() function which returns BasicGetAction using your custom getter callback - * - a create() function which returns BasicCreateAction using your custom setter callback - * - an update() function which returns BasicUpdateAction using your custom setter callback - * - a delete() function which returns BasicBatchAction using your custom delete callback + * - a get() function which returns BasicGetAction using your custom getter callback. + * - a create() function which returns BasicCreateAction using your custom setter callback. + * - a save() function which returns BasicSaveAction using your custom setter callback. + * - an update() function which returns BasicUpdateAction using your custom setter callback. + * - a delete() function which returns BasicBatchAction using your custom delete callback. * - a replace() function which returns BasicReplaceAction (no callback needed but - * depends on the existence of get, create, update & delete actions) + * depends on the existence of get, save & delete actions). * * Note that you can use the same setter callback function for update as create - * that function can distinguish between new & existing records by checking if the * unique identifier has been set (identifier field defaults to "id" but you can change - * that when constructing BasicUpdateAction) + * that when constructing BasicUpdateAction). + * + * @see https://lab.civicrm.org/extensions/api4example */ abstract class AbstractEntity { @@ -52,13 +55,9 @@ abstract class AbstractEntity { } /** - * Should return \Civi\Api4\Generic\BasicGetFieldsAction - * @todo make this function abstract when we require php 7. - * @throws \Civi\API\Exception\NotImplementedException + * @return \Civi\Api4\Generic\BasicGetFieldsAction */ - public static function getFields() { - throw new NotImplementedException(self::getEntityName() . ' should implement getFields action.'); - } + abstract public static function getFields(); /** * Returns a list of permissions needed to access the various actions in this api. diff --git a/civicrm/Civi/Api4/Generic/AbstractGetAction.php b/civicrm/Civi/Api4/Generic/AbstractGetAction.php index e48b3c15976522eda1730317ab4d53ef8a55ab08..e9f892c2af7d56be795098b495872faebf16e55a 100644 --- a/civicrm/Civi/Api4/Generic/AbstractGetAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractGetAction.php @@ -21,21 +21,25 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Utils\SelectUtil; + /** - * Base class for all "Get" api actions. + * Base class for all `Get` api actions. * * @package Civi\Api4\Generic * - * @method $this addSelect(string $select) - * @method $this setSelect(array $selects) + * @method $this setSelect(array $selects) Set array of fields to be selected (wildcard * allowed) * @method array getSelect() */ abstract class AbstractGetAction extends AbstractQueryAction { /** - * Fields to return. Defaults to all fields. + * Fields to return for each $ENTITY. Defaults to all fields `[*]`. + * + * Use the * wildcard by itself to select all available fields, or use it to match similarly-named fields. + * E.g. `is_*` will match fields named is_primary, is_active, etc. * - * Set to ["row_count"] to return only the number of items found. + * Set to `["row_count"]` to return only the number of $ENTITIES found. * * @var array */ @@ -70,6 +74,20 @@ abstract class AbstractGetAction extends AbstractQueryAction { } } + /** + * Adds all fields matched by the * wildcard + * + * @throws \API_Exception + */ + protected function expandSelectClauseWildcards() { + foreach ($this->select as $item) { + if (strpos($item, '*') !== FALSE && strpos($item, '.') === FALSE) { + $this->select = array_diff($this->select, [$item]); + $this->select = array_unique(array_merge($this->select, SelectUtil::getMatchingFields($item, array_column($this->entityFields(), 'name')))); + } + } + } + /** * Helper to parse the WHERE param for getRecords to perform simple pre-filtering. * @@ -78,7 +96,7 @@ abstract class AbstractGetAction extends AbstractQueryAction { * * Ex: If getRecords fetches a long list of items each with a unique name, * but the user has specified a single record to retrieve, you can optimize the call - * by checking $this->_itemsToGet('name') and only fetching the item(s) with that name. + * by checking `$this->_itemsToGet('name')` and only fetching the item(s) with that name. * * @param string $field * @return array|null @@ -94,45 +112,60 @@ abstract class AbstractGetAction extends AbstractQueryAction { } /** - * Helper to see if a field should be selected by the getRecords function. + * Helper to see if field(s) should be selected by the getRecords function. * * Checks the SELECT, WHERE and ORDER BY params to see what fields are needed. * * Note that if no SELECT clause has been set then all fields should be selected * and this function will always return TRUE. * - * @param string $field + * @param string ...$fieldNames + * One or more field names to check (uses OR if multiple) * @return bool + * Returns true if any given fields are in use. */ - protected function _isFieldSelected($field) { - if (!$this->select || in_array($field, $this->select) || isset($this->orderBy[$field])) { + protected function _isFieldSelected(string ...$fieldNames) { + if (!$this->select || array_intersect($fieldNames, array_merge($this->select, array_keys($this->orderBy)))) { return TRUE; } - return $this->_whereContains($field); + return $this->_whereContains($fieldNames); } /** - * Walk through the where clause and check if a field is in use. + * Walk through the where clause and check if field(s) are in use. * - * @param string $field + * @param string|array $fieldName + * A single fieldName or an array of names (uses OR if multiple) * @param array $clauses * @return bool + * Returns true if any given fields are found in the where clause. */ - protected function _whereContains($field, $clauses = NULL) { + protected function _whereContains($fieldName, $clauses = NULL) { if ($clauses === NULL) { $clauses = $this->where; } + $fieldName = (array) $fieldName; foreach ($clauses as $clause) { if (is_array($clause) && is_string($clause[0])) { - if ($clause[0] == $field) { + if (in_array($clause[0], $fieldName)) { return TRUE; } elseif (is_array($clause[1])) { - return $this->_whereContains($field, $clause[1]); + return $this->_whereContains($fieldName, $clause[1]); } } } return FALSE; } + /** + * Add one or more fields to be selected (wildcard * allowed) + * @param string ...$fieldNames + * @return $this + */ + public function addSelect(string ...$fieldNames) { + $this->select = array_merge($this->select, $fieldNames); + return $this; + } + } diff --git a/civicrm/Civi/Api4/Generic/AbstractQueryAction.php b/civicrm/Civi/Api4/Generic/AbstractQueryAction.php index 4088545bd15e419b814c6862c511062a750daa79..e58ab26659f6dc1b9aca54a7bd8683383aad2ca4 100644 --- a/civicrm/Civi/Api4/Generic/AbstractQueryAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractQueryAction.php @@ -22,7 +22,7 @@ namespace Civi\Api4\Generic; /** - * Base class for all actions that need to fetch records (Get, Update, Delete, etc) + * Base class for all actions that need to fetch records (`Get`, `Update`, `Delete`, etc.). * * @package Civi\Api4\Generic * @@ -38,27 +38,29 @@ namespace Civi\Api4\Generic; abstract class AbstractQueryAction extends AbstractAction { /** - * Criteria for selecting items. - * - * $example->addWhere('contact_type', 'IN', array('Individual', 'Household')) + * Criteria for selecting $ENTITIES. * + * ```php + * $example->addWhere('contact_type', 'IN', ['Individual', 'Household']) + * ``` * @var array */ protected $where = []; /** - * Array of field(s) to use in ordering the results + * Array of field(s) to use in ordering the results. * * Defaults to id ASC * + * ```php * $example->addOrderBy('sort_name', 'ASC') - * + * ``` * @var array */ protected $orderBy = []; /** - * Maximum number of results to return. + * Maximum number of $ENTITIES to return. * * Defaults to unlimited. * @@ -70,26 +72,26 @@ abstract class AbstractQueryAction extends AbstractAction { protected $limit = 0; /** - * Zero-based index of first result to return. + * Zero-based index of first $ENTITY to return. * - * Defaults to "0" - first record. + * Defaults to "0" - first $ENTITY found. * * @var int */ protected $offset = 0; /** - * @param string $field + * @param string $fieldName * @param string $op * @param mixed $value * @return $this * @throws \API_Exception */ - public function addWhere($field, $op, $value = NULL) { + public function addWhere(string $fieldName, string $op, $value = NULL) { if (!in_array($op, \CRM_Core_DAO::acceptedSQLOperators())) { throw new \API_Exception('Unsupported operator'); } - $this->where[] = [$field, $op, $value]; + $this->where[] = [$fieldName, $op, $value]; return $this; } @@ -103,7 +105,7 @@ abstract class AbstractQueryAction extends AbstractAction { * @return $this * @throws \API_Exception */ - public function addClause($operator, $condition1) { + public function addClause(string $operator, $condition1) { if (!is_array($condition1[0])) { $condition1 = array_slice(func_get_args(), 1); } @@ -112,17 +114,18 @@ abstract class AbstractQueryAction extends AbstractAction { } /** - * @param string $field + * Adds to the orderBy clause + * @param string $fieldName * @param string $direction * @return $this */ - public function addOrderBy($field, $direction = 'ASC') { - $this->orderBy[$field] = $direction; + public function addOrderBy(string $fieldName, $direction = 'ASC') { + $this->orderBy[$fieldName] = $direction; return $this; } /** - * A human-readable where clause, for the reading enjoyment of you humans. + * Produces a human-readable where clause, for the reading enjoyment of you humans. * * @param array $whereClause * @param string $op diff --git a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php index 170d63bd59ec920adf93f28cc8f4c171fa3a96d2..749184ed8d74223c0c562799c933f46db1f2dbfc 100644 --- a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php @@ -22,13 +22,11 @@ namespace Civi\Api4\Generic; /** - * Base class for all "Save" api actions. + * Base class for all `Save` api actions. * - * @method $this setRecords(array $records) Array of records. - * @method $this addRecord($record) Add a record to update. + * @method $this setRecords(array $records) Set array of records to be saved. * @method array getRecords() * @method $this setDefaults(array $defaults) Array of defaults. - * @method $this addDefault($name, $value) Add a default value. * @method array getDefaults() * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving. * @method bool getReload() @@ -38,9 +36,9 @@ namespace Civi\Api4\Generic; abstract class AbstractSaveAction extends AbstractAction { /** - * Array of records. + * Array of $ENTITIES to save. * - * Should be in the same format as returned by Get. + * Should be in the same format as returned by `Get`. * * @var array * @required @@ -50,18 +48,20 @@ abstract class AbstractSaveAction extends AbstractAction { /** * Array of default values. * - * These defaults will be applied to all records unless they specify otherwise. + * These defaults will be merged into every $ENTITY in `records` before saving. + * Values set in `records` will override these defaults if set in both places, + * but updating existing $ENTITIES will overwrite current values with these defaults. * * @var array */ protected $defaults = []; /** - * Reload records after saving. + * Reload $ENTITIES after saving. * - * By default this api typically returns partial records containing only the fields - * that were updated. Set reload to TRUE to do an additional lookup after saving - * to return complete records. + * By default this action typically returns partial records containing only the fields + * that were updated. Set `reload` to `true` to do an additional lookup after saving + * to return complete values for every $ENTITY. * * @var bool */ @@ -106,4 +106,25 @@ abstract class AbstractSaveAction extends AbstractAction { return $this->idField; } + /** + * Add one or more records to be saved. + * @param array ...$records + * @return $this + */ + public function addRecord(array ...$records) { + $this->records = array_merge($this->records, $records); + return $this; + } + + /** + * Set default value for a field. + * @param string $fieldName + * @param mixed $defaultValue + * @return $this + */ + public function addDefault(string $fieldName, $defaultValue) { + $this->defaults[$fieldName] = $defaultValue; + return $this; + } + } diff --git a/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php b/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php index d0f81572de884ca7dcc56ea74da50e4d7a32e2fd..93940e1976ff717ac011c72a0fbc4c276679800c 100644 --- a/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractUpdateAction.php @@ -22,10 +22,9 @@ namespace Civi\Api4\Generic; /** - * Base class for all "Update" api actions + * Base class for all `Update` api actions * * @method $this setValues(array $values) Set all field values from an array of key => value pairs. - * @method $this addValue($field, $value) Set field value. * @method array getValues() Get field values. * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving. * @method bool getReload() @@ -43,22 +42,34 @@ abstract class AbstractUpdateAction extends AbstractBatchAction { protected $values = []; /** - * Reload objects after saving. + * Reload $ENTITIES after saving. * - * Setting to TRUE will load complete records and return them as the api result. - * If FALSE the api usually returns only the fields specified to be updated. + * Setting to `true` will load complete records and return them as the api result. + * If `false` the api usually returns only the fields specified to be updated. * * @var bool */ protected $reload = FALSE; /** - * @param string $key + * @param string $fieldName * * @return mixed|null */ - public function getValue($key) { - return isset($this->values[$key]) ? $this->values[$key] : NULL; + public function getValue(string $fieldName) { + return isset($this->values[$fieldName]) ? $this->values[$fieldName] : NULL; + } + + /** + * Add an item to the values array. + * + * @param string $fieldName + * @param mixed $value + * @return $this + */ + public function addValue(string $fieldName, $value) { + $this->values[$fieldName] = $value; + return $this; } } diff --git a/civicrm/Civi/Api4/Generic/BasicBatchAction.php b/civicrm/Civi/Api4/Generic/BasicBatchAction.php index 5a342dbab7f81b2698217434843e6a0f3dbe389e..cf86203a9efeb1d34cf72e70193f4f3003ad0077 100644 --- a/civicrm/Civi/Api4/Generic/BasicBatchAction.php +++ b/civicrm/Civi/Api4/Generic/BasicBatchAction.php @@ -24,12 +24,9 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; /** - * Basic action for deleting or performing some other task with a set of records. Ex: + * $ACTION one or more $ENTITIES. * - * $myAction = new BasicBatchAction('Entity', 'action', function($item) { - * // Do something with $item - * $return $item; - * }); + * $ENTITIES are selected based on criteria specified in `where` parameter (required). * * @package Civi\Api4\Generic */ @@ -45,6 +42,13 @@ class BasicBatchAction extends AbstractBatchAction { /** * BasicBatchAction constructor. * + * ```php + * $myAction = new BasicBatchAction($entityName, $actionName, function($item) { + * // Do something with $item + * $return $item; + * }); + * ``` + * * @param string $entityName * @param string $actionName * @param string|array $select @@ -84,6 +88,7 @@ class BasicBatchAction extends AbstractBatchAction { */ protected function doTask($item) { if (is_callable($this->doer)) { + $this->addCallbackToDebugOutput($this->doer); return call_user_func($this->doer, $item, $this); } throw new NotImplementedException('Doer function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName()); diff --git a/civicrm/Civi/Api4/Generic/BasicCreateAction.php b/civicrm/Civi/Api4/Generic/BasicCreateAction.php index 9fa2d1673bba4531baee9ba781b7ff9f3e6cd508..66f4e1b50f73dc8e49d994072ba4020926ddc98d 100644 --- a/civicrm/Civi/Api4/Generic/BasicCreateAction.php +++ b/civicrm/Civi/Api4/Generic/BasicCreateAction.php @@ -24,9 +24,10 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; /** - * Create a new object from supplied values. + * Create a new $ENTITY from supplied values. * - * This function will create 1 new object. It cannot be used to update existing objects. Use the Update or Replace actions for that. + * This action will create 1 new $ENTITY. + * It cannot be used to update existing $ENTITIES; use the `Update` or `Replace` actions for that. */ class BasicCreateAction extends AbstractCreateAction { @@ -75,6 +76,7 @@ class BasicCreateAction extends AbstractCreateAction { */ protected function writeRecord($item) { if (is_callable($this->setter)) { + $this->addCallbackToDebugOutput($this->setter); return call_user_func($this->setter, $item, $this); } throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName()); diff --git a/civicrm/Civi/Api4/Generic/BasicGetAction.php b/civicrm/Civi/Api4/Generic/BasicGetAction.php index 2de0146eb01ac0fa551f4a3ce2965b1973cc46bc..22278c973e440e4fc34654b2b6d218c81976e2a5 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetAction.php @@ -24,9 +24,9 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; /** - * Retrieve items based on criteria specified in the 'where' param. + * Retrieve $ENTITIES based on criteria specified in the `where` parameter. * - * Use the 'select' param to determine which fields are returned, defaults to *. + * Use the `select` param to determine which fields are returned, defaults to `[*]`. */ class BasicGetAction extends AbstractGetAction { use Traits\ArrayQueryActionTrait; @@ -57,6 +57,7 @@ class BasicGetAction extends AbstractGetAction { */ public function _run(Result $result) { $this->setDefaultWhereClause(); + $this->expandSelectClauseWildcards(); $values = $this->getRecords(); $result->exchangeArray($this->queryArray($values)); } @@ -95,6 +96,7 @@ class BasicGetAction extends AbstractGetAction { */ protected function getRecords() { if (is_callable($this->getter)) { + $this->addCallbackToDebugOutput($this->getter); return call_user_func($this->getter, $this); } throw new NotImplementedException('Getter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName()); diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php index 5c2b0ccb11f0110f142d8b852164b93ec9ff2098..ae11f65f48269ed543cda5e12f14d2630eea5c24 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php @@ -25,12 +25,17 @@ use Civi\API\Exception\NotImplementedException; use Civi\Api4\Utils\ActionUtil; /** - * Get fields for an entity. + * Lists information about fields for the $ENTITY entity. + * + * This field information is also known as "metadata." + * + * Note that different actions may support different lists of fields. + * By default this will fetch the field list relevant to `get`, + * but a different list may be returned if you specify another action. * * @method $this setLoadOptions(bool $value) * @method bool getLoadOptions() * @method $this setAction(string $value) - * @method $this addValue(string $value) * @method $this setValues(array $values) * @method array getValues() */ @@ -127,6 +132,17 @@ class BasicGetFieldsAction extends BasicGetAction { return $sub[$this->action] ?? $this->action; } + /** + * Add an item to the values array + * @param string $fieldName + * @param mixed $value + * @return $this + */ + public function addValue(string $fieldName, $value) { + $this->values[$fieldName] = $value; + return $this; + } + public function fields() { return [ [ diff --git a/civicrm/Civi/Api4/Generic/BasicReplaceAction.php b/civicrm/Civi/Api4/Generic/BasicReplaceAction.php index 1c71536279f48af1596aeca001c2b3426a3939ea..b8e20285cd258ddce9d598d84a04de46d266120e 100644 --- a/civicrm/Civi/Api4/Generic/BasicReplaceAction.php +++ b/civicrm/Civi/Api4/Generic/BasicReplaceAction.php @@ -21,17 +21,21 @@ namespace Civi\Api4\Generic; -use Civi\API\Exception\NotImplementedException; use Civi\Api4\Utils\ActionUtil; /** - * Given a set of records, will appropriately update the database. + * Replaces an existing set of $ENTITIES with a new one. * - * @method $this setRecords(array $records) Array of records. - * @method $this addRecord($record) Add a record to update. + * This will select a group of existing $ENTITIES based on the `where` parameter. + * Each will be compared with the $ENTITIES passed in as `records`: + * + * - $ENTITIES in `records` that don't already exist will be created. + * - Existing $ENTITIES that are included in `records` will be updated. + * - Existing $ENTITIES that are omitted from `records` will be deleted. + * + * @method $this setRecords(array $records) Set array of records. * @method array getRecords() - * @method $this setDefaults(array $defaults) Array of defaults. - * @method $this addDefault($name, $value) Add a default value. + * @method $this setDefaults(array $defaults) Set array of defaults. * @method array getDefaults() * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving. * @method bool getReload() @@ -39,9 +43,9 @@ use Civi\Api4\Utils\ActionUtil; class BasicReplaceAction extends AbstractBatchAction { /** - * Array of records. + * Array of $ENTITY records. * - * Should be in the same format as returned by Get. + * Should be in the same format as returned by `Get`. * * @var array * @required @@ -51,18 +55,23 @@ class BasicReplaceAction extends AbstractBatchAction { /** * Array of default values. * - * Will be merged into $records before saving. + * These defaults will be merged into every $ENTITY in `records` before saving. + * Values set in `records` will override these defaults if set in both places, + * but updating existing $ENTITIES will overwrite current values with these defaults. + * + * **Note:** Values from the `where` clause that use the `=` operator are _also_ treated as default values; + * those do not need to be repeated here. * * @var array */ protected $defaults = []; /** - * Reload records after saving. + * Reload $ENTITIES after saving. * - * By default this api typically returns partial records containing only the fields - * that were updated. Set reload to TRUE to do an additional lookup after saving - * to return complete records. + * By default this action typically returns partial records containing only the fields + * that were updated. Set `reload` to `true` to do an additional lookup after saving + * to return complete values for every $ENTITY. * * @var bool */ @@ -91,36 +100,13 @@ class BasicReplaceAction extends AbstractBatchAction { $idField = $this->getSelect()[0]; $toDelete = array_diff_key(array_column($items, NULL, $idField), array_flip(array_filter(\CRM_Utils_Array::collect($idField, $this->records)))); - // Try to delegate to the Save action - try { - $saveAction = ActionUtil::getAction($this->getEntityName(), 'save'); - $saveAction - ->setCheckPermissions($this->getCheckPermissions()) - ->setReload($this->reload) - ->setRecords($this->records) - ->setDefaults($this->defaults); - $result->exchangeArray((array) $saveAction->execute()); - } - // Fall back on Create/Update if Save doesn't exist - catch (NotImplementedException $e) { - foreach ($this->records as $record) { - $record += $this->defaults; - if (!empty($record[$idField])) { - $result[] = civicrm_api4($this->getEntityName(), 'update', [ - 'reload' => $this->reload, - 'where' => [[$idField, '=', $record[$idField]]], - 'values' => $record, - 'checkPermissions' => $this->getCheckPermissions(), - ])->first(); - } - else { - $result[] = civicrm_api4($this->getEntityName(), 'create', [ - 'values' => $record, - 'checkPermissions' => $this->getCheckPermissions(), - ])->first(); - } - } - } + $saveAction = ActionUtil::getAction($this->getEntityName(), 'save'); + $saveAction + ->setCheckPermissions($this->getCheckPermissions()) + ->setReload($this->reload) + ->setRecords($this->records) + ->setDefaults($this->defaults); + $result->exchangeArray((array) $saveAction->execute()); if ($toDelete) { $result->deleted = (array) civicrm_api4($this->getEntityName(), 'delete', [ @@ -130,4 +116,25 @@ class BasicReplaceAction extends AbstractBatchAction { } } + /** + * Set default value for a field. + * @param string $fieldName + * @param mixed $defaultValue + * @return $this + */ + public function addDefault(string $fieldName, $defaultValue) { + $this->defaults[$fieldName] = $defaultValue; + return $this; + } + + /** + * Add one or more records + * @param array ...$records + * @return $this + */ + public function addRecord(array ...$records) { + $this->records = array_merge($this->records, $records); + return $this; + } + } diff --git a/civicrm/Civi/Api4/Generic/BasicSaveAction.php b/civicrm/Civi/Api4/Generic/BasicSaveAction.php index 9eef7c434622d8fe400355dee90d89356b396e74..b5c998af5676bfca49281bdbca698f84f6e7c691 100644 --- a/civicrm/Civi/Api4/Generic/BasicSaveAction.php +++ b/civicrm/Civi/Api4/Generic/BasicSaveAction.php @@ -25,11 +25,11 @@ use Civi\API\Exception\NotImplementedException; use Civi\Api4\Utils\ActionUtil; /** - * Create or update one or more records. + * $ACTION one or more $ENTITIES. * - * If creating more than one record with similar values, use the "defaults" param. + * If saving more than one new $ENTITY with similar values, use the `defaults` parameter. * - * Set "reload" if you need the api to return complete records. + * Set `reload` if you need the api to return complete $ENTITY records. */ class BasicSaveAction extends AbstractSaveAction { @@ -90,6 +90,7 @@ class BasicSaveAction extends AbstractSaveAction { */ protected function writeRecord($item) { if (is_callable($this->setter)) { + $this->addCallbackToDebugOutput($this->setter); return call_user_func($this->setter, $item, $this); } throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName()); diff --git a/civicrm/Civi/Api4/Generic/BasicUpdateAction.php b/civicrm/Civi/Api4/Generic/BasicUpdateAction.php index 8867523e485fba7f8815ff9a63cd52e504122480..a7c8865f8ccc7bb5bca1cab08c84781c4f171667 100644 --- a/civicrm/Civi/Api4/Generic/BasicUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/BasicUpdateAction.php @@ -24,9 +24,9 @@ namespace Civi\Api4\Generic; use Civi\API\Exception\NotImplementedException; /** - * Update one or more records with new values. + * Update one or more $ENTITY with new values. * - * Use the where clause (required) to select them. + * Use the `where` clause (required) to select them. */ class BasicUpdateAction extends AbstractUpdateAction { @@ -64,10 +64,6 @@ class BasicUpdateAction extends AbstractUpdateAction { foreach ($this->getBatchRecords() as $item) { $result[] = $this->writeRecord($this->values + $item); } - - if (!$result->count()) { - throw new \API_Exception('Cannot ' . $this->getActionName() . ' ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString()); - } } /** @@ -84,6 +80,7 @@ class BasicUpdateAction extends AbstractUpdateAction { */ protected function writeRecord($item) { if (is_callable($this->setter)) { + $this->addCallbackToDebugOutput($this->setter); return call_user_func($this->setter, $item, $this); } throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName()); diff --git a/civicrm/Civi/Api4/Generic/DAOCreateAction.php b/civicrm/Civi/Api4/Generic/DAOCreateAction.php index 36b19a0a6dc25545081d819aa2e662e6cfd837f1..c90b81116d4a8ffa5dfdf4435b496ebcac44a7c7 100644 --- a/civicrm/Civi/Api4/Generic/DAOCreateAction.php +++ b/civicrm/Civi/Api4/Generic/DAOCreateAction.php @@ -22,9 +22,10 @@ namespace Civi\Api4\Generic; /** - * Create a new object from supplied values. + * Create a new $ENTITY from supplied values. * - * This function will create 1 new object. It cannot be used to update existing objects. Use the Update or Replace actions for that. + * This action will create 1 new $ENTITY. + * It cannot be used to update existing $ENTITIES; use the `Update` or `Replace` actions for that. */ class DAOCreateAction extends AbstractCreateAction { use Traits\DAOActionTrait; diff --git a/civicrm/Civi/Api4/Generic/DAODeleteAction.php b/civicrm/Civi/Api4/Generic/DAODeleteAction.php index 9c2c3cee22783469ac69c675351f6dcfc7798c9a..3e0135f8991cbcb291f5aaf1c9f625edebba5417 100644 --- a/civicrm/Civi/Api4/Generic/DAODeleteAction.php +++ b/civicrm/Civi/Api4/Generic/DAODeleteAction.php @@ -22,7 +22,9 @@ namespace Civi\Api4\Generic; /** - * Delete one or more items, based on criteria specified in Where param (required). + * Delete one or more $ENTITIES. + * + * $ENTITIES are deleted based on criteria specified in `where` parameter (required). */ class DAODeleteAction extends AbstractBatchAction { use Traits\DAOActionTrait; @@ -32,19 +34,14 @@ class DAODeleteAction extends AbstractBatchAction { */ public function _run(Result $result) { $defaults = $this->getParamDefaults(); - if ($defaults['where'] && !array_diff_key($this->where, $defaults['where'])) { + if ($defaults['where'] && $this->where === $defaults['where']) { throw new \API_Exception('Cannot delete ' . $this->getEntityName() . ' with no "where" parameter specified'); } $items = $this->getObjects(); - - if (!$items) { - throw new \API_Exception('Cannot delete ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString()); + if ($items) { + $result->exchangeArray($this->deleteObjects($items)); } - - $ids = $this->deleteObjects($items); - - $result->exchangeArray($ids); } /** diff --git a/civicrm/Civi/Api4/Generic/DAOEntity.php b/civicrm/Civi/Api4/Generic/DAOEntity.php index 9fc8bb161b732ce9f84c4b0e1e01b59b97308fbb..38888227c6accfd44cc809a14d1e71ff364c7583 100644 --- a/civicrm/Civi/Api4/Generic/DAOEntity.php +++ b/civicrm/Civi/Api4/Generic/DAOEntity.php @@ -34,7 +34,7 @@ abstract class DAOEntity extends AbstractEntity { } /** - * @return DAOGetAction + * @return DAOSaveAction */ public static function save() { return new DAOSaveAction(static::class, __FUNCTION__); diff --git a/civicrm/Civi/Api4/Generic/DAOGetAction.php b/civicrm/Civi/Api4/Generic/DAOGetAction.php index 728506b7d00c7e3b75a5f5f471ee0fda0f888765..c7472969f48b4a0683b34f30f1c0e7aeef364969 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetAction.php @@ -22,17 +22,29 @@ namespace Civi\Api4\Generic; /** - * Retrieve items based on criteria specified in the 'where' param. + * Retrieve $ENTITIES based on criteria specified in the `where` parameter. * - * Use the 'select' param to determine which fields are returned, defaults to *. + * Use the `select` param to determine which fields are returned, defaults to `[*]`. * * Perform joins on other related entities using a dot notation. */ class DAOGetAction extends AbstractGetAction { use Traits\DAOActionTrait; + /** + * Fields to return. Defaults to all non-custom fields `[*]`. + * + * 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. + * + * @var array + * @inheritDoc + */ + protected $select = []; + public function _run(Result $result) { $this->setDefaultWhereClause(); + $this->expandSelectClauseWildcards(); $result->exchangeArray($this->getObjects()); } diff --git a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php index d64155fd0b672222676c426a58d008b50e9f87a6..992eca6707c8aced4b25ad808bcfb52be657b92b 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php @@ -24,8 +24,7 @@ namespace Civi\Api4\Generic; use Civi\Api4\Service\Spec\SpecFormatter; /** - * Get fields for a DAO-based entity. - * + * @inheritDoc * @method $this setIncludeCustom(bool $value) * @method bool getIncludeCustom() */ @@ -39,7 +38,7 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { protected $includeCustom = TRUE; /** - * Get fields for a DAO-based entity + * Get fields for a DAO-based entity. * * @return array */ diff --git a/civicrm/Civi/Api4/Generic/DAOSaveAction.php b/civicrm/Civi/Api4/Generic/DAOSaveAction.php index cd91e53be1dbfeed9d13c0395d5ca2865d7cdc47..954ecae5bab1ce61fba9de3ee442739779f5e2f2 100644 --- a/civicrm/Civi/Api4/Generic/DAOSaveAction.php +++ b/civicrm/Civi/Api4/Generic/DAOSaveAction.php @@ -22,11 +22,11 @@ namespace Civi\Api4\Generic; /** - * Create or update one or more records. + * Create or update one or more $ENTITIES. * - * If creating more than one record with similar values, use the "defaults" param. + * If creating more than one $ENTITY with similar values, use the `defaults` param. * - * Set "reload" if you need the api to return complete records. + * Set `reload` if you need the api to return complete records for each saved $ENTITY. */ class DAOSaveAction extends AbstractSaveAction { use Traits\DAOActionTrait; diff --git a/civicrm/Civi/Api4/Generic/DAOUpdateAction.php b/civicrm/Civi/Api4/Generic/DAOUpdateAction.php index fb5c45cfd411e2e635de8eb4ba454f1b71337f51..b2768ee4d18f082524b4c7a5b6797b63526b8b55 100644 --- a/civicrm/Civi/Api4/Generic/DAOUpdateAction.php +++ b/civicrm/Civi/Api4/Generic/DAOUpdateAction.php @@ -22,9 +22,9 @@ namespace Civi\Api4\Generic; /** - * Update one or more records with new values. + * Update one or more $ENTITY with new values. * - * Use the where clause (required) to select them. + * Use the `where` clause (required) to select them. */ class DAOUpdateAction extends AbstractUpdateAction { use Traits\DAOActionTrait; @@ -71,10 +71,6 @@ class DAOUpdateAction extends AbstractUpdateAction { $item = $this->values + $item; } - if (!$items) { - throw new \API_Exception('Cannot ' . $this->getActionName() . ' ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString()); - } - $result->exchangeArray($this->writeObjects($items)); } diff --git a/civicrm/Civi/Api4/Generic/Result.php b/civicrm/Civi/Api4/Generic/Result.php index ca10ef6f5d99797b83c479c1a01d61aba513c084..fa6561a3305b25e3b3cb29cdad388f4e27f029eb 100644 --- a/civicrm/Civi/Api4/Generic/Result.php +++ b/civicrm/Civi/Api4/Generic/Result.php @@ -13,6 +13,14 @@ namespace Civi\Api4\Generic; /** * Container for api results. + * + * The Result object has three functions: + * + * 1. Store the results of the API call (accessible via ArrayAccess). + * 2. Store metadata like the Entity & Action names. + * - Note: some actions extend the Result object to store extra metadata. + * For example, BasicReplaceAction returns ReplaceResult which includes the additional $deleted property to list any items deleted by the operation. + * 3. Provide convenience methods like `$result->first()` and `$result->indexBy($field)`. */ class Result extends \ArrayObject { /** @@ -23,6 +31,10 @@ class Result extends \ArrayObject { * @var string */ public $action; + /** + * @var array + */ + public $debug; /** * Api version * @var int diff --git a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php index 3748daa4ab3456babec321adb622343cd94825bd..451e31f7f264270b63001383050a1897514f0d91 100644 --- a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php @@ -20,7 +20,6 @@ namespace Civi\Api4\Generic\Traits; -use CRM_Utils_Array as UtilsArray; use Civi\Api4\Utils\FormattingUtil; use Civi\Api4\Query\Api4SelectQuery; @@ -76,6 +75,9 @@ trait DAOActionTrait { $query->orderBy = $this->getOrderBy(); $query->limit = $this->getLimit(); $query->offset = $this->getOffset(); + if ($this->getDebug()) { + $query->debugOutput =& $this->_debugOutput; + } $result = $query->run(); if (is_array($result)) { \CRM_Utils_API_HTMLInputCoder::singleton()->decodeRows($result); @@ -129,7 +131,7 @@ trait DAOActionTrait { $result = []; foreach ($items as $item) { - $entityId = UtilsArray::value('id', $item); + $entityId = $item['id'] ?? NULL; FormattingUtil::formatWriteParams($item, $this->getEntityName(), $this->entityFields()); $this->formatCustomParams($item, $entityId); $item['check_permissions'] = $this->getCheckPermissions(); @@ -167,6 +169,7 @@ trait DAOActionTrait { $result[] = $resultArray; } + FormattingUtil::formatOutputValues($result, $this->entityFields(), $this->getEntityName()); return $result; } @@ -180,7 +183,7 @@ trait DAOActionTrait { $baoName = $this->getBaoName(); $hook = empty($params['id']) ? 'create' : 'edit'; - \CRM_Utils_Hook::pre($hook, $this->getEntityName(), UtilsArray::value('id', $params), $params); + \CRM_Utils_Hook::pre($hook, $this->getEntityName(), $params['id'] ?? NULL, $params); /** @var \CRM_Core_DAO $instance */ $instance = new $baoName(); $instance->copyValues($params, TRUE); diff --git a/civicrm/Civi/Api4/Group.php b/civicrm/Civi/Api4/Group.php index 334e62d17eb7b1e66ae7807c0ba63842b8f94edd..b1cfa8591a4435e8500163c47e13fed191131399 100644 --- a/civicrm/Civi/Api4/Group.php +++ b/civicrm/Civi/Api4/Group.php @@ -18,12 +18,13 @@ * */ - namespace Civi\Api4; /** * Group entity. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/groups-and-tags/#groups + * * @package Civi\Api4 */ class Group extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/GroupContact.php b/civicrm/Civi/Api4/GroupContact.php index 7af2722431e846c3a54a0a594b8b9c5f49c7b366..62d1b2dc0fae675bd868db7c3c4be8399a5a0a5c 100644 --- a/civicrm/Civi/Api4/GroupContact.php +++ b/civicrm/Civi/Api4/GroupContact.php @@ -18,7 +18,6 @@ * */ - namespace Civi\Api4; /** @@ -27,6 +26,8 @@ namespace Civi\Api4; * A contact can either be "Added" "Removed" or "Pending" in a group. * CiviCRM only considers them to be "in" a group if their status is "Added". * + * @see \Civi\Api4\Group + * * @package Civi\Api4 */ class GroupContact extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/GroupNesting.php b/civicrm/Civi/Api4/GroupNesting.php index 83e4ad77d7a236c84f649ee363afe0da17200f92..96276beee6a490f1ea4cf97675711d6abd969c27 100644 --- a/civicrm/Civi/Api4/GroupNesting.php +++ b/civicrm/Civi/Api4/GroupNesting.php @@ -23,6 +23,8 @@ namespace Civi\Api4; /** * GroupNesting entity. * + * @see \Civi\Api4\Group + * * @package Civi\Api4 */ class GroupNesting extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/GroupOrganization.php b/civicrm/Civi/Api4/GroupOrganization.php index a640e2cb93cd6542d0150f6b8bfe7dcf7ef87cae..e98654dcf4d8548a58782df20786525e6bf2b42a 100644 --- a/civicrm/Civi/Api4/GroupOrganization.php +++ b/civicrm/Civi/Api4/GroupOrganization.php @@ -23,6 +23,9 @@ namespace Civi\Api4; /** * GroupOrganization entity. * + * Relates groups to organizations. + * + * @see \Civi\Api4\Group * @package Civi\Api4 */ class GroupOrganization extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Mapping.php b/civicrm/Civi/Api4/Mapping.php index 341cf1698fff0fde5cf428831aa1f5a2cb5ba942..c54f0dd534a4ae6c6129effa8b69202525c61ee4 100644 --- a/civicrm/Civi/Api4/Mapping.php +++ b/civicrm/Civi/Api4/Mapping.php @@ -18,7 +18,6 @@ * */ - namespace Civi\Api4; /** diff --git a/civicrm/Civi/Api4/MappingField.php b/civicrm/Civi/Api4/MappingField.php index e59be2b13157b8a34658f9048073deae49247ac7..16cf57ad5678940c935a8c3339baa989de2afb17 100644 --- a/civicrm/Civi/Api4/MappingField.php +++ b/civicrm/Civi/Api4/MappingField.php @@ -18,7 +18,6 @@ * */ - namespace Civi\Api4; /** @@ -26,6 +25,8 @@ namespace Civi\Api4; * * This represents one field in a Mapping collection. * + * @see \Civi\Api4\Mapping + * * @package Civi\Api4 */ class MappingField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Navigation.php b/civicrm/Civi/Api4/Navigation.php index 440a4818df213449ec88778214b612ef5c754c64..9833842ec7c2bcc19d8e12d9c3441c5c71adeb4e 100644 --- a/civicrm/Civi/Api4/Navigation.php +++ b/civicrm/Civi/Api4/Navigation.php @@ -18,7 +18,6 @@ * */ - namespace Civi\Api4; /** diff --git a/civicrm/Civi/Api4/OptionGroup.php b/civicrm/Civi/Api4/OptionGroup.php index 751334945c7ae3ba86414cb50fc989f2c7c17a5a..22f28d5fcf7f6a9af155d5f0cb6f9040049cdfa3 100644 --- a/civicrm/Civi/Api4/OptionGroup.php +++ b/civicrm/Civi/Api4/OptionGroup.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * OptionGroup entity. * + * @see \Civi\Api4\OptionValue * @package Civi\Api4 */ class OptionGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/OptionValue.php b/civicrm/Civi/Api4/OptionValue.php index 8d8946d2eb7a3b0eba3f5570614a54b00990ea7e..98e9cae38857b47a0b4f2cd39844d060d62aa6ca 100644 --- a/civicrm/Civi/Api4/OptionValue.php +++ b/civicrm/Civi/Api4/OptionValue.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * OptionValue entity. * + * @see \Civi\Api4\OptionGroup * @package Civi\Api4 */ class OptionValue extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Participant.php b/civicrm/Civi/Api4/Participant.php index a5c4115f617638ca5cdd7bd81423c4d8332cbeab..473deace0ccd72c79aa14933ce6bf86bdaf253b6 100644 --- a/civicrm/Civi/Api4/Participant.php +++ b/civicrm/Civi/Api4/Participant.php @@ -18,7 +18,6 @@ * */ - namespace Civi\Api4; /** diff --git a/civicrm/Civi/Api4/PaymentProcessor.php b/civicrm/Civi/Api4/PaymentProcessor.php new file mode 100644 index 0000000000000000000000000000000000000000..c15a4487337f158258aa8eacfedf07708132d721 --- /dev/null +++ b/civicrm/Civi/Api4/PaymentProcessor.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 | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * Payment Processor entity. + * + * @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/ + * + * @package Civi\Api4 + */ +class PaymentProcessor extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/PaymentProcessorType.php b/civicrm/Civi/Api4/PaymentProcessorType.php new file mode 100644 index 0000000000000000000000000000000000000000..425d4ba122c12d544f60f583f52da97f786d2173 --- /dev/null +++ b/civicrm/Civi/Api4/PaymentProcessorType.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 | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * Payment Processor Type entity. + * + * @see \Civi\Api4\PaymentProcessor + * + * @package Civi\Api4 + */ +class PaymentProcessorType extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Provider/ActionObjectProvider.php b/civicrm/Civi/Api4/Provider/ActionObjectProvider.php index 2180672cb00a7f5fb776a6c4915c55d6fba06fdb..b31c3d323f9ab997d181928bcf25cfbdb75563af 100644 --- a/civicrm/Civi/Api4/Provider/ActionObjectProvider.php +++ b/civicrm/Civi/Api4/Provider/ActionObjectProvider.php @@ -61,7 +61,7 @@ class ActionObjectProvider implements EventSubscriberInterface, ProviderInterfac // Load result class based on @return annotation in the execute() method. $reflection = new \ReflectionClass($action); $doc = ReflectionUtils::getCodeDocs($reflection->getMethod('execute'), 'Method'); - $resultClass = \CRM_Utils_Array::value('return', $doc, '\\Civi\\Api4\\Generic\\Result'); + $resultClass = $doc['return'][0] ?? '\\Civi\\Api4\\Generic\\Result'; $result = new $resultClass(); $result->action = $action->getActionName(); $result->entity = $action->getEntityName(); diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 80ecaf55cf046aabdc7cd35c7c7312d9c658514d..4181543bbc65b9b7ee4893b80453a1a700987a7c 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -18,6 +18,7 @@ use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable; use Civi\Api4\Service\Schema\Joinable\Joinable; use Civi\Api4\Utils\FormattingUtil; use Civi\Api4\Utils\CoreUtil; +use Civi\Api4\Utils\SelectUtil; use CRM_Core_DAO_AllCoreTables as AllCoreTables; use CRM_Utils_Array as UtilsArray; @@ -53,6 +54,13 @@ class Api4SelectQuery extends SelectQuery { */ protected $joinedTables = []; + /** + * If set to an array, this will start collecting debug info. + * + * @var null|array + */ + public $debugOutput = NULL; + /** * @param string $entity * @param bool $checkPermissions @@ -104,6 +112,9 @@ class Api4SelectQuery extends SelectQuery { $results = []; $sql = $this->query->toSQL(); + if (is_array($this->debugOutput)) { + $this->debugOutput['sql'][] = $sql; + } $query = \CRM_Core_DAO::executeQuery($sql); while ($query->fetch()) { @@ -161,15 +172,8 @@ class Api4SelectQuery extends SelectQuery { * @throws \Civi\API\Exception\UnauthorizedException */ protected function buildSelectFields() { - $return_all_fields = (empty($this->select) || !is_array($this->select)); - $return = $return_all_fields ? $this->entityFieldNames : $this->select; - if ($return_all_fields || in_array('custom', $this->select)) { - foreach (array_keys($this->apiFieldSpec) as $fieldName) { - if (strpos($fieldName, 'custom_') === 0) { - $return[] = $fieldName; - } - } - } + $selectAll = (empty($this->select) || in_array('*', $this->select)); + $select = $selectAll ? $this->entityFieldNames : $this->select; // Always select the ID if the table has one. if (array_key_exists('id', $this->apiFieldSpec) || strstr($this->entity, 'Custom_')) { @@ -177,7 +181,7 @@ class Api4SelectQuery extends SelectQuery { } // core return fields - foreach ($return as $fieldName) { + foreach ($select as $fieldName) { $field = $this->getField($fieldName); if (strpos($fieldName, '.') && !empty($this->fkSelectAliases[$fieldName]) && !array_filter($this->getPathJoinTypes($fieldName))) { $this->selectFields[$this->fkSelectAliases[$fieldName]] = $fieldName; @@ -280,7 +284,7 @@ class Api4SelectQuery extends SelectQuery { throw new \API_Exception("Invalid field '$key' in where clause."); } - FormattingUtil::formatValue($value, $fieldSpec, $this->getEntity()); + FormattingUtil::formatInputValue($value, $fieldSpec, $this->getEntity()); $sql_clause = \CRM_Core_DAO::createSQLFilter("`$table_name`.`$column_name`", [$operator => $value]); if ($sql_clause === NULL) { @@ -338,6 +342,14 @@ class Api4SelectQuery extends SelectQuery { /** @var \Civi\Api4\Service\Schema\Joinable\Joinable $lastLink */ $lastLink = array_pop($joinPath); + $isWild = strpos($field, '*') !== FALSE; + if ($isWild) { + if (!in_array($key, $this->select)) { + throw new \API_Exception('Wildcards can only be used in the SELECT clause.'); + } + $this->select = array_diff($this->select, [$key]); + } + // Cache field info for retrieval by $this->getField() $prefix = array_pop($pathArray) . '.'; if (!isset($this->apiFieldSpec[$prefix . $field])) { @@ -351,19 +363,29 @@ class Api4SelectQuery extends SelectQuery { } } - if (!$lastLink->getField($field)) { + if (!$isWild && !$lastLink->getField($field)) { throw new \API_Exception('Invalid join'); } - // custom groups use aliases for field names - if ($lastLink instanceof CustomGroupJoinable) { - $field = $lastLink->getSqlColumn($field); + $fields = $isWild ? [] : [$field]; + // Expand wildcard and add matching fields to $this->select + if ($isWild) { + $fields = SelectUtil::getMatchingFields($field, $lastLink->getEntityFieldNames()); + foreach ($fields as $field) { + $this->select[] = $pathString . '.' . $field; + } + $this->select = array_unique($this->select); } - // Check Permission on field. - if ($this->checkPermissions && !empty($this->apiFieldSpec[$prefix . $field]['permission']) && !\CRM_Core_Permission::check($this->apiFieldSpec[$prefix . $field]['permission'])) { - return; + + foreach ($fields as $field) { + // custom groups use aliases for field names + $col = ($lastLink instanceof CustomGroupJoinable) ? $lastLink->getSqlColumn($field) : $field; + // Check Permission on field. + if ($this->checkPermissions && !empty($this->apiFieldSpec[$prefix . $field]['permission']) && !\CRM_Core_Permission::check($this->apiFieldSpec[$prefix . $field]['permission'])) { + return; + } + $this->fkSelectAliases[$pathString . '.' . $field] = sprintf('%s.%s', $lastLink->getAlias(), $col); } - $this->fkSelectAliases[$key] = sprintf('%s.%s', $lastLink->getAlias(), $field); } /** diff --git a/civicrm/Civi/Api4/Relationship.php b/civicrm/Civi/Api4/Relationship.php index b7e26270c4dcd3e81fe8bc06fd2f707bcad982da..d1a76fede90274d6200b8a4e18c3481d5aea3801 100644 --- a/civicrm/Civi/Api4/Relationship.php +++ b/civicrm/Civi/Api4/Relationship.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * Relationship entity. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/relationships/ + * * @package Civi\Api4 */ class Relationship extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/RelationshipType.php b/civicrm/Civi/Api4/RelationshipType.php index ea874c445237a1b7b524e9e7c9a38b9220b067d7..59a10a6c374aa644fe01cfa66f8ea6381149ce95 100644 --- a/civicrm/Civi/Api4/RelationshipType.php +++ b/civicrm/Civi/Api4/RelationshipType.php @@ -24,6 +24,8 @@ namespace Civi\Api4; /** * RelationshipType entity. * + * @see \Civi\Api4\Relationship + * * @package Civi\Api4 */ class RelationshipType extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Route.php b/civicrm/Civi/Api4/Route.php index e1c5b779c5ef3c250c9493d047c2fa856d4a5d0b..f3d36bc61cbce6315a0bd6ee53861a09a9f14538 100644 --- a/civicrm/Civi/Api4/Route.php +++ b/civicrm/Civi/Api4/Route.php @@ -22,6 +22,17 @@ namespace Civi\Api4; use Civi\Api4\Generic\BasicGetFieldsAction; +/** + * CiviCRM menu route. + * + * Provides page routes registered in the CiviCRM menu system. + * + * Note: this is a read-only api as routes are set via xml files and hooks. + * + * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterMenu/ + * + * @package Civi\Api4 + */ class Route extends \Civi\Api4\Generic\AbstractEntity { /** diff --git a/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php b/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php index 3e57abfbb0e41919174bce4851f24ea4b5d63068..695c7b56622559c2e83ead2b9aa79549d8c35eae 100644 --- a/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php +++ b/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php @@ -86,6 +86,9 @@ class CustomGroupJoinable extends Joinable { * @return string */ public function getSqlColumn($fieldName) { + if (strpos($fieldName, '.') !== FALSE) { + $fieldName = substr($fieldName, 1 + strrpos($fieldName, '.')); + } return $this->columns[$fieldName]; } diff --git a/civicrm/Civi/Api4/Service/Schema/Joinable/Joinable.php b/civicrm/Civi/Api4/Service/Schema/Joinable/Joinable.php index a0b6338bef1d0b3b38cf0dc282ab052be20d80d5..3cd51f970dab54c3f845c63bdce5c00feddc519c 100644 --- a/civicrm/Civi/Api4/Service/Schema/Joinable/Joinable.php +++ b/civicrm/Civi/Api4/Service/Schema/Joinable/Joinable.php @@ -281,6 +281,17 @@ class Joinable { return $this->entityFields; } + /** + * @return array + */ + public function getEntityFieldNames() { + $fieldNames = []; + foreach ($this->getEntityFields() as $fieldSpec) { + $fieldNames[] = $fieldSpec->getName(); + } + return $fieldNames; + } + /** * @return \Civi\Api4\Service\Spec\FieldSpec|NULL */ diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorCreationSpecProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..ec6a236080d0b00b67280de80b929961e9374690 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorCreationSpecProvider.php @@ -0,0 +1,52 @@ +<?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\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class PaymentProcessorCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * This runs for both create and get actions + * + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('domain_id')->setRequired(FALSE)->setDefaultValue('current_domain'); + // Billing mode is copied across from the payment processor type field in the BAO::create function. + $spec->getFieldByName('billing_mode')->setRequired(FALSE); + + $financial_account_id = new FieldSpec('financial_account_id', 'PaymentProcessor', 'Integer'); + $financial_account_id + ->setTitle('Financial Account ID') + ->setDescription('The financial account that this payment processor is linked to') + ->setRequired(FALSE) + ->setDefaultValue(\CRM_Financial_BAO_PaymentProcessor::getDefaultFinancialAccountID()) + ->setFkEntity('FinancialAccount'); + $spec->addFieldSpec($financial_account_id); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'PaymentProcessor' && in_array($action, ['create']); + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorTypeCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorTypeCreationSpecProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..f0ed1edf8767aac9367a83042c5a6c123af63db7 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/PaymentProcessorTypeCreationSpecProvider.php @@ -0,0 +1,56 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 5 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2019 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +/** + * + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2019 + * $Id$ + * + */ +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class PaymentProcessorTypeCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * This runs for both create and get actions + * + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('payment_instrument_id')->setRequired(FALSE)->setDefaultValue(1); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'PaymentProcessorType' && in_array($action, ['create']); + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php index 0edb4e8c6a5885ac25396e756b2aa7d02d672586..dc7304731c2df7a39ed1873f790a240bda07649a 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php @@ -42,7 +42,7 @@ class SpecGatherer { /** * Returns a RequestSpec with all the fields available. Uses spec providers * to add or modify field specifications. - * For an example @see CustomFieldSpecProvider. + * @see \Civi\Api4\Service\Spec\Provider\CustomFieldCreationSpecProvider * * @param string $entity * @param string $action diff --git a/civicrm/Civi/Api4/Setting.php b/civicrm/Civi/Api4/Setting.php index cded4ed5198d3aa54b6cc150cff960a09596e5c4..8b269fe214c25bf0cffa176c3154044f24dc4585 100644 --- a/civicrm/Civi/Api4/Setting.php +++ b/civicrm/Civi/Api4/Setting.php @@ -26,6 +26,7 @@ namespace Civi\Api4; * * Used to read/write persistent setting data from CiviCRM. * + * @see \Civi\Core\SettingsBag * @package Civi\Api4 */ class Setting extends Generic\AbstractEntity { diff --git a/civicrm/Civi/Api4/StatusPreference.php b/civicrm/Civi/Api4/StatusPreference.php index d7318a5c90366a02234220a8bab101291aebf8f7..0b106b2ae735bff063e8b1c0ea675c8503a0d5a2 100644 --- a/civicrm/Civi/Api4/StatusPreference.php +++ b/civicrm/Civi/Api4/StatusPreference.php @@ -22,6 +22,8 @@ namespace Civi\Api4; /** + * StatusPreference entity. + * * For setting "hush" preferences for system check alerts. * * @package Civi\Api4 diff --git a/civicrm/Civi/Api4/Tag.php b/civicrm/Civi/Api4/Tag.php index 9d03a7f8bdb1dca24a3fc73b102bc7b2bc2a6a43..2aae3769ea9e089c052cde90db3065a2a1bafc69 100644 --- a/civicrm/Civi/Api4/Tag.php +++ b/civicrm/Civi/Api4/Tag.php @@ -27,6 +27,7 @@ namespace Civi\Api4; * Tags in CiviCRM are used for Contacts, Activities, Cases & Attachments. * They are connected to those entities via the EntityTag table. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/groups-and-tags/#tags * @package Civi\Api4 */ class Tag extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFField.php b/civicrm/Civi/Api4/UFField.php index df6970c9e8a614b67dc20fac0d35fe097cecb06f..3cb294f98f902ac62231f00b289071a92dea6ba8 100644 --- a/civicrm/Civi/Api4/UFField.php +++ b/civicrm/Civi/Api4/UFField.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * UFField entity - aka profile fields. * + * @see \Civi\Api4\UFGroup * @package Civi\Api4 */ class UFField extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFGroup.php b/civicrm/Civi/Api4/UFGroup.php index 890f34f3113aedf766808f34237447e3220d8e42..dbf4b28820d6909357ded6e495588b4b1b7423cc 100644 --- a/civicrm/Civi/Api4/UFGroup.php +++ b/civicrm/Civi/Api4/UFGroup.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * UFGroup entity - AKA profiles. * + * @see https://docs.civicrm.org/user/en/latest/organising-your-data/profiles/ * @package Civi\Api4 */ class UFGroup extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/UFJoin.php b/civicrm/Civi/Api4/UFJoin.php index 995e34f5a506841fb2ab8426c21435cc1506c8af..6112ee1c1d43897bab13c1096ec3f6227a83b2ed 100644 --- a/civicrm/Civi/Api4/UFJoin.php +++ b/civicrm/Civi/Api4/UFJoin.php @@ -24,6 +24,7 @@ namespace Civi\Api4; /** * UFJoin entity - links profiles to the components/extensions they are used for. * + * @see \Civi\Api4\UFGroup * @package Civi\Api4 */ class UFJoin extends Generic\DAOEntity { diff --git a/civicrm/Civi/Api4/Utils/FormattingUtil.php b/civicrm/Civi/Api4/Utils/FormattingUtil.php index 21c3d4e6b59de29757925c3a5b3d86c601104b6d..b4a55d493ce2e458f2e901ceef3cc17e2a16323b 100644 --- a/civicrm/Civi/Api4/Utils/FormattingUtil.php +++ b/civicrm/Civi/Api4/Utils/FormattingUtil.php @@ -21,8 +21,6 @@ namespace Civi\Api4\Utils; -use CRM_Utils_Array as UtilsArray; - require_once 'api/v3/utils.php'; class FormattingUtil { @@ -43,7 +41,7 @@ class FormattingUtil { if ($value === 'null') { $value = 'Null'; } - FormattingUtil::formatValue($value, $field, $entity); + self::formatInputValue($value, $field, $entity); // Ensure we have an array for serialized fields if (!empty($field['serialize'] && !is_array($value))) { $value = (array) $value; @@ -80,18 +78,14 @@ class FormattingUtil { * Ex: 'Contact', 'Domain' * @throws \API_Exception */ - public static function formatValue(&$value, $fieldSpec, $entity) { + public static function formatInputValue(&$value, $fieldSpec, $entity) { if (is_array($value)) { foreach ($value as &$val) { - self::formatValue($val, $fieldSpec, $entity); + self::formatInputValue($val, $fieldSpec, $entity); } return; } - $fk = UtilsArray::value('fk_entity', $fieldSpec); - if ($fieldSpec['name'] == 'id') { - $fk = $entity; - } - $dataType = UtilsArray::value('data_type', $fieldSpec); + $fk = $fieldSpec['name'] == 'id' ? $entity : $fieldSpec['fk_entity'] ?? NULL; if ($fk === 'Domain' && $value === 'current_domain') { $value = \CRM_Core_Config::domainID(); @@ -104,7 +98,7 @@ class FormattingUtil { } } - switch ($dataType) { + switch ($fieldSpec['data_type'] ?? NULL) { case 'Timestamp': $value = date('Y-m-d H:i:s', strtotime($value)); break; @@ -120,4 +114,73 @@ class FormattingUtil { } } + /** + * Unserialize raw DAO values and convert to correct type + * + * @param array $results + * @param array $fields + * @param string $entity + * @throws \CRM_Core_Exception + */ + public static function formatOutputValues(&$results, $fields, $entity) { + foreach ($results as &$result) { + // Remove inapplicable contact fields + if ($entity === 'Contact' && !empty($result['contact_type'])) { + \CRM_Utils_Array::remove($result, self::contactFieldsToRemove($result['contact_type'])); + } + foreach ($result as $field => $value) { + $dataType = $fields[$field]['data_type'] ?? ($field == 'id' ? 'Integer' : NULL); + if (!empty($fields[$field]['serialize'])) { + if (is_string($value)) { + $result[$field] = $value = \CRM_Core_DAO::unSerializeField($value, $fields[$field]['serialize']); + foreach ($value as $key => $val) { + $result[$field][$key] = self::convertDataType($val, $dataType); + } + } + } + else { + $result[$field] = self::convertDataType($value, $dataType); + } + } + } + } + + /** + * @param mixed $value + * @param string $dataType + * @return mixed + */ + public static function convertDataType($value, $dataType) { + if (isset($value)) { + switch ($dataType) { + case 'Boolean': + return (bool) $value; + + case 'Integer': + return (int) $value; + + case 'Money': + case 'Float': + return (float) $value; + } + } + return $value; + } + + /** + * @param string $contactType + * @return array + */ + public static function contactFieldsToRemove($contactType) { + if (!isset(\Civi::$statics[__CLASS__][__FUNCTION__][$contactType])) { + \Civi::$statics[__CLASS__][__FUNCTION__][$contactType] = []; + foreach (\CRM_Contact_DAO_Contact::fields() as $field) { + if (!empty($field['contactType']) && $field['contactType'] != $contactType) { + \Civi::$statics[__CLASS__][__FUNCTION__][$contactType][] = $field['name']; + } + } + } + return \Civi::$statics[__CLASS__][__FUNCTION__][$contactType]; + } + } diff --git a/civicrm/Civi/Api4/Utils/ReflectionUtils.php b/civicrm/Civi/Api4/Utils/ReflectionUtils.php index aa125662bb1552013c5e12e6014b7f80613068d2..0733b20f891fe5b26f63ed02dab49fb6ea81d4b2 100644 --- a/civicrm/Civi/Api4/Utils/ReflectionUtils.php +++ b/civicrm/Civi/Api4/Utils/ReflectionUtils.php @@ -20,11 +20,17 @@ class ReflectionUtils { * @param \Reflector|\ReflectionClass $reflection * @param string $type * If we are not reflecting the class itself, specify "Method", "Property", etc. - * + * @param array $vars + * Variable substitutions to perform in the docblock * @return array */ - public static function getCodeDocs($reflection, $type = NULL) { - $docs = self::parseDocBlock($reflection->getDocComment()); + public static function getCodeDocs($reflection, $type = NULL, $vars = []) { + $comment = $reflection->getDocComment(); + foreach ($vars as $key => $val) { + $comment = str_replace('$' . strtoupper(\CRM_Utils_String::pluralize($key)), \CRM_Utils_String::pluralize($val), $comment); + $comment = str_replace('$' . strtoupper($key), $val, $comment); + } + $docs = self::parseDocBlock($comment); // Recurse into parent functions if (isset($docs['inheritDoc']) || isset($docs['inheritdoc'])) { @@ -47,7 +53,7 @@ class ReflectionUtils { } if ($newReflection) { // Mix in - $additionalDocs = self::getCodeDocs($newReflection, $type); + $additionalDocs = self::getCodeDocs($newReflection, $type, $vars); if (!empty($docs['comment']) && !empty($additionalDocs['comment'])) { $docs['comment'] .= "\n\n" . $additionalDocs['comment']; } @@ -63,41 +69,71 @@ class ReflectionUtils { */ public static function parseDocBlock($comment) { $info = []; + $param = NULL; foreach (preg_split("/((\r?\n)|(\r\n?))/", $comment) as $num => $line) { if (!$num || strpos($line, '*/') !== FALSE) { continue; } - $line = ltrim(trim($line), '* '); - if (strpos($line, '@') === 0) { - $words = explode(' ', $line); - $key = substr($words[0], 1); + $line = ltrim(trim($line), '*'); + if (strlen($line) && $line[0] === ' ') { + $line = substr($line, 1); + } + if (strpos(ltrim($line), '@') === 0) { + $words = explode(' ', ltrim($line, ' @')); + $key = array_shift($words); + $param = NULL; if ($key == 'var') { - $info['type'] = explode('|', $words[1]); + $info['type'] = explode('|', $words[0]); + } + elseif ($key == 'return') { + $info['return'] = explode('|', $words[0]); } elseif ($key == 'options') { - $val = str_replace(', ', ',', implode(' ', array_slice($words, 1))); + $val = str_replace(', ', ',', implode(' ', $words)); $info['options'] = explode(',', $val); } + elseif ($key == 'throws' || $key == 'see') { + $info[$key][] = implode(' ', $words); + } + elseif ($key == 'param' && $words) { + $type = $words[0][0] !== '$' ? explode('|', array_shift($words)) : NULL; + $param = rtrim(array_shift($words), '-:()/'); + $info['params'][$param] = [ + 'type' => $type, + 'description' => $words ? ltrim(implode(' ', $words), '-: ') : '', + 'comment' => '', + ]; + } else { // Unrecognized annotation, but we'll duly add it to the info array - $val = implode(' ', array_slice($words, 1)); + $val = implode(' ', $words); $info[$key] = strlen($val) ? $val : TRUE; } } + elseif ($param) { + $info['params'][$param]['comment'] .= $line . "\n"; + } elseif ($num == 1) { - $info['description'] = $line; + $info['description'] = ucfirst($line); } elseif (!$line) { if (isset($info['comment'])) { $info['comment'] .= "\n"; } + else { + $info['comment'] = NULL; + } + } + // For multi-line description. + elseif (count($info) === 1 && isset($info['description']) && substr($info['description'], -1) !== '.') { + $info['description'] .= ' ' . $line; } else { $info['comment'] = isset($info['comment']) ? "{$info['comment']}\n$line" : $line; } } if (isset($info['comment'])) { - $info['comment'] = trim($info['comment']); + $info['comment'] = rtrim($info['comment']); } return $info; } diff --git a/civicrm/Civi/Api4/Utils/SelectUtil.php b/civicrm/Civi/Api4/Utils/SelectUtil.php new file mode 100644 index 0000000000000000000000000000000000000000..38b085ceefaa9f61ee403dc3a5bdd9d521c5721d --- /dev/null +++ b/civicrm/Civi/Api4/Utils/SelectUtil.php @@ -0,0 +1,60 @@ +<?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 + * $Id$ + * + */ + + +namespace Civi\Api4\Utils; + +class SelectUtil { + + /** + * Checks if a field is in the Select array or matches a wildcard pattern in the Select array + * + * @param string $field + * @param array $selects + * @return bool + */ + public static function isFieldSelected($field, $selects) { + if (in_array($field, $selects) || (in_array('*', $selects) && strpos($field, '.') === FALSE)) { + return TRUE; + } + foreach ($selects as $item) { + if (strpos($item, '*') !== FALSE && self::getMatchingFields($item, [$field])) { + return TRUE; + } + } + return FALSE; + } + + /** + * @param string $pattern + * @param array $fieldNames + * @return array + */ + public static function getMatchingFields($pattern, $fieldNames) { + if ($pattern === '*') { + return $fieldNames; + } + $pattern = '/^' . str_replace('\*', '.*', preg_quote($pattern, '/')) . '$/'; + return array_values(array_filter($fieldNames, function($field) use ($pattern) { + return preg_match($pattern, $field); + })); + } + +} diff --git a/civicrm/Civi/Core/AssetBuilder.php b/civicrm/Civi/Core/AssetBuilder.php index 4f0756610ec2f2765024d02b8d0b578ed7fa7306..82e2141461b1e15e8ab74ce669683b9eac168a0a 100644 --- a/civicrm/Civi/Core/AssetBuilder.php +++ b/civicrm/Civi/Core/AssetBuilder.php @@ -226,9 +226,11 @@ class AssetBuilder { /** * Clear out any cache files. + * + * @param bool $removeDir Should folder itself be removed too. */ - public function clear() { - \CRM_Utils_File::cleanDir($this->getCachePath()); + public function clear($removeDir = TRUE) { + \CRM_Utils_File::cleanDir($this->getCachePath(), $removeDir); } /** diff --git a/civicrm/Civi/Core/Paths.php b/civicrm/Civi/Core/Paths.php index 29bd7393d04d136a774eb417f329c69c2f08dcd7..651fb29cdc7057669dc137c3a1ae8073b682bceb 100644 --- a/civicrm/Civi/Core/Paths.php +++ b/civicrm/Civi/Core/Paths.php @@ -78,6 +78,12 @@ class Paths { 'path' => defined('CIVICRM_TEMPLATE_COMPILEDIR') ? CIVICRM_TEMPLATE_COMPILEDIR : \Civi::paths()->getPath('[civicrm.private]/templates_c'), ]; }) + ->register('civicrm.l10n', function () { + $dir = defined('CIVICRM_L10N_BASEDIR') ? CIVICRM_L10N_BASEDIR : \Civi::paths()->getPath('[civicrm.private]/l10n'); + return [ + 'path' => is_dir($dir) ? $dir : \Civi::paths()->getPath('[civicrm.root]/l10n'), + ]; + }) ->register('wp.frontend.base', function () { return ['url' => rtrim(CIVICRM_UF_BASEURL, '/') . '/']; }) @@ -140,6 +146,10 @@ class Paths { if (isset($GLOBALS['civicrm_paths'][$name])) { $this->variables[$name] = array_merge($this->variables[$name], $GLOBALS['civicrm_paths'][$name]); } + if (isset($this->variables[$name]['url'])) { + // Typical behavior is to return an absolute URL. If an admin has put an override that's site-relative, then convert. + $this->variables[$name]['url'] = $this->toAbsoluteUrl($this->variables[$name]['url'], $name); + } } if (!isset($this->variables[$name][$attr])) { throw new \RuntimeException("Cannot resolve path using \"$name.$attr\""); @@ -147,6 +157,37 @@ class Paths { return $this->variables[$name][$attr]; } + /** + * @param string $url + * Ex: 'https://example.com:8000/foobar' or '/foobar' + * @param string $for + * Ex: 'civicrm.root' or 'civicrm.packages' + * @return string + */ + private function toAbsoluteUrl($url, $for) { + if (!$url) { + return $url; + } + elseif ($url[0] === '/') { + // Relative URL interpretation + if ($for === 'cms.root') { + throw new \RuntimeException('Invalid configuration: the [cms.root] path must be an absolute URL'); + } + $cmsUrl = rtrim($this->getVariable('cms.root', 'url'), '/'); + // The norms for relative URLs dictate: + // Single-slash: "/sub/dir" or "/" (domain-relative) + // Double-slash: "//example.com/sub/dir" (same-scheme) + $prefix = ($url === '/' || $url[1] !== '/') + ? $cmsUrl + : (parse_url($cmsUrl, PHP_URL_SCHEME) . ':'); + return $prefix . $url; + } + else { + // Assume this is an absolute URL, as in the past ('_h_ttp://'). + return $url; + } + } + /** * Does the variable exist. * @@ -214,7 +255,7 @@ class Paths { return $value; } - $value = $this->getVariable($defaultContainer, 'url') . $value; + $value = rtrim($this->getVariable($defaultContainer, 'url'), '/') . '/' . $value; if ($preferFormat === 'relative') { $parsed = parse_url($value); diff --git a/civicrm/Civi/Core/SettingsBag.php b/civicrm/Civi/Core/SettingsBag.php index c94f3e7a89f6170952de2023b6532e4a03a3399a..779bc3a2302f0df8b769dca98a59c6baf8e291d1 100644 --- a/civicrm/Civi/Core/SettingsBag.php +++ b/civicrm/Civi/Core/SettingsBag.php @@ -136,6 +136,7 @@ class SettingsBag { while ($dao->fetch()) { $this->values[$dao->name] = ($dao->value !== NULL) ? \CRM_Utils_String::unserialize($dao->value) : NULL; } + $dao->values['contribution_invoice_settings'] = $this->getContributionSettings(); } return $this; @@ -253,12 +254,51 @@ class SettingsBag { * @return SettingsBag */ public function set($key, $value) { + if ($key === 'contribution_invoice_settings') { + $this->setContributionSettings($value); + return $this; + } $this->setDb($key, $value); $this->values[$key] = $value; $this->combined = NULL; return $this; } + /** + * Temporary handling for phasing out contribution_invoice_settings. + * + * Until we have transitioned we need to handle setting & retrieving + * contribution_invoice_settings. + * + * Once removed from core we will add deprecation notices & then remove this. + * + * https://lab.civicrm.org/dev/core/issues/1558 + * + * @param array $value + */ + public function setContributionSettings($value) { + foreach (SettingsBag::getContributionInvoiceSettingKeys() as $possibleKeyName => $settingName) { + $keyValue = $value[$possibleKeyName] ?? ''; + $this->set($settingName, $keyValue); + } + $this->values['contribution_invoice_settings'] = $this->getContributionSettings(); + } + + /** + * Temporary function to handle returning the contribution_settings key despite it being deprecated. + * + * See more in comment block on previous function. + * + * @return array + */ + public function getContributionSettings() { + $contributionSettings = []; + foreach (SettingsBag::getContributionInvoiceSettingKeys() as $keyName => $settingName) { + $contributionSettings[$keyName] = $this->values[$settingName] ?? ''; + } + return $contributionSettings; + } + /** * @return \CRM_Utils_SQL_Select */ @@ -378,4 +418,22 @@ class SettingsBag { } } + /** + * @return array + */ + public static function getContributionInvoiceSettingKeys(): array { + $convertedKeys = [ + 'credit_notes_prefix' => 'credit_notes_prefix', + 'invoice_prefix' => 'invoice_prefix', + 'due_date' => 'invoice_due_date', + 'due_date_period' => 'invoice_due_date_period', + 'notes' => 'invoice_notes', + 'is_email_pdf' => 'invoice_is_email_pdf', + 'tax_term' => 'tax_term', + 'tax_display_settings' => 'tax_display_settings', + 'invoicing' => 'invoicing', + ]; + return $convertedKeys; + } + } diff --git a/civicrm/Civi/Payment/PropertyBag.php b/civicrm/Civi/Payment/PropertyBag.php index 8085a1958ac11c642ba82c6960f0178fe33f54ab..6cea55241e7ec38f40ffe0c4bf99e3b59f018e1f 100644 --- a/civicrm/Civi/Payment/PropertyBag.php +++ b/civicrm/Civi/Payment/PropertyBag.php @@ -21,6 +21,12 @@ use CRM_Core_PseudoConstant; * */ class PropertyBag implements \ArrayAccess { + /** + * @var array + * - see legacyWarning + */ + public static $legacyWarnings = []; + protected $props = ['default' => []]; protected static $propMap = [ @@ -161,12 +167,34 @@ class PropertyBag implements \ArrayAccess { } /** + * Log legacy warnings info. + * * @param string $message */ protected function legacyWarning($message) { - $message = "Deprecated code: $message"; + if (empty(static::$legacyWarnings)) { + // First time we have been called. + register_shutdown_function([PropertyBag::class, 'writeLegacyWarnings']); + } + // Store warnings instead of logging immediately, as calls to Civi::log() + // can take over half a second to work in some hosting environments. + static::$legacyWarnings[$message] = TRUE; + + // For unit tests: $this->lastWarning = $message; - Civi::log()->warning($message); + } + + /** + * Save any legacy warnings to log. + * + * Called as a shutdown function. + */ + public static function writeLegacyWarnings() { + if (!empty(static::$legacyWarnings)) { + $message = "Civi\\Payment\\PropertyBag related deprecation warnings:\n" + . implode("\n", array_keys(static::$legacyWarnings)); + Civi::log()->warning($message, ['civi.tag' => 'deprecated']); + } } /** diff --git a/civicrm/Civi/Test.php b/civicrm/Civi/Test.php index 51d929054daba3313c9292e58342d8456100655c..7eb83cade19ad792b41ae8ab4c1ccca1e23a012f 100644 --- a/civicrm/Civi/Test.php +++ b/civicrm/Civi/Test.php @@ -16,6 +16,37 @@ class Test { */ private static $singletons = []; + /** + * @var array + */ + public static $statics = []; + + /** + * Run code in a pre-boot fashion. + * + * @param callable $callback + * @return mixed + * Pass through the result of the callback. + */ + public static function asPreInstall($callback) { + $conn = \Civi\Test::pdo(); + + $oldEscaper = \CRM_Core_I18n::$SQL_ESCAPER; + \Civi::$statics['testPreInstall'] = (\Civi::$statics['testPreInstall'] ?? 0) + 1; + try { + \CRM_Core_I18n::$SQL_ESCAPER = function ($text) use ($conn) { + return substr($conn->quote($text), 1, -1); + }; + return $callback(); + } finally { + \CRM_Core_I18n::$SQL_ESCAPER = $oldEscaper; + \Civi::$statics['testPreInstall']--; + if (\Civi::$statics['testPreInstall'] <= 0) { + unset(\Civi::$statics['testPreInstall']); + } + } + } + /** * Get the data source used for testing. * @@ -88,7 +119,7 @@ class Test { echo "Installing {$dbName} schema\n"; \Civi\Test::schema()->dropAll(); }, 'headless-drop') - ->sqlFile($civiRoot . "/sql/civicrm.mysql") + ->coreSchema() ->sql("DELETE FROM civicrm_extension") ->callback(function ($ctx) { \Civi\Test::data()->populate(); @@ -127,6 +158,19 @@ class Test { return self::$singletons['schema']; } + /** + * @return \CRM_Core_CodeGen_Main + */ + public static function codeGen() { + if (!isset(self::$singletons['codeGen'])) { + $civiRoot = dirname(__DIR__); + $codeGen = new \CRM_Core_CodeGen_Main("$civiRoot/CRM/Core/DAO", "$civiRoot/sql", $civiRoot, "$civiRoot/templates", NULL, "UnitTests", NULL, "$civiRoot/xml/schema/Schema.xml", NULL); + $codeGen->init(); + self::$singletons['codeGen'] = $codeGen; + } + return self::$singletons['codeGen']; + } + /** * @return \Civi\Test\Data */ diff --git a/civicrm/Civi/Test/Api3TestTrait.php b/civicrm/Civi/Test/Api3TestTrait.php index 98f993936e224d3d3c57c0625e524d855675bfa0..79e6e8e53cd7670551dac3794161056e5f8aff05 100644 --- a/civicrm/Civi/Test/Api3TestTrait.php +++ b/civicrm/Civi/Test/Api3TestTrait.php @@ -4,6 +4,7 @@ namespace Civi\Test; use Civi\API\Exception\NotImplementedException; +require_once 'api/v3/utils.php'; /** * Class Api3TestTrait * @package Civi\Test @@ -411,6 +412,10 @@ trait Api3TestTrait { case 'get': if ($options['return'] && $v3Action !== 'getcount') { $v4Params['select'] = array_keys($options['return']); + // Ensure id field is returned as v3 always expects it + if ($v4Entity != 'Setting' && !in_array('id', $v4Params['select'])) { + $v4Params['select'][] = 'id'; + } // Convert join syntax foreach ($v4Params['select'] as &$select) { if (strstr($select, '_id.')) { @@ -455,7 +460,7 @@ trait Api3TestTrait { break; case 'delete': - if (!empty($v3Params['id'])) { + if (isset($v3Params['id'])) { $v4Params['where'][] = ['id', '=', $v3Params['id']]; } break; @@ -527,7 +532,7 @@ trait Api3TestTrait { ]; } - if (($v3Action == 'getsingle' || $v3Action == 'getvalue') && count($result) != 1) { + if (($v3Action == 'getsingle' || $v3Action == 'getvalue' || $v3Action == 'delete') && count($result) != 1) { return $onlySuccess ? 0 : [ 'is_error' => 1, 'error_message' => "Expected one $v4Entity but found " . count($result), diff --git a/civicrm/Civi/Test/CiviEnvBuilder.php b/civicrm/Civi/Test/CiviEnvBuilder.php index 767d34033a814f3de3072fabb884d91bb149f9d8..8bce9d1fbf5e6a57d03e389ee92330d33b6555b8 100644 --- a/civicrm/Civi/Test/CiviEnvBuilder.php +++ b/civicrm/Civi/Test/CiviEnvBuilder.php @@ -2,6 +2,7 @@ namespace Civi\Test; use Civi\Test\CiviEnvBuilder\CallbackStep; +use Civi\Test\CiviEnvBuilder\CoreSchemaStep; use Civi\Test\CiviEnvBuilder\ExtensionsStep; use Civi\Test\CiviEnvBuilder\SqlFileStep; use Civi\Test\CiviEnvBuilder\SqlStep; @@ -41,6 +42,15 @@ class CiviEnvBuilder { return $this->addStep(new CallbackStep($callback, $signature)); } + /** + * Generate the core SQL tables. + * + * @return \Civi\Test\CiviEnvBuilder + */ + public function coreSchema() { + return $this->addStep(new CoreSchemaStep()); + } + public function sql($sql) { return $this->addStep(new SqlStep($sql)); } @@ -168,24 +178,26 @@ class CiviEnvBuilder { * @return CiviEnvBuilder */ public function apply($force = FALSE) { - $dbName = \Civi\Test::dsn('database'); - $query = "USE {$dbName};" - . "CREATE TABLE IF NOT EXISTS civitest_revs (name VARCHAR(64) PRIMARY KEY, rev VARCHAR(64));"; + return \Civi\Test::asPreInstall(function() use ($force) { + $dbName = \Civi\Test::dsn('database'); + $query = "USE {$dbName};" + . "CREATE TABLE IF NOT EXISTS civitest_revs (name VARCHAR(64) PRIMARY KEY, rev VARCHAR(64));"; - if (\Civi\Test::execute($query) === FALSE) { - throw new \RuntimeException("Failed to flag schema version: $query"); - } + if (\Civi\Test::execute($query) === FALSE) { + throw new \RuntimeException("Failed to flag schema version: $query"); + } - $this->assertValid(); + $this->assertValid(); - if (!$force && $this->getSavedSignature() === $this->getTargetSignature()) { + if (!$force && $this->getSavedSignature() === $this->getTargetSignature()) { + return $this; + } + foreach ($this->steps as $step) { + $step->run($this); + } + $this->setSavedSignature($this->getTargetSignature()); return $this; - } - foreach ($this->steps as $step) { - $step->run($this); - } - $this->setSavedSignature($this->getTargetSignature()); - return $this; + }); } /** diff --git a/civicrm/Civi/Test/CiviEnvBuilder/CoreSchemaStep.php b/civicrm/Civi/Test/CiviEnvBuilder/CoreSchemaStep.php new file mode 100644 index 0000000000000000000000000000000000000000..5f8e56abf96bdee6f5351fcf2454976b1b67a2f9 --- /dev/null +++ b/civicrm/Civi/Test/CiviEnvBuilder/CoreSchemaStep.php @@ -0,0 +1,50 @@ +<?php +namespace Civi\Test\CiviEnvBuilder; + +/** + * Class CoreSchemaStep + * @package Civi\Test\CiviEnvBuilder + * + * An initialization step which loads the core SQL schema. + * + * Note that the computation of the schema is cached for the duration of + * the PHP process (\Civi\Test::$statics). + */ +class CoreSchemaStep implements StepInterface { + + /** + * @return array + * - digest: string + * - content: string + */ + public function getSql() { + if (!isset(\Civi\Test::$statics['core_schema_sql'])) { + $schema = new \CRM_Core_CodeGen_Schema(\Civi\Test::codeGen()); + $files = $schema->generateCreateSql(); + \Civi\Test::$statics['core_schema_sql'] = [ + 'digest' => md5($files['civicrm.mysql']), + 'content' => $files['civicrm.mysql'], + ]; + } + return \Civi\Test::$statics['core_schema_sql']; + } + + public function getSig() { + return $this->getSql()['digest']; + } + + public function isValid() { + return TRUE; + } + + /** + * @param \Civi\Test\CiviEnvBuilder $ctx + */ + public function run($ctx) { + $sql = $this->getSql(); + if (\Civi\Test::execute($sql['content']) === FALSE) { + throw new \RuntimeException("Cannot execute SQL"); + } + } + +} diff --git a/civicrm/Civi/Test/Data.php b/civicrm/Civi/Test/Data.php index 8b90b5d493a8a4679656aea7f05b22fddd11a8ff..8cada62629b6cb198f3ad8cc6b5c6056bc29c390 100644 --- a/civicrm/Civi/Test/Data.php +++ b/civicrm/Civi/Test/Data.php @@ -12,30 +12,37 @@ class Data { * @return bool */ public function populate() { - \Civi\Test::schema()->truncateAll(); - - \Civi\Test::schema()->setStrict(FALSE); - - // Ensure that when we populate the database it is done in utf8 mode - \Civi\Test::execute('SET NAMES utf8'); - $sqlDir = dirname(dirname(__DIR__)) . "/sql"; - - $query2 = file_get_contents("$sqlDir/civicrm_data.mysql"); - $query3 = file_get_contents("$sqlDir/test_data.mysql"); - $query4 = file_get_contents("$sqlDir/test_data_second_domain.mysql"); - if (\Civi\Test::execute($query2) === FALSE) { - throw new RuntimeException("Cannot load civicrm_data.mysql. Aborting."); - } - if (\Civi\Test::execute($query3) === FALSE) { - throw new RuntimeException("Cannot load test_data.mysql. Aborting."); - } - if (\Civi\Test::execute($query4) === FALSE) { - throw new RuntimeException("Cannot load test_data.mysql. Aborting."); - } - - unset($query, $query2, $query3); - - \Civi\Test::schema()->setStrict(TRUE); + \Civi\Test::asPreInstall(function() { + \Civi\Test::schema()->truncateAll(); + + \Civi\Test::schema()->setStrict(FALSE); + + // Ensure that when we populate the database it is done in utf8 mode + \Civi\Test::execute('SET NAMES utf8'); + $sqlDir = dirname(dirname(__DIR__)) . "/sql"; + + if (!isset(\Civi\Test::$statics['locale_data'])) { + $schema = new \CRM_Core_CodeGen_Schema(\Civi\Test::codeGen()); + \Civi\Test::$statics['locale_data'] = $schema->generateLocaleDataSql('en_US'); + } + + $query2 = \Civi\Test::$statics['locale_data']["civicrm_data.mysql"]; + $query3 = file_get_contents("$sqlDir/test_data.mysql"); + $query4 = file_get_contents("$sqlDir/test_data_second_domain.mysql"); + if (\Civi\Test::execute($query2) === FALSE) { + throw new RuntimeException("Cannot load civicrm_data.mysql. Aborting."); + } + if (\Civi\Test::execute($query3) === FALSE) { + throw new RuntimeException("Cannot load test_data.mysql. Aborting."); + } + if (\Civi\Test::execute($query4) === FALSE) { + throw new RuntimeException("Cannot load test_data.mysql. Aborting."); + } + + unset($query, $query2, $query3); + + \Civi\Test::schema()->setStrict(TRUE); + }); // Rebuild triggers civicrm_api('system', 'flush', ['version' => 3, 'triggers' => 1]); diff --git a/civicrm/Civi/Token/TokenRow.php b/civicrm/Civi/Token/TokenRow.php index 5287219a9401ed6045b790bc2d597c790140202a..2a7b732c2b560265832bcf709a0e5a3923074401 100644 --- a/civicrm/Civi/Token/TokenRow.php +++ b/civicrm/Civi/Token/TokenRow.php @@ -157,7 +157,7 @@ class TokenRow { * @param string $tokenEntity * @param string $tokenField * @param string $baoName - * @param array $baoField + * @param string $baoField * @param mixed $fieldValue * @return TokenRow * @throws \CRM_Core_Exception diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index 927513a5b956841a41e6296d2592861fec2857da..5c9b3f4340f6a55be8bdd5553d01979c2cdca552 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -2,7 +2,7 @@ <div crm-ui-debug="availableParams"></div> <h1 crm-page-title> - {{ ts('CiviCRM API v4') }}{{ entity ? (' (' + entity + '::' + action + ')') : '' }} + {{ ts('CiviCRM APIv4') }}{{ entity ? (' (' + entity + '::' + action + ')') : '' }} </h1> <!--This warning will show if bootstrap is unavailable. Normally it will be hidden by the bootstrap .collapse class.--> @@ -18,22 +18,26 @@ <form name="api4-explorer" class="panel panel-default explorer-params-panel"> <div class="panel-heading"> <div class="form-inline"> - <input class="collapsible-optgroups form-control" ng-model="entity" ng-disabled="!entities.length" ng-class="{loading: !entities.length}" crm-ui-select="{placeholder: ts('Entity'), data: entities}" /> - <input class="collapsible-optgroups form-control" ng-model="action" ng-disabled="!entity || !actions.length" ng-class="{loading: entity && !actions.length}" crm-ui-select="{placeholder: ts('Action'), data: actions}" /> - <input class="form-control api4-index" ng-model="index" ng-mouseenter="help('index', indexHelp)" ng-mouseleave="help()" placeholder="{{ ts('Index') }}" /> + <span ng-mouseenter="help('entity', paramDoc('$entity'))" ng-mouseleave="help()"> + <input class="collapsible-optgroups form-control" ng-model="entity" ng-disabled="!entities.length" ng-class="{loading: !entities.length}" crm-ui-select="{placeholder: ts('Entity'), data: entities}" /> + </span> + <span ng-mouseenter="help('action', paramDoc('$action'))" ng-mouseleave="help()"> + <input class="collapsible-optgroups form-control" ng-model="action" ng-disabled="!entity || !actions.length" ng-class="{loading: entity && !actions.length}" crm-ui-select="{placeholder: ts('Action'), data: actions}" /> + </span> + <input class="form-control api4-index" type="search" ng-model="index" ng-mouseenter="help('index', paramDoc('$index'))" ng-mouseleave="help()" placeholder="{{ ts('Index') }}" /> <button class="btn btn-success pull-right" crm-icon="fa-bolt" ng-disabled="!entity || !action || loading" ng-click="execute()">{{ ts('Execute') }}</button> </div> </div> <div class="panel-body"> <div class="api4-input form-inline"> - <div class="form-control" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-class="{'api4-option-selected': params[name]}" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && param.type[0] === 'bool' && param.default !== null"> + <label class="form-control" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-class="{'api4-option-selected': params[name]}" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && param.type[0] === 'bool' && param.default !== null"> <input type="checkbox" id="api4-param-{{ name }}" ng-model="params[name]"/> - <label for="api4-param-{{ name }}">{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label> - </div> - <div class="form-control" ng-mouseenter="help('selectRowCount', availableParams.select)" ng-mouseleave="help()" ng-class="{'api4-option-selected': isSelectRowCount()}" ng-if="availableParams.select"> + {{ name }}<span class="crm-marker" ng-if="param.required"> *</span> + </label> + <label class="form-control" ng-mouseenter="help('selectRowCount', availableParams.select)" ng-mouseleave="help()" ng-class="{'api4-option-selected': isSelectRowCount()}" ng-if="availableParams.select"> <input type="checkbox" id="api4-param-selectRowCount" ng-checked="isSelectRowCount()" ng-click="selectRowCount()" /> - <label for="api4-param-selectRowCount">SelectRowCount</label> - </div> + SelectRowCount + </label> </div> <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && param.type[0] === 'bool' && param.default === null"> <label>{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label> @@ -47,7 +51,7 @@ </div> <div class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select && !isSelectRowCount()"> <label for="api4-param-select">select<span class="crm-marker" ng-if="availableParams.select.required"> *</span></label> - <input class="collapsible-optgroups form-control" ng-list crm-ui-select="{data: fieldsAndJoins, multiple: true}" id="api4-param-select" ng-model="params.select" style="width: 85%;"/> + <input class="collapsible-optgroups form-control" ng-list crm-ui-select="{data: selectFieldsAndJoins, multiple: true}" placeholder="*" id="api4-param-select" ng-model="params.select" style="width: 85%;"/> </div> <div class="api4-input form-inline" ng-mouseenter="help('fields', availableParams.fields)" ng-mouseleave="help()"ng-if="availableParams.fields"> <label for="api4-param-fields">fields<span class="crm-marker" ng-if="availableParams.fields.required"> *</span></label> @@ -70,14 +74,14 @@ </div> <fieldset ng-if="availableParams.where" class="api4-where-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()" crm-api4-where-clause="{where: params.where, required: availableParams.where.required, op: 'AND', label: 'where', fields: fieldsAndJoins}"> </fieldset> - <fieldset ng-if="availableParams.values" ng-mouseenter="help('values', availableParams.values)" ng-mouseleave="help()"> - <legend>values<span class="crm-marker" ng-if="availableParams.values.required"> *</span></legend> - <div class="api4-input form-inline" ng-repeat="clause in params.values" ng-mouseenter="help('value: ' + clause[0], fieldHelp(clause[0]))" ng-mouseleave="help('values', availableParams.values)"> - <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields, allowClear: true, placeholder: 'Field'}" /> + <fieldset ng-repeat="name in ['values', 'defaults']" ng-if="availableParams[name]" ng-mouseenter="help(name, availableParams[name])" ng-mouseleave="help()"> + <legend>{{ name }}<span class="crm-marker" ng-if="availableParams[name].required"> *</span></legend> + <div class="api4-input form-inline" ng-repeat="clause in params[name]" ng-mouseenter="help('value: ' + clause[0], fieldHelp(clause[0]))" ng-mouseleave="help(name, availableParams[name])"> + <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: fieldList(name), allowClear: true, placeholder: 'Field'}" /> <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0], action: action === 'getFields' ? params.action || 'get' : action}" /> </div> <div class="api4-input form-inline"> - <input class="collapsible-optgroups form-control" ng-model="controls.values" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields}" placeholder="Add value" /> + <input class="collapsible-optgroups form-control" ng-model="controls[name]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: fieldList(name), placeholder: ts('Add %1', {1: name.slice(0, -1)})}"/> </div> </fieldset> <fieldset ng-if="availableParams.orderBy" ng-mouseenter="help('orderBy', availableParams.orderBy)" ng-mouseleave="help()"> @@ -108,45 +112,70 @@ <h3 class="panel-title" crm-icon="fa-info-circle">{{ helpTitle }}</h3> </div> <div class="panel-body"> - <h4>{{ helpContent.description }}</h4> - <div ng-if="helpContent.comment"> - <p ng-repeat='text in helpContent.comment.split("\n\n")'>{{ text }}</p> - </div> - <p ng-repeat="(key, item) in helpContent" ng-if="key !== 'description' && key !== 'comment'"> + <h4 ng-bind-html="helpContent.description"></h4> + <div ng-bind-html="helpContent.comment"></div> + <p ng-repeat="(key, item) in helpContent" ng-if="key !== 'description' && key !== 'comment' && key !== 'see'"> <strong>{{ key }}:</strong> {{ item }} </p> + <div ng-if="helpContent.see"> + <strong>See:</strong> + <ul> + <li ng-repeat="ref in helpContent.see" ng-bind-html="ref"> </li> + </ul> + </div> </div> </div> </div> <div class="api4-explorer-row"> <div class="panel panel-warning explorer-code-panel"> - <div class="panel-heading"> - <h3 class="panel-title" crm-icon="fa-code">{{ ts('Code') }}</h3> - </div> + <ul class="panel-heading nav nav-tabs"> + <li role="presentation" ng-repeat="tab in code" ng-class="{active: selectedTab.code === tab.lang}"> + <a href ng-click="selectedTab.code = tab.lang"> + {{ tab.lang }} + </a> + </li> + </ul> <div class="panel-body"> - <table> - <tr ng-repeat="(type, item) in code"> - <td>{{ codeLabel[type] }}</td> - <td><pre class="prettyprint" ng-bind-html="item"></pre></td> + <table ng-repeat="tab in code" ng-show="selectedTab.code === tab.lang"> + <tr ng-repeat="style in tab.style"> + <td>{{ style.label }}</td> + <td><pre class="prettyprint" ng-bind-html="style.code"></pre></td> </tr> </table> </div> </div> <div class="panel explorer-result-panel panel-{{ status }}" > - <div class="panel-heading"> - <h3 class="panel-title"> - <i class="fa fa-circle-o" ng-if="status === 'default'"></i> - <i class="fa fa-check-circle" ng-if="status === 'success'"></i> - <i class="fa fa-minus-circle" ng-if="status === 'danger'"></i> - <i class="fa fa-spinner fa-pulse" ng-if="status === 'warning'"></i> - {{ ts('Result') }} - </h3> - </div> + <ul class="panel-heading nav nav-tabs"> + <li role="presentation" ng-class="{active: selectedTab.result === 'result'}"> + <a href ng-click="selectedTab.result = 'result'"> + <i class="fa fa-fw fa-circle-o" ng-if="status === 'default'"></i> + <i class="fa fa-fw fa-check-circle" ng-if="status === 'success'"></i> + <i class="fa fa-fw fa-minus-circle" ng-if="status === 'danger'"></i> + <i class="fa fa-fw fa-spinner fa-pulse" ng-if="status === 'warning'"></i> + <span>{{ ts('Result') }}</span> + </a> + </li> + <li role="presentation" ng-if="perm.accessDebugOutput" ng-class="{active: selectedTab.result === 'debug'}"> + <a href ng-click="selectedTab.result = 'debug'"> + <i class="fa fa-fw fa-{{ debug ? 'bug' : 'circle-o' }}"></i> + <span>{{ ts('Debug') }}</span> + </a> + </li> + </ul> <div class="panel-body"> - <pre class="prettyprint" ng-repeat="code in result" ng-bind-html="code"></pre> + <div ng-show="selectedTab.result === 'result'"> + <pre class="prettyprint" ng-repeat="code in result" ng-bind-html="code"></pre> + </div> + <div ng-show="selectedTab.result === 'debug'"> + <pre ng-if="debug" class="prettyprint" ng-bind-html="debug"></pre> + <p ng-if="!debug"> + {{ ts('To view debugging output, enable the debug param before executing.') }} + </p> + <p ng-if="!debug"> + {{ ts('Enable backtrace in system settings to see error backtraces.') }} + </p> + </div> </div> </div> </div> - - </div> diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index 982f618d3f361942d3465f2b9ed4c2fe0ac8699e..ecf2d45973740570c1e723ac30eea164f1a5c989 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -26,33 +26,57 @@ $scope.actions = actions; $scope.fields = []; $scope.fieldsAndJoins = []; + $scope.selectFieldsAndJoins = []; $scope.availableParams = {}; $scope.params = {}; $scope.index = ''; + $scope.selectedTab = {result: 'result', code: 'php'}; + $scope.perm = { + accessDebugOutput: CRM.checkPerm('access debug output') + }; + marked.setOptions({highlight: prettyPrintOne}); var getMetaParams = {}, - objectParams = {orderBy: 'ASC', values: '', chain: ['Entity', '', '{}']}, + objectParams = {orderBy: 'ASC', values: '', defaults: '', chain: ['Entity', '', '{}']}, + docs = CRM.vars.api4.docs, helpTitle = '', helpContent = {}; $scope.helpTitle = ''; $scope.helpContent = {}; $scope.entity = $routeParams.api4entity; $scope.result = []; + $scope.debug = null; $scope.status = 'default'; $scope.loading = false; $scope.controls = {}; - $scope.codeLabel = { - oop: ts('PHP (oop style)'), - php: ts('PHP (traditional)'), - js: ts('Javascript'), - cli: ts('Command Line') - }; - $scope.code = codeDefaults(); - - function codeDefaults() { - return _.mapValues($scope.codeLabel, function(val, key) { - return key === 'oop' ? ts('Select an entity and action') : ''; - }); - } + $scope.code = [ + { + lang: 'php', + style: [ + {name: 'oop', label: ts('OOP Style'), code: ''}, + {name: 'php', label: ts('Traditional'), code: ''} + ] + }, + { + lang: 'js', + style: [ + {name: 'js', label: ts('Single Call'), code: ''}, + {name: 'js2', label: ts('Batch Calls'), code: ''} + ] + }, + { + lang: 'ang', + style: [ + {name: 'ang', label: ts('Single Call'), code: ''}, + {name: 'ang2', label: ts('Batch Calls'), code: ''} + ] + }, + { + lang: 'cli', + style: [ + {name: 'cv', label: ts('CV'), code: ''} + ] + }, + ]; if (!entities.length) { formatForSelect2(schema, entities, 'name', ['description']); @@ -112,32 +136,64 @@ return fields; } - function addJoins(fieldList) { + function addJoins(fieldList, addWildcard) { var fields = _.cloneDeep(fieldList), fks = _.findWhere(links, {entity: $scope.entity}) || {}; _.each(fks.links, function(link) { - var linkFields = entityFields(link.entity); + var linkFields = _.cloneDeep(entityFields(link.entity)), + wildCard = addWildcard ? [{id: link.alias + '.*', text: link.alias + '.*', 'description': 'All core ' + link.entity + ' fields'}] : []; if (linkFields) { fields.push({ text: link.alias, description: 'Join to ' + link.entity, - children: formatForSelect2(linkFields, [], 'name', ['description'], link.alias + '.') + children: wildCard.concat(formatForSelect2(linkFields, [], 'name', ['description'], link.alias + '.')) }); } }); return fields; } - $scope.help = function(title, param) { - if (!param) { + $scope.help = function(title, content) { + if (!content) { $scope.helpTitle = helpTitle; $scope.helpContent = helpContent; } else { $scope.helpTitle = title; - $scope.helpContent = param; + $scope.helpContent = formatHelp(content); } }; + // Sets the static help text (which gets overridden by mousing over other elements) + function setHelp(title, content) { + $scope.helpTitle = helpTitle = title; + $scope.helpContent = helpContent = formatHelp(content); + } + + // Convert plain-text help to markdown; replace variables and format links + function formatHelp(rawContent) { + function formatRefs(see) { + _.each(see, function(ref, idx) { + var match = ref.match(/^\\Civi\\Api4\\([a-zA-Z]+)$/); + if (match) { + ref = '#/explorer/' + match[1]; + } + if (ref[0] === '\\') { + ref = 'https://github.com/civicrm/civicrm-core/blob/master' + ref.replace(/\\/i, '/') + '.php'; + } + see[idx] = '<a target="' + (ref[0] === '#' ? '_self' : '_blank') + '" href="' + ref + '">' + see[idx] + '</a>'; + }); + } + var formatted = _.cloneDeep(rawContent); + if (formatted.description) { + formatted.description = marked(formatted.description); + } + if (formatted.comment) { + formatted.comment = marked(formatted.comment); + } + formatRefs(formatted.see); + return formatted; + } + $scope.fieldHelp = function(fieldName) { var field = getField(fieldName, $scope.entity, $scope.action); if (!field) { @@ -158,13 +214,15 @@ return info; }; - $scope.valuesFields = function() { - var fields = _.cloneDeep($scope.action === 'getFields' ? getFieldList($scope.params.action || 'get') : $scope.fields); - // Disable fields that are already in use - _.each($scope.params.values || [], function(val) { - (_.findWhere(fields, {id: val[0]}) || {}).disabled = true; - }); - return {results: fields}; + $scope.fieldList = function(param) { + return function() { + var fields = _.cloneDeep($scope.action === 'getFields' ? getFieldList($scope.params.action || 'get') : $scope.fields); + // Disable fields that are already in use + _.each($scope.params[param] || [], function(val) { + (_.findWhere(fields, {id: val[0]}) || {}).disabled = true; + }); + return {results: fields}; + }; }; $scope.formatSelect2Item = function(row) { @@ -178,7 +236,7 @@ }; $scope.isSpecial = function(name) { - var specialParams = ['select', 'fields', 'action', 'where', 'values', 'orderBy', 'chain']; + var specialParams = ['select', 'fields', 'action', 'where', 'values', 'defaults', 'orderBy', 'chain']; return _.contains(specialParams, name); }; @@ -187,6 +245,7 @@ $scope.params.select = []; } else { $scope.params.select = ['row_count']; + $scope.index = ''; if ($scope.params.limit == 25) { $scope.params.limit = 0; } @@ -194,9 +253,13 @@ }; $scope.isSelectRowCount = function() { - return $scope.params && $scope.params.select && $scope.params.select.length === 1 && $scope.params.select[0] === 'row_count'; + return isSelectRowCount($scope.params); }; + function isSelectRowCount(params) { + return params && params.select && params.select.length === 1 && params.select[0] === 'row_count'; + } + function getEntity(entityName) { return _.findWhere(schema, {name: entityName || $scope.entity}); } @@ -259,7 +322,8 @@ function selectAction() { $scope.action = $routeParams.api4action; - $scope.fieldsAndJoins = []; + $scope.fieldsAndJoins.length = 0; + $scope.selectFieldsAndJoins.length = 0; if (!actions.length) { formatForSelect2(getEntity().actions, actions, 'name', ['description', 'params']); } @@ -268,9 +332,12 @@ $scope.fields = getFieldList($scope.action); if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) { $scope.fieldsAndJoins = addJoins($scope.fields); + $scope.selectFieldsAndJoins = addJoins($scope.fields, true); } else { $scope.fieldsAndJoins = $scope.fields; + $scope.selectFieldsAndJoins = _.cloneDeep($scope.fields); } + $scope.selectFieldsAndJoins.unshift({id: '*', text: '*', 'description': 'All core ' + $scope.entity + ' fields'}); _.each(actionInfo.params, function (param, name) { var format, defaultVal = _.cloneDeep(param.default); @@ -289,9 +356,12 @@ default: format = 'raw'; } - if (name == 'limit') { + if (name === 'limit') { defaultVal = 25; } + if (name === 'debug') { + defaultVal = true; + } if (name === 'values') { defaultVal = defaultValues(defaultVal); } @@ -355,40 +425,43 @@ } function writeCode() { - var code = codeDefaults(), + var code = {}, entity = $scope.entity, action = $scope.action, params = getParams(), - index = isInt($scope.index) ? +$scope.index : $scope.index, + index = isInt($scope.index) ? +$scope.index : parseYaml($scope.index), result = 'result'; if ($scope.entity && $scope.action) { + delete params.debug; if (action.slice(0, 3) === 'get') { result = entity.substr(0, 7) === 'Custom_' ? _.camelCase(entity.substr(7)) : entity; result = lcfirst(action.replace(/s$/, '').slice(3) || result); } var results = lcfirst(_.isNumber(index) ? result : pluralize(result)), paramCount = _.size(params), - isSelectRowCount = params.select && params.select.length === 1 && params.select[0] === 'row_count', i = 0; - if (isSelectRowCount) { + if (isSelectRowCount(params)) { results = result + 'Count'; } // Write javascript - code.js = "CRM.api4('" + entity + "', '" + action + "', {"; + var js = "'" + entity + "', '" + action + "', {"; _.each(params, function(param, key) { - code.js += "\n " + key + ': ' + stringify(param) + + js += "\n " + key + ': ' + stringify(param) + (++i < paramCount ? ',' : ''); if (key === 'checkPermissions') { - code.js += ' // IGNORED: permissions are always enforced from client-side requests'; + js += ' // IGNORED: permissions are always enforced from client-side requests'; } }); - code.js += "\n}"; + js += "\n}"; if (index || index === 0) { - code.js += ', ' + JSON.stringify(index); + js += ', ' + JSON.stringify(index); } - code.js += ").then(function(" + results + ") {\n // do something with " + results + " array\n}, function(failure) {\n // handle failure\n});"; + code.js = "CRM.api4(" + js + ").then(function(" + results + ") {\n // do something with " + results + " array\n}, function(failure) {\n // handle failure\n});"; + code.js2 = "CRM.api4({" + results + ': [' + js + "]}).then(function(batch) {\n // do something with batch." + results + " array\n}, function(failure) {\n // handle failure\n});"; + code.ang = "crmApi4(" + js + ").then(function(" + results + ") {\n // do something with " + results + " array\n}, function(failure) {\n // handle failure\n});"; + code.ang2 = "crmApi4({" + results + ': [' + js + "]}).then(function(batch) {\n // do something with batch." + results + " array\n}, function(failure) {\n // handle failure\n});"; // Write php code code.php = '$' + results + " = civicrm_api4('" + entity + "', '" + action + "', ["; @@ -402,53 +475,75 @@ code.php += ");"; // Write oop code - if (entity.substr(0, 7) !== 'Custom_') { - code.oop = '$' + results + " = \\Civi\\Api4\\" + entity + '::' + action + '()'; - } else { - code.oop = '$' + results + " = \\Civi\\Api4\\CustomValue::" + action + "('" + entity.substr(7) + "')"; - } - _.each(params, function(param, key) { - var val = ''; - if (typeof objectParams[key] !== 'undefined' && key !== 'chain') { - _.each(param, function(item, index) { - val = phpFormat(index) + ', ' + phpFormat(item, 4); - code.oop += "\n ->add" + ucfirst(key).replace(/s$/, '') + '(' + val + ')'; - }); - } else if (key === 'where') { - _.each(param, function (clause) { - if (clause[0] === 'AND' || clause[0] === 'OR' || clause[0] === 'NOT') { - code.oop += "\n ->addClause(" + phpFormat(clause[0]) + ", " + phpFormat(clause[1]).slice(1, -1) + ')'; - } else { - code.oop += "\n ->addWhere(" + phpFormat(clause).slice(1, -1) + ")"; - } - }); - } else if (key === 'select' && isSelectRowCount) { - code.oop += "\n ->selectRowCount()"; - } else { - code.oop += "\n ->set" + ucfirst(key) + '(' + phpFormat(param, 4) + ')'; - } - }); - code.oop += "\n ->execute()"; - if (_.isNumber(index)) { + code.oop = '$' + results + " = " + formatOOP(entity, action, params, 2) + "\n ->execute()"; + if (isSelectRowCount(params)) { + code.oop += "\n ->count()"; + } else if (_.isNumber(index)) { code.oop += !index ? '\n ->first()' : (index === -1 ? '\n ->last()' : '\n ->itemAt(' + index + ')'); } else if (index) { - code.oop += "\n ->indexBy('" + index + "')"; - } else if (isSelectRowCount) { - code.oop += "\n ->count()"; + if (_.isString(index) || (_.isPlainObject(index) && !index[0] && !index['0'])) { + code.oop += "\n ->indexBy('" + (_.isPlainObject(index) ? _.keys(index)[0] : index) + "')"; + } + if (_.isArray(index) || _.isPlainObject(index)) { + code.oop += "\n ->column('" + (_.isArray(index) ? index[0] : _.values(index)[0]) + "')"; + } } code.oop += ";\n"; - if (!_.isNumber(index) && !isSelectRowCount) { + if (!_.isNumber(index) && !isSelectRowCount(params)) { code.oop += "foreach ($" + results + ' as $' + ((_.isString(index) && index) ? index + ' => $' : '') + result + ') {\n // do something\n}'; } // Write cli code - code.cli = 'cv api4 ' + entity + '.' + action + " '" + stringify(params) + "'"; + code.cv = 'cv api4 ' + entity + '.' + action + " '" + stringify(params) + "'"; } - _.each(code, function(val, type) { - $scope.code[type] = prettyPrintOne(_.escape(val)); + _.each($scope.code, function(vals) { + _.each(vals.style, function(style) { + style.code = code[style.name] ? prettyPrintOne(code[style.name]) : ''; + }); }); } + // Format oop params + function formatOOP(entity, action, params, indent) { + var code = '', + newLine = "\n" + _.repeat(' ', indent); + if (entity.substr(0, 7) !== 'Custom_') { + code = "\\Civi\\Api4\\" + entity + '::' + action + '()'; + } else { + code = "\\Civi\\Api4\\CustomValue::" + action + "('" + entity.substr(7) + "')"; + } + _.each(params, function(param, key) { + var val = ''; + if (typeof objectParams[key] !== 'undefined' && key !== 'chain') { + _.each(param, function(item, index) { + val = phpFormat(index) + ', ' + phpFormat(item, 2 + indent); + code += newLine + "->add" + ucfirst(key).replace(/s$/, '') + '(' + val + ')'; + }); + } else if (key === 'where') { + _.each(param, function (clause) { + if (clause[0] === 'AND' || clause[0] === 'OR' || clause[0] === 'NOT') { + code += newLine + "->addClause(" + phpFormat(clause[0]) + ", " + phpFormat(clause[1]).slice(1, -1) + ')'; + } else { + code += newLine + "->addWhere(" + phpFormat(clause).slice(1, -1) + ")"; + } + }); + } else if (key === 'select') { + code += newLine; + // addSelect() is a variadic function & can take multiple arguments; selectRowCount() is a shortcut for addSelect('row_count') + code += isSelectRowCount(params) ? '->selectRowCount()' : '->addSelect(' + phpFormat(param).slice(1, -1) + ')'; + } else if (key === 'chain') { + _.each(param, function(chain, name) { + code += newLine + "->addChain('" + name + "', " + formatOOP(chain[0], chain[1], chain[2], 2 + indent); + code += (chain.length > 3 ? ',' : '') + (!_.isEmpty(chain[2]) ? newLine : ' ') + (chain.length > 3 ? phpFormat(chain[3]) : '') + ')'; + }); + } + else { + code += newLine + "->set" + ucfirst(key) + '(' + phpFormat(param, 2 + indent) + ')'; + } + }); + return code; + } + function isInt(value) { if (_.isFinite(value)) { return true; @@ -474,7 +569,7 @@ $scope.loading = true; $http.post(CRM.url('civicrm/ajax/api4/' + $scope.entity + '/' + $scope.action, { params: angular.toJson(getParams()), - index: $scope.index + index: isInt($scope.index) ? +$scope.index : parseYaml($scope.index) }), null, { headers: { 'X-Requested-With': 'XMLHttpRequest' @@ -482,14 +577,22 @@ }).then(function(resp) { $scope.loading = false; $scope.status = 'success'; + $scope.debug = debugFormat(resp.data); $scope.result = [formatMeta(resp.data), prettyPrintOne(_.escape(JSON.stringify(resp.data.values, null, 2)), 'js', 1)]; }, function(resp) { $scope.loading = false; $scope.status = 'danger'; + $scope.debug = debugFormat(resp.data); $scope.result = [formatMeta(resp), prettyPrintOne(_.escape(JSON.stringify(resp.data, null, 2)))]; }); }; + function debugFormat(data) { + var debug = data.debug ? prettyPrintOne(_.escape(JSON.stringify(data.debug, null, 2)).replace(/\\n/g, "\n")) : null; + delete data.debug; + return debug; + } + /** * Format value to look like php code */ @@ -536,16 +639,15 @@ // Help for an entity with no action selected function showEntityHelp(entityName) { var entityInfo = getEntity(entityName); - $scope.helpTitle = helpTitle = $scope.entity; - $scope.helpContent = helpContent = { + setHelp($scope.entity, { description: entityInfo.description, - comment: entityInfo.comment - }; + comment: entityInfo.comment, + see: entityInfo.see + }); } if (!$scope.entity) { - $scope.helpTitle = helpTitle = ts('Help'); - $scope.helpContent = helpContent = {description: ts('Welcome to the api explorer.'), comment: ts('Select an entity to begin.')}; + setHelp(ts('APIv4 Explorer'), {description: docs.description, comment: docs.comment, see: docs.see}); } else if (!actions.length && !getEntity().actions) { getMetaParams.actions = [$scope.entity, 'getActions', {chain: {fields: [$scope.entity, 'getFields', {action: '$name'}]}}]; fetchMeta(); @@ -571,15 +673,12 @@ if ($scope.entity && $routeParams.api4action !== newVal && !_.isUndefined(newVal)) { $location.url('/explorer/' + $scope.entity + '/' + newVal); } else if (newVal) { - $scope.helpTitle = helpTitle = $scope.entity + '::' + newVal; - $scope.helpContent = helpContent = _.pick(_.findWhere(getEntity().actions, {name: newVal}), ['description', 'comment']); + setHelp($scope.entity + '::' + newVal, _.pick(_.findWhere(getEntity().actions, {name: newVal}), ['description', 'comment', 'see'])); } }); - $scope.indexHelp = { - description: ts('(string|int) Index results or select by index.'), - comment: ts('Pass a string to index the results by a field value. E.g. index: "name" will return an associative array with names as keys.') + '\n\n' + - ts('Pass an integer to return a single result; e.g. index: 0 will return the first result, 1 will return the second, and -1 will return the last.') + $scope.paramDoc = function(name) { + return docs.params[name]; }; $scope.$watch('params', writeCode, true); @@ -701,8 +800,8 @@ }); } else if (dataType === 'Boolean') { $el.attr('placeholder', ts('- select -')).crmSelect2({allowClear: false, multiple: multi, placeholder: ts('- select -'), data: [ - {id: '1', text: ts('Yes')}, - {id: '0', text: ts('No')} + {id: 'true', text: ts('Yes')}, + {id: 'false', text: ts('No')} ]}); } } else if (dataType === 'Integer' && !multi) { diff --git a/civicrm/ang/crmCaseType/caseTypeDetails.html b/civicrm/ang/crmCaseType/caseTypeDetails.html index d11cc913c30604811727284dab98e429f6f77114..2bc30182eaaf90bee1692a2df4debd560850c017 100644 --- a/civicrm/ang/crmCaseType/caseTypeDetails.html +++ b/civicrm/ang/crmCaseType/caseTypeDetails.html @@ -48,7 +48,7 @@ The original form used table layout; don't know if we have an alternative, CSS-b <input name="activityAsgmtGrps" crm-ui-id="caseTypeDetailForm.activityAsgmtGrps" - crm-entityref="{entity: 'Group', api: {params: {is_hidden: 0, is_active: 1}}, select: {allowClear: true, multiple: true, placeholder: ts('Select Group')}}" + crm-entityref="{entity: 'Group', api: {id_field: 'name', params: {is_hidden: 0, is_active: 1}}, select: {allowClear: true, multiple: true, placeholder: ts('Select Group')}}" ng-model="caseType.definition.activityAsgmtGrps" /> </div> diff --git a/civicrm/ang/crmCaseType/rolesTable.html b/civicrm/ang/crmCaseType/rolesTable.html index 8af3b488c4f9ad0b039062f842fdc5f49d2a1d1a..ed8983db0c42010570aa2692c37139c588cebdc4 100644 --- a/civicrm/ang/crmCaseType/rolesTable.html +++ b/civicrm/ang/crmCaseType/rolesTable.html @@ -8,6 +8,7 @@ Required vars: caseType <th>{{ts('Display Label')}}</th> <th>{{ts('Assign to Creator')}}</th> <th>{{ts('Is Manager')}}</th> + <th>{{ts('Restrict to Groups')}}</th> <th></th> </tr> </thead> @@ -17,6 +18,10 @@ Required vars: caseType <td>{{relType.displayLabel}}</td> <td><input type="checkbox" ng-model="relType.creator" ng-true-value="'1'" ng-false-value="'0'"></td> <td><input type="radio" ng-model="relType.manager" value="1" ng-change="onManagerChange(relType)"></td> + <td><input ng-list class="big" + crm-entityref="{entity: 'Group', api: {id_field: 'name', params: {is_hidden: 0, is_active: 1}}, select: {allowClear: true, multiple: true, placeholder: ts('Select Group')}}" + ng-model="relType.groups" + /></td> <td> <a crm-icon="fa-trash" class="crm-hover-button" ng-click="removeItem(caseType.definition.caseRoles,relType)" title="{{ts('Remove')}}"></a> </td> diff --git a/civicrm/ang/exportui.ang.php b/civicrm/ang/exportui.ang.php new file mode 100644 index 0000000000000000000000000000000000000000..81dafe4af3533ae7cabf38da1a067443bdd949a6 --- /dev/null +++ b/civicrm/ang/exportui.ang.php @@ -0,0 +1,23 @@ +<?php +// Export UI Angular module configuration +return [ + 'ext' => 'civicrm', + 'js' => [ + 'ang/exportui/*.js', + 'ang/exportui/*/*.js', + ], + 'css' => [ + 'ang/exportui.css', + ], + 'partials' => [ + 'ang/exportui', + ], + 'basePages' => [], + 'requires' => [ + 'crmUi', + 'crmUtil', + 'ui.sortable', + 'dialogService', + ], + 'settings' => [], +]; diff --git a/civicrm/ang/exportui.css b/civicrm/ang/exportui.css new file mode 100644 index 0000000000000000000000000000000000000000..114d36107a12e12ce5df24bffb7eb962cf553575 --- /dev/null +++ b/civicrm/ang/exportui.css @@ -0,0 +1,56 @@ +/* "fade-out" effect */ +div.crm-export-field-selector-outer { + position: relative; + overflow-x: hidden; +} +div.crm-export-field-selector-outer:after { + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 20%; + content: ' '; + background-image: linear-gradient(to right, transparent, #efefe5); +} +table.crm-export-field-selector tbody tr { + background-color: #FAFAFA; +} +table.crm-export-field-selector tbody tr:nth-child(odd) { + background-color: #EFEFEF; +} +table.crm-export-field-selector tfoot tr { + background-color: white; + border-top: 2px solid #CFCEC3; +} +table.crm-export-field-selector tfoot tr td > span { + margin-left: 18px; +} +.crm-export-field-selector tbody td { + cursor: move; + width: 18% +} +.crm-export-field-selector tbody td:first-child { + width: 28%; + min-width: 230px; +} +.crm-export-field-selector tbody td:first-child > div + div { + margin-left: 17px; +} +.crm-export-field-selector .crm-export-add-field { + width: 16em; +} +.crm-export-ui-save-mapping-dialog .crm-form-block > div { + padding: 5px; +} +.crm-export-ui-save-mapping-dialog .ui-dialog-buttonpane { + position: absolute; + bottom: 20px; + height: 20px; + width: calc(100% - 3em); +} +.crm-export-row-handle { + opacity: .5; +} +.crm-export-field-selector tr:hover .crm-export-row-handle { + opacity: 1; +} diff --git a/civicrm/ang/exportui/export.html b/civicrm/ang/exportui/export.html new file mode 100644 index 0000000000000000000000000000000000000000..3a1638c33a06849d28180cfdc2e189d62d6476ca --- /dev/null +++ b/civicrm/ang/exportui/export.html @@ -0,0 +1,30 @@ +<table class="crm-export-field-selector"> + <thead> + <tr> + <th colspan="6"> + <label>{{ ts('Contact Type') }}</label> + <input class="twelve" crm-ui-select="{data: contact_types, placeholder: ts('All'), allowClear: true}" ng-model="data.contact_type" /> + </th> + </tr> + </thead> + <tbody ui-sortable="{axis: 'y'}" ng-model="data.columns"> + <tr ng-repeat="field in data.columns"> + <td ng-include="'~/exportui/exportField.html'"></td> + <td ng-repeat="row in data.preview"> + {{ showPreview(row, field) }} + </td> + </tr> + </tbody> + <tfoot> + <tr> + <td colspan="6"> + <input class="crm-action-menu fa-plus crm-export-add-field" crm-ui-select="{data: getFields, placeholder: ts('Add field')}" ng-model="new.col" /> + <span ng-if="data.columns.length"> + <button type="button" ng-click="saveMappingDialog()" crm-icon="fa-save"> + {{ ts('Save Fields') }} + </button> + </span> + </td> + </tr> + </tfoot> +</table> diff --git a/civicrm/ang/exportui/exportField.html b/civicrm/ang/exportui/exportField.html new file mode 100644 index 0000000000000000000000000000000000000000..7ae919749c51be3d559cb25eae4817917bf16a30 --- /dev/null +++ b/civicrm/ang/exportui/exportField.html @@ -0,0 +1,15 @@ +<div> + <span class="crm-export-row-handle crm-i fa-arrows"></span> + <input class="big" crm-ui-select="{data: getFields, allowClear: true, placeholder: 'clear'}" ng-model="field.select" /> +</div> +<div ng-if="fields[field.select].relationship_type_id"> + <input class="big" crm-ui-select="{data: getRelatedFields(fields[field.select].related_contact_type), allowClear: true, placeholder: ts('Choose field')}" ng-model="field.name" /> +</div> +<div> + <span ng-if="field.name && fields[field.name].has_location"> + <input class="six crm-action-menu" crm-ui-select="{data: location_type_id, allowClear: false, placeholder: ts('Primary')}" ng-model="field.location_type_id" /> + </span> + <span ng-repeat="(list, options) in option_list" ng-if="(field.location_type_id || !fields[field.name].has_location) && fields[field.name].option_list === list"> + <input class="six" crm-ui-select="{data: options, minimumResultsForSearch: 10}" ng-model="field[list]" /> + </span> +</div> diff --git a/civicrm/ang/exportui/exportSaveMapping.html b/civicrm/ang/exportui/exportSaveMapping.html new file mode 100644 index 0000000000000000000000000000000000000000..39a787db553d784d5c74daf8ca7a870124103432 --- /dev/null +++ b/civicrm/ang/exportui/exportSaveMapping.html @@ -0,0 +1,27 @@ +<form class="crm-export-ui-save-mapping-dialog"> + <div class="crm-form-block"> + <div ng-if="model.mapping_id"> + <label><input type="radio" ng-model="model.overwrite" value="1"> {{ model.ts('Update %1', {1: model.mapping_names[model.mapping_id]}) }}</label> + <label><input type="radio" ng-model="model.overwrite" value="0"> {{ model.ts('Save new mapping') }}</label> + </div> + <div> + <label for="export_save_mapping_name">{{ model.ts('Name this field mapping:') }} <span class="crm-marker">*</span></label> + <input class="crm-form-text" ng-model="model.new_name" id="export_save_mapping_name" /> + <span class="crm-error" ng-show="!model.nameIsUnique()"> + {{ model.ts('That name is already taken') }} + </span> + </div> + <div> + <label for="export_save_mapping_description">{{ model.ts('Description:') }}</label> + <input class="crm-form-text huge" ng-model="model.description" id="export_save_mapping_description" /> + </div> + </div> + <div class="ui-dialog-buttonpane ui-widget-content"> + <div class="ui-dialog-buttonset"> + <button type="button" class="crm-button" ng-click="model.saveMapping()" ng-disabled="!model.new_name || model.saving || !model.nameIsUnique()"> + <i class="crm-i" ng-class="{'fa-check': !model.saving, 'fa-spinner fa-pulse': model.saving}"></i> + {{ model.ts('Save Fields') }} + </button> + </div> + </div> +</form> diff --git a/civicrm/ang/exportui/exportui.js b/civicrm/ang/exportui/exportui.js new file mode 100644 index 0000000000000000000000000000000000000000..88bb01a268a131dde8127d94e16e2eb93a537e4b --- /dev/null +++ b/civicrm/ang/exportui/exportui.js @@ -0,0 +1,247 @@ +(function(angular, $, _) { + angular.module('exportui', CRM.angRequires('exportui')); + + angular.module('exportui', CRM.angular.modules) + + .controller('ExportUiCtrl', function($scope, $timeout, crmApi, dialogService) { + var ts = $scope.ts = CRM.ts('exportui'), + // Which relationships we've already looked up for the preview + relations = []; + + $scope.option_list = CRM.vars.exportUi.option_list; + $scope.contact_types = CRM.vars.exportUi.contact_types; + $scope.location_type_id = [{id: '', text: ts('Primary')}].concat(CRM.vars.exportUi.location_type_id); + // Map of all fields keyed by name + $scope.fields = _.transform(CRM.vars.exportUi.fields, function(result, category) { + _.each(category.children, function(field) { + result[field.id] = field; + }); + }, {}); + $scope.data = { + preview: CRM.vars.exportUi.preview_data, + contact_type: '', + columns: [] + }; + // For the "add new field" dropdown + $scope.new = {col: ''}; + var contactTypes = _.transform($scope.contact_types, function(result, type) { + result.push(type.id); + _.each(type.children || [], function(subType) { + result.push(subType.id); + }); + }); + var cids = _.filter(_.map(CRM.vars.exportUi.preview_data, 'id')); + + // Get fields for performing the export or saving the field mapping + function getSelectedColumns() { + var map = []; + _.each($scope.data.columns, function(col, no) { + // Make a copy of col without the extra angular props + var item = JSON.parse(angular.toJson(col)); + delete item.select; + delete item.mapping_id; + item.contact_type = $scope.data.contact_type || 'Contact'; + item.column_number = no; + map.push(item); + }); + return map; + } + + // Load a saved field mapping + function loadFieldMap(map) { + $scope.data.columns = []; + var mapContactTypes = []; + _.each(map, function(col) { + if (_.contains(contactTypes, col.contact_type)) { + mapContactTypes.push(col.contact_type); + } + if (col.relationship_type_id && col.relationship_direction) { + col.select = '' + col.relationship_type_id + '_' + col.relationship_direction; + } else { + col.select = col.name; + } + $scope.data.columns.push(col); + }); + // If all the fields are for the same contact type, set it form-wide + if (!$scope.data.contact_type && _.unique(mapContactTypes).length === 1) { + $scope.data.contact_type = mapContactTypes[0]; + } + } + + // Return fields relevant to a contact type + // Filter out non-contact fields (for relationship selectors) + function filterFields(contactType, onlyContact) { + return _.transform(CRM.vars.exportUi.fields, function(result, cat) { + if (!cat.is_contact && onlyContact) { + return; + } + var fields = _.filter(cat.children, function(field) { + return !field.contact_type || !contactType || _.contains(field.contact_type, contactType); + }); + if (fields.length) { + result.push({ + id: cat.id, + text: cat.text, + children: fields + }); + } + }); + } + + $scope.getFields = function() { + return {results: filterFields($scope.data.contact_type)}; + }; + + $scope.getRelatedFields = function(contact_type) { + return function() { + return {results: filterFields(contact_type, true)}; + }; + }; + + $scope.showPreview = function(row, field) { + var key = field.name; + if (field.relationship_type_id && field.relationship_direction) { + fetchRelations(field); + key = '' + field.relationship_type_id + '_' + field.relationship_direction + '_' + key; + } + if (field.location_type_id) { + key += '_' + field.location_type_id + (field.phone_type_id ? '_' + field.phone_type_id : ''); + } + return field.name ? row[key] : ''; + }; + + function fetchRelations(field) { + if (cids.length && !relations[field.relationship_type_id + field.relationship_direction]) { + relations[field.relationship_type_id + field.relationship_direction] = true; + var a = field.relationship_direction[0], + b = field.relationship_direction[2], + params = { + relationship_type_id: field.relationship_type_id, + filters: {is_current: 1}, + "api.Contact.getsingle": {id: '$value.contact_id_' + b} + }; + params['contact_' + a] = {'IN': cids}; + (function (field, params) { + crmApi('Relationship', 'get', params).then(function (data) { + _.each(data.values, function (rel) { + var row = cids.indexOf(rel['contact_id_' + a]); + if (row > -1) { + _.each(rel["api.Contact.getsingle"], function (item, key) { + $scope.data.preview[row][field.relationship_type_id + '_' + field.relationship_direction + '_' + key] = item; + }); + } + }); + }); + })(field, params); + } + } + + $scope.saveMappingDialog = function() { + var options = CRM.utils.adjustDialogDefaults({ + width: '40%', + height: 300, + autoOpen: false, + title: ts('Save Fields') + }); + var mappingNames = _.transform(CRM.vars.exportUi.mapping_names, function(result, n, key) { + result[key] = n.toLowerCase(); + }); + var model = { + ts: ts, + saving: false, + overwrite: CRM.vars.exportUi.mapping_id ? '1' : '0', + mapping_id: CRM.vars.exportUi.mapping_id, + mapping_type_id: CRM.vars.exportUi.mapping_type_id, + mapping_names: CRM.vars.exportUi.mapping_names, + new_name: CRM.vars.exportUi.mapping_id ? CRM.vars.exportUi.mapping_names[CRM.vars.exportUi.mapping_id] : '', + description: CRM.vars.exportUi.mapping_description, + nameIsUnique: function() { + return !_.contains(mappingNames, this.new_name.toLowerCase()) || (this.overwrite === '1' && this.new_name.toLowerCase() === this.mapping_names[this.mapping_id].toLowerCase()); + }, + saveMapping: function() { + this.saving = true; + var mapping = { + id: this.overwrite === '1' ? this.mapping_id : null, + mapping_type_id: this.mapping_type_id, + name: this.new_name, + description: this.description, + sequential: 1 + }, + mappingFields = getSelectedColumns(); + if (!mapping.id) { + _.each(mappingFields, function(field) { + delete field.id; + }); + } + mapping['api.MappingField.replace'] = {values: mappingFields}; + crmApi('Mapping', 'create', mapping).then(function(result) { + CRM.vars.exportUi.mapping_id = result.id; + CRM.vars.exportUi.mapping_description = mapping.description; + CRM.vars.exportUi.mapping_names[result.id] = mapping.name; + // Call loadFieldMap to update field ids in $scope.data.columns + loadFieldMap(result.values[0]['api.MappingField.replace'].values); + dialogService.close('exportSaveMapping'); + }); + } + }; + dialogService.open('exportSaveMapping', '~/exportui/exportSaveMapping.html', model, options); + }; + + // Load saved mapping + if ($('input[name=export_field_map]').val()) { + loadFieldMap(JSON.parse($('input[name=export_field_map]').val())); + } + + // Add new col + $scope.$watch('new.col', function(val) { + var field = val; + $timeout(function() { + if (field) { + $scope.data.columns.push({ + select: field, + name: '', + location_type_id: null, + phone_type_id: null, + website_type_id: null, + im_provider_id: null, + relationship_type_id: null, + relationship_direction: null + }); + $scope.new.col = ''; + } + }); + }); + + // When adding/removing columns + $scope.$watch('data.columns', function(values) { + _.each(values, function(col, index) { + // Remove empty values + if (!col.select) { + $scope.data.columns.splice(index, 1); + } else { + // Format item + var selection = $scope.fields[col.select]; + if (selection.relationship_type_id) { + col.relationship_type_id = selection.relationship_type_id; + col.relationship_direction = col.select.slice(col.select.indexOf('_')+1); + } else { + col.name = col.select; + col.relationship_direction = col.relationship_type_id = null; + } + var field = col.name ? $scope.fields[col.name] : {}; + col.location_type_id = field.has_location ? col.location_type_id || '' : null; + _.each($scope.option_list, function(options, list) { + col[list] = (col.location_type_id || !field.has_location) && field.option_list === list ? col[list] || options[0].id : null; + }); + } + }); + // Store data in a quickform hidden field + var selectedColumns = getSelectedColumns(); + $('input[name=export_field_map]').val(JSON.stringify(selectedColumns)); + + // Hide submit button when no fields selected + $('.crm-button_qf_Map_next').toggle(!!selectedColumns.length); + }, true); + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/api/api.php b/civicrm/api/api.php index 61501b6afd883d0816f8bc94cebea33f0b4ca1ff..1a70bc3921cb83182598e84da4c5e23a4d0702b8 100644 --- a/civicrm/api/api.php +++ b/civicrm/api/api.php @@ -24,14 +24,37 @@ function civicrm_api(string $entity = NULL, string $action, array $params, $extr } /** - * Procedural wrapper for the OO api version 4. + * CiviCRM API version 4. * - * @param string $entity - * @param string $action - * @param array $params - * @param string|int $index - * If $index is a string, the results array will be indexed by that key. - * If $index is an integer, only the result at that index will be returned. + * This API (Application Programming Interface) is used to access and manage data in CiviCRM. + * + * APIv4 is the latest stable version. + * + * @see https://docs.civicrm.org/dev/en/latest/api/v4/usage/ + * + * @param string $entity Name of the CiviCRM entity to access. + * All entity names are capitalized CamelCase, e.g. `ContributionPage`. + * Most entities correspond to a database table (e.g. `Contact` is the table `civicrm_contact`). + * For a complete list of available entities, call `civicrm_api4('Entity', 'get');` + * + * @param string $action The "verb" of the api call. + * For a complete list of actions for a given entity (e.g. `Contact`), call `civicrm_api4('Contact', 'getActions');` + * + * @param array $params An array of API input keyed by parameter name. + * The easiest way to discover all available parameters is to visit the API Explorer on your CiviCRM site. + * The API Explorer is listed in the CiviCRM menu under Support -> Developer. + * + * @param string|int|array $index Controls the Result array format. + * By default the api Result contains a non-associative array of data. Passing an $index tells the api to + * automatically reformat the array, depending on the variable type passed: + * - **Integer:** return a single result array; + * e.g. `$index = 0` will return the first result, 1 will return the second, and -1 will return the last. + * - **String:** index the results by a field value; + * e.g. `$index = "name"` will return an associative array with the field 'name' as keys. + * - **Non-associative array:** return a single value from each result; + * e.g. `$index = ['title']` will return a non-associative array of strings - the 'title' field from each result. + * - **Associative array:** a combination of the previous two modes; + * e.g. `$index = ['name' => 'title']` will return an array of strings - the 'title' field keyed by the 'name' field. * * @return \Civi\Api4\Generic\Result * @throws \API_Exception @@ -39,18 +62,43 @@ function civicrm_api(string $entity = NULL, string $action, array $params, $extr */ function civicrm_api4(string $entity, string $action, array $params = [], $index = NULL) { $apiCall = \Civi\Api4\Utils\ActionUtil::getAction($entity, $action); + $indexField = $index && is_string($index) && !CRM_Utils_Rule::integer($index) ? $index : NULL; + $removeIndexField = FALSE; + + // If index field is not part of the select query, we add it here and remove it below + if ($indexField && !empty($params['select']) && is_array($params['select']) && !\Civi\Api4\Utils\SelectUtil::isFieldSelected($indexField, $params['select'])) { + $params['select'][] = $indexField; + $removeIndexField = TRUE; + } foreach ($params as $name => $param) { $setter = 'set' . ucfirst($name); $apiCall->$setter($param); } + + if ($index && is_array($index)) { + $indexCol = reset($index); + $indexField = key($index); + if (property_exists($apiCall, 'select')) { + $apiCall->setSelect([$indexCol]); + if ($indexField && $indexField != $indexCol) { + $apiCall->addSelect($indexField); + } + } + } + $result = $apiCall->execute(); // Index results by key - if ($index && is_string($index) && !CRM_Utils_Rule::integer($index)) { - $result->indexBy($index); + if ($indexField) { + $result->indexBy($indexField); + if ($removeIndexField) { + foreach ($result as $key => $value) { + unset($result[$key][$indexField]); + } + } } // Return result at index - if (CRM_Utils_Rule::integer($index)) { + elseif (CRM_Utils_Rule::integer($index)) { $item = $result->itemAt($index); if (is_null($item)) { throw new \API_Exception("Index $index not found in api results"); @@ -60,7 +108,9 @@ function civicrm_api4(string $entity, string $action, array $params = [], $index return $item; } $result->exchangeArray($item); - + } + if (!empty($indexCol)) { + $result->exchangeArray($result->column($indexCol)); } return $result; } diff --git a/civicrm/api/v3/Contact.php b/civicrm/api/v3/Contact.php index ef3cd25f6c48d87d7b3fa7221ed3d439c1d9c7fc..680583cf1e78bba3edd7d110f7595d03158714db 100644 --- a/civicrm/api/v3/Contact.php +++ b/civicrm/api/v3/Contact.php @@ -1208,7 +1208,7 @@ function civicrm_api3_contact_get_merge_conflicts($params) { $migrationInfo = []; $result = []; foreach ((array) $params['mode'] as $mode) { - $result[$mode]['conflicts'] = CRM_Dedupe_Merger::getConflicts( + $result[$mode] = CRM_Dedupe_Merger::getConflicts( $migrationInfo, $params['to_remove_id'], $params['to_keep_id'], $mode diff --git a/civicrm/api/v3/Entity.php b/civicrm/api/v3/Entity.php index 4bab9fe8935bc4c8ba5df96be52ee59c159aeea2..fba4b7eb1a59ac73bcf68c65f4f861b8d1eba9a6 100644 --- a/civicrm/api/v3/Entity.php +++ b/civicrm/api/v3/Entity.php @@ -14,6 +14,8 @@ function _civicrm_api3_entity_deprecation($entities) { $deprecated = []; if (!empty($entities['values'])) { foreach ($entities['values'] as $entity) { + $apiFile = "api/v3/$entity.php"; + @include_once $apiFile; if (is_string(_civicrm_api3_deprecation_check($entity))) { $deprecated[] = $entity; } diff --git a/civicrm/api/v3/Membership.php b/civicrm/api/v3/Membership.php index 2038306a23ae0d1d7cf3daee3b15fd57bd00bbd1..879aeb80ad1f45d905f47e7682c0282c74f265ba 100644 --- a/civicrm/api/v3/Membership.php +++ b/civicrm/api/v3/Membership.php @@ -66,6 +66,9 @@ function civicrm_api3_membership_delete($params) { * * @return array * API result array. + * + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ function civicrm_api3_membership_create($params) { // check params for membership id during update @@ -121,10 +124,6 @@ function civicrm_api3_membership_create($params) { $ids = []; if (empty($params['id'])) { $params['action'] = CRM_Core_Action::ADD; - // we need user id during add mode - if (!empty($params['contact_id'])) { - $ids['userId'] = $params['contact_id']; - } } else { // edit mode @@ -134,7 +133,7 @@ function civicrm_api3_membership_create($params) { } // @todo stop passing $ids (membership and userId may be set above) - $membershipBAO = CRM_Member_BAO_Membership::create($params, $ids, TRUE); + $membershipBAO = CRM_Member_BAO_Membership::create($params, $ids); if (array_key_exists('is_error', $membershipBAO)) { // In case of no valid status for given dates, $membershipBAO diff --git a/civicrm/api/v3/MembershipStatus.php b/civicrm/api/v3/MembershipStatus.php index 87d01b3656086f8e5aa9bfd77b728c810a01b9d9..97421d09d9bf06259f6e3c32d640d7d7e43e5b5a 100644 --- a/civicrm/api/v3/MembershipStatus.php +++ b/civicrm/api/v3/MembershipStatus.php @@ -173,4 +173,7 @@ SELECT start_date, end_date, join_date, membership_type_id function _civicrm_api3_membership_status_calc_spec(&$params) { $params['membership_id']['api.required'] = 1; $params['membership_id']['title'] = 'Membership ID'; + $params['ignore_admin_only']['title'] = 'Ignore admin only statuses'; + $params['ignore_admin_only']['description'] = 'Ignore statuses that are for admin/manual assignment only'; + $params['ignore_admin_only']['type'] = CRM_Utils_Type::T_BOOLEAN; } diff --git a/civicrm/api/v3/Order.php b/civicrm/api/v3/Order.php index 88236aa0113ac69ea3e505a5a275e55ce596e142..464dcd427058828abf546d574b188c23390afaf0 100644 --- a/civicrm/api/v3/Order.php +++ b/civicrm/api/v3/Order.php @@ -141,6 +141,9 @@ function civicrm_api3_order_create($params) { if ($entity == 'pledge') { $paymentParams += $entityParams; } + elseif ($entity == 'membership') { + $paymentParams['isSkipLineItem'] = TRUE; + } $payments = civicrm_api3($entity . '_payment', 'create', $paymentParams); } } diff --git a/civicrm/api/v3/PaymentProcessor.php b/civicrm/api/v3/PaymentProcessor.php index 4d7df87fe1e8043a28f920f83ede48b85731dc94..06587f00ca3120f50e4067ed510eda1c3544a814 100644 --- a/civicrm/api/v3/PaymentProcessor.php +++ b/civicrm/api/v3/PaymentProcessor.php @@ -24,12 +24,6 @@ * API result array */ function civicrm_api3_payment_processor_create($params) { - if (empty($params['id']) && empty($params['payment_instrument_id'])) { - $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [ - 'id' => $params['payment_processor_type_id'], - 'return' => 'payment_instrument_id', - ]); - } return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PaymentProcessor'); } diff --git a/civicrm/api/v3/System.php b/civicrm/api/v3/System.php index c91583fc0f7e0ce709f2aa8165dffac91d365efb..3eb6845ce4af7dac24bfc03517f31fcf16ecf764 100644 --- a/civicrm/api/v3/System.php +++ b/civicrm/api/v3/System.php @@ -384,6 +384,38 @@ function civicrm_api3_system_updatelogtables($params) { return civicrm_api3_create_success($updatedTablesCount); } +/** + * Update log table structures. + * + * This updates the engine type if defined in the hook and changes the field type + * for log_conn_id to reflect CRM-18193. + * + * @param array $params + * + * @return array + * + * @throws \API_Exception + */ +function civicrm_api3_system_utf8conversion($params) { + if (CRM_Core_BAO_SchemaHandler::migrateUtf8mb4($params['is_revert'])) { + return civicrm_api3_create_success(1); + } + throw new API_Exception('Conversion failed'); +} + +/** + * Metadata for conversion function. + * + * @param array $params + */ +function _civicrm_api3_system_utf8conversion_spec(&$params) { + $params['is_revert'] = [ + 'title' => ts('Revert back from UTF8MB4 to UTF8?'), + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'api.default' => FALSE, + ]; +} + /** * Adjust Metadata for Flush action. * @@ -411,22 +443,56 @@ function _civicrm_api3_system_updatelogtables_spec(&$params) { * Update indexes. * * This adds any indexes that exist in the schema but not the database. + * + * @param array $params + * + * @return array */ -function civicrm_api3_system_updateindexes() { - CRM_Core_BAO_SchemaHandler::createMissingIndices(CRM_Core_BAO_SchemaHandler::getMissingIndices(TRUE)); +function civicrm_api3_system_updateindexes(array $params):array { + $tables = empty($params['tables']) ? FALSE : (array) $params['tables']; + CRM_Core_BAO_SchemaHandler::createMissingIndices(CRM_Core_BAO_SchemaHandler::getMissingIndices(TRUE, $tables)); return civicrm_api3_create_success(1); } +/** + * Declare metadata for api System.getmissingindices + * + * @param array $params + */ +function _civicrm_api3_system_updateindexes_spec(array &$params) { + $params['tables'] = [ + 'type' => CRM_Utils_Type::T_STRING, + 'api.default' => FALSE, + 'title' => ts('Optional tables filter'), + ]; +} + /** * Get an array of indices that should be defined but are not. * + * @param array $params + * * @return array */ -function civicrm_api3_system_getmissingindices() { - $indices = CRM_Core_BAO_SchemaHandler::getMissingIndices(FALSE); +function civicrm_api3_system_getmissingindices($params) { + $tables = empty($params['tables']) ? FALSE : (array) $params['tables']; + $indices = CRM_Core_BAO_SchemaHandler::getMissingIndices(FALSE, $tables); return civicrm_api3_create_success($indices); } +/** + * Declare metadata for api System.getmissingindices + * + * @param array $params + */ +function _civicrm_api3_system_getmissingindices_spec(&$params) { + $params['tables'] = [ + 'type' => CRM_Utils_Type::T_STRING, + 'api.default' => FALSE, + 'title' => ts('Optional tables filter'), + ]; +} + /** * Creates missing log tables. * diff --git a/civicrm/api/v3/examples/Domain/Create.ex.php b/civicrm/api/v3/examples/Domain/Create.ex.php index 85b9fb6dbe2880863e49cadd75c28ba57710aa4a..70280cf0b43877b39d0042d2336f7331bc8dc551 100644 --- a/civicrm/api/v3/examples/Domain/Create.ex.php +++ b/civicrm/api/v3/examples/Domain/Create.ex.php @@ -50,7 +50,6 @@ function domain_create_expectedresult() { 'id' => '3', 'name' => 'A-team domain', 'description' => 'domain of chaos', - 'config_backend' => '', 'contact_id' => '7', 'locales' => '', 'locale_custom_strings' => '', diff --git a/civicrm/api/v3/examples/Event/Create.ex.php b/civicrm/api/v3/examples/Event/Create.ex.php index 0a9977424c9e641cc883b8c05866e2b560d30dbc..ccca91dccef53c84048c99666b5d608616c180ee 100644 --- a/civicrm/api/v3/examples/Event/Create.ex.php +++ b/civicrm/api/v3/examples/Event/Create.ex.php @@ -8,7 +8,7 @@ function event_create_example() { $params = [ 'title' => 'Annual CiviCRM meet', - 'summary' => 'If you have any CiviCRM realted issues or want to track where CiviCRM is heading, Sign up now', + 'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now', 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => 1, 'is_public' => 1, @@ -60,7 +60,7 @@ function event_create_expectedresult() { '3' => [ 'id' => '3', 'title' => 'Annual CiviCRM meet', - 'summary' => 'If you have any CiviCRM realted issues or want to track where CiviCRM is heading, Sign up now', + 'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now', 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => '1', 'participant_listing_id' => '', diff --git a/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php b/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php index c43d238240a0d1986a51e4bdc5bc8a15222f33c9..a0ce41304798117f859a8a6b4458c899a65ace1c 100644 --- a/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php +++ b/civicrm/api/v3/examples/Event/IsCurrentOption.ex.php @@ -49,7 +49,7 @@ function event_get_expectedresult() { 'id' => '3', 'title' => 'Annual CiviCRM meet 2', 'event_title' => 'Annual CiviCRM meet 2', - 'summary' => 'If you have any CiviCRM realted issues or want to track where CiviCRM is heading, Sign up now', + 'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now', 'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues', 'event_type_id' => '1', diff --git a/civicrm/api/v3/examples/Setting/GetFields.ex.php b/civicrm/api/v3/examples/Setting/GetFields.ex.php index c188d7d591c37db102add6210b0e566ce5b629a1..2f479ace759adc232159c283853b09d21324d10d 100644 --- a/civicrm/api/v3/examples/Setting/GetFields.ex.php +++ b/civicrm/api/v3/examples/Setting/GetFields.ex.php @@ -234,7 +234,6 @@ function setting_getfields_expectedresult() { 'type' => 'Array', 'default' => [ 'invoice_prefix' => 'INV_', - 'credit_notes_prefix' => 'CN_', 'due_date' => '10', 'due_date_period' => 'days', 'notes' => '', diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index dd90088fe6c8f1f90245d77a23f14412c99f3bd7..fb3c509cb94e73dc3797251fe576a53bfc82ddaf 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -2442,10 +2442,6 @@ function _civicrm_api3_api_resolve_alias($entity, $fieldName, $action = 'create' */ function _civicrm_api3_deprecation_check($entity, $result = []) { if ($entity) { - $apiFile = "api/v3/$entity.php"; - if (CRM_Utils_File::isIncludable($apiFile)) { - require_once $apiFile; - } $lowercase_entity = _civicrm_api_get_entity_name_from_camel($entity); $fnName = "_civicrm_api3_{$lowercase_entity}_deprecation"; if (function_exists($fnName)) { diff --git a/civicrm/bin/regen.sh b/civicrm/bin/regen.sh index f975c2e88aa67d8c582a3de2e854b96d61c973c3..0af6490e58900ff034b76beb48005b047eb8ed41 100755 --- a/civicrm/bin/regen.sh +++ b/civicrm/bin/regen.sh @@ -48,7 +48,7 @@ cms_eval 'civicrm_initialize();' php GenerateData.php ## Prune local data -$MYSQLCMD -e "DROP TABLE zipcodes; DROP TABLE IF EXISTS civicrm_install_canary; UPDATE civicrm_domain SET config_backend = NULL; DELETE FROM civicrm_extension; DELETE FROM civicrm_cache; DELETE FROM civicrm_setting;" +$MYSQLCMD -e "DROP TABLE zipcodes; DROP TABLE IF EXISTS civicrm_install_canary; DELETE FROM civicrm_extension; DELETE FROM civicrm_cache; DELETE FROM civicrm_setting;" TABLENAMES=$( echo "show tables like 'civicrm_%'" | $MYSQLCMD | grep ^civicrm_ | xargs ) cd $CIVISOURCEDIR/sql diff --git a/civicrm/bower_components/marked/.composer-downloads/marked-5bbf2d6725b29ad8ddb7c3ab47c50930.json b/civicrm/bower_components/marked/.composer-downloads/marked-5bbf2d6725b29ad8ddb7c3ab47c50930.json new file mode 100644 index 0000000000000000000000000000000000000000..890bab87408a5fafa052c9b7e0570cf0d3f92313 --- /dev/null +++ b/civicrm/bower_components/marked/.composer-downloads/marked-5bbf2d6725b29ad8ddb7c3ab47c50930.json @@ -0,0 +1,4 @@ +{ + "name": "civicrm/civicrm-core:marked", + "url": "https://github.com/markedjs/marked/archive/v0.8.0.zip" +} \ No newline at end of file diff --git a/civicrm/bower_components/marked/index.js b/civicrm/bower_components/marked/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a12f90569faa58dd00e2162cff08a222bc8d2c4a --- /dev/null +++ b/civicrm/bower_components/marked/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/marked'); diff --git a/civicrm/bower_components/marked/marked.min.js b/civicrm/bower_components/marked/marked.min.js new file mode 100644 index 0000000000000000000000000000000000000000..a46426cc2be82b362575b05e2dc7882cd3fda80a --- /dev/null +++ b/civicrm/bower_components/marked/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2019, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).marked=t()}(this,function(){"use strict";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function n(e){return h[e]}var e,s=(function(t){function e(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,xhtml:!1}}t.exports={defaults:e(),getDefaults:e,changeDefaults:function(e){t.exports.defaults=e}}}(e={exports:{}},e.exports),e.exports),i=(s.defaults,s.getDefaults,s.changeDefaults,/[&<>"']/),l=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,h={"&":"&","<":"<",">":">",'"':""","'":"'"};var u=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function c(e){return e.replace(u,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var p=/(^|[^\[])\^/g;var g=/[^\w:]/g,f=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;var d={},k=/^[^:]+:\/*[^/]*$/,b=/^([^:]+:)[\s\S]*$/,m=/^([^:]+:\/*[^/]*)[\s\S]*$/;function x(e,t){d[" "+e]||(k.test(e)?d[" "+e]=e+"/":d[" "+e]=_(e,"/",!0));var n=-1===(e=d[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(b,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(m,"$1")+t:e+t}function _(e,t,n){var r=e.length;if(0===r)return"";for(var s=0;s<r;){var i=e.charAt(r-s-1);if(i!==t||n){if(i===t||!n)break;s++}else s++}return e.substr(0,r-s)}var y=function(e,t){if(t){if(i.test(e))return e.replace(l,n)}else if(a.test(e))return e.replace(o,n);return e},w=c,v=function(e,t,n){if(e){var r;try{r=decodeURIComponent(c(n)).replace(g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!f.test(n)&&(n=x(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},$=function(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},S=function(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,s=t;0<=--s&&"\\"===n[s];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},z=_,A=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,s=0;s<n;s++)if("\\"===e[s])s++;else if(e[s]===t[0])r++;else if(e[s]===t[1]&&--r<0)return s;return-1},R=function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},Z={exec:function(){}},L=function(n,e){n=n.source||n,e=e||"";var r={replace:function(e,t){return t=(t=t.source||t).replace(p,"$1"),n=n.replace(e,t),r},getRegex:function(){return new RegExp(n,e)}};return r},q=$,C={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:Z,table:Z,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};C.def=L(C.def).replace("label",C._label).replace("title",C._title).getRegex(),C.bullet=/(?:[*+-]|\d{1,9}\.)/,C.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,C.item=L(C.item,"gm").replace(/bull/g,C.bullet).getRegex(),C.list=L(C.list).replace(/bull/g,C.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+C.def.source+")").getRegex(),C._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",C._comment=/<!--(?!-?>)[\s\S]*?-->/,C.html=L(C.html,"i").replace("comment",C._comment).replace("tag",C._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),C.paragraph=L(C._paragraph).replace("hr",C.hr).replace("heading"," {0,3}#{1,6} +").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",C._tag).getRegex(),C.blockquote=L(C.blockquote).replace("paragraph",C.paragraph).getRegex(),C.normal=q({},C),C.gfm=q({},C.normal,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),C.pedantic=q({},C.normal,{html:L("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",C._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:Z,paragraph:L(C.normal._paragraph).replace("hr",C.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",C.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var O={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Z,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Z,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/,_punctuation:"!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~"};O.em=L(O.em).replace(/punctuation/g,O._punctuation).getRegex(),O._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,O._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,O._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,O.autolink=L(O.autolink).replace("scheme",O._scheme).replace("email",O._email).getRegex(),O._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,O.tag=L(O.tag).replace("comment",C._comment).replace("attribute",O._attribute).getRegex(),O._label=/(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,O._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,O._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,O.link=L(O.link).replace("label",O._label).replace("href",O._href).replace("title",O._title).getRegex(),O.reflink=L(O.reflink).replace("label",O._label).getRegex(),O.normal=q({},O),O.pedantic=q({},O.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:L(/^!?\[(label)\]\((.*?)\)/).replace("label",O._label).getRegex(),reflink:L(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",O._label).getRegex()}),O.gfm=q({},O.normal,{escape:L(O.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),O.gfm.url=L(O.gfm.url,"i").replace("email",O.gfm._extended_email).getRegex(),O.breaks=q({},O.gfm,{br:L(O.br).replace("{2,}","*").getRegex(),text:L(O.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var D={block:C,inline:O},E=s.defaults,j=D.block,P=z,T=S,I=y,B=function(){function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||E,this.rules=j.normal,this.options.pedantic?this.rules=j.pedantic:this.options.gfm&&(this.rules=j.gfm)}n.lex=function(e,t){return new n(t).lex(e)};var e=n.prototype;return e.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.token(e,!0)},e.token=function(e,t){var n,r,s,i,l,a,o,h,u,c,p,g,f,d,k,b;for(e=e.replace(/^ +$/gm,"");e;)if((s=this.rules.newline.exec(e))&&(e=e.substring(s[0].length),1<s[0].length&&this.tokens.push({type:"space"})),s=this.rules.code.exec(e)){var m=this.tokens[this.tokens.length-1];e=e.substring(s[0].length),m&&"paragraph"===m.type?m.text+="\n"+s[0].trimRight():(s=s[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",codeBlockStyle:"indented",text:this.options.pedantic?s:P(s,"\n")}))}else if(s=this.rules.fences.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"code",lang:s[2]?s[2].trim():s[2],text:s[3]||""});else if(s=this.rules.heading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:s[1].length,text:s[2]});else if((s=this.rules.nptable.exec(e))&&(a={type:"table",header:T(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===a.align.length){for(e=e.substring(s[0].length),p=0;p<a.align.length;p++)/^ *-+: *$/.test(a.align[p])?a.align[p]="right":/^ *:-+: *$/.test(a.align[p])?a.align[p]="center":/^ *:-+ *$/.test(a.align[p])?a.align[p]="left":a.align[p]=null;for(p=0;p<a.cells.length;p++)a.cells[p]=T(a.cells[p],a.header.length);this.tokens.push(a)}else if(s=this.rules.hr.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"hr"});else if(s=this.rules.blockquote.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"blockquote_start"}),s=s[0].replace(/^ *> ?/gm,""),this.token(s,t),this.tokens.push({type:"blockquote_end"});else if(s=this.rules.list.exec(e)){for(e=e.substring(s[0].length),o={type:"list_start",ordered:d=1<(i=s[2]).length,start:d?+i:"",loose:!1},this.tokens.push(o),n=!(h=[]),f=(s=s[0].match(this.rules.item)).length,p=0;p<f;p++)c=(a=s[p]).length,~(a=a.replace(/^ *([*+-]|\d+\.) */,"")).indexOf("\n ")&&(c-=a.length,a=this.options.pedantic?a.replace(/^ {1,4}/gm,""):a.replace(new RegExp("^ {1,"+c+"}","gm"),"")),p!==f-1&&(l=j.bullet.exec(s[p+1])[0],(1<i.length?1===l.length:1<l.length||this.options.smartLists&&l!==i)&&(e=s.slice(p+1).join("\n")+e,p=f-1)),r=n||/\n\n(?!\s*$)/.test(a),p!==f-1&&(n="\n"===a.charAt(a.length-1),r=r||n),r&&(o.loose=!0),b=void 0,(k=/^\[[ xX]\] /.test(a))&&(b=" "!==a[1],a=a.replace(/^\[[ xX]\] +/,"")),u={type:"list_item_start",task:k,checked:b,loose:r},h.push(u),this.tokens.push(u),this.token(a,!1),this.tokens.push({type:"list_item_end"});if(o.loose)for(f=h.length,p=0;p<f;p++)h[p].loose=!0;this.tokens.push({type:"list_end"})}else if(s=this.rules.html.exec(e))e=e.substring(s[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===s[1]||"script"===s[1]||"style"===s[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):I(s[0]):s[0]});else if(t&&(s=this.rules.def.exec(e)))e=e.substring(s[0].length),s[3]&&(s[3]=s[3].substring(1,s[3].length-1)),g=s[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[g]||(this.tokens.links[g]={href:s[2],title:s[3]});else if((s=this.rules.table.exec(e))&&(a={type:"table",header:T(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===a.align.length){for(e=e.substring(s[0].length),p=0;p<a.align.length;p++)/^ *-+: *$/.test(a.align[p])?a.align[p]="right":/^ *:-+: *$/.test(a.align[p])?a.align[p]="center":/^ *:-+ *$/.test(a.align[p])?a.align[p]="left":a.align[p]=null;for(p=0;p<a.cells.length;p++)a.cells[p]=T(a.cells[p].replace(/^ *\| *| *\| *$/g,""),a.header.length);this.tokens.push(a)}else if(s=this.rules.lheading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:"="===s[2].charAt(0)?1:2,text:s[1]});else if(t&&(s=this.rules.paragraph.exec(e)))e=e.substring(s[0].length),this.tokens.push({type:"paragraph",text:"\n"===s[1].charAt(s[1].length-1)?s[1].slice(0,-1):s[1]});else if(s=this.rules.text.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"text",text:s[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens},t(n,null,[{key:"rules",get:function(){return j}}]),n}(),U=s.defaults,F=v,N=y,X=function(){function e(e){this.options=e||U}var t=e.prototype;return t.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var s=this.options.highlight(e,r);null!=s&&s!==e&&(n=!0,e=s)}return r?'<pre><code class="'+this.options.langPrefix+N(r,!0)+'">'+(n?e:N(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:N(e,!0))+"</code></pre>"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return"<table>\n<thead>\n"+e+"</thead>\n"+(t=t&&"<tbody>"+t+"</tbody>")+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,n){if(null===(e=F(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+N(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},t.image=function(e,t,n){if(null===(e=F(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},t.text=function(e){return e},e}(),G=function(){function e(){this.seen={}}return e.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t))for(var n=t;this.seen[n]++,t=n+"-"+this.seen[n],this.seen.hasOwnProperty(t););return this.seen[t]=0,t},e}(),M=s.defaults,V=D.inline,H=A,J=y,K=function(){function u(e,t){if(this.options=t||M,this.links=e,this.rules=V.normal,this.options.renderer=this.options.renderer||new X,this.renderer=this.options.renderer,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=V.pedantic:this.options.gfm&&(this.options.breaks?this.rules=V.breaks:this.rules=V.gfm)}u.output=function(e,t,n){return new u(t,n).output(e)};var e=u.prototype;return e.output=function(e){for(var t,n,r,s,i,l,a="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),a+=J(i[1]);else if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.inRawBlock=!1),e=e.substring(i[0].length),a+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):J(i[0]):i[0];else if(i=this.rules.link.exec(e)){var o=H(i[2],"()");if(-1<o){var h=(0===i[0].indexOf("!")?5:4)+i[1].length+o;i[2]=i[2].substring(0,o),i[0]=i[0].substring(0,h).trim(),i[3]=""}e=e.substring(i[0].length),this.inLink=!0,r=i[2],s=this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],t[3]):"":i[3]?i[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),a+=this.outputLink(i,{href:u.escapes(r),title:u.escapes(s)}),this.inLink=!1}else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){a+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,a+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),a+=this.renderer.strong(this.output(i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),a+=this.renderer.em(this.output(i[6]||i[5]||i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),a+=this.renderer.codespan(J(i[2].trim(),!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),a+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),a+=this.renderer.del(this.output(i[1]));else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),r="@"===i[2]?"mailto:"+(n=J(this.mangle(i[1]))):n=J(i[1]),a+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.inRawBlock?a+=this.renderer.text(this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):J(i[0]):i[0]):a+=this.renderer.text(J(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===i[2])r="mailto:"+(n=J(i[0]));else{for(;l=i[0],i[0]=this.rules._backpedal.exec(i[0])[0],l!==i[0];);n=J(i[0]),r="www."===i[1]?"http://"+n:n}e=e.substring(i[0].length),a+=this.renderer.link(r,null,n)}return a},u.escapes=function(e){return e?e.replace(u.rules._escapes,"$1"):e},e.outputLink=function(e,t){var n=t.href,r=t.title?J(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,J(e[1]))},e.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"â€").replace(/\.{3}/g,"…"):e},e.mangle=function(e){if(!this.options.mangle)return e;for(var t,n=e.length,r="",s=0;s<n;s++)t=e.charCodeAt(s),.5<Math.random()&&(t="x"+t.toString(16)),r+="&#"+t+";";return r},t(u,null,[{key:"rules",get:function(){return V}}]),u}(),Q=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),W=s.defaults,Y=$,ee=w,te=function(){function n(e){this.tokens=[],this.token=null,this.options=e||W,this.options.renderer=this.options.renderer||new X,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new G}n.parse=function(e,t){return new n(t).parse(e)};var e=n.prototype;return e.parse=function(e){this.inline=new K(e.links,this.options),this.inlineText=new K(e.links,Y({},this.options,{renderer:new Q})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},e.next=function(){return this.token=this.tokens.pop(),this.token},e.peek=function(){return this.tokens[this.tokens.length-1]||0},e.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},e.tok=function(){var e="";switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,ee(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var t,n,r,s,i="";for(r="",t=0;t<this.token.header.length;t++)r+=this.renderer.tablecell(this.inline.output(this.token.header[t]),{header:!0,align:this.token.align[t]});for(i+=this.renderer.tablerow(r),t=0;t<this.token.cells.length;t++){for(n=this.token.cells[t],r="",s=0;s<n.length;s++)r+=this.renderer.tablecell(this.inline.output(n[s]),{header:!1,align:this.token.align[s]});e+=this.renderer.tablerow(r)}return this.renderer.table(i,e);case"blockquote_start":for(e="";"blockquote_end"!==this.next().type;)e+=this.tok();return this.renderer.blockquote(e);case"list_start":e="";for(var l=this.token.ordered,a=this.token.start;"list_end"!==this.next().type;)e+=this.tok();return this.renderer.list(e,l,a);case"list_item_start":e="";var o=this.token.loose,h=this.token.checked,u=this.token.task;if(this.token.task)if(o)if("text"===this.peek().type){var c=this.peek();c.text=this.renderer.checkbox(h)+" "+c.text}else this.tokens.push({type:"text",text:this.renderer.checkbox(h)});else e+=this.renderer.checkbox(h);for(;"list_item_end"!==this.next().type;)e+=o||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(e,u,h);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var p='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(p);console.log(p)}},n}(),ne=$,re=R,se=y,ie=s.getDefaults,le=s.changeDefaults,ae=s.defaults;function oe(t,l,a){if(null==t)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof t)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected");if(a||"function"==typeof l){var e=function(){a||(a=l,l=null),l=ne({},oe.defaults,l||{}),re(l);var n,r,s=l.highlight,e=0;try{n=B.lex(t,l)}catch(e){return{v:a(e)}}r=n.length;function i(t){if(t)return l.highlight=s,a(t);var e;try{e=te.parse(n,l)}catch(e){t=e}return l.highlight=s,t?a(t):a(null,e)}if(!s||s.length<3)return{v:i()};if(delete l.highlight,!r)return{v:i()};for(;e<n.length;e++)!function(n){"code"!==n.type?--r||i():s(n.text,n.lang,function(e,t){return e?i(e):null==t||t===n.text?--r||i():(n.text=t,n.escaped=!0,void(--r||i()))})}(n[e]);return{v:void 0}}();if("object"==typeof e)return e.v}try{return l=ne({},oe.defaults,l||{}),re(l),te.parse(B.lex(t,l),l)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(l||oe.defaults).silent)return"<p>An error occurred:</p><pre>"+se(e.message+"",!0)+"</pre>";throw e}}return oe.options=oe.setOptions=function(e){return ne(oe.defaults,e),le(oe.defaults),oe},oe.getDefaults=ie,oe.defaults=ae,oe.Parser=te,oe.parser=te.parse,oe.Renderer=X,oe.TextRenderer=Q,oe.Lexer=B,oe.lexer=B.lex,oe.InlineLexer=K,oe.inlineLexer=K.output,oe.Slugger=G,oe.parse=oe}); \ No newline at end of file diff --git a/civicrm/bower_components/marked/rollup.config.esm.js b/civicrm/bower_components/marked/rollup.config.esm.js new file mode 100644 index 0000000000000000000000000000000000000000..47590d59ea90403289c596abb4e7892ccfac9b37 --- /dev/null +++ b/civicrm/bower_components/marked/rollup.config.esm.js @@ -0,0 +1,26 @@ +const commonjs = require('rollup-plugin-commonjs'); +const license = require('rollup-plugin-license'); + +module.exports = { + input: 'src/marked.js', + output: { + file: 'lib/marked.esm.js', + format: 'esm' + }, + plugins: [ + license({ + banner: ` +DO NOT EDIT THIS FILE +The code in this file is generated from files in ./src/ +` + }), + license({ + banner: ` +marked - a markdown parser +Copyright (c) 2011-${new Date().getFullYear()}, Christopher Jeffrey. (MIT Licensed) +https://github.com/markedjs/marked +` + }), + commonjs() + ] +}; diff --git a/civicrm/bower_components/marked/rollup.config.js b/civicrm/bower_components/marked/rollup.config.js new file mode 100644 index 0000000000000000000000000000000000000000..79b3c65acecf9719a83df06cebef3ecd96d8df4d --- /dev/null +++ b/civicrm/bower_components/marked/rollup.config.js @@ -0,0 +1,31 @@ +const commonjs = require('rollup-plugin-commonjs'); +const babel = require('rollup-plugin-babel'); +const license = require('rollup-plugin-license'); + +module.exports = { + input: 'src/marked.js', + output: { + file: 'lib/marked.js', + format: 'umd', + name: 'marked' + }, + plugins: [ + license({ + banner: ` +DO NOT EDIT THIS FILE +The code in this file is generated from files in ./src/ +` + }), + license({ + banner: ` +marked - a markdown parser +Copyright (c) 2011-${new Date().getFullYear()}, Christopher Jeffrey. (MIT Licensed) +https://github.com/markedjs/marked +` + }), + commonjs(), + babel({ + presets: [['@babel/preset-env', { loose: true }]] + }) + ] +}; diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 545c84d8e6a65409c1a65d0e9cd0ca6a32e6cd11..bad3effb54d0ce5a42650c79b33ccdb4f8f666c8 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.22.1', + return array( 'version' => '5.23.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index 88702936dc0ac00d339cdcd53c4d1bbbc30246ce..6c14e526a2ca69e015bf30d493febf4fec30ebc7 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -33,6 +33,11 @@ } }, "include-path": ["vendor/tecnickcom"], + "config": { + "platform": { + "php": "7.0.10" + } + }, "require": { "php": "~7.0", "dompdf/dompdf" : "0.8.*", @@ -43,12 +48,12 @@ "symfony/event-dispatcher": "^2.8.50 || ~3.0", "symfony/filesystem": "^2.8.50 || ~3.0", "symfony/process": "^2.8.50 || ~3.0", - "psr/log": "~1.1", + "psr/log": "~1.0", "symfony/finder": "^2.8.50 || ~3.0", "tecnickcom/tcpdf" : "6.2.*", "totten/ca-config": "~17.05", "zetacomponents/base": "1.9.*", - "zetacomponents/mail": "dev-master", + "zetacomponents/mail": "1.9.*", "marcj/topsort": "~1.1", "phpoffice/phpword": "^0.15.0", "pear/validate_finance_creditcard": "dev-master", @@ -57,7 +62,7 @@ "pear/net_smtp": "1.6.*", "pear/net_socket": "1.0.*", "pear/mail": "^1.4", - "civicrm/civicrm-setup": "~0.2.0", + "civicrm/civicrm-setup": "~0.4.0", "guzzlehttp/guzzle": "^6.3", "psr/simple-cache": "~1.0.1", "cweagans/composer-patches": "~1.0", @@ -189,6 +194,10 @@ "url": "https://github.com/FortAwesome/Font-Awesome/archive/v4.7.0.zip", "ignore": ["*/.*", "*.json", "src", "*.yml", "Gemfile", "Gemfile.lock", "*.md"] }, + "marked": { + "url": "https://github.com/markedjs/marked/archive/v0.8.0.zip", + "ignore": [".*", "*.json", "*.md", "Makefile", "*/*"] + }, "google-code-prettify": { "url": "https://github.com/tcollard/google-code-prettify/archive/v1.0.5.zip", "ignore": ["closure-compiler", "js-modules", "tests", "yui-compressor", "Makefile"] diff --git a/civicrm/composer.lock b/civicrm/composer.lock index 9dfa4335a4438d48fea8dd67b8abc9a490af93d4..240823ffed51ab36f9aacdf26ffc0d86a639d115 100644 --- a/civicrm/composer.lock +++ b/civicrm/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "78720e4ea4f746b3244c8275f05d6d1b", + "content-hash": "6b2ec4d9dc608f8b2e0def4af6d7bafb", "packages": [ { "name": "civicrm/civicrm-cxn-rpc", @@ -45,16 +45,16 @@ }, { "name": "civicrm/civicrm-setup", - "version": "v0.2.0", + "version": "v0.4.0", "source": { "type": "git", "url": "https://github.com/civicrm/civicrm-setup.git", - "reference": "e7991aff516c3fff952bed8f90832804a134358a" + "reference": "8417d0c62b6e725ef7a49a75935995d0269cbbe8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/e7991aff516c3fff952bed8f90832804a134358a", - "reference": "e7991aff516c3fff952bed8f90832804a134358a", + "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/8417d0c62b6e725ef7a49a75935995d0269cbbe8", + "reference": "8417d0c62b6e725ef7a49a75935995d0269cbbe8", "shasum": "" }, "require": { @@ -78,7 +78,7 @@ } ], "description": "CiviCRM installation library", - "time": "2018-01-23T06:26:55+00:00" + "time": "2020-01-18T03:46:43+00:00" }, { "name": "civicrm/composer-downloads-plugin", @@ -504,6 +504,7 @@ "mimetype", "php" ], + "abandoned": true, "time": "2017-03-23T02:05:33+00:00" }, { @@ -1524,16 +1525,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { @@ -1542,7 +1543,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -1567,7 +1568,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2019-11-01T11:05:21+00:00" }, { "name": "psr/simple-cache", @@ -2244,9 +2245,7 @@ "version": "3.0.0+php53", "dist": { "type": "zip", - "url": "https://github.com/tplaner/When/archive/c1ec099f421bff354cc5c929f83b94031423fc80.zip", - "reference": null, - "shasum": null + "url": "https://github.com/tplaner/When/archive/c1ec099f421bff354cc5c929f83b94031423fc80.zip" }, "require": { "php": ">=5.3.0" @@ -2372,6 +2371,7 @@ "escaper", "zf2" ], + "abandoned": "laminas/laminas-escaper", "time": "2015-05-07T14:55:31+00:00" }, { @@ -2440,16 +2440,16 @@ }, { "name": "zetacomponents/mail", - "version": "dev-master", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/zetacomponents/Mail.git", - "reference": "b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77" + "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77", - "reference": "b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", + "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", "shasum": "" }, "require": { @@ -2504,19 +2504,19 @@ { "name": "Alexandru Stanoi" }, - { - "name": "Christian Michel" - }, { "name": "Sinisa Dukaric" }, { "name": "Mikko Koppanen" + }, + { + "name": "Christian Michel" } ], "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", "homepage": "https://github.com/zetacomponents", - "time": "2019-02-13T11:33:09+00:00" + "time": "2020-01-17T11:18:01+00:00" } ], "packages-dev": [ @@ -2687,7 +2687,6 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "zetacomponents/mail": 20, "pear/validate_finance_creditcard": 20, "cache/integration-tests": 20 }, @@ -2696,5 +2695,8 @@ "platform": { "php": "~7.0" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "7.0.10" + } } diff --git a/civicrm/css/api4-explorer.css b/civicrm/css/api4-explorer.css index 2171d003e8fdb0e4098dca0cae409a625e33cf88..ae419a5086cbb2f60c14bc8a1220366441cca43f 100644 --- a/civicrm/css/api4-explorer.css +++ b/civicrm/css/api4-explorer.css @@ -22,7 +22,7 @@ #bootstrap-theme.api4-explorer-page > div > .panel { flex: 1; margin: 10px; - min-height: 400px; + min-height: 500px; } #bootstrap-theme.api4-explorer-page > div > form.panel { flex: 2; @@ -33,8 +33,21 @@ border-bottom-left-radius: 0; margin-bottom: 0; } +#bootstrap-theme.api4-explorer-page .panel-heading.nav-tabs { + padding: 8px 0 0 20px; +} +#bootstrap-theme .panel-heading>li>a { + background-color: #f1f1f18c +} #bootstrap-theme.api4-explorer-page .explorer-code-panel table td:first-child { - width: 5em; + width: 6em; + word-break: break-word; +} +#bootstrap-theme.api4-explorer-page .explorer-code-panel table td pre { + min-height: 3.3em; +} +#bootstrap-theme.api4-explorer-page .explorer-code-panel .panel-heading.nav li a { + text-transform: uppercase; } #bootstrap-theme.api4-explorer-page .explorer-params-panel > .panel-body > div.api4-input { @@ -49,6 +62,11 @@ word-break: break-word; } +/* because each help p is in a div, this undoes bootstrap removing margin from last-child */ +#bootstrap-theme.api4-explorer-page .explorer-help-panel .panel-body p { + margin-bottom: 10px; +} + #bootstrap-theme.api4-explorer-page form label { text-transform: capitalize; } @@ -90,15 +108,19 @@ background-color: rgba(255, 255, 255, .9); } -#bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control { +#bootstrap-theme.api4-explorer-page div.api4-input.form-inline label.form-control { margin-right: 6px; } +#bootstrap-theme.api4-explorer-page div.api4-input.form-inline label.form-control input[type=checkbox] { + margin: 0 2px 0 0; +} -#bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control:not(.api4-option-selected) { +#bootstrap-theme.api4-explorer-page div.api4-input.form-inline label.form-control:not(.api4-option-selected) { transition: none; box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; + font-weight: normal; } #bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control label { @@ -146,12 +168,11 @@ #bootstrap-theme.api4-explorer-page .api4-operator, #bootstrap-theme.api4-explorer-page .api4-chain-index, -#bootstrap-theme.api4-explorer-page .api4-index, #bootstrap-theme.api4-explorer-page .api4-chain-action { width: 90px; } #bootstrap-theme.api4-explorer-page .api4-chain-params { - width: calc(100% - 386px); + width: calc(100% - 390px); } #bootstrap-theme.api4-explorer-page .api4-add-where-group-menu { diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index 41bbaf7faa199c18d0cd4dcc4033f009339af80f..8d8446b34694f4778e40639a9758503218a43e2d 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -2873,6 +2873,10 @@ tbody.scrollContent tr.alternateRow { color: #3e3e3e; } +.crm-container a.crm-icon-picker-button .ui-button-icon { + margin: 5px 0 5px 5px; +} + .crm-container a.crm-icon-picker-button .ui-button-text { color: #9f9f9f; } diff --git a/civicrm/ext/iatspayments/iats.php b/civicrm/ext/iatspayments/iats.php index 9cedcdb18d2ca2527931df458ecc11ac04d49f2a..e7977202516b309132c4c9b9847fede32e4498e9 100644 --- a/civicrm/ext/iatspayments/iats.php +++ b/civicrm/ext/iatspayments/iats.php @@ -356,7 +356,7 @@ function iats_civicrm_buildForm_CRM_Financial_Form_Payment(&$form) { // Uses javascript to hide/reset unless they have recurring contributions checked. $settings = Civi::settings()->get('iats_settings'); if (!empty($settings['enable_public_future_recurring_start']) - && $form->_paymentObject->supportsFutureRecurStartDate() + && $form->_paymentObject->supports('FutureRecurStartDate') ) { $allow_days = empty($settings['days']) ? array('-1') : $settings['days']; $start_dates = CRM_Iats_Transaction::get_future_monthly_start_dates(time(), $allow_days); diff --git a/civicrm/ext/iatspayments/info.xml b/civicrm/ext/iatspayments/info.xml index ca30065b582d18a82612fd6e64db6beed7be54a4..6b340eb01cbeddaf1ecae4285e0e9d0e7aa1b7a8 100644 --- a/civicrm/ext/iatspayments/info.xml +++ b/civicrm/ext/iatspayments/info.xml @@ -9,7 +9,7 @@ <url desc="Support">https://github.com/iATSPayments/com.iatspayments.civicrm/issues?state=open</url> <url desc="Installation Instructions">https://github.com/iATSPayments/com.iatspayments.civicrm</url> <url desc="Documentation">https://github.com/iATSPayments/com.iatspayments.civicrm</url> - <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.1.md</url> + <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.2.md</url> <url desc="Getting Started">https://www.semper-it.com/civicamp-iats-payments-slides</url> </urls> <license>AGPL-3.0</license> @@ -17,8 +17,8 @@ <author>Alan Dixon</author> <email>iats@blackflysolutions.ca</email> </maintainer> - <releaseDate>2020-02-05</releaseDate> - <version>1.7.1</version> + <releaseDate>2020-02-27</releaseDate> + <version>1.7.2</version> <develStage>stable</develStage> <compatibility> <ver>5.13</ver> diff --git a/civicrm/ext/iatspayments/release-notes/1.7.2.md b/civicrm/ext/iatspayments/release-notes/1.7.2.md new file mode 100644 index 0000000000000000000000000000000000000000..25419315d02255408b4c09883729baab336700e7 --- /dev/null +++ b/civicrm/ext/iatspayments/release-notes/1.7.2.md @@ -0,0 +1,9 @@ +# iATS CiviCRM Extension 1.7.2 + +Feb 27, 2020 + +This release is a minor maintenance release for the 1.7 series. +It is recommended for all CiviCRM installs on 5.x and above. + +It: +1. Fixes the issue 298 that causes errors on donation pages that have multiple processors. https://github.com/iATSPayments/com.iatspayments.civicrm/issues/298 diff --git a/civicrm/extension-compatibility.json b/civicrm/extension-compatibility.json index 60be47658496c0c2d44538b80fa421195776bf5f..b7b4031ae3cf7df6b7791bae2d0f271a72034208 100644 --- a/civicrm/extension-compatibility.json +++ b/civicrm/extension-compatibility.json @@ -1,4 +1,9 @@ { + "org.civicrm.exportui": { + "obsolete": "5.23", + "disable": true, + "uninstall": true + }, "org.civicrm.api4": { "obsolete": "5.19", "force-uninstall": true diff --git a/civicrm/i/check.gif b/civicrm/i/check.gif index a9925a06ab02db30c1e7ead9c701c15bc63145cb..7e21249cb8bc055f172ea2eaace1d29e9fcf2650 100644 Binary files a/civicrm/i/check.gif and b/civicrm/i/check.gif differ diff --git a/civicrm/js/jquery/jquery.crmEditable.js b/civicrm/js/jquery/jquery.crmEditable.js index ca1a08e24845a26c1ec129c0175bba0aed50d7ce..b68b27f0a24012a04ecf7d34a41526bfe4b31902 100644 --- a/civicrm/js/jquery/jquery.crmEditable.js +++ b/civicrm/js/jquery/jquery.crmEditable.js @@ -168,7 +168,7 @@ }); } - CRM.loadScript(CRM.config.resourceBase + 'packages/jquery/plugins/jquery.jeditable.min.js').done(function() { + CRM.loadScript(CRM.config.packagesBase + 'jquery/plugins/jquery.jeditable.min.js').done(function() { $i.editable(callback, settings); }); diff --git a/civicrm/js/jquery/jquery.crmIconPicker.js b/civicrm/js/jquery/jquery.crmIconPicker.js index 5dea481a856b629f7e5f26be682cd590fd0c1ece..19f50f6b226505d3e9105cdf8a922820511a02e6 100644 --- a/civicrm/js/jquery/jquery.crmIconPicker.js +++ b/civicrm/js/jquery/jquery.crmIconPicker.js @@ -71,7 +71,7 @@ $.each(icons, function(i, icon) { if (!term.length || icon.replace(/-/g, '').indexOf(term) > -1) { var item = $('<a href="#" title="' + icon + '"/>').button({ - icons: {primary: icon} + icons: {primary: icon + ' ' + $style.val()} }); $place.append(item); } @@ -81,20 +81,34 @@ function displayDialog() { dialog.append('<style type="text/css">' + '#crmIconPicker {font-size: 20px;}' + - '#crmIconPicker .icon-search input {font-family: FontAwesome; padding-left: .5em; margin-bottom: 1em;}' + + '#crmIconPicker .icon-ctrls input {font-family: FontAwesome; padding-left: .5em; margin-bottom: 1em;}' + + '#crmIconPicker .icon-ctrls > * {display: inline-block; vertical-align: top; margin-right: 1em;}' + + '#crmIconPicker .icon-ctrls > button {float: right; margin-right: 0;}' + '#crmIconPicker a.ui-button {width: 1em; height: 1em; color: #222;}' + '#crmIconPicker a.ui-button .ui-icon {margin-top: -0.5em; width: auto; height: auto;}' + '</style>' + - '<div class="icon-search"><input class="crm-form-text" name="search" placeholder=""/></div>' + + '<div class="icon-ctrls crm-clearfix">' + + '<input class="crm-form-text" name="search" placeholder=""/>' + + '<select class="crm-form-select"></select>' + + '<button type="button" class="cancel" title=""><i class="crm-i fa-ban"></i> ' + ts('No icon') + '</button>' + + '</div>' + '<div class="icons"></div>' ); + var $styleSelect = $('.icon-ctrls select', dialog); + CRM.utils.setOptions($styleSelect, options, ts('Normal')); + $styleSelect.val($style.val()); + $styleSelect.change(function() { + $style.val($styleSelect.val()); + displayIcons(); + }); + $('.icon-ctrls button', dialog).click(pickIcon); displayIcons(); dialog.unblock(); } function pickIcon(e) { var newIcon = $(this).attr('title'), - style = $style.val(); + style = newIcon ? $style.val() : ''; $input.val(newIcon + (style ? ' ' + style : '')).change(); dialog.dialog('close'); e.preventDefault(); @@ -103,7 +117,7 @@ dialog = $('<div id="crmIconPicker"/>').dialog({ title: $input.attr('title'), width: '80%', - height: 400, + height: '90%', modal: true }).block() .on('click', 'a', pickIcon) diff --git a/civicrm/js/view/crm.designer.js b/civicrm/js/view/crm.designer.js index 3db0eb0ca1fd8bd0224cc7ef2ed5116d18ee9535..9d43b92bf06322c2066a6626cd5a454842d8779a 100644 --- a/civicrm/js/view/crm.designer.js +++ b/civicrm/js/view/crm.designer.js @@ -370,7 +370,7 @@ "theme": 'classic', "dots": false, "icons": false, - "url": CRM.config.resourceBase + 'packages/jquery/plugins/jstree/themes/classic/style.css' + "url": CRM.config.packagesBase + 'jquery/plugins/jstree/themes/classic/style.css' }, 'plugins': ['themes', 'json_data', 'ui', 'search'] }).bind('loaded.jstree', function () { diff --git a/civicrm/js/wysiwyg/crm.ckeditor.js b/civicrm/js/wysiwyg/crm.ckeditor.js index 64d4a116f35437fdf83e3eed5484e590392f0e61..59bf880df9f63f7eca131e784606be8592be83bb 100644 --- a/civicrm/js/wysiwyg/crm.ckeditor.js +++ b/civicrm/js/wysiwyg/crm.ckeditor.js @@ -54,8 +54,8 @@ function initialize() { var - browseUrl = CRM.config.resourceBase + "packages/kcfinder/browse.php?cms=civicrm", - uploadUrl = CRM.config.resourceBase + "packages/kcfinder/upload.php?cms=civicrm&format=json", + browseUrl = CRM.config.packagesBase + "kcfinder/browse.php?cms=civicrm", + uploadUrl = CRM.config.packagesBase + "kcfinder/upload.php?cms=civicrm&format=json", preset = $(item).data('preset') || 'default', // This variable is always an array but a legacy extension could be setting it as a string. customConfig = (typeof CRM.config.CKEditorCustomConfig === 'string') ? CRM.config.CKEditorCustomConfig : diff --git a/civicrm/packages/DB.php b/civicrm/packages/DB.php index 90f9d63622ad208bb1518235820c265479f224ac..0612a1397d6afdac14f7e00cd31e1e28d75d24ca 100644 --- a/civicrm/packages/DB.php +++ b/civicrm/packages/DB.php @@ -5,7 +5,7 @@ /** * Database independent query interface * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: DB.php,v 1.88 2007/08/12 05:27:25 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -49,9 +49,7 @@ define('DB_OK', 1); /** * Unkown error */ -if (!defined('DB_ERROR')) { - define('DB_ERROR', -1); -} +define('DB_ERROR', -1); /** * Syntax error @@ -442,12 +440,12 @@ define('DB_PORTABILITY_ALL', 63); * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB { - // {{{ &factory() + // {{{ factory() /** * Create a new DB object for the specified database type but don't @@ -460,7 +458,7 @@ class DB * * @see DB_common::setOption() */ - function &factory($type, $options = false) + public static function factory($type, $options = false) { if (!is_array($options)) { $options = array('persistent' => $options); @@ -496,7 +494,7 @@ class DB } // }}} - // {{{ &connect() + // {{{ connect() /** * Create a new DB object including a connection to the specified database @@ -531,7 +529,7 @@ class DB * * @uses DB::parseDSN(), DB_common::setOption(), PEAR::isError() */ - static function &connect($dsn, $options = array()) + public static function connect($dsn, $options = array()) { $dsninfo = DB::parseDSN($dsn); $type = $dsninfo['phptype']; @@ -548,15 +546,15 @@ class DB // expose php errors with sufficient debug level include_once "DB/${type}.php"; } else { - include_once "DB/${type}.php"; + @include_once "DB/${type}.php"; } $classname = "DB_${type}"; if (!class_exists($classname)) { - $obj = new PEAR; - $tmp = $obj->raiseError(null, DB_ERROR_NOT_FOUND, null, null, + $tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null, "Unable to include the DB/{$type}.php" - . " file for '$dsn'", + . " file for '" + . DB::getDSNString($dsn, true) . "'", 'DB_Error', true); return $tmp; } @@ -593,7 +591,7 @@ class DB */ function apiVersion() { - return '1.7.13'; + return '1.9.3'; } // }}} @@ -606,9 +604,9 @@ class DB * * @return bool whether $value is DB_Error object */ - static function isError($value) + public static function isError($value) { - return is_a($value, 'DB_Error'); + return is_object($value) && is_a($value, 'DB_Error'); } // }}} @@ -621,7 +619,7 @@ class DB * * @return bool whether $value is a DB_<driver> object */ - function isConnection($value) + public static function isConnection($value) { return (is_object($value) && is_subclass_of($value, 'db_common') && @@ -642,15 +640,16 @@ class DB * * @return boolean whether $query is a data manipulation query */ - static function isManip($query) + public static function isManip($query) { $manips = 'INSERT|UPDATE|DELETE|REPLACE|' . 'CREATE|DROP|' . 'LOAD DATA|SELECT .* INTO .* FROM|COPY|' . 'ALTER|GRANT|REVOKE|' + // CRM_Core_Transaction Tests fail without the following line. . 'SAVEPOINT|ROLLBACK|' . 'LOCK|UNLOCK'; - // First strip any leading comments. + // First strip any leading comments $queryString = (substr($query, 0, 2) === '/*') ? substr($query, strpos($query, '*/') + 2) : $query; if (preg_match('/^\s*"?(' . $manips . ')\s+/i', $queryString)) { return true; @@ -669,7 +668,7 @@ class DB * @return string the error message or false if the error code was * not recognized */ - static function errorMessage($value) + public static function errorMessage($value) { static $errorMessages; if (!isset($errorMessages)) { @@ -753,8 +752,9 @@ class DB * + username: User name for login * + password: Password for login */ - static function parseDSN($dsn) + public static function parseDSN($dsn) { + if (defined('DB_DSN_MODE') && DB_DSN_MODE === 'auto') { if (extension_loaded('mysqli')) { $dsn = preg_replace('/^mysql:/', 'mysqli:', $dsn); @@ -891,7 +891,7 @@ class DB * @param boolean true to hide the password, false to include it * @return string */ - function getDSNString($dsn, $hidePassword) { + public static function getDSNString($dsn, $hidePassword) { /* Calling parseDSN will ensure that we have all the array elements * defined, and means that we deal with strings and array in the same * manner. */ @@ -972,7 +972,7 @@ class DB * @author Stig Bakken <ssb@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_Error extends PEAR_Error @@ -1002,6 +1002,20 @@ class DB_Error extends PEAR_Error } } + /** + * Workaround to both avoid the "Redefining already defined constructor" + * PHP error and provide backward compatibility in case someone is calling + * DB_Error() dynamically + */ + public function __call($method, $arguments) + { + if ($method == 'DB_Error') { + return call_user_func_array(array($this, '__construct'), $arguments); + } + trigger_error( + 'Call to undefined method DB_Error::' . $method . '()', E_USER_ERROR + ); + } // }}} } @@ -1019,7 +1033,7 @@ class DB_Error extends PEAR_Error * @author Stig Bakken <ssb@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_result @@ -1416,9 +1430,12 @@ class DB_result function free() { $err = $this->dbh->freeResult($this->result); + if (DB::isError($err)) { + return $err; + } $this->result = false; $this->statement = false; - return $err; + return true; } // }}} @@ -1481,7 +1498,7 @@ class DB_result * @author Stig Bakken <ssb@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB * @see DB_common::setFetchMode() */ diff --git a/civicrm/packages/DB/DataObject.php b/civicrm/packages/DB/DataObject.php index 87edfbfbebe146c81cffe20aa725dd0033945112..c2b94098da2447659e102aa810db0fae1247fbe7 100644 --- a/civicrm/packages/DB/DataObject.php +++ b/civicrm/packages/DB/DataObject.php @@ -15,7 +15,7 @@ * @author Alan Knowles <alan@akbkhome.com> * @copyright 1997-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 - * @version CVS: $Id: DataObject.php 284150 2009-07-15 23:27:59Z alan_k $ + * @version CVS: $Id: DataObject.php 336751 2015-05-12 04:39:50Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ @@ -176,6 +176,10 @@ $GLOBALS['_DB_DATAOBJECT']['QUERYENDTIME'] = 0; // this will be horrifically slow!!!! +// these two are BC/FC handlers for call in PHP4/5 + + +if (!defined('DB_DATAOBJECT_NO_OVERLOAD')) { class DB_DataObject_Overload { @@ -190,6 +194,14 @@ $GLOBALS['_DB_DATAOBJECT']['QUERYENDTIME'] = 0; return array_keys(get_object_vars($this)) ; } } +} else { + class DB_DataObject_Overload {} +} + + + + + /* @@ -207,7 +219,7 @@ class DB_DataObject extends DB_DataObject_Overload * @access private * @var string */ - var $_DB_DataObject_version = "1.8.12"; + var $_DB_DataObject_version = "1.11.3"; /** * The Database table (used by table extends) @@ -262,7 +274,7 @@ class DB_DataObject extends DB_DataObject_Overload $v = $k; $keys = $this->keys(); if (!$keys) { - $this->raiseError("No Keys available for {$this->__table}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); + $this->raiseError("No Keys available for {$this->tableName()}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } $k = $keys[0]; @@ -280,66 +292,86 @@ class DB_DataObject extends DB_DataObject_Overload } /** - * An autoloading, caching static get method using key, value (based on get) + * Get the value of the primary id * - * Usage: - * $object = DB_DataObject::staticGet("DbTable_mytable",12); - * or - * $object = DB_DataObject::staticGet("DbTable_mytable","name","fred"); + * While I normally use 'id' as the PRIMARY KEY value, some database use + * {table}_id as the column name. * - * or write it into your extended class: - * function &staticGet($k,$v=NULL) { return DB_DataObject::staticGet("This_Class",$k,$v); } + * To save a bit of typing, * - * @param string $class class name - * @param string $k column (or value if using keys) - * @param string $v value (optional) - * @access public - * @return object + * $id = $do->pid(); + * + * @return the id */ - function &staticGet($class, $k, $v = null) + function pid() { - $lclass = strtolower($class); - global $_DB_DATAOBJECT; - if (empty($_DB_DATAOBJECT['CONFIG'])) { - DB_DataObject::_loadConfig(); + $keys = $this->keys(); + if (!$keys) { + $this->raiseError("No Keys available for {$this->tableName()}", + DB_DATAOBJECT_ERROR_INVALIDCONFIG); + return false; + } + $k = $keys[0]; + if (empty($this->$k)) { // we do not + $this->raiseError("pid() called on Object where primary key value not available", + DB_DATAOBJECT_ERROR_NODATA); + return false; } + return $this->$k; + } - $key = "$k:$v"; - if ($v === null) { - $key = $k; - } - if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - DB_DataObject::debug("$class $key","STATIC GET - TRY CACHE"); - } - if (!empty($_DB_DATAOBJECT['CACHE'][$lclass][$key])) { - return $_DB_DATAOBJECT['CACHE'][$lclass][$key]; - } - if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - DB_DataObject::debug("$class $key","STATIC GET - NOT IN CACHE"); - } + /** + * build the basic select query. + * + * @access private + */ - $obj = DB_DataObject::factory(substr($class,strlen($_DB_DATAOBJECT['CONFIG']['class_prefix']))); - if (PEAR::isError($obj)) { - DB_DataObject::raiseError("could not autoload $class", DB_DATAOBJECT_ERROR_NOCLASS); - $r = false; - return $r; + function _build_select() + { + global $_DB_DATAOBJECT; + $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); + if ($quoteIdentifiers) { + $this->_connect(); + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; } + $tn = ($quoteIdentifiers ? $DB->quoteIdentifier($this->tableName()) : $this->tableName()) ; + if (!empty($this->_query['derive_table']) && !empty($this->_query['derive_select']) ) { + + // this is a derived select.. + // not much support in the api yet.. + + $sql = 'SELECT ' . + $this->_query['derive_select'] + .' FROM ( SELECT'. + $this->_query['data_select'] . " \n" . + " FROM $tn " . $this->_query['useindex'] . " \n" . + $this->_join . " \n" . + $this->_query['condition'] . " \n" . + $this->_query['group_by'] . " \n" . + $this->_query['having'] . " \n" . + ') ' . $this->_query['derive_table']; + + return $sql; - if (!isset($_DB_DATAOBJECT['CACHE'][$lclass])) { - $_DB_DATAOBJECT['CACHE'][$lclass] = array(); - } - if (!$obj->get($k,$v)) { - DB_DataObject::raiseError("No Data return from get $k $v", DB_DATAOBJECT_ERROR_NODATA); - $r = false; - return $r; } - $_DB_DATAOBJECT['CACHE'][$lclass][$key] = $obj; - return $_DB_DATAOBJECT['CACHE'][$lclass][$key]; + + + + $sql = 'SELECT ' . + $this->_query['data_select'] . " \n" . + " FROM $tn " . $this->_query['useindex'] . " \n" . + $this->_join . " \n" . + $this->_query['condition'] . " \n" . + $this->_query['group_by'] . " \n" . + $this->_query['having'] . " \n"; + + return $sql; } + /** * find results, either normal or crosstable * @@ -353,6 +385,10 @@ class DB_DataObject extends DB_DataObject_Overload * will set $object->N to number of rows, and expects next command to fetch rows * will return $object->N * + * if an error occurs $object->N will be set to false and return value will also be false; + * if numRows is not supported it will + * + * * @param boolean $n Fetch first result * @access public * @return mixed (number of rows returned, or true if numRows fetching is not supported) @@ -374,7 +410,7 @@ class DB_DataObject extends DB_DataObject_Overload if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug($n, "find",1); } - if (!$this->__table) { + if (!strlen($this->tableName())) { // xdebug can backtrace this! trigger_error("NO \$__table SPECIFIED in class definition",E_USER_ERROR); } @@ -382,20 +418,21 @@ class DB_DataObject extends DB_DataObject_Overload $query_before = $this->_query; $this->_build_condition($this->table()) ; - $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); + $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; - /* We are checking for method modifyLimitQuery as it is PEAR DB specific */ - $sql = 'SELECT ' . - $this->_query['data_select'] . " \n" . - ' FROM ' . ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table) . " \n" . - $this->_join . " \n" . - $this->_query['condition'] . " \n" . - $this->_query['group_by'] . " \n" . - $this->_query['having'] . " \n" . - $this->_query['order_by'] . " \n"; + $sql = $this->_build_select(); + + foreach ($this->_query['unions'] as $union_ar) { + $sql .= $union_ar[1] . $union_ar[0]->_build_select() . " \n"; + } + + $sql .= $this->_query['order_by'] . " \n"; + + + /* We are checking for method modifyLimitQuery as it is PEAR DB specific */ if ((!isset($_DB_DATAOBJECT['CONFIG']['db_driver'])) || ($_DB_DATAOBJECT['CONFIG']['db_driver'] == 'DB')) { /* PEAR DB specific */ @@ -406,11 +443,15 @@ class DB_DataObject extends DB_DataObject_Overload } else { /* theoretically MDB2! */ if (isset($this->_query['limit_start']) && strlen($this->_query['limit_start'] . $this->_query['limit_count'])) { - $DB->setLimit($this->_query['limit_count'],$this->_query['limit_start']); - } + $DB->setLimit($this->_query['limit_count'],$this->_query['limit_start']); + } } - $this->_query($sql); + + $err = $this->_query($sql); + if (is_a($err,'PEAR_Error')) { + return false; + } if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("CHECK autofetchd $n", "find", 1); @@ -482,7 +523,7 @@ class DB_DataObject extends DB_DataObject_Overload } if (empty($_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid]) || - !is_object($result = &$_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid])) + !is_object($result = $_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid])) { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug('fetched on object after fetch completed (no results found)'); @@ -527,7 +568,6 @@ class DB_DataObject extends DB_DataObject_Overload // note: we dont declare this to keep the print_r size down. $_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid]= array_flip(array_keys($array)); } - $keys = str_replace(array("."," "), "_", array_keys($array)); $i = 0; foreach($array as $val) { @@ -541,7 +581,7 @@ class DB_DataObject extends DB_DataObject_Overload // set link flag $this->_link_loaded=false; if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("{$this->__table} DONE", "fetchrow",2); + $this->debug("{$this->tableName()} DONE", "fetchrow",2); } if (($this->_query !== false) && empty($_DB_DATAOBJECT['CONFIG']['keep_query_after_fetch'])) { $this->_query = false; @@ -549,6 +589,84 @@ class DB_DataObject extends DB_DataObject_Overload return true; } + + /** + * fetches all results as an array, + * + * return format is dependant on args. + * if selectAdd() has not been called on the object, then it will add the correct columns to the query. + * + * A) Array of values (eg. a list of 'id') + * + * $x = DB_DataObject::factory('mytable'); + * $x->whereAdd('something = 1') + * $ar = $x->fetchAll('id'); + * -- returns array(1,2,3,4,5) + * + * B) Array of values (not from table) + * + * $x = DB_DataObject::factory('mytable'); + * $x->whereAdd('something = 1'); + * $x->selectAdd(); + * $x->selectAdd('distinct(group_id) as group_id'); + * $ar = $x->fetchAll('group_id'); + * -- returns array(1,2,3,4,5) + * * + * C) A key=>value associative array + * + * $x = DB_DataObject::factory('mytable'); + * $x->whereAdd('something = 1') + * $ar = $x->fetchAll('id','name'); + * -- returns array(1=>'fred',2=>'blogs',3=> ....... + * + * D) array of objects + * $x = DB_DataObject::factory('mytable'); + * $x->whereAdd('something = 1'); + * $ar = $x->fetchAll(); + * + * E) array of arrays (for example) + * $x = DB_DataObject::factory('mytable'); + * $x->whereAdd('something = 1'); + * $ar = $x->fetchAll(false,false,'toArray'); + * + * + * @param string|false $k key + * @param string|false $v value + * @param string|false $method method to call on each result to get array value (eg. 'toArray') + * @access public + * @return array format dependant on arguments, may be empty + */ + function fetchAll($k= false, $v = false, $method = false) + { + // should it even do this!!!?!? + if ($k !== false && + ( // only do this is we have not been explicit.. + empty($this->_query['data_select']) || + ($this->_query['data_select'] == '*') + ) + ) { + $this->selectAdd(); + $this->selectAdd($k); + if ($v !== false) { + $this->selectAdd($v); + } + } + + $this->find(); + $ret = array(); + while ($this->fetch()) { + if ($v !== false) { + $ret[$this->$k] = $this->$v; + continue; + } + $ret[] = $k === false ? + ($method == false ? clone($this) : $this->$method()) + : $this->$k; + } + return $ret; + + } + /** * Adds a condition to the WHERE statement, defaults to AND * @@ -573,8 +691,7 @@ class DB_DataObject extends DB_DataObject_Overload } if ($cond === false) { - $r = isset( $this->_query['condition'] ) ? - $this->_query['condition'] : null; + $r = isset($this->_query['condition']) ? $this->_query['condition'] : null; $_query['condition'] = ''; $this->_query = $_query; return preg_replace('/^\s+WHERE\s+/','',$r); @@ -594,6 +711,48 @@ class DB_DataObject extends DB_DataObject_Overload return $r; } + /** + * Adds a 'IN' condition to the WHERE statement + * + * $object->whereAddIn('id', $array, 'int'); //minimal usage + * $object->whereAddIn('price', $array, 'float', 'OR'); // cast to float, and call whereAdd with 'OR' + * $object->whereAddIn('name', $array, 'string'); // quote strings + * + * @param string $key key column to match + * @param array $list list of values to match + * @param string $type string|int|integer|float|bool cast to type. + * @param string $logic optional logic to call whereAdd with eg. "OR" (defaults to "AND") + * @access public + * @return string|PEAR::Error - previous condition or Error when invalid args found + */ + function whereAddIn($key, $list, $type, $logic = 'AND') + { + $not = ''; + if ($key[0] == '!') { + $not = 'NOT '; + $key = substr($key, 1); + } + // fix type for short entry. + $type = $type == 'int' ? 'integer' : $type; + + if ($type == 'string') { + $this->_connect(); + } + + $ar = array(); + foreach($list as $k) { + settype($k, $type); + $ar[] = $type == 'string' ? $this->_quote($k) : $k; + } + + if (!$ar) { + return $not ? $this->_query['condition'] : $this->whereAdd("1=0"); + } + return $this->whereAdd("$key $not IN (". implode(',', $ar). ')', $logic ); + } + + + /** * Adds a order by condition * @@ -633,10 +792,10 @@ class DB_DataObject extends DB_DataObject_Overload * Return affected rows for current connection. * Override the mysql affectedRows w/ db object. */ - function affectedRows( ) { + function affectedRows() { global $_DB_DATAOBJECT; - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; - return $DB->affectedRows( ); + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + return $DB->affectedRows(); } /** @@ -710,6 +869,43 @@ class DB_DataObject extends DB_DataObject_Overload $this->_query['having'] .= " AND {$having}"; } + /** + * Adds a using Index + * + * $object->useIndex(); //reset the use Index + * $object->useIndex("some_index"); + * + * Note do not put unfiltered user input into theis method. + * This is mysql specific at present? - might need altering to support other databases. + * + * @param string|array $index index or indexes to use. + * @access public + * @return none|PEAR::Error - invalid args only + */ + function useIndex($index = false) + { + if ($this->_query === false) { + $this->raiseError( + "You cannot do two queries on the same object (copy it before finding)", + DB_DATAOBJECT_ERROR_INVALIDARGS); + return false; + } + if ($index=== false) { + $this->_query['useindex'] = ''; + return; + } + // check input...= 0 or ' ' == error! + if ((is_string($index) && !trim($index)) || (is_array($index) && !count($index)) ) { + return $this->raiseError("Having: No Valid Arguments", DB_DATAOBJECT_ERROR_INVALIDARGS); + } + $index = is_array($index) ? implode(', ', $index) : $index; + + if (!$this->_query['useindex']) { + $this->_query['useindex'] = " USE INDEX ({$index}) "; + return; + } + $this->_query['useindex'] = substr($this->_query['useindex'],0, -2) . ", {$index}) "; + } /** * Sets the Limit * @@ -747,7 +943,7 @@ class DB_DataObject extends DB_DataObject_Overload } global $_DB_DATAOBJECT; $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $this->_query['limit_start'] = ($b == null) ? 0 : (int)$a; $this->_query['limit_count'] = ($b == null) ? (int)$a : (int)$b; @@ -778,8 +974,7 @@ class DB_DataObject extends DB_DataObject_Overload return false; } if ($k === null) { - $old = isset( $this->_query['data_select'] ) ? - $this->_query['data_select'] : null; + $old = isset($this->_query['data_select']) ? $this->_query['data_select'] : null; $this->_query['data_select'] = ''; return $old; } @@ -828,9 +1023,9 @@ class DB_DataObject extends DB_DataObject_Overload } - $table = $this->__table; + $table = $this->tableName(); if (is_object($from)) { - $table = $from->__table; + $table = $from->tableName(); $from = array_keys($from->table()); } @@ -840,7 +1035,7 @@ class DB_DataObject extends DB_DataObject_Overload $s = '%s'; if (!empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers'])) { $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $s = $DB->quoteIdentifier($s); $format = $DB->quoteIdentifier($format); } @@ -878,25 +1073,24 @@ class DB_DataObject extends DB_DataObject_Overload $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; - $items = isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table]) ? - $_DB_DATAOBJECT['INI'][$this->_database][$this->__table] : $this->table(); + $items = $this->table(); if (!$items) { - $this->raiseError("insert:No table definition for {$this->__table}", + $this->raiseError("insert:No table definition for {$this->tableName()}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } - $options = &$_DB_DATAOBJECT['CONFIG']; + $options = $_DB_DATAOBJECT['CONFIG']; $datasaved = 1; $leftq = ''; $rightq = ''; - $seqKeys = isset($_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table]) ? - $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] : + $seqKeys = isset($_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()]) ? + $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] : $this->sequenceKey(); $key = isset($seqKeys[0]) ? $seqKeys[0] : false; @@ -913,7 +1107,7 @@ class DB_DataObject extends DB_DataObject_Overload if (($key !== false) && !$useNative) { if (!$seq) { - $keyvalue = $DB->nextId($this->__table); + $keyvalue = $DB->nextId($this->tableName()); } else { $f = $DB->getOption('seqname_format'); $DB->setOption('seqname_format','%s'); @@ -927,6 +1121,10 @@ class DB_DataObject extends DB_DataObject_Overload $this->$key = $keyvalue; } + // if we haven't set disable_null_strings to "full" + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; foreach($items as $k => $v) { @@ -937,7 +1135,10 @@ class DB_DataObject extends DB_DataObject_Overload } - if (!isset($this->$k)) { + // Ignore INTEGERS which aren't set to a value - or empty string.. + if ( (!isset($this->$k) || ($v == 1 && $this->$k === '')) + && $ignore_null + ) { continue; } @@ -949,7 +1150,7 @@ class DB_DataObject extends DB_DataObject_Overload $leftq .= ($quoteIdentifiers ? ($DB->quoteIdentifier($k) . ' ') : "$k "); /*** - if (is_a($this->$k,'DB_DataObject_Cast')) { + if (is_object($this->$k) && is_a($this->$k,'DB_DataObject_Cast')) { $value = $this->$k->toString($v,$DB); if (PEAR::isError($value)) { $this->raiseError($value->toString() ,DB_DATAOBJECT_ERROR_INVALIDARGS); @@ -960,25 +1161,27 @@ class DB_DataObject extends DB_DataObject_Overload } **/ - - - if (!isset($options['disable_null_strings']) && is_string($this->$k) && (strtolower($this->$k) === 'null') && $this->$k !== 'Null' && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $rightq .= " NULL "; continue; } - if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || $v & DB_DATAOBJECT_MYSQLTIMESTAMP) { - if (strpos($this->$k, '-') !== FALSE) { - /* - * per CRM-14986 we have been having ongoing problems with the format returned from $dao->find(TRUE) NOT - * being acceptable for an immediate save. This has resulted in the codebase being smattered with - * instances of CRM_Utils_Date::isoToMysql for date fields retrieved in this way - * which seems both risky (have to remember to do it for every field) & cludgey. - * doing it here should be safe as only fields with a '-' in them will be affected - if they are - * already formatted or empty then this line will not be hit - */ - $this->$k = CRM_Utils_Date::isoToMysql($this->$k); + + // CRM-14986 starts + if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || $v & DB_DATAOBJECT_MYSQLTIMESTAMP) { + if (strpos($this->$k, '-') !== FALSE) { + /* + * per CRM-14986 we have been having ongoing problems with the format returned from $dao->find(TRUE) NOT + * being acceptable for an immediate save. This has resulted in the codebase being smattered with + * instances of CRM_Utils_Date::isoToMysql for date fields retrieved in this way + * which seems both risky (have to remember to do it for every field) & cludgey. + * doing it here should be safe as only fields with a '-' in them will be affected - if they are + * already formatted or empty then this line will not be hit + */ + $this->$k = CRM_Utils_Date::isoToMysql($this->$k); + } } - } + // CRM-14986 ends + // DATE is empty... on a col. that can be null.. // note: this may be usefull for time as well.. if (!$this->$k && @@ -1001,16 +1204,18 @@ class DB_DataObject extends DB_DataObject_Overload continue; } + // CiviCRM hack CRM-14476: Extend CaseType API to return/save XML + // https://issues.civicrm.org/jira/browse/CRM-14476 if ($v & DB_DATAOBJECT_TXT) { $rightq .= $this->_quote((string) $this->$k ) . ' '; continue; } - if ($v & DB_DATAOBJECT_BLOB) { - $rightq .= $this->_quote( $this->$k ) . ' '; - continue; - } - + if ($v & DB_DATAOBJECT_BLOB) { + $rightq .= $this->_quote( $this->$k ) . ' '; + continue; + } + // CRM-14476 hack ends if (is_numeric($this->$k)) { $rightq .=" {$this->$k} "; @@ -1031,7 +1236,7 @@ class DB_DataObject extends DB_DataObject_Overload if ($leftq || $useNative) { - $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table); + $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->tableName()) : $this->tableName()); if (($dbtype == 'pgsql') && empty($leftq)) { @@ -1083,7 +1288,7 @@ class DB_DataObject extends DB_DataObject_Overload case 'pgsql': if (!$seq) { - $seq = $DB->getSequenceName(strtolower($this->__table)); + $seq = $DB->getSequenceName(strtolower($this->tableName())); } $db_driver = empty($options['db_driver']) ? 'DB' : $options['db_driver']; $method = ($db_driver == 'DB') ? 'getOne' : 'queryOne'; @@ -1166,19 +1371,18 @@ class DB_DataObject extends DB_DataObject_Overload $original_query = $this->_query; - $items = isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table]) ? - $_DB_DATAOBJECT['INI'][$this->_database][$this->__table] : $this->table(); + $items = $this->table(); // only apply update against sequence key if it is set????? $seq = $this->sequenceKey(); if ($seq[0] !== false) { $keys = array($seq[0]); - if (empty($this->{$keys[0]}) && $dataObject !== true) { + if (!isset($this->{$keys[0]}) && $dataObject !== true) { $this->raiseError("update: trying to perform an update without the key set, and argument to update is not DB_DATAOBJECT_WHEREADD_ONLY - ", DB_DATAOBJECT_ERROR_INVALIDARGS); + ". print_r(array('seq' => $seq , 'keys'=>$keys), true), DB_DATAOBJECT_ERROR_INVALIDARGS); return false; } } else { @@ -1187,22 +1391,31 @@ class DB_DataObject extends DB_DataObject_Overload if (!$items) { - $this->raiseError("update:No table definition for {$this->__table}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); + $this->raiseError("update:No table definition for {$this->tableName()}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } $datasaved = 1; $settings = ''; $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $dbtype = $DB->dsn["phptype"]; $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); $options = $_DB_DATAOBJECT['CONFIG']; + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; + + foreach($items as $k => $v) { - if (!isset($this->$k)) { - continue; + + // I think this is ignoring empty vlalues + if ((!isset($this->$k) || ($v == 1 && $this->$k === '')) + && $ignore_null + ) { + continue; } // ignore stuff thats @@ -1223,7 +1436,7 @@ class DB_DataObject extends DB_DataObject_Overload $kSql = ($quoteIdentifiers ? $DB->quoteIdentifier($k) : $k); /*** - if (is_a($this->$k,'DB_DataObject_Cast')) { + if (is_object($this->$k) && is_a($this->$k,'DB_DataObject_Cast')) { $value = $this->$k->toString($v,$DB); if (PEAR::isError($value)) { $this->raiseError($value->getMessage() ,DB_DATAOBJECT_ERROR_INVALIDARG); @@ -1235,23 +1448,27 @@ class DB_DataObject extends DB_DataObject_Overload ***/ // special values ... at least null is handled... - if (!isset($options['disable_null_strings']) && is_string($this->$k) && (strtolower($this->$k) === 'null') && $this->$k !== 'Null' && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $settings .= "$kSql = NULL "; continue; } - if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || $v & DB_DATAOBJECT_MYSQLTIMESTAMP) { - if (strpos($this->$k, '-') !== FALSE) { - /* - * per CRM-14986 we have been having ongoing problems with the format returned from $dao->find(TRUE) NOT - * being acceptable for an immediate save. This has resulted in the codebase being smattered with - * instances of CRM_Utils_Date::isoToMysql for date fields retrieved in this way - * which seems both risky (have to remember to do it for every field) & cludgey. - * doing it here should be safe as only fields with a '-' in them will be affected - if they are - * already formatted or empty then this line will not be hit - */ - $this->$k = CRM_Utils_Date::isoToMysql($this->$k); + + // CRM-14986 starts + if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || $v & DB_DATAOBJECT_MYSQLTIMESTAMP) { + if (strpos($this->$k, '-') !== FALSE) { + /* + * per CRM-14986 we have been having ongoing problems with the format returned from $dao->find(TRUE) NOT + * being acceptable for an immediate save. This has resulted in the codebase being smattered with + * instances of CRM_Utils_Date::isoToMysql for date fields retrieved in this way + * which seems both risky (have to remember to do it for every field) & cludgey. + * doing it here should be safe as only fields with a '-' in them will be affected - if they are + * already formatted or empty then this line will not be hit + */ + $this->$k = CRM_Utils_Date::isoToMysql($this->$k); + } } - } + // CRM-14986 ends + // DATE is empty... on a col. that can be null.. // note: this may be usefull for time as well.. if (!$this->$k && @@ -1274,6 +1491,8 @@ class DB_DataObject extends DB_DataObject_Overload continue; } + // CiviCRM hack CRM-14476: Extend CaseType API to return/save XML + // https://issues.civicrm.org/jira/browse/CRM-14476 if ($v & DB_DATAOBJECT_TXT) { $settings .= "$kSql = " . $this->_quote((string) $this->$k ) . ' '; continue; @@ -1283,6 +1502,7 @@ class DB_DataObject extends DB_DataObject_Overload $settings .= "$kSql = " . $this->_quote($this->$k ) . ' '; continue; } + // CRM-14725 ends if (is_numeric($this->$k)) { $settings .= "$kSql = {$this->$k} "; @@ -1293,6 +1513,7 @@ class DB_DataObject extends DB_DataObject_Overload $settings .= "$kSql = " . intval($this->$k) . ' '; } + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("got keys as ".serialize($keys),3); } @@ -1313,7 +1534,7 @@ class DB_DataObject extends DB_DataObject_Overload // echo " $settings, $this->condition "; if ($settings && isset($this->_query) && $this->_query['condition']) { - $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table); + $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->tableName()) : $this->tableName()); $r = $this->_query("UPDATE {$table} SET {$settings} {$this->_query['condition']} "); @@ -1340,8 +1561,8 @@ class DB_DataObject extends DB_DataObject_Overload } // $this->raiseError( - // "update: No Data specifed for query $settings , {$this->_query['condition']}", - // DB_DATAOBJECT_ERROR_NODATA); + // "update: No Data specifed for query $settings , {$this->_query['condition']}", + // DB_DATAOBJECT_ERROR_NODATA); // return false; // we allow empty updates always [CiviCRM] return true; @@ -1378,7 +1599,7 @@ class DB_DataObject extends DB_DataObject_Overload global $_DB_DATAOBJECT; // connect will load the config! $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); $extra_cond = ' ' . (isset($this->_query['order_by']) ? $this->_query['order_by'] : ''); @@ -1400,7 +1621,7 @@ class DB_DataObject extends DB_DataObject_Overload // don't delete without a condition if (($this->_query !== false) && $this->_query['condition']) { - $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table); + $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->tableName()) : $this->tableName()); $sql = "DELETE "; // using a joined delete. - with useWhere.. $sql .= (!empty($this->_join) && $useWhere) ? @@ -1462,9 +1683,9 @@ class DB_DataObject extends DB_DataObject_Overload $this->_loadConfig(); } if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("{$this->__table} $row of {$this->N}", "fetchrow",3); + $this->debug("{$this->tableName()} $row of {$this->N}", "fetchrow",3); } - if (!$this->__table) { + if (!$this->tableName()) { $this->raiseError("fetchrow: No table", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } @@ -1477,17 +1698,16 @@ class DB_DataObject extends DB_DataObject_Overload return false; } if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("{$this->__table} $row of {$this->N}", "fetchrow",3); + $this->debug("{$this->tableName()} $row of {$this->N}", "fetchrow",3); } - $result = &$_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid]; + $result = $_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid]; $array = $result->fetchrow(DB_DATAOBJECT_FETCHMODE_ASSOC,$row); if (!is_array($array)) { $this->raiseError("fetchrow: No results available", DB_DATAOBJECT_ERROR_NODATA); return false; } - $keys = str_replace(array("."," "), "_", array_keys($array)); $i = 0; foreach($array as $val) { @@ -1499,7 +1719,7 @@ class DB_DataObject extends DB_DataObject_Overload } if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("{$this->__table} DONE", "fetchrow", 3); + $this->debug("{$this->tableName()} DONE", "fetchrow", 3); } return true; } @@ -1553,7 +1773,7 @@ class DB_DataObject extends DB_DataObject_Overload return false; } $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; if (!$whereAddOnly && $items) { @@ -1568,7 +1788,7 @@ class DB_DataObject extends DB_DataObject_Overload return false; } - $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->__table) : $this->__table); + $table = ($quoteIdentifiers ? $DB->quoteIdentifier($this->tableName()) : $this->tableName()); $key_col = empty($keys[0]) ? '' : (($quoteIdentifiers ? $DB->quoteIdentifier($keys[0]) : $keys[0])); $as = ($quoteIdentifiers ? $DB->quoteIdentifier('DATAOBJECT_NUM') : 'DATAOBJECT_NUM'); @@ -1585,11 +1805,13 @@ class DB_DataObject extends DB_DataObject_Overload return false; } - $result = &$_DB_DATAOBJECT['RESULTS'][$t->_DB_resultid]; + $result = $_DB_DATAOBJECT['RESULTS'][$t->_DB_resultid]; $l = $result->fetchRow(DB_DATAOBJECT_FETCHMODE_ORDERED); // free the results - essential on oracle. $t->free(); - + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { + $this->debug('Count returned '. $l[0] ,1); + } return (int) $l[0]; } @@ -1623,7 +1845,7 @@ class DB_DataObject extends DB_DataObject_Overload { global $_DB_DATAOBJECT; $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; // mdb2 uses escape... $dd = empty($_DB_DATAOBJECT['CONFIG']['db_driver']) ? 'DB' : $_DB_DATAOBJECT['CONFIG']['db_driver']; $ret = ($dd == 'DB') ? $DB->escapeSimple($string) : $DB->escape($string); @@ -1682,9 +1904,13 @@ class DB_DataObject extends DB_DataObject_Overload 'group_by' => '', // the GROUP BY condition 'order_by' => '', // the ORDER BY condition 'having' => '', // the HAVING condition + 'useindex' => '', // the USE INDEX condition 'limit_start' => '', // the LIMIT condition 'limit_count' => '', // the LIMIT condition 'data_select' => '*', // the columns to be SELECTed + 'unions' => array(), // the added unions, + 'derive_table' => '', // derived table name (BETA) + 'derive_select' => '', // derived table select (BETA) ); @@ -1753,7 +1979,7 @@ class DB_DataObject extends DB_DataObject_Overload $x = new DB_DataObject; $x->_database = $args[0]; $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $tables = $DB->getListOf('tables'); class_exists('DB_DataObject_Generator') ? '' : @@ -1784,32 +2010,41 @@ class DB_DataObject extends DB_DataObject_Overload $this->_connect(); } - // loaded already? - if (!empty($_DB_DATAOBJECT['INI'][$this->_database])) { - // database loaded - but this is table is not available.. - if ( - empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table]) - && !empty($_DB_DATAOBJECT['CONFIG']['proxy']) - ) { - if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("Loading Generator to fetch Schema",1); - } - class_exists('DB_DataObject_Generator') ? '' : - require_once 'DB/DataObject/Generator.php'; - - - $x = new DB_DataObject_Generator; - $x->fillTableSchema($this->_database,$this->__table); - } + // if this table is already loaded this table.. + if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])) { return true; } + // initialize the ini data.. if empt.. + if (empty($_DB_DATAOBJECT['INI'][$this->_database])) { + $_DB_DATAOBJECT['INI'][$this->_database] = array(); + } if (empty($_DB_DATAOBJECT['CONFIG'])) { DB_DataObject::_loadConfig(); } + // we do not have the data for this table yet... + + // if we are configured to use the proxy.. + + if ( !empty($_DB_DATAOBJECT['CONFIG']['proxy']) ) { + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { + $this->debug("Loading Generator to fetch Schema",1); + } + class_exists('DB_DataObject_Generator') ? '' : + require_once 'DB/DataObject/Generator.php'; + + + $x = new DB_DataObject_Generator; + $x->fillTableSchema($this->_database,$this->tableName()); + return true; + } + + + + // if you supply this with arguments, then it will take those // as the database and links array... @@ -1824,10 +2059,15 @@ class DB_DataObject extends DB_DataObject_Overload } - + $_DB_DATAOBJECT['INI'][$this->_database] = array(); foreach ($schemas as $ini) { if (file_exists($ini) && is_file($ini)) { - $_DB_DATAOBJECT['INI'][$this->_database] = parse_ini_file($ini, true); + + $_DB_DATAOBJECT['INI'][$this->_database] = array_merge( + $_DB_DATAOBJECT['INI'][$this->_database], + parse_ini_file($ini, true) + ); + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { if (!is_readable ($ini)) { $this->debug("ini file is not readable: $ini","databaseStructure",1); @@ -1842,9 +2082,18 @@ class DB_DataObject extends DB_DataObject_Overload } } + // are table name lowecased.. + if (!empty($_DB_DATAOBJECT['CONFIG']['portability']) && $_DB_DATAOBJECT['CONFIG']['portability'] & 1) { + foreach($_DB_DATAOBJECT['INI'][$this->_database] as $k=>$v) { + // results in duplicate cols.. but not a big issue.. + $_DB_DATAOBJECT['INI'][$this->_database][strtolower($k)] = $v; + } + } + + // now have we loaded the structure.. - if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { + if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])) { return true; } // - if not try building it.. @@ -1853,11 +2102,11 @@ class DB_DataObject extends DB_DataObject_Overload require_once 'DB/DataObject/Generator.php'; $x = new DB_DataObject_Generator; - $x->fillTableSchema($this->_database,$this->__table); + $x->fillTableSchema($this->_database,$this->tableName()); // should this fail!!!??? return true; } - $this->debug("Cant find database schema: {$this->_database}/{$this->__table} \n". + $this->debug("Cant find database schema: {$this->_database}/{$this->tableName()} \n". "in links file data: " . print_r($_DB_DATAOBJECT['INI'],true),"databaseStructure",5); // we have to die here!! - it causes chaos if we dont (including looping forever!) $this->raiseError( "Unable to load schema for database and table (turn debugging up to 5 for full error message)", DB_DATAOBJECT_ERROR_INVALIDARGS, PEAR_ERROR_DIE); @@ -1879,10 +2128,17 @@ class DB_DataObject extends DB_DataObject_Overload */ function tableName() { + global $_DB_DATAOBJECT; $args = func_get_args(); if (count($args)) { $this->__table = $args[0]; } + if (empty($this->__table)) { + return ''; + } + if (!empty($_DB_DATAOBJECT['CONFIG']['portability']) && $_DB_DATAOBJECT['CONFIG']['portability'] & 1) { + return strtolower($this->__table); + } return $this->__table; } @@ -1898,7 +2154,10 @@ class DB_DataObject extends DB_DataObject_Overload $args = func_get_args(); if (count($args)) { $this->_database = $args[0]; + } else { + $this->_connect(); } + return $this->_database; } @@ -1928,16 +2187,16 @@ class DB_DataObject extends DB_DataObject_Overload $this->_connect(); } - if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { - return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table]; + if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])) { + return $_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()]; } $this->databaseStructure(); $ret = array(); - if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) { - $ret = $_DB_DATAOBJECT['INI'][$this->_database][$this->__table]; + if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])) { + $ret = $_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()]; } return $ret; @@ -1952,7 +2211,7 @@ class DB_DataObject extends DB_DataObject_Overload * or you do not want to use ini tables, you can override this. * @param string optional set the key * @param * optional set more keys - * @access private + * @access public * @return array */ function keys() @@ -1971,13 +2230,13 @@ class DB_DataObject extends DB_DataObject_Overload if (!isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) { $this->_connect(); } - if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) { - return array_keys($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]); + if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"])) { + return array_keys($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"]); } $this->databaseStructure(); - if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) { - return array_keys($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]); + if (isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"])) { + return array_keys($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"]); } return array(); } @@ -1992,7 +2251,7 @@ class DB_DataObject extends DB_DataObject_Overload * @param string optional the key sequence/autoinc. key * @param boolean optional use native increment. default false * @param false|string optional native sequence name - * @access private + * @access public * @return array (column,use_native,sequence_name) */ function sequenceKey() @@ -2013,10 +2272,10 @@ class DB_DataObject extends DB_DataObject_Overload if (count($args)) { $args[1] = isset($args[1]) ? $args[1] : false; $args[2] = isset($args[2]) ? $args[2] : false; - $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = $args; + $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = $args; } - if (isset($_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table])) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table]; + if (isset($_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()])) { + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()]; } // end call setting (eg. $do->sequenceKeys(a,b,c); ) @@ -2025,13 +2284,12 @@ class DB_DataObject extends DB_DataObject_Overload $keys = $this->keys(); if (!$keys) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array(false,false,false); } - $table = isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table]) ? - $_DB_DATAOBJECT['INI'][$this->_database][$this->__table] : $this->table(); + $table = $this->table(); $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['phptype']; @@ -2041,35 +2299,35 @@ class DB_DataObject extends DB_DataObject_Overload $seqname = false; - if (!empty($_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table])) { - $usekey = $_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table]; - if (strpos($usekey,':') !== false) { - list($usekey,$seqname) = explode(':',$usekey); + if (!empty($_DB_DATAOBJECT['CONFIG']['sequence_'.$this->tableName()])) { + $seqname = $_DB_DATAOBJECT['CONFIG']['sequence_'.$this->tableName()]; + if (strpos($seqname,':') !== false) { + list($usekey,$seqname) = explode(':',$seqname); } } // if the key is not an integer - then it's not a sequence or native if (empty($table[$usekey]) || !($table[$usekey] & DB_DATAOBJECT_INT)) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array(false,false,false); + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array(false,false,false); } if (!empty($_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys'])) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys']; if (is_string($ignore) && (strtoupper($ignore) == 'ALL')) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array(false,false,$seqname); + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array(false,false,$seqname); } if (is_string($ignore)) { $ignore = $_DB_DATAOBJECT['CONFIG']['ignore_sequence_keys'] = explode(',',$ignore); } - if (in_array($this->__table,$ignore)) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array(false,false,$seqname); + if (in_array($this->tableName(),$ignore)) { + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array(false,false,$seqname); } } - $realkeys = $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]; + $realkeys = $_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"]; // if you are using an old ini file - go back to old behaviour... if (is_numeric($realkeys[$usekey])) { @@ -2078,25 +2336,38 @@ class DB_DataObject extends DB_DataObject_Overload // multiple unique primary keys without a native sequence... if (($realkeys[$usekey] == 'K') && (count($keys) > 1)) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array(false,false,$seqname); + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array(false,false,$seqname); } // use native sequence keys... // technically postgres native here... // we need to get the new improved tabledata sorted out first. + // support named sequence keys.. - currently postgres only.. + + if ( in_array($dbtype , array('pgsql')) && + ($table[$usekey] & DB_DATAOBJECT_INT) && + isset($realkeys[$usekey]) && strlen($realkeys[$usekey]) > 1) { + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array($usekey,true, $realkeys[$usekey]); + } + if ( in_array($dbtype , array('pgsql', 'mysql', 'mysqli', 'mssql', 'ifx')) && ($table[$usekey] & DB_DATAOBJECT_INT) && isset($realkeys[$usekey]) && ($realkeys[$usekey] == 'N') ) { - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array($usekey,true,$seqname); + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array($usekey,true,$seqname); } + + // if not a native autoinc, and we have not assumed all primary keys are sequence if (($realkeys[$usekey] != 'N') && !empty($_DB_DATAOBJECT['CONFIG']['dont_use_pear_sequences'])) { return array(false,false,false); } + + + // I assume it's going to try and be a nextval DB sequence.. (not native) - return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->__table] = array($usekey,false,$seqname); + return $_DB_DATAOBJECT['SEQUENCE'][$this->_database][$this->tableName()] = array($usekey,false,$seqname); } @@ -2208,13 +2479,13 @@ class DB_DataObject extends DB_DataObject_Overload // it's not currently connected! // try and work out what to use for the dsn ! - $options= &$_DB_DATAOBJECT['CONFIG']; + $options= $_DB_DATAOBJECT['CONFIG']; // if the databse dsn dis defined in the object.. $dsn = isset($this->_database_dsn) ? $this->_database_dsn : null; if (!$dsn) { - if (!$this->_database) { - $this->_database = isset($options["table_{$this->__table}"]) ? $options["table_{$this->__table}"] : null; + if (!$this->_database && !strlen($this->tableName())) { + $this->_database = isset($options["table_{$this->tableName()}"]) ? $options["table_{$this->tableName()}"] : null; } if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug("Checking for database specific ini ('{$this->_database}') : database_{$this->_database} in options","CONNECT"); @@ -2300,13 +2571,13 @@ class DB_DataObject extends DB_DataObject_Overload } - // change the connection and results charsets to UTF-8 if we're using MySQL 4.1+ + // Change the connection and results charsets to utf8mb4 if we're using MySQL 5.5.3+ $civicrmConfig = CRM_Core_Config::singleton(); $this->query("/*!40101 SET NAMES utf8 */"); $this->query("/*!50503 SET NAMES utf8mb4 */"); if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug(serialize($_DB_DATAOBJECT['CONNECTIONS']), "CONNECT",5); + $this->debug(print_r($_DB_DATAOBJECT['CONNECTIONS'],true), "CONNECT",5); } if (PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) { $this->debug($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->toString(), "CONNECT FAILED",5); @@ -2333,7 +2604,6 @@ class DB_DataObject extends DB_DataObject_Overload } // Oracle need to optimize for portibility - not sure exactly what this does though :) - $c = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; return true; } @@ -2348,14 +2618,15 @@ class DB_DataObject extends DB_DataObject_Overload */ function _query($string) { - global $_DB_DATAOBJECT, $queries, $user; + global $_DB_DATAOBJECT; $this->_connect(); - // Logging the query first makes sure it gets logged even if it fails. + // CRM-18093 Logging the query first makes sure it gets logged even if it fails. CRM_Core_Error::debug_query($string); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; - $options = &$_DB_DATAOBJECT['CONFIG']; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + + $options = $_DB_DATAOBJECT['CONFIG']; $_DB_driver = empty($_DB_DATAOBJECT['CONFIG']['db_driver']) ? 'DB': $_DB_DATAOBJECT['CONFIG']['db_driver']; @@ -2365,15 +2636,19 @@ class DB_DataObject extends DB_DataObject_Overload } - if (strtoupper($string) == 'BEGIN') { + if ( + strtoupper($string) == 'BEGIN' || + strtoupper($string) == 'START TRANSACTION' + ) { if ($_DB_driver == 'DB') { $DB->autoCommit(false); + $DB->simpleQuery('BEGIN'); } else { $DB->beginTransaction(); } - // db backend adds begin anyway from now on.. return true; } + if (strtoupper($string) == 'COMMIT') { $res = $DB->commit(); if ($_DB_driver == 'DB') { @@ -2436,8 +2711,7 @@ class DB_DataObject extends DB_DataObject_Overload CRM_Core_Error::debug_log_message("Retrying after $message hit on attempt " . ($tries + 1) . ' at query : ' . $string); continue; } - - } else { + } else { switch (strtolower(substr(trim($string),0,6))) { case 'insert': @@ -2452,8 +2726,9 @@ class DB_DataObject extends DB_DataObject_Overload } } - // See CRM-21489 for why I believe this is never hit. - if (!is_a($result,'PEAR_Error')) { + // see if we got a failure.. - try again a few times.. + // See CRM-21489 for why Eileen believes this is never hit. + if (!is_object($result) || !is_a($result,'PEAR_Error')) { break; } if ($result->getCode() != -14) { // *DB_ERROR_NODBSELECTED @@ -2463,22 +2738,26 @@ class DB_DataObject extends DB_DataObject_Overload $DB->connect($DB->dsn); } - if (is_a($result,'PEAR_Error')) { + + if (is_object($result) && is_a($result,'PEAR_Error')) { if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug($result->toString(), "Query Error",1 ); } + $this->N = false; return $this->raiseError($result); } - // Strip any prepended comments + + // CRM-18093 starts. + // CRM-20445 starts Strip any prepended comments $queryString = (substr($string, 0, 2) === '/*') ? substr($string, strpos($string, '*/') + 2) : $string; $action = strtolower(substr(trim($queryString),0,6)); + // CRM-20445 ends if (!empty($_DB_DATAOBJECT['CONFIG']['debug']) || defined('CIVICRM_DEBUG_LOG_QUERY')) { $timeTaken = sprintf("%0.6f", microtime(TRUE) - $time); $alertLevel = $this->getAlertLevel($timeTaken); - $message = "$alertLevel QUERY DONE IN $timeTaken seconds."; - if (in_array($action, array('insert', 'update', 'delete')) && $_DB_driver == 'DB') { + if (in_array($action, ['insert', 'update', 'delete']) && $_DB_driver === 'DB') { $message .= " " . $DB->affectedRows() . " row(s)s subject to $action action"; } elseif (is_a($result, 'DB_result') && method_exists($result, 'numrows')) { @@ -2497,6 +2776,7 @@ class DB_DataObject extends DB_DataObject_Overload $this->debug($message, 'query', 1); } } + // CRM-18093 ends. switch ($action) { case 'insert': @@ -2510,10 +2790,7 @@ class DB_DataObject extends DB_DataObject_Overload } if (is_object($result)) { // lets hope that copying the result object is OK! - // fix notices in unit test. - if ( !CRM_Utils_Array::value( 'RESULTSEQ', $GLOBALS['_DB_DATAOBJECT'] ) ) { - $GLOBALS['_DB_DATAOBJECT']['RESULTSEQ'] = 1; - } + $_DB_resultid = $GLOBALS['_DB_DATAOBJECT']['RESULTSEQ']++; $_DB_DATAOBJECT['RESULTS'][$_DB_resultid] = $result; $this->_DB_resultid = $_DB_resultid; @@ -2522,14 +2799,17 @@ class DB_DataObject extends DB_DataObject_Overload if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { $this->debug(serialize($result), 'RESULT',5); } - if (method_exists($result, 'numrows')) { + if (method_exists($result, 'numRows')) { if ($_DB_driver == 'DB') { $DB->expectError(DB_ERROR_UNSUPPORTED); } else { $DB->expectError(MDB2_ERROR_UNSUPPORTED); } - $this->N = $result->numrows(); - if (is_a($this->N,'PEAR_Error')) { + + $this->N = $result->numRows(); + //var_dump($this->N); + + if (is_object($this->N) && is_a($this->N,'PEAR_Error')) { $this->N = true; } $DB->popExpect(); @@ -2549,7 +2829,7 @@ class DB_DataObject extends DB_DataObject_Overload { global $_DB_DATAOBJECT; $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); $options = $_DB_DATAOBJECT['CONFIG']; @@ -2560,6 +2840,7 @@ class DB_DataObject extends DB_DataObject_Overload $this->_query= $x->_query; } + foreach($keys as $k => $v) { // index keys is an indexed array /* these filter checks are a bit suspicious.. @@ -2580,13 +2861,12 @@ class DB_DataObject extends DB_DataObject_Overload } $kSql = $quoteIdentifiers - ? ( $DB->quoteIdentifier($this->__table) . '.' . $DB->quoteIdentifier($k) ) - : "{$this->__table}.{$k}"; - + ? ( $DB->quoteIdentifier($this->tableName()) . '.' . $DB->quoteIdentifier($k) ) + : "{$this->tableName()}.{$k}"; /*** - if (is_a($this->$k,'DB_DataObject_Cast')) { + if (is_object($this->$k) && is_a($this->$k,'DB_DataObject_Cast')) { $dbtype = $DB->dsn["phptype"]; $value = $this->$k->toString($v,$DB); if (PEAR::isError($value)) { @@ -2602,7 +2882,7 @@ class DB_DataObject extends DB_DataObject_Overload } ***/ - if (!isset($options['disable_null_strings']) && is_string($this->$k) && (strtolower($this->$k) === 'null') && $this->$k !== 'Null' && !($v & DB_DATAOBJECT_NOTNULL)) { + if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) { $this->whereAdd(" $kSql IS NULL"); continue; } @@ -2628,28 +2908,6 @@ class DB_DataObject extends DB_DataObject_Overload } } - /** - * autoload Class relating to a table - * (depreciated - use ::factory) - * - * @param string $table table - * @access private - * @return string classname on Success - */ - function staticAutoloadTable($table) - { - global $_DB_DATAOBJECT; - if (empty($_DB_DATAOBJECT['CONFIG'])) { - DB_DataObject::_loadConfig(); - } - $p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? - $_DB_DATAOBJECT['CONFIG']['class_prefix'] : ''; - $class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); - - $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); - $class = $ce ? $class : DB_DataObject::_autoloadClass($class); - return $class; - } /** @@ -2673,7 +2931,8 @@ class DB_DataObject extends DB_DataObject_Overload - function factory($table = '') { + function factory($table = '') + { global $_DB_DATAOBJECT; @@ -2690,16 +2949,17 @@ class DB_DataObject extends DB_DataObject_Overload } // no configuration available for database if (!empty($database) && empty($_DB_DATAOBJECT['CONFIG']['database_'.$database])) { - return DB_DataObject::raiseError( + $do = new DB_DataObject(); + $do->raiseError( "unable to find database_{$database} in Configuration, It is required for factory with database" , 0, PEAR_ERROR_DIE ); } - + /* if ($table === '') { - if (is_a($this,'DB_DataObject') && strlen($this->__table)) { - $table = $this->__table; + if (is_a($this,'DB_DataObject') && strlen($this->tableName())) { + $table = $this->tableName(); } else { return DB_DataObject::raiseError( "factory did not recieve a table name", @@ -2707,16 +2967,34 @@ class DB_DataObject extends DB_DataObject_Overload } } + */ // does this need multi db support?? - $p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? - $_DB_DATAOBJECT['CONFIG']['class_prefix'] : ''; - $class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); - $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); + $cp = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? + explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']['class_prefix']) : ''; + + //print_r($cp); + + // multiprefix support. + $tbl = preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); + if (is_array($cp)) { + $class = array(); + foreach($cp as $cpr) { + $ce = substr(phpversion(),0,1) > 4 ? class_exists($cpr . $tbl,false) : class_exists($cpr . $tbl); + if ($ce) { + $class = $cpr . $tbl; + break; + } + $class[] = $cpr . $tbl; + } + } else { + $class = $tbl; + $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); + } - $class = $ce ? $class : DB_DataObject::_autoloadClass($class); + $rclass = $ce ? $class : DB_DataObject::_autoloadClass($class, $table); // proxy = full|light - if (!$class && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) { + if (!$rclass && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) { DB_DataObject::debug("FAILED TO Autoload $database.$table - using proxy.","FACTORY",1); @@ -2729,7 +3007,9 @@ class DB_DataObject extends DB_DataObject_Overload $d = new DB_DataObject; $d->__table = $table; - if (is_a($ret = $d->_connect(), 'PEAR_Error')) { + + $ret = $d->_connect(); + if (is_object($ret) && is_a($ret, 'PEAR_Error')) { return $ret; } @@ -2737,12 +3017,17 @@ class DB_DataObject extends DB_DataObject_Overload return $x->$proxyMethod( $d->_database, $table); } - if (!$class) { - return DB_DataObject::raiseError( - "factory could not find class $class from $table", + if (!$rclass || !class_exists($rclass)) { + $dor = new DB_DataObject(); + return $dor->raiseError( + "factory could not find class " . + (is_array($class) ? implode(PATH_SEPARATOR, $class) : $class ). + "from $table", DB_DATAOBJECT_ERROR_INVALIDCONFIG); } - $ret = new $class; + + $ret = new $rclass(); + if (!empty($database)) { DB_DataObject::debug("Setting database to $database","FACTORY",1); $ret->database($database); @@ -2752,11 +3037,12 @@ class DB_DataObject extends DB_DataObject_Overload /** * autoload Class * - * @param string $class Class + * @param string|array $class Class + * @param string $table Table trying to load. * @access private * @return string classname on Success */ - function _autoloadClass($class) + function _autoloadClass($class, $table=false) { global $_DB_DATAOBJECT; @@ -2766,32 +3052,63 @@ class DB_DataObject extends DB_DataObject_Overload $class_prefix = empty($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? '' : $_DB_DATAOBJECT['CONFIG']['class_prefix']; - $table = substr($class,strlen($class_prefix)); + $table = $table ? $table : substr($class,strlen($class_prefix)); // only include the file if it exists - and barf badly if it has parse errors :) if (!empty($_DB_DATAOBJECT['CONFIG']['proxy']) || empty($_DB_DATAOBJECT['CONFIG']['class_location'])) { return false; } + // support for: + // class_location = mydir/ => maps to mydir/Tablename.php + // class_location = mydir/myfile_%s.php => maps to mydir/myfile_Tablename + // with directory sepr + // class_location = mydir/:mydir2/: => tries all of thes locations. + $cl = $_DB_DATAOBJECT['CONFIG']['class_location']; - if (strpos($_DB_DATAOBJECT['CONFIG']['class_location'],'%s') !== false) { - $file = sprintf($_DB_DATAOBJECT['CONFIG']['class_location'], preg_replace('/[^A-Z0-9]/i','_',ucfirst($table))); - } else { - $file = $_DB_DATAOBJECT['CONFIG']['class_location'].'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + switch (true) { + case (strpos($cl ,'%s') !== false): + $file = sprintf($cl , preg_replace('/[^A-Z0-9]/i','_',ucfirst($table))); + break; + + case (strpos($cl , PATH_SEPARATOR) !== false): + $file = array(); + foreach(explode(PATH_SEPARATOR, $cl ) as $p) { + $file[] = $p .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + } + break; + default: + $file = $cl .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php"; + break; } - if (!file_exists($file)) { + $cls = is_array($class) ? $class : array($class); + + if (is_array($file) || !file_exists($file)) { $found = false; - foreach(explode(PATH_SEPARATOR, ini_get('include_path')) as $p) { - if (file_exists("$p/$file")) { - $file = "$p/$file"; - $found = true; + + $file = is_array($file) ? $file : array($file); + $search = implode(PATH_SEPARATOR, $file); + foreach($file as $f) { + foreach(explode(PATH_SEPARATOR, '' . PATH_SEPARATOR . ini_get('include_path')) as $p) { + $ff = empty($p) ? $f : "$p/$f"; + + if (file_exists($ff)) { + $file = $ff; + $found = true; + break; + } + } + if ($found) { break; } } if (!$found) { - DB_DataObject::raiseError( - "autoload:Could not find class {$class} using class_location value", + $dor = new DB_DataObject(); + $dor->raiseError( + "autoload:Could not find class " . implode(',', $cls) . + " using class_location value :" . $search . + " using include_path value :" . ini_get('include_path'), DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } @@ -2800,11 +3117,18 @@ class DB_DataObject extends DB_DataObject_Overload include_once $file; - $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); - + $ce = false; + foreach($cls as $c) { + $ce = substr(phpversion(),0,1) > 4 ? class_exists($c,false) : class_exists($c); + if ($ce) { + $class = $c; + break; + } + } if (!$ce) { - DB_DataObject::raiseError( - "autoload:Could not autoload {$class}", + $dor = new DB_DataObject(); + $dor->raiseError( + "autoload:Could not autoload " . implode(',', $cls) , DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } @@ -2830,11 +3154,14 @@ class DB_DataObject extends DB_DataObject_Overload * Should look a bit like * [local_col_name] => "related_tablename:related_col_name" * + * @param array $new_links optional - force update of the links for this table + * You probably want to restore it to it's original state after, + * as modifying here does it for the whole PHP request. * * @return array|null * array = if there are links defined for this table. * empty array - if there is a links.ini file, but no links on this table - * null - if no links.ini exists for this database (hence try auto_links). + * false - if no links.ini exists for this database (hence try auto_links). * @access public * @see DB_DataObject::getLinks(), DB_DataObject::getLink() */ @@ -2848,237 +3175,190 @@ class DB_DataObject extends DB_DataObject_Overload // have to connect.. -> otherwise things break later. $this->_connect(); - if (isset($_DB_DATAOBJECT['LINKS'][$this->_database][$this->__table])) { - return $_DB_DATAOBJECT['LINKS'][$this->_database][$this->__table]; + // alias for shorter code.. + $lcfg = &$_DB_DATAOBJECT['LINKS']; + $cfg = $_DB_DATAOBJECT['CONFIG']; + + if ($args = func_get_args()) { + // an associative array was specified, that updates the current + // schema... - be careful doing this + if (empty( $lcfg[$this->_database])) { + $lcfg[$this->_database] = array(); + } + $lcfg[$this->_database][$this->tableName()] = $args[0]; + + } + // loaded and available. + if (isset($lcfg[$this->_database][$this->tableName()])) { + return $lcfg[$this->_database][$this->tableName()]; } + // loaded + if (isset($lcfg[$this->_database])) { + // either no file, or empty.. + return $lcfg[$this->_database] === false ? null : array(); + } + // links are same place as schema by default. + $schemas = isset($cfg['schema_location']) ? + array("{$cfg['schema_location']}/{$this->_database}.ini") : + array() ; + // if ini_* is set look there instead. + // and support multiple locations. + if (isset($cfg["ini_{$this->_database}"])) { + $schemas = is_array($cfg["ini_{$this->_database}"]) ? + $cfg["ini_{$this->_database}"] : + explode(PATH_SEPARATOR,$cfg["ini_{$this->_database}"]); + } + // default to not available. + $lcfg[$this->_database] = false; - // attempt to load links file here.. + foreach ($schemas as $ini) { - if (!isset($_DB_DATAOBJECT['LINKS'][$this->_database])) { - $schemas = isset($_DB_DATAOBJECT['CONFIG']['schema_location']) ? - array("{$_DB_DATAOBJECT['CONFIG']['schema_location']}/{$this->_database}.ini") : - array() ; + $links = isset($cfg["links_{$this->_database}"]) ? + $cfg["links_{$this->_database}"] : + str_replace('.ini','.links.ini',$ini); - if (isset($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"])) { - $schemas = is_array($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]) ? - $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"] : - explode(PATH_SEPARATOR,$_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]); + // file really exists.. + if (!file_exists($links) || !is_file($links)) { + if (!empty($cfg['debug'])) { + $this->debug("Missing links.ini file: $links","links",1); + } + continue; } + // set to empty array - as we have at least one file now.. + $lcfg[$this->_database] = empty($lcfg[$this->_database]) ? array() : $lcfg[$this->_database]; + // merge schema file into lcfg.. + $lcfg[$this->_database] = array_merge( + $lcfg[$this->_database], + parse_ini_file($links, true) + ); - foreach ($schemas as $ini) { - $links = - isset($_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"]) ? - $_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"] : - str_replace('.ini','.links.ini',$ini); + if (!empty($cfg['debug'])) { + $this->debug("Loaded links.ini file: $links","links",1); + } - if (empty($_DB_DATAOBJECT['LINKS'][$this->_database]) && file_exists($links) && is_file($links)) { - /* not sure why $links = ... here - TODO check if that works */ - $_DB_DATAOBJECT['LINKS'][$this->_database] = parse_ini_file($links, true); - if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("Loaded links.ini file: $links","links",1); - } - } else { - if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { - $this->debug("Missing links.ini file: $links","links",1); - } + } + + if (!empty($_DB_DATAOBJECT['CONFIG']['portability']) && $_DB_DATAOBJECT['CONFIG']['portability'] & 1) { + foreach($lcfg[$this->_database] as $k=>$v) { + + $nk = strtolower($k); + // results in duplicate cols.. but not a big issue.. + $lcfg[$this->_database][$nk] = isset($lcfg[$this->_database][$nk]) + ? $lcfg[$this->_database][$nk] : array(); + + foreach($v as $kk =>$vv) { + //var_Dump($vv);exit; + $vv =explode(':', $vv); + $vv[0] = strtolower($vv[0]); + $lcfg[$this->_database][$nk][$kk] = implode(':', $vv); } + + } } - + //echo '<PRE>';print_r($lcfg);exit; // if there is no link data at all on the file! // we return null. - if (!isset($_DB_DATAOBJECT['LINKS'][$this->_database])) { + if ($lcfg[$this->_database] === false) { return null; } - if (isset($_DB_DATAOBJECT['LINKS'][$this->_database][$this->__table])) { - return $_DB_DATAOBJECT['LINKS'][$this->_database][$this->__table]; + if (isset($lcfg[$this->_database][$this->tableName()])) { + return $lcfg[$this->_database][$this->tableName()]; } return array(); } + + /** - * load related objects + * generic getter/setter for links * - * There are two ways to use this, one is to set up a <dbname>.links.ini file - * into a static property named <dbname>.links and specifies the table joins, - * the other highly dependent on naming columns 'correctly' :) - * using colname = xxxxx_yyyyyy - * xxxxxx = related table; (yyyyy = user defined..) - * looks up table xxxxx, for value id=$this->xxxxx - * stores it in $this->_xxxxx_yyyyy - * you can change what object vars the links are stored in by - * changeing the format parameter + * This is the new 'recommended' way to get get/set linked objects. + * must be used with links.ini * + * usage: + * get: + * $obj = $do->link('company_id'); + * $obj = $do->link(array('local_col', 'linktable:linked_col')); * - * @param string format (default _%s) where %s is the table name. - * @author Tim White <tim@cyface.com> + * set: + * $do->link('company_id',0); + * $do->link('company_id',$obj); + * $do->link('company_id', array($obj)); + * + * example function + * + * function company() { + * $this->link(array('company_id','company:id'), func_get_args()); + * } + * + * + * + * @param mixed $link_spec link specification (normally a string) + * uses similar rules to joinAdd() array argument. + * @param mixed $set_value (optional) int, DataObject, or array('set') + * @author Alan Knowles * @access public - * @return boolean , true on success + * @return mixed true or false on setting, object on getting */ - function getLinks($format = '_%s') + function link($field, $set_args = array()) { + require_once 'DB/DataObject/Links.php'; + $l = new DB_DataObject_Links($this); + return $l->link($field,$set_args) ; - // get table will load the options. - if ($this->_link_loaded) { - return true; - } - $this->_link_loaded = false; - $cols = $this->table(); - $links = $this->links(); - - $loaded = array(); - - if ($links) { - foreach($links as $key => $match) { - list($table,$link) = explode(':', $match); - $k = sprintf($format, str_replace('.', '_', $key)); - // makes sure that '.' is the end of the key; - if ($p = strpos($key,'.')) { - $key = substr($key, 0, $p); - } - - $this->$k = $this->getLink($key, $table, $link); - - if (is_object($this->$k)) { - $loaded[] = $k; - } - } - $this->_link_loaded = $loaded; - return true; - } - // this is the autonaming stuff.. - // it sends the column name down to getLink and lets that sort it out.. - // if there is a links file then it is not used! - // IT IS DEPRECIATED!!!! - USE - if (!is_null($links)) { - return false; - } - - - foreach (array_keys($cols) as $key) { - if (!($p = strpos($key, '_'))) { - continue; - } - // does the table exist. - $k =sprintf($format, $key); - $this->$k = $this->getLink($key); - if (is_object($this->$k)) { - $loaded[] = $k; - } - } - $this->_link_loaded = $loaded; - return true; } - /** - * return name from related object - * - * There are two ways to use this, one is to set up a <dbname>.links.ini file - * into a static property named <dbname>.links and specifies the table joins, - * the other is highly dependant on naming columns 'correctly' :) + /** + * load related objects * - * NOTE: the naming convention is depreciated!!! - use links.ini + * Generally not recommended to use this. + * The generator should support creating getter_setter methods which are better suited. * - * using colname = xxxxx_yyyyyy - * xxxxxx = related table; (yyyyy = user defined..) - * looks up table xxxxx, for value id=$this->xxxxx - * stores it in $this->_xxxxx_yyyyy + * Relies on <dbname>.links.ini * - * you can also use $this->getLink('thisColumnName','otherTable','otherTableColumnName') + * Sets properties on the calling dataobject you can change what + * object vars the links are stored in by changeing the format parameter * * - * @param string $row either row or row.xxxxx - * @param string $table name of table to look up value in - * @param string $link name of column in other table to match + * @param string format (default _%s) where %s is the table name. * @author Tim White <tim@cyface.com> * @access public - * @return mixed object on success + * @return boolean , true on success */ - function getLink($row, $table = null, $link = false) + function getLinks($format = '_%s') { + require_once 'DB/DataObject/Links.php'; + $l = new DB_DataObject_Links($this); + return $l->applyLinks($format); + } - // GUESS THE LINKED TABLE.. (if found - recursevly call self) - - if ($table === null) { - $links = $this->links(); - - if (is_array($links)) { - - if ($links[$row]) { - list($table,$link) = explode(':', $links[$row]); - if ($p = strpos($row,".")) { - $row = substr($row,0,$p); - } - return $this->getLink($row,$table,$link); - - } - - $this->raiseError( - "getLink: $row is not defined as a link (normally this is ok)", - DB_DATAOBJECT_ERROR_NODATA); - - $r = false; - return $r;// technically a possible error condition? - - } - // use the old _ method - this shouldnt happen if called via getLinks() - if (!($p = strpos($row, '_'))) { - $r = null; - return $r; - } - $table = substr($row, 0, $p); - return $this->getLink($row, $table); - - - } - - - - if (!isset($this->$row)) { - $this->raiseError("getLink: row not set $row", DB_DATAOBJECT_ERROR_NODATA); - return false; - } - - // check to see if we know anything about this table.. - - $obj = $this->factory($table); - - if (!is_a($obj,'DB_DataObject')) { - $this->raiseError( - "getLink:Could not find class for row $row, table $table", - DB_DATAOBJECT_ERROR_INVALIDCONFIG); - return false; - } - if ($link) { - if ($obj->get($link, $this->$row)) { - $obj->free(); - return $obj; - } - return false; - } + /** + * deprecited : @use link() + */ + function getLink($row, $table = null, $link = false) + { + require_once 'DB/DataObject/Links.php'; + $l = new DB_DataObject_Links($this); + return $l->getLink($row, $table === null ? false: $table, $link); - if ($obj->get($this->$row)) { - $obj->free(); - return $obj; - } - return false; } /** - * IS THIS SUPPORTED/USED ANYMORE???? - *return a list of options for a linked table - * + * getLinkArray + * Fetch an array of related objects. This should be used in conjunction with a <dbname>.links.ini file configuration (see the introduction on linking for details on this). + * You may also use this with all parameters to specify, the column and related table. * This is highly dependant on naming columns 'correctly' :) * using colname = xxxxx_yyyyyy * xxxxxx = related table; (yyyyy = user defined..) @@ -3086,51 +3366,70 @@ class DB_DataObject extends DB_DataObject_Overload * stores it in $this->_xxxxx_yyyyy * * @access public - * @return array of results (empty array on failure) + * @param string $column - either column or column.xxxxx + * @param string $table - name of table to look up value in + * @return array - array of results (empty array on failure) + * + * Example - Getting the related objects + * + * $person = new DataObjects_Person; + * $person->get(12); + * $children = $person->getLinkArray('children'); + * + * echo 'There are ', count($children), ' descendant(s):<br />'; + * foreach ($children as $child) { + * echo $child->name, '<br />'; + * } + * */ - function &getLinkArray($row, $table = null) + function getLinkArray($row, $table = null) { + require_once 'DB/DataObject/Links.php'; + $l = new DB_DataObject_Links($this); + return $l->getLinkArray($row, $table === null ? false: $table); - $ret = array(); - if (!$table) { - $links = $this->links(); - - if (is_array($links)) { - if (!isset($links[$row])) { - // failed.. - return $ret; - } - list($table,$link) = explode(':',$links[$row]); - } else { - if (!($p = strpos($row,'_'))) { - return $ret; - } - $table = substr($row,0,$p); - } - } + } - $c = $this->factory($table); + /** + * unionAdd - adds another dataobject to this, building a unioned query. + * + * usage: + * $doTable1 = DB_DataObject::factory("table1"); + * $doTable2 = DB_DataObject::factory("table2"); + * + * $doTable1->selectAdd(); + * $doTable1->selectAdd("col1,col2"); + * $doTable1->whereAdd("col1 > 100"); + * $doTable1->orderBy("col1"); + * + * $doTable2->selectAdd(); + * $doTable2->selectAdd("col1, col2"); + * $doTable2->whereAdd("col2 = 'v'"); + * + * $doTable1->unionAdd($doTable2); + * $doTable1->find(); + * + * Note: this model may be a better way to implement joinAdd?, eg. do the building in find? + * + * + * @param $obj object|false the union object or false to reset + * @param optional $is_all string 'ALL' to do all. + * @returns $obj object|array the added object, or old list if reset. + */ - if (!is_a($c,'DB_DataObject')) { - $this->raiseError( - "getLinkArray:Could not find class for row $row, table $table", - DB_DATAOBJECT_ERROR_INVALIDCONFIG - ); + function unionAdd($obj,$is_all= '') + { + if ($obj === false) { + $ret = $this->_query['unions']; + $this->_query['unions'] = array(); return $ret; } - - // if the user defined method list exists - use it... - if (method_exists($c, 'listFind')) { - $c->listFind($this->id); - } else { - $c->find(); - } - while ($c->fetch()) { - $ret[] = $c; - } - return $ret; + $this->_query['unions'][] = array($obj, 'UNION ' . $is_all . ' ') ; + return $obj; } + + /** * The JOIN condition * @@ -3168,9 +3467,10 @@ class DB_DataObject extends DB_DataObject_Overload * @param optional $obj object |array the joining object (no value resets the join) * If you use an array here it should be in the format: * array('local_column','remotetable:remote_column'); - * if remotetable does not have a definition, you should - * use @ to hide the include error message.. - * + * if remotetable does not have a definition, you should + * use @ to hide the include error message.. + * array('local_column', $dataobject , 'remote_column'); + * if array has 3 args, then second is assumed to be the linked dataobject. * * @param optional $joinType string | array * 'LEFT'|'INNER'|'RIGHT'|'' Inner is default, '' indicates @@ -3230,14 +3530,21 @@ class DB_DataObject extends DB_DataObject_Overload $toTable = false; if (is_array($obj)) { $tfield = $obj[0]; - list($toTable,$ofield) = explode(':',$obj[1]); - $obj = DB_DataObject::factory($toTable); - if (!$obj || is_a($obj,'PEAR_Error')) { - $obj = new DB_DataObject; - $obj->__table = $toTable; + if (count($obj) == 3) { + $ofield = $obj[2]; + $obj = $obj[1]; + } else { + list($toTable,$ofield) = explode(':',$obj[1]); + + $obj = is_string($toTable) ? DB_DataObject::factory($toTable) : $toTable; + + if (!$obj || !is_object($obj) || is_a($obj,'PEAR_Error')) { + $obj = new DB_DataObject; + $obj->__table = $toTable; + } + $obj->_connect(); } - $obj->_connect(); // set the table items to nothing.. - eg. do not try and match // things in the child table...??? $items = array(); @@ -3248,7 +3555,7 @@ class DB_DataObject extends DB_DataObject_Overload } /* make sure $this->_database is set. */ $this->_connect(); - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; + $DB = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; /// CHANGED 26 JUN 2009 - we prefer links from our local table over the remote one. @@ -3256,31 +3563,46 @@ class DB_DataObject extends DB_DataObject_Overload /* otherwise see if there are any links from this table to the obj. */ //print_r($this->links()); if (($ofield === false) && ($links = $this->links())) { - foreach ($links as $k => $v) { - /* link contains {this column} = {linked table}:{linked column} */ - $ar = explode(':', $v); - // Feature Request #4266 - Allow joins with multiple keys - if (strpos($k, ',') !== false) { - $k = explode(',', $k); - } - if (strpos($ar[1], ',') !== false) { - $ar[1] = explode(',', $ar[1]); + // this enables for support for arrays of links in ini file. + // link contains this_column[] = linked_table:linked_column + // or standard way. + // link contains this_column = linked_table:linked_column + foreach ($links as $k => $linkVar) { + + if (!is_array($linkVar)) { + $linkVar = array($linkVar); } + foreach($linkVar as $v) { + - if ($ar[0] == $obj->__table) { + + /* link contains {this column} = {linked table}:{linked column} */ + $ar = explode(':', $v); + // Feature Request #4266 - Allow joins with multiple keys + if (strpos($k, ',') !== false) { + $k = explode(',', $k); + } + if (strpos($ar[1], ',') !== false) { + $ar[1] = explode(',', $ar[1]); + } + + if ($ar[0] != $obj->tableName()) { + continue; + } if ($joinCol !== false) { if ($k == $joinCol) { + // got it!? $tfield = $k; $ofield = $ar[1]; break; - } else { - continue; } - } else { - $tfield = $k; - $ofield = $ar[1]; - break; + continue; + } + $tfield = $k; + $ofield = $ar[1]; + break; + } } } @@ -3288,23 +3610,30 @@ class DB_DataObject extends DB_DataObject_Overload //print_r($obj->links()); if (!$ofield && ($olinks = $obj->links())) { - foreach ($olinks as $k => $v) { - /* link contains {this column} = {linked table}:{linked column} */ - $ar = explode(':', $v); + foreach ($olinks as $k => $linkVar) { + /* link contains {this column} = array ( {linked table}:{linked column} )*/ + if (!is_array($linkVar)) { + $linkVar = array($linkVar); + } + foreach($linkVar as $v) { - // Feature Request #4266 - Allow joins with multiple keys + /* link contains {this column} = {linked table}:{linked column} */ + $ar = explode(':', $v); - $links_key_array = strpos($k,','); - if ($links_key_array !== false) { - $k = explode(',', $k); - } + // Feature Request #4266 - Allow joins with multiple keys + $links_key_array = strpos($k,','); + if ($links_key_array !== false) { + $k = explode(',', $k); + } - $ar_array = strpos($ar[1],','); - if ($ar_array !== false) { - $ar[1] = explode(',', $ar[1]); - } + $ar_array = strpos($ar[1],','); + if ($ar_array !== false) { + $ar[1] = explode(',', $ar[1]); + } - if ($ar[0] == $this->__table) { + if ($ar[0] != $this->tableName()) { + continue; + } // you have explictly specified the column // and the col is listed here.. @@ -3313,7 +3642,7 @@ class DB_DataObject extends DB_DataObject_Overload if ($joinCol !== false) { $this->raiseError( "joinAdd: You cannot target a join column in the " . - "'link from' table ({$obj->__table}). " . + "'link from' table ({$obj->tableName()}). " . "Either remove the fourth argument to joinAdd() ". "({$joinCol}), or alter your links.ini file.", DB_DATAOBJECT_ERROR_NODATA); @@ -3323,6 +3652,7 @@ class DB_DataObject extends DB_DataObject_Overload $ofield = $k; $tfield = $ar[1]; break; + } } } @@ -3338,7 +3668,7 @@ class DB_DataObject extends DB_DataObject_Overload if ($ofield === false) { $this->raiseError( - "joinAdd: {$obj->__table} has no link with {$this->__table}", + "joinAdd: {$obj->tableName()} has no link with {$this->tableName()}", DB_DATAOBJECT_ERROR_NODATA); return false; } @@ -3347,7 +3677,7 @@ class DB_DataObject extends DB_DataObject_Overload // we default to joining as the same name (this is remvoed later..) if ($joinAs === false) { - $joinAs = $obj->__table; + $joinAs = $obj->tableName(); } $quoteIdentifiers = !empty($_DB_DATAOBJECT['CONFIG']['quote_identifiers']); @@ -3355,8 +3685,8 @@ class DB_DataObject extends DB_DataObject_Overload // not sure how portable adding database prefixes is.. $objTable = $quoteIdentifiers ? - $DB->quoteIdentifier($obj->__table) : - $obj->__table ; + $DB->quoteIdentifier($obj->tableName()) : + $obj->tableName() ; $dbPrefix = ''; if (strlen($obj->_database) && in_array($DB->dsn['phptype'],array('mysql','mysqli'))) { @@ -3395,18 +3725,27 @@ class DB_DataObject extends DB_DataObject_Overload if (!$items) { $this->raiseError( - "joinAdd: No table definition for {$obj->__table}", + "joinAdd: No table definition for {$obj->tableName()}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return false; } + $ignore_null = !isset($options['disable_null_strings']) + || !is_string($options['disable_null_strings']) + || strtolower($options['disable_null_strings']) !== 'full' ; + + foreach($items as $k => $v) { - if (!isset($obj->$k)) { + if (!isset($obj->$k) && $ignore_null) { continue; } $kSql = ($quoteIdentifiers ? $DB->quoteIdentifier($k) : $k); + if (DB_DataObject::_is_null($obj,$k)) { + $obj->whereAdd("{$joinAs}.{$kSql} IS NULL"); + continue; + } if ($v & DB_DATAOBJECT_STR) { $obj->whereAdd("{$joinAs}.{$kSql} = " . $this->_quote((string) ( @@ -3423,19 +3762,14 @@ class DB_DataObject extends DB_DataObject_Overload continue; } - if (is_a($obj->$k,'DB_DataObject_Cast')) { + if (is_object($obj->$k) && is_a($obj->$k,'DB_DataObject_Cast')) { $value = $obj->$k->toString($v,$DB); if (PEAR::isError($value)) { $this->raiseError($value->getMessage() ,DB_DATAOBJECT_ERROR_INVALIDARG); return false; } - if (!isset($options['disable_null_strings']) && strtolower($value) === 'null' && $value !== 'Null' ) { - $obj->whereAdd("{$joinAs}.{$kSql} IS NULL"); - continue; - } else { - $obj->whereAdd("{$joinAs}.{$kSql} = $value"); - continue; - } + $obj->whereAdd("{$joinAs}.{$kSql} = $value"); + continue; } @@ -3485,7 +3819,7 @@ class DB_DataObject extends DB_DataObject_Overload - $table = $this->__table; + $table = $this->tableName(); if ($quoteIdentifiers) { $joinAs = $DB->quoteIdentifier($joinAs); @@ -3497,7 +3831,7 @@ class DB_DataObject extends DB_DataObject_Overload $fullJoinAs = ''; - $addJoinAs = ($quoteIdentifiers ? $DB->quoteIdentifier($obj->__table) : $obj->__table) != $joinAs; + $addJoinAs = ($quoteIdentifiers ? $DB->quoteIdentifier($obj->tableName()) : $obj->tableName()) != $joinAs; if ($addJoinAs) { // join table a AS b - is only supported by a few databases and is probably not needed // , however since it makes the whole Statement alot clearer we are leaving it in @@ -3518,18 +3852,18 @@ class DB_DataObject extends DB_DataObject_Overload $jadd = "\n {$joinType} JOIN {$objTable} {$fullJoinAs}"; //$this->_join .= "\n {$joinType} JOIN {$objTable} {$fullJoinAs}"; if (is_array($ofield)) { - $key_count = count($ofield); + $key_count = count($ofield); for($i = 0; $i < $key_count; $i++) { - if ($i == 0) { - $jadd .= " ON ({$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]}) "; - } - else { - $jadd .= " AND {$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]} "; - } + if ($i == 0) { + $jadd .= " ON ({$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]}) "; + } + else { + $jadd .= " AND {$joinAs}.{$ofield[$i]}={$table}.{$tfield[$i]} "; + } } $jadd .= ' ' . $appendJoin . ' '; } else { - $jadd .= " ON ({$joinAs}.{$ofield}={$table}.{$tfield}) {$appendJoin} "; + $jadd .= " ON ({$joinAs}.{$ofield}={$table}.{$tfield}) {$appendJoin} "; } // jadd avaliable for debugging join build. //echo $jadd ."\n"; @@ -3546,6 +3880,254 @@ class DB_DataObject extends DB_DataObject_Overload } + /** + * autoJoin - using the links.ini file, it builds a query with all the joins + * usage: + * $x = DB_DataObject::factory('mytable'); + * $x->autoJoin(); + * $x->get(123); + * will result in all of the joined data being added to the fetched object.. + * + * $x = DB_DataObject::factory('mytable'); + * $x->autoJoin(); + * $ar = $x->fetchAll(); + * will result in an array containing all the data from the table, and any joined tables.. + * + * $x = DB_DataObject::factory('mytable'); + * $jdata = $x->autoJoin(); + * $x->selectAdd(); //reset.. + * foreach($_REQUEST['requested_cols'] as $c) { + * if (!isset($jdata[$c])) continue; // ignore columns not available.. + * $x->selectAdd( $jdata[$c] . ' as ' . $c); + * } + * $ar = $x->fetchAll(); + * will result in only the columns requested being fetched... + * + * + * + * @param array Configuration + * exclude Array of columns to exclude from results (eg. modified_by_id) + * links The equivilant links.ini data for this table eg. + * array( 'person_id' => 'person:id', .... ) + * include Array of columns to include + * distinct Array of distinct columns. + * + * @return array info about joins + * cols => map of resulting {joined_tablename}.{joined_table_column_name} + * join_names => map of resulting {join_name_as}.{joined_table_column_name} + * count => the column to count on. + * @access public + */ + function autoJoin($cfg = array()) + { + global $_DB_DATAOBJECT; + //var_Dump($cfg);exit; + $pre_links = $this->links(); + if (!empty($cfg['links'])) { + $this->links(array_merge( $pre_links , $cfg['links'])); + } + $map = $this->links( ); + + $this->databaseStructure(); + $dbstructure = $_DB_DATAOBJECT['INI'][$this->_database]; + //print_r($map); + $tabdef = $this->table(); + + // we need this as normally it's only cleared by an empty selectAs call. + + + $keys = array_keys($tabdef); + if (!empty($cfg['exclude'])) { + $keys = array_intersect($keys, array_diff($keys, $cfg['exclude'])); + } + if (!empty($cfg['include'])) { + + $keys = array_intersect($keys, $cfg['include']); + } + + $selectAs = array(); + + if (!empty($keys)) { + $selectAs = array(array( $keys , '%s', false)); + } + + $ret = array( + 'cols' => array(), + 'join_names' => array(), + 'count' => false, + ); + + + + $has_distinct = false; + if (!empty($cfg['distinct']) && $keys) { + + // reset the columsn? + $cols = array(); + + //echo '<PRE>' ;print_r($xx);exit; + foreach($keys as $c) { + //var_dump($c); + + if ( $cfg['distinct'] == $c) { + $has_distinct = 'DISTINCT( ' . $this->tableName() .'.'. $c .') as ' . $c; + $ret['count'] = 'DISTINCT ' . $this->tableName() .'.'. $c .''; + continue; + } + // cols is in our filtered keys... + $cols = $c; + + } + // apply our filtered version, which excludes the distinct column. + + $selectAs = empty($cols) ? array() : array(array(array( $cols) , '%s', false)) ; + + + + } + + foreach($keys as $k) { + $ret['cols'][$k] = $this->tableName(). '.' . $k; + } + + + + foreach($map as $ocl=>$info) { + + list($tab,$col) = explode(':', $info); + // what about multiple joins on the same table!!! + + // if links point to a table that does not exist - ignore. + if (!isset($dbstructure[$tab])) { + continue; + } + + $xx = DB_DataObject::factory($tab); + if (!is_object($xx) || !is_a($xx, 'DB_DataObject')) { + continue; + } + // skip columns that are excluded. + + // we ignore include here... - as + + // this is borked ... for multiple jions.. + $this->joinAdd($xx, 'LEFT', 'join_'.$ocl.'_'. $col, $ocl); + + if (!empty($cfg['exclude']) && in_array($ocl, $cfg['exclude'])) { + continue; + } + + $tabdef = $xx->table(); + $table = $xx->tableName(); + + $keys = array_keys($tabdef); + + + if (!empty($cfg['exclude'])) { + $keys = array_intersect($keys, array_diff($keys, $cfg['exclude'])); + + foreach($keys as $k) { + if (in_array($ocl.'_'.$k, $cfg['exclude'])) { + $keys = array_diff($keys, $k); // removes the k.. + } + } + + } + + if (!empty($cfg['include'])) { + // include will basically be BASECOLNAME_joinedcolname + $nkeys = array(); + foreach($keys as $k) { + if (in_array( sprintf($ocl.'_%s', $k), $cfg['include'])) { + $nkeys[] = $k; + } + } + $keys = $nkeys; + } + + if (empty($keys)) { + continue; + } + // got distinct, and not yet found it.. + if (!$has_distinct && !empty($cfg['distinct'])) { + $cols = array(); + foreach($keys as $c) { + $tn = sprintf($ocl.'_%s', $c); + + if ( $tn == $cfg['distinct']) { + + $has_distinct = 'DISTINCT( ' . 'join_'.$ocl.'_'.$col.'.'.$c .') as ' . $tn ; + $ret['count'] = 'DISTINCT join_'.$ocl.'_'.$col.'.'.$c; + // var_dump($this->countWhat ); + continue; + } + $cols[] = $c; + + } + + if (!empty($cols)) { + $selectAs[] = array($cols, $ocl.'_%s', 'join_'.$ocl.'_'. $col); + } + + } else { + $selectAs[] = array($keys, $ocl.'_%s', 'join_'.$ocl.'_'. $col); + } + + foreach($keys as $k) { + $ret['cols'][sprintf('%s_%s', $ocl, $k)] = $tab.'.'.$k; + $ret['join_names'][sprintf('%s_%s', $ocl, $k)] = sprintf('join_%s_%s.%s',$ocl, $col, $k); + } + + } + + // fill in the select details.. + $this->selectAdd(); + + if ($has_distinct) { + $this->selectAdd($has_distinct); + } + + foreach($selectAs as $ar) { + $this->selectAs($ar[0], $ar[1], $ar[2]); + } + // restore links.. + $this->links( $pre_links ); + + return $ret; + + } + + /** + * Factory method for calling DB_DataObject_Cast + * + * if used with 1 argument DB_DataObject_Cast::sql($value) is called + * + * if used with 2 arguments DB_DataObject_Cast::$value($callvalue) is called + * valid first arguments are: blob, string, date, sql + * + * eg. $member->updated = $member->sqlValue('NOW()'); + * + * + * might handle more arguments for escaping later... + * + * + * @param string $value (or type if used with 2 arguments) + * @param string $callvalue (optional) used with date/null etc.. + */ + + function sqlValue($value) + { + $method = 'sql'; + if (func_num_args() == 2) { + $method = $value; + $value = func_get_arg(1); + } + require_once 'DB/DataObject/Cast.php'; + return call_user_func(array('DB_DataObject_Cast', $method), $value); + + } + + /** * Copies items that are in the table definitions from an * array or object into the current object @@ -3563,9 +4145,10 @@ class DB_DataObject extends DB_DataObject_Overload global $_DB_DATAOBJECT; $keys = $this->keys(); $items = $this->table(); + if (!$items) { $this->raiseError( - "setFrom:Could not find table definition for {$this->__table}", + "setFrom:Could not find table definition for {$this->tableName()}", DB_DATAOBJECT_ERROR_INVALIDCONFIG); return; } @@ -3577,7 +4160,14 @@ class DB_DataObject extends DB_DataObject_Overload if (!$k) { continue; // ignore empty keys!!! what } - if (is_object($from) && isset($from->{sprintf($format,$k)})) { + + $chk = is_object($from) && + (version_compare(phpversion(), "5.1.0" , ">=") ? + property_exists($from, sprintf($format,$k)) : // php5.1 + array_key_exists( sprintf($format,$k), get_class_vars($from)) //older + ); + // if from has property ($format($k) + if ($chk) { $kk = (strtolower($k) == 'from') ? '_from' : $k; if (method_exists($this,'set'.$kk)) { $ret = $this->{'set'.$kk}($from->{sprintf($format,$k)}); @@ -3598,7 +4188,7 @@ class DB_DataObject extends DB_DataObject_Overload continue; } - if (!isset($from[sprintf($format,$k)])) { + if (!isset($from[sprintf($format,$k)]) && !DB_DataObject::_is_null($from, sprintf($format,$k))) { continue; } @@ -3610,13 +4200,15 @@ class DB_DataObject extends DB_DataObject_Overload } continue; } - if (is_object($from[sprintf($format,$k)])) { + $val = $from[sprintf($format,$k)]; + if (is_a($val, 'DB_DataObject_Cast')) { + $this->$k = $val; continue; } - if (is_array($from[sprintf($format,$k)])) { + if (is_object($val) || is_array($val)) { continue; } - $ret = $this->fromValue($k,$from[sprintf($format,$k)]); + $ret = $this->fromValue($k,$val); if ($ret !== true) { $overload_return[$k] = 'Not A Valid Value'; } @@ -3639,55 +4231,52 @@ class DB_DataObject extends DB_DataObject_Overload * will also return links converted to arrays. * * @param string sprintf format for array - * @param bool empty only return elemnts that have a value set. + * @param bool||number [true = elemnts that have a value set], + * [false = table + returned colums] , + * [0 = returned columsn only] * * @access public * @return array of key => value for row */ - function toArray($format = null, $hideEmpty = false) + function toArray($format = '%s', $hideEmpty = false) { global $_DB_DATAOBJECT; + + // we use false to ignore sprintf.. (speed up..) + $format = $format == '%s' ? false : $format; + $ret = array(); $rf = ($this->_resultFields !== false) ? $this->_resultFields : - (isset($_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid]) ? $_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid] : false); + (isset($_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid]) ? + $_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid] : false); + $ar = ($rf !== false) ? - array_merge($_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid],$this->table()) : + (($hideEmpty === 0) ? $rf : array_merge($rf, $this->table())) : $this->table(); foreach($ar as $k=>$v) { if (!isset($this->$k)) { if (!$hideEmpty) { - if ($format === null) - $ret[$k] = ''; - else - $ret[sprintf($format,$k)] = ''; + $ret[$format === false ? $k : sprintf($format,$k)] = ''; } continue; } // call the overloaded getXXXX() method. - except getLink and getLinks if (method_exists($this,'get'.$k) && !in_array(strtolower($k),array('links','link'))) { - if ($format === null) - $ret[$k] = $this->{'get'.$k}(); - else - $ret[sprintf($format,$k)] = $this->{'get'.$k}(); + $ret[$format === false ? $k : sprintf($format,$k)] = $this->{'get'.$k}(); continue; } // should this call toValue() ??? - if ($format === null) - $ret[$k] = $this->$k; - else - $ret[sprintf($format,$k)] = $this->$k; + $ret[$format === false ? $k : sprintf($format,$k)] = $this->$k; } if (!$this->_link_loaded) { return $ret; } foreach($this->_link_loaded as $k) { - if ($format === null) - $ret[$k] = $this->$k->toArray(); - else - $ret[sprintf($format,$k)] = $this->$k->toArray(); + $ret[$format === false ? $k : sprintf($format,$k)] = $this->$k->toArray(); + } return $ret; @@ -3738,7 +4327,7 @@ class DB_DataObject extends DB_DataObject_Overload // if not null - and it's not set....... - if (!isset($this->$key) && ($val & DB_DATAOBJECT_NOTNULL)) { + if ($val & DB_DATAOBJECT_NOTNULL && DB_DataObject::_is_null($this, $key)) { // dont check empty sequence key values.. if (($key == $seq[0]) && ($seq[1] == true)) { continue; @@ -3748,7 +4337,7 @@ class DB_DataObject extends DB_DataObject_Overload } - if (!isset($options['disable_null_strings']) && is_string($this->$key) && (strtolower($this->$key) == 'null') && $this->$key !== 'Null') { + if (DB_DataObject::_is_null($this, $key)) { if ($val & DB_DATAOBJECT_NOTNULL) { $this->debug("'null' field used for '$key', but it is defined as NOT NULL", 'VALIDATION', 4); $ret[$key] = false; @@ -3799,7 +4388,7 @@ class DB_DataObject extends DB_DataObject_Overload * @access public * @return object The DB connection */ - function &getDatabaseConnection() + function getDatabaseConnection() { global $_DB_DATAOBJECT; @@ -3822,7 +4411,7 @@ class DB_DataObject extends DB_DataObject_Overload * @return object The DB result object */ - function &getDatabaseResult() + function getDatabaseResult() { global $_DB_DATAOBJECT; $this->_connect(); @@ -3954,20 +4543,21 @@ class DB_DataObject extends DB_DataObject_Overload $options = $_DB_DATAOBJECT['CONFIG']; $cols = $this->table(); // dont know anything about this col.. - if (!isset($cols[$col])) { + if (!isset($cols[$col]) || is_a($value, 'DB_DataObject_Cast')) { $this->$col = $value; return true; } //echo "FROM VALUE $col, {$cols[$col]}, $value\n"; switch (true) { // set to null and column is can be null... - case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && $value !== 'Null' && (!($cols[$col] & DB_DATAOBJECT_NOTNULL))): + case ((!($cols[$col] & DB_DATAOBJECT_NOTNULL)) && DB_DataObject::_is_null($value, false)): case (is_object($value) && is_a($value,'DB_DataObject_Cast')): $this->$col = $value; return true; // fail on setting null on a not null field.. - case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && $value !== 'Null' && ($cols[$col] & DB_DATAOBJECT_NOTNULL)): + case (($cols[$col] & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($value,false)): + return false; case (($cols[$col] & DB_DATAOBJECT_DATE) && ($cols[$col] & DB_DATAOBJECT_TIME)): @@ -4170,9 +4760,12 @@ class DB_DataObject extends DB_DataObject_Overload * @param int $v level * @access public * @return none + * + * CRM-15212 fix visibility. */ public static function debugLevel($v = null) { + // CRM-15212. ends global $_DB_DATAOBJECT; if (empty($_DB_DATAOBJECT['CONFIG'])) { DB_DataObject::_loadConfig(); @@ -4213,16 +4806,9 @@ class DB_DataObject extends DB_DataObject_Overload if ($behaviour == PEAR_ERROR_DIE && !empty($_DB_DATAOBJECT['CONFIG']['dont_die'])) { $behaviour = null; } - $error = PEAR::getStaticProperty('DB_DataObject','lastError'); - - // this will never work totally with PHP's object model. - // as this is passed on static calls (like staticGet in our case) - if (isset($this) && is_object($this) && is_subclass_of($this,'db_dataobject')) { - $this->_lastError = $error; - } + $error = PEAR::getStaticProperty('DB_DataObject','lastError'); - $_DB_DATAOBJECT['LASTERROR'] = $error; // no checks for production here?....... - we log errors before we throw them. DB_DataObject::debug($message,'ERROR',1); @@ -4232,10 +4818,19 @@ class DB_DataObject extends DB_DataObject_Overload $error = $message; } else { require_once 'DB/DataObject/Error.php'; - $error = PEAR::raiseError($message, $type, $behaviour, + $dor = new PEAR(); + $error = $dor->raiseError($message, $type, $behaviour, $opts=null, $userinfo=null, 'DB_DataObject_Error' ); } + // this will never work totally with PHP's object model. + // as this is passed on static calls (like staticGet in our case) + + $_DB_DATAOBJECT['LASTERROR'] = $error; + + if (isset($this) && is_object($this) && is_subclass_of($this,'db_dataobject')) { + $this->_lastError = $error; + } return $error; } @@ -4282,20 +4877,145 @@ class DB_DataObject extends DB_DataObject_Overload if (isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) { $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->num_rows = array(); } + if (is_array($this->_link_loaded)) { foreach ($this->_link_loaded as $do) { if ( !empty($this->{$do}) && is_object($this->{$do}) && - method_exists($this->{$do}, 'free') + method_exists($this->{$do}, 'free') ) { $this->{$do}->free(); } } } + + } + /** + * Evaluate whether or not a value is set to null, taking the 'disable_null_strings' option into account. + * If the value is a string set to "null" and the "disable_null_strings" option is not set to + * true, then the value is considered to be null. + * If the value is actually a PHP NULL value, and "disable_null_strings" has been set to + * the value "full", then it will also be considered null. - this can not differenticate between not set + * + * + * @param object|array $obj_or_ar + * @param string|false $prop prperty + + * @access private + * @return bool object + */ + function _is_null($obj_or_ar , $prop) + { + global $_DB_DATAOBJECT; + + + $isset = $prop === false ? isset($obj_or_ar) : + (is_array($obj_or_ar) ? isset($obj_or_ar[$prop]) : isset($obj_or_ar->$prop)); + + $value = $isset ? + ($prop === false ? $obj_or_ar : + (is_array($obj_or_ar) ? $obj_or_ar[$prop] : $obj_or_ar->$prop)) + : null; + + + + $options = $_DB_DATAOBJECT['CONFIG']; + + $null_strings = !isset($options['disable_null_strings']) + || $options['disable_null_strings'] === false; + + $crazy_null = isset($options['disable_null_strings']) + && is_string($options['disable_null_strings']) + && strtolower($options['disable_null_strings'] === 'full'); + + // CRM-15522 Ensure that Last name of Null is validly stored. + if ( $null_strings && $isset && is_string($value) && (strtolower($value) === 'null') && $value !== 'Null') { + // CRM-15522 ends + return true; + } + + if ( $crazy_null && !$isset ) { + return true; + } + + return false; + + } + /** + * (deprecated - use ::get / and your own caching method) + */ + static function staticGet($class, $k, $v = null) + { + $lclass = strtolower($class); + global $_DB_DATAOBJECT; + if (empty($_DB_DATAOBJECT['CONFIG'])) { + DB_DataObject::_loadConfig(); + } + + + + $key = "$k:$v"; + if ($v === null) { + $key = $k; + } + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { + DB_DataObject::debug("$class $key","STATIC GET - TRY CACHE"); + } + if (!empty($_DB_DATAOBJECT['CACHE'][$lclass][$key])) { + return $_DB_DATAOBJECT['CACHE'][$lclass][$key]; + } + if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) { + DB_DataObject::debug("$class $key","STATIC GET - NOT IN CACHE"); + } + + $obj = DB_DataObject::factory(substr($class,strlen($_DB_DATAOBJECT['CONFIG']['class_prefix']))); + if (PEAR::isError($obj)) { + $dor = new DB_DataObject(); + $dor->raiseError("could not autoload $class", DB_DATAOBJECT_ERROR_NOCLASS); + $r = false; + return $r; + } + + if (!isset($_DB_DATAOBJECT['CACHE'][$lclass])) { + $_DB_DATAOBJECT['CACHE'][$lclass] = array(); + } + if (!$obj->get($k,$v)) { + $dor = new DB_DataObject(); + $dor->raiseError("No Data return from get $k $v", DB_DATAOBJECT_ERROR_NODATA); + + $r = false; + return $r; + } + $_DB_DATAOBJECT['CACHE'][$lclass][$key] = $obj; + return $_DB_DATAOBJECT['CACHE'][$lclass][$key]; + } + + /** + * autoload Class relating to a table + * (deprecited - use ::factory) + * + * @param string $table table + * @access private + * @return string classname on Success + */ + function staticAutoloadTable($table) + { + global $_DB_DATAOBJECT; + if (empty($_DB_DATAOBJECT['CONFIG'])) { + DB_DataObject::_loadConfig(); + } + $p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ? + $_DB_DATAOBJECT['CONFIG']['class_prefix'] : ''; + $class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)); + + $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class); + $class = $ce ? $class : DB_DataObject::_autoloadClass($class); + return $class; + } /* ---- LEGACY BC METHODS - NOT DOCUMENTED - See Documentation on New Methods. ---*/ @@ -4310,6 +5030,8 @@ class DB_DataObject extends DB_DataObject_Overload * @param float $timeTaken * * @return string + * + * function only needed for CRM-18093. */ public function getAlertLevel($timeTaken) { if ($timeTaken >= 20) { @@ -4327,11 +5049,6 @@ class DB_DataObject extends DB_DataObject_Overload return ''; } - public function lastInsertId() { - $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]; - return $DB->lastInsertId(); - } - } // technially 4.3.2RC1 was broken!! // looks like 4.3.3 may have problems too.... @@ -4345,3 +5062,4 @@ if (!defined('DB_DATAOBJECT_NO_OVERLOAD')) { } } + diff --git a/civicrm/packages/DB/DataObject/Cast.php b/civicrm/packages/DB/DataObject/Cast.php index 2049beb581f54357a3463724e42e9ab7cfd24ccc..7fa5a280d16c5532f0ba6981470d1530f560683f 100644 --- a/civicrm/packages/DB/DataObject/Cast.php +++ b/civicrm/packages/DB/DataObject/Cast.php @@ -20,9 +20,9 @@ * @version CVS: $Id: Cast.php 287158 2009-08-12 13:58:31Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ - + /** -* +* * Common usages: * // blobs * $data = DB_DataObject_Cast::blob($somefile); @@ -33,7 +33,7 @@ * $d1 = new DB_DataObject_Cast::date('12/12/2000'); * $d2 = new DB_DataObject_Cast::date(2000,12,30); * $d3 = new DB_DataObject_Cast::date($d1->year, $d1->month+30, $d1->day+30); -* +* * // time, datetime.. ????????? * * // raw sql???? @@ -42,8 +42,8 @@ * * // int's/string etc. are proably pretty pointless..!!!! * -* -* inside DB_DataObject, +* +* inside DB_DataObject, * if (is_a($v,'db_dataobject_class')) { * $value .= $v->toString(DB_DATAOBJECT_INT,'mysql'); * } @@ -52,17 +52,17 @@ * * -*/ +*/ class DB_DataObject_Cast { - + /** * Type of data Stored in the object.. * * @var string (date|blob|.....?) - * @access public + * @access public */ var $type; - + /** * Data For date representation * @@ -73,7 +73,7 @@ class DB_DataObject_Cast { var $month; var $year; - + /** * Generic Data.. * @@ -89,14 +89,14 @@ class DB_DataObject_Cast { * Blob consructor * * create a Cast object from some raw data.. (binary) - * - * + * + * * @param string (with binary data!) * * @return object DB_DataObject_Cast - * @access public + * @access public */ - + function blob($value) { $r = new DB_DataObject_Cast; $r->type = 'blob'; @@ -109,33 +109,33 @@ class DB_DataObject_Cast { * String consructor (actually use if for ints and everything else!!! * * create a Cast object from some string (not binary) - * - * + * + * * @param string (with binary data!) * * @return object DB_DataObject_Cast - * @access public + * @access public */ - + function string($value) { $r = new DB_DataObject_Cast; $r->type = 'string'; $r->value = $value; return $r; } - + /** * SQL constructor (for raw SQL insert) * * create a Cast object from some sql - * + * * @param string (with binary data!) * * @return object DB_DataObject_Cast - * @access public + * @access public */ - - function sql($value) + + function sql($value) { $r = new DB_DataObject_Cast; $r->type = 'sql'; @@ -149,7 +149,7 @@ class DB_DataObject_Cast { * * create a Cast object from some string (not binary) * NO VALIDATION DONE, although some crappy re-calcing done! - * + * * @param vargs... accepts * dd/mm * dd/mm/yyyy @@ -161,18 +161,18 @@ class DB_DataObject_Cast { * * * @return object DB_DataObject_Cast - * @access public + * @access public */ - - function date() - { + + function date() + { $args = func_get_args(); switch(count($args)) { case 0: // no args = today! $bits = explode('-',date('Y-m-d')); break; - case 1: // one arg = a string - + case 1: // one arg = a string + if (strpos($args[0],'/') !== false) { $bits = array_reverse(explode('/',$args[0])); } else { @@ -185,11 +185,11 @@ class DB_DataObject_Cast { if (count($bits) == 1) { // if YYYY set day = 1st.. $bits[] = 1; } - + if (count($bits) == 2) { // if YYYY-DD set day = 1st.. $bits[] = 1; } - + // if year < 1970 we cant use system tools to check it... // so we make a few best gueses.... // basically do date calculations for the year 2000!!! @@ -207,8 +207,8 @@ class DB_DataObject_Cast { list($r->year,$r->month,$r->day) = $bits; return $r; } - - + + /** * Data For time representation ** does not handle timezones!! @@ -220,61 +220,61 @@ class DB_DataObject_Cast { var $minute; var $second; - + /** * DateTime Constructor * * create a Cast object from a Date/Time * Maybe should accept a Date object.! * NO VALIDATION DONE, although some crappy re-calcing done! - * + * * @param vargs... accepts * noargs (now) * yyyy-mm-dd HH:MM:SS (Iso) - * array(yyyy,mm,dd,HH,MM,SS) + * array(yyyy,mm,dd,HH,MM,SS) * * * @return object DB_DataObject_Cast - * @access public + * @access public * @author therion 5 at hotmail */ - + function dateTime() { $args = func_get_args(); switch(count($args)) { case 0: // no args = now! $datetime = date('Y-m-d G:i:s', mktime()); - + case 1: // continue on from 0 args. if (!isset($datetime)) { $datetime = $args[0]; } - + $parts = explode(' ', $datetime); $bits = explode('-', $parts[0]); $bits = array_merge($bits, explode(':', $parts[1])); break; - + default: // 2 or more.. $bits = $args; - + } if (count($bits) != 6) { // PEAR ERROR? return false; } - + $r = DB_DataObject_Cast::date($bits[0], $bits[1], $bits[2]); if (!$r) { return $r; // pass thru error (False) - doesnt happen at present! } // change the type! $r->type = 'datetime'; - - // should we mathematically sort this out.. + + // should we mathematically sort this out.. // (or just assume that no-one's dumb enough to enter 26:90:90 as a time! $r->hour = $bits[3]; $r->minute = $bits[4]; @@ -295,11 +295,11 @@ class DB_DataObject_Cast { * @param vargs... accepts * noargs (now) * HH:MM:SS (Iso) - * array(HH,MM,SS) + * array(HH,MM,SS) * * * @return object DB_DataObject_Cast - * @access public + * @access public * @author therion 5 at hotmail */ function time() @@ -308,7 +308,7 @@ class DB_DataObject_Cast { switch (count($args)) { case 0: // no args = now! $time = date('G:i:s', mktime()); - + case 1: // continue on from 0 args. if (!isset($time)) { @@ -316,16 +316,16 @@ class DB_DataObject_Cast { } $bits = explode(':', $time); break; - + default: // 2 or more.. $bits = $args; - + } - + if (count($bits) != 3) { return false; } - + // now take data from bits into object fields $r = new DB_DataObject_Cast; $r->type = 'time'; @@ -336,162 +336,179 @@ class DB_DataObject_Cast { } - - + + /** * get the string to use in the SQL statement for this... * - * + * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public */ - - function toString($to=false,$db) + + function toString($to=false,$db) { // if $this->type is not set, we are in serious trouble!!!! // values for to: $method = 'toStringFrom'.$this->type; return $this->$method($to,$db); } - + /** - * get the string to use in the SQL statement from a blob of binary data + * get the string to use in the SQL statement from a blob of binary data * ** Suppots only blob->postgres::bytea * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public */ - function toStringFromBlob($to,$db) + function toStringFromBlob($to,$db) { // first weed out invalid casts.. // in blobs can only be cast to blobs.! - + // perhaps we should support TEXT fields??? - + if (!($to & DB_DATAOBJECT_BLOB)) { return PEAR::raiseError('Invalid Cast from a DB_DataObject_Cast::blob to something other than a blob!'); } - + switch ($db->dsn["phptype"]) { case 'pgsql': return "'".pg_escape_bytea($this->value)."'::bytea"; - + case 'mysql': return "'".mysql_real_escape_string($this->value,$db->connection)."'"; - + case 'mysqli': // this is funny - the parameter order is reversed ;) return "'".mysqli_real_escape_string($db->connection, $this->value)."'"; - + case 'sqlite': // this is funny - the parameter order is reversed ;) return "'".sqlite_escape_string($this->value)."'"; - - + + case 'mssql': + + if(is_numeric($this->value)) { + return $this->value; + } + $unpacked = unpack('H*hex', $this->value); + return '0x' . $unpacked['hex']; + + + default: return PEAR::raiseError("DB_DataObject_Cast cant handle blobs for Database:{$db->dsn['phptype']} Yet"); } - + } - + /** * get the string to use in the SQL statement for a blob from a string! * ** Suppots only string->postgres::bytea - * + * * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public */ - function toStringFromString($to,$db) + function toStringFromString($to,$db) { // first weed out invalid casts.. // in blobs can only be cast to blobs.! - + // perhaps we should support TEXT fields??? - // - - if (!($to & DB_DATAOBJECT_BLOB)) { - return PEAR::raiseError('Invalid Cast from a DB_DataObject_Cast::string to something other than a blob!'. - ' (why not just use native features)'); - } - + // + + // $to == a string field which is the default type (0) + // so we do not test it here. - we assume that number fields + // will accept a string?? - which is stretching it a bit ... + // should probaly add that test as some point. + switch ($db->dsn['phptype']) { case 'pgsql': return "'".pg_escape_string($this->value)."'::bytea"; - + case 'mysql': return "'".mysql_real_escape_string($this->value,$db->connection)."'"; - - + + case 'mysqli': return "'".mysqli_real_escape_string($db->connection, $this->value)."'"; - + case 'mssql': + // copied from the old DB mssql code...?? not sure how safe this is. + return "'" . str_replace( + array("'", "\\\r\n", "\\\n"), + array("''", "\\\\\r\n\r\n", "\\\\\n\n"), + $this->value + ) . "'"; + + default: return PEAR::raiseError("DB_DataObject_Cast cant handle blobs for Database:{$db->dsn['phptype']} Yet"); } - + } - - + + /** * get the string to use in the SQL statement for a date - * - * + * + * * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public */ - function toStringFromDate($to,$db) + function toStringFromDate($to,$db) { // first weed out invalid casts.. // in blobs can only be cast to blobs.! // perhaps we should support TEXT fields??? - // - + // + if (($to !== false) && !($to & DB_DATAOBJECT_DATE)) { return PEAR::raiseError('Invalid Cast from a DB_DataObject_Cast::string to something other than a date!'. ' (why not just use native features)'); } return "'{$this->year}-{$this->month}-{$this->day}'"; } - + /** * get the string to use in the SQL statement for a datetime - * - * + * + * * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public * @author therion 5 at hotmail */ - - function toStringFromDateTime($to,$db) + + function toStringFromDateTime($to,$db) { // first weed out invalid casts.. // in blobs can only be cast to blobs.! // perhaps we should support TEXT fields??? - if (($to !== false) && + if (($to !== false) && !($to & (DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME))) { return PEAR::raiseError('Invalid Cast from a ' . ' DB_DataObject_Cast::dateTime to something other than a datetime!' . @@ -502,48 +519,47 @@ class DB_DataObject_Cast { /** * get the string to use in the SQL statement for a time - * - * + * + * * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public * @author therion 5 at hotmail */ - function toStringFromTime($to,$db) + function toStringFromTime($to,$db) { // first weed out invalid casts.. // in blobs can only be cast to blobs.! // perhaps we should support TEXT fields??? if (($to !== false) && !($to & DB_DATAOBJECT_TIME)) { - return PEAR::raiseError('Invalid Cast from a' . + return PEAR::raiseError('Invalid Cast from a' . ' DB_DataObject_Cast::time to something other than a time!'. ' (try using native features)'); } return "'{$this->hour}:{$this->minute}:{$this->second}'"; } - + /** * get the string to use in the SQL statement for a raw sql statement. * * @param int $to Type (DB_DATAOBJECT_* * @param object $db DB Connection Object - * * - * @return string + * + * @return string * @access public */ - function toStringFromSql($to,$db) + function toStringFromSql($to,$db) { - return $this->value; + return $this->value; } - - - - + + + } diff --git a/civicrm/packages/DB/DataObject/Error.php b/civicrm/packages/DB/DataObject/Error.php index bb04d6457ea304ec636c1e53dc669c3074bb0a96..174108c428431a9166388a51cef7586549a3ab53 100644 --- a/civicrm/packages/DB/DataObject/Error.php +++ b/civicrm/packages/DB/DataObject/Error.php @@ -21,11 +21,11 @@ * @version CVS: $Id: Error.php 287158 2009-08-12 13:58:31Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ - - + + class DB_DataObject_Error extends PEAR_Error { - + /** * DB_DataObject_Error constructor. * @@ -42,12 +42,12 @@ class DB_DataObject_Error extends PEAR_Error $level = E_USER_NOTICE) { parent::__construct('DB_DataObject Error: ' . $message, $code, $mode, $level); - + } - - + + // todo : - support code -> message handling, and translated error messages... - - - + + + } diff --git a/civicrm/packages/DB/DataObject/Generator.php b/civicrm/packages/DB/DataObject/Generator.php index 8ac19d189bd3dd7ac9b8f29824af0d1eab4aa8e7..d51b4e25fc9abe14acfc0b389a344a43c2e24093 100644 --- a/civicrm/packages/DB/DataObject/Generator.php +++ b/civicrm/packages/DB/DataObject/Generator.php @@ -15,10 +15,10 @@ * @author Alan Knowles <alan@akbkhome.com> * @copyright 1997-2006 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 - * @version CVS: $Id: Generator.php 284150 2009-07-15 23:27:59Z alan_k $ + * @version CVS: $Id: Generator.php 336719 2015-05-05 10:37:33Z alan_k $ * @link http://pear.php.net/package/DB_DataObject */ - + /* * Security Notes: * This class uses eval to create classes on the fly. @@ -26,14 +26,14 @@ * class definitions, we now check for quotes and semi-colon's in both variables * so I cant see how it would be possible to generate code even if * for some crazy reason you took the classname and table name from User Input. - * + * * If you consider that wrong, or can prove it.. let me know! */ - + /** - * + * * Config _$ptions - * [DB_DataObject_Generator] + * [DB_DataObject] * ; optional default = DB/DataObject.php * extends_location = * ; optional default = DB_DataObject @@ -86,6 +86,13 @@ class DB_DataObject_Generator extends DB_DataObject */ var $table; // active tablename + /** + * links (generated) + * + * @var array + * @access private + */ + var $_fkeys; // active tablename /** * The 'starter' = call this to start the process @@ -142,6 +149,7 @@ class DB_DataObject_Generator extends DB_DataObject $t->_database = basename($t->_database); } $t->_createTableList(); + $t->_createForiegnKeys(); foreach(get_class_methods($class) as $method) { if (substr($method,0,8 ) != 'generate') { @@ -173,17 +181,20 @@ class DB_DataObject_Generator extends DB_DataObject function _createTableList() { $this->_connect(); + $options = PEAR::getStaticProperty('DB_DataObject','options'); + + $__DB= &$GLOBALS['_DB_DATAOBJECT']['CONNECTIONS'][$this->_database_dsn_md5]; $db_driver = empty($options['db_driver']) ? 'DB' : $options['db_driver']; $is_MDB2 = ($db_driver != 'DB') ? true : false; - if (is_a($__DB , 'PEAR_Error')) { + if (is_object($__DB) && is_a($__DB , 'PEAR_Error')) { return PEAR::raiseError($__DB->toString(), null, PEAR_ERROR_DIE); } - + if (!$is_MDB2) { // try getting a list of schema tables first. (postgres) $__DB->expectError(DB_ERROR_UNSUPPORTED); @@ -197,12 +208,12 @@ class DB_DataObject_Generator extends DB_DataObject if (empty($db_options)) { $__DB->setOption('portability', MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE); } - + $__DB->loadModule('Manager'); $__DB->loadModule('Reverse'); } - if ((empty($this->tables) || is_a($this->tables , 'PEAR_Error'))) { + if ((empty($this->tables) || (is_object($this->tables) && is_a($this->tables , 'PEAR_Error')))) { //if that fails fall back to clasic tables list. if (!$is_MDB2) { // try getting a list of schema tables first. (postgres) @@ -218,18 +229,19 @@ class DB_DataObject_Generator extends DB_DataObject } } - if (is_a($this->tables , 'PEAR_Error')) { + if (is_object($this->tables) && is_a($this->tables , 'PEAR_Error')) { return PEAR::raiseError($this->tables->toString(), null, PEAR_ERROR_DIE); } // build views as well if asked to. if (!empty($options['build_views'])) { if (!$is_MDB2) { - $views = $__DB->getListOf('views'); + $views = $__DB->getListOf(is_string($options['build_views']) ? + $options['build_views'] : 'views'); } else { $views = $__DB->manager->listViews(); } - if (is_a($views,'PEAR_Error')) { + if (is_object($views) && is_a($views,'PEAR_Error')) { return PEAR::raiseError( 'Error getting Views (check the PEAR bug database for the fix to DB), ' . $views->toString(), @@ -246,34 +258,48 @@ class DB_DataObject_Generator extends DB_DataObject foreach($this->tables as $table) { if (isset($options['generator_include_regex']) && - !preg_match($options['generator_include_regex'],$table)) { + !preg_match($options['generator_include_regex'],$table)) { + $this->debug("SKIPPING (generator_include_regex) : $table"); continue; - } else if (isset($options['generator_exclude_regex']) && - preg_match($options['generator_exclude_regex'],$table)) { + } + + if (isset($options['generator_exclude_regex']) && + preg_match($options['generator_exclude_regex'],$table)) { continue; } + + $strip = empty($options['generator_strip_schema']) ? false : $options['generator_strip_schema']; + $strip = is_numeric($strip) ? (bool) $strip : $strip; + $strip = (is_string($strip) && strtolower($strip) == 'true') ? true : $strip; + // postgres strip the schema bit from the - if (!empty($options['generator_strip_schema'])) { - $bits = explode('.', $table,2); - $table = $bits[0]; - if (count($bits) > 1) { - $table = $bits[1]; + if (!empty($strip) ) { + + if (!is_string($strip) || preg_match($strip, $table)) { + $bits = explode('.', $table,2); + $table = $bits[0]; + if (count($bits) > 1) { + $table = $bits[1]; + } } } - $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? + $this->debug("EXTRACTING : $table"); + + $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $__DB->quoteIdentifier($table) : $table; - + if (!$is_MDB2) { - + $defs = $__DB->tableInfo($quotedTable); } else { $defs = $__DB->reverse->tableInfo($quotedTable); // rename the length value, so it matches db's return. - + } - if (is_a($defs,'PEAR_Error')) { + if (is_object($defs) && is_a($defs,'PEAR_Error')) { // running in debug mode should pick this up as a big warning.. + $this->debug("Error reading tableInfo: $table"); $this->raiseError('Error reading tableInfo, '. $defs->toString()); continue; } @@ -300,9 +326,10 @@ class DB_DataObject_Generator extends DB_DataObject // the temporary table array is now the right one (tables names matching // with regex expressions have been removed) $this->tables = $tmp_table; + //print_r($this->_definitions); } - + /** * Auto generation of table data. * @@ -342,7 +369,7 @@ class DB_DataObject_Generator extends DB_DataObject } else { $file = "{$base}/{$this->_database}.ini"; } - + if (!file_exists(dirname($file))) { require_once 'System.php'; System::mkdir(array('-p','-m',0755,dirname($file))); @@ -352,13 +379,19 @@ class DB_DataObject_Generator extends DB_DataObject $tmpname = tempnam(session_save_path(),'DataObject_'); //print_r($this->_newConfig); $fh = fopen($tmpname,'w'); + if (!$fh) { + return PEAR::raiseError( + "Failed to create temporary file: $tmpname\n". + "make sure session.save_path is set and is writable\n" + ,null, PEAR_ERROR_DIE); + } fwrite($fh,$this->_newConfig); fclose($fh); $perms = file_exists($file) ? fileperms($file) : 0755; // windows can fail doing this. - not a perfect solution but otherwise it's getting really kludgy.. - - if (!@rename($tmpname, $file)) { - unlink($file); + + if (!@rename($tmpname, $file)) { + unlink($file); rename($tmpname, $file); } chmod($file,$perms); @@ -368,57 +401,128 @@ class DB_DataObject_Generator extends DB_DataObject // return PEAR::raiseError($ret->message,null,PEAR_ERROR_DIE); // } } - - /** - * generate Foreign Keys (for links.ini) - * Currenly only works with mysql / mysqli + /** + * create the data for Foreign Keys (for links.ini) + * Currenly only works with mysql / mysqli / posgtreas * to use, you must set option: generate_links=true - * - * @author Pascal Sch�ni + * + * @author Pascal Sch�ni */ - function generateForeignKeys() + + function _createForiegnKeys() { $options = PEAR::getStaticProperty('DB_DataObject','options'); if (empty($options['generate_links'])) { return false; } $__DB = &$GLOBALS['_DB_DATAOBJECT']['CONNECTIONS'][$this->_database_dsn_md5]; - if (!in_array($__DB->phptype, array('mysql','mysqli'))) { - echo "WARNING: cant handle non-mysql introspection for defaults."; + if (!in_array($__DB->phptype, array('mysql', 'mysqli', 'pgsql'))) { + echo "WARNING: cant handle non-mysql and pgsql introspection for defaults."; return; // cant handle non-mysql introspection for defaults. } - + $this->debug("generateForeignKeys: Start"); $DB = $this->getDatabaseConnection(); $fk = array(); - foreach($this->tables as $this->table) { - $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $DB->quoteIdentifier($table) : $this->table; - - $res =& $DB->query('SHOW CREATE TABLE ' . $quotedTable ); - if (PEAR::isError($res)) { - die($res->getMessage()); - } + switch ($DB->phptype) { - $text = $res->fetchRow(DB_FETCHMODE_DEFAULT, 0); - $treffer = array(); - // Extract FOREIGN KEYS - preg_match_all( - "/FOREIGN KEY \(`(\w*)`\) REFERENCES `(\w*)` \(`(\w*)`\)/i", - $text[1], - $treffer, - PREG_SET_ORDER); - if (count($treffer) < 1) { - continue; - } - for ($i = 0; $i < count($treffer); $i++) { - $fk[$this->table][$treffer[$i][1]] = $treffer[$i][2] . ":" . $treffer[$i][3]; - } - + case 'pgsql': + foreach($this->tables as $this->table) { + $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $DB->quoteIdentifier($table) : $this->table; + $res =& $DB->query("SELECT + pg_catalog.pg_get_constraintdef(r.oid, true) AS condef + FROM pg_catalog.pg_constraint r, + pg_catalog.pg_class c + WHERE c.oid=r.conrelid + AND r.contype = 'f' + AND c.relname = '" . $quotedTable . "'"); + if (PEAR::isError($res)) { + die($res->getMessage()); + } + + while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) { + $treffer = array(); + // this only picks up one of these.. see this for why: http://pear.php.net/bugs/bug.php?id=17049 + preg_match( + "/FOREIGN KEY \((\w*)\) REFERENCES (\w*)\((\w*)\)/i", + $row['condef'], + $treffer); + if (!count($treffer)) { + continue; + } + $fk[$this->table][$treffer[1]] = $treffer[2] . ":" . $treffer[3]; + } + } + break; + + + case 'mysql': + case 'mysqli': + default: + + foreach($this->tables as $this->table) { + $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $DB->quoteIdentifier($table) : $this->table; + + $res =& $DB->query('SHOW CREATE TABLE ' . $quotedTable ); + + if (PEAR::isError($res)) { + die($res->getMessage()); + } + + $text = $res->fetchRow(DB_FETCHMODE_DEFAULT, 0); + $treffer = array(); + // Extract FOREIGN KEYS + preg_match_all( + "/FOREIGN KEY \(`(\w*)`\) REFERENCES `(\w*)` \(`(\w*)`\)/i", + $text[1], + $treffer, + PREG_SET_ORDER); + + if (!count($treffer)) { + continue; + } + foreach($treffer as $i=> $tref) { + $fk[$this->table][$tref[1]] = $tref[2] . ":" . $tref[3]; + } + + } + + } + + + $this->_fkeys = $fk; + + + + + + } + + + /** + * generate Foreign Keys (for links.ini) + * Currenly only works with mysql / mysqli + * to use, you must set option: generate_links=true + * + * @author Pascal Sch�ni + */ + function generateForeignKeys() + { + $options = PEAR::getStaticProperty('DB_DataObject','options'); + if (empty($options['generate_links'])) { + return false; } + $__DB = &$GLOBALS['_DB_DATAOBJECT']['CONNECTIONS'][$this->_database_dsn_md5]; + if (!in_array($__DB->phptype, array('mysql', 'mysqli', 'pgsql'))) { + echo "WARNING: cant handle non-mysql and pgsql introspection for defaults."; + return; // cant handle non-mysql introspection for defaults. + } + $this->debug("generateForeignKeys: Start"); + $fk = $this->_fkeys; $links_ini = ""; foreach($fk as $table => $details) { @@ -433,36 +537,44 @@ class DB_DataObject_Generator extends DB_DataObject // it's created on the fly! $options = PEAR::getStaticProperty('DB_DataObject','options'); - if (empty($options['schema_location'])) { + if (!empty($options['schema_location'])) { + $file = "{$options['schema_location']}/{$this->_database}.links.ini"; + } elseif (isset($options["ini_{$this->_database}"])) { + $file = preg_replace('/\.ini/','.links.ini',$options["ini_{$this->_database}"]); + } else { + $this->debug("generateForeignKeys: SKIP - schema_location or ini_{database} was not set"); return; } - - $file = "{$options['schema_location']}/{$this->_database}.links.ini"; if (!file_exists(dirname($file))) { - require_once 'System.php'; - System::mkdir(array('-p','-m',0755,dirname($file))); + mkdir(dirname($file),0755, true); } $this->debug("Writing ini as {$file}\n"); - + //touch($file); // not sure why this is needed? $tmpname = tempnam(session_save_path(),'DataObject_'); - + $fh = fopen($tmpname,'w'); + if (!$fh) { + return PEAR::raiseError( + "Failed to create temporary file: $tmpname\n". + "make sure session.save_path is set and is writable\n" + ,null, PEAR_ERROR_DIE); + } fwrite($fh,$links_ini); fclose($fh); $perms = file_exists($file) ? fileperms($file) : 0755; // windows can fail doing this. - not a perfect solution but otherwise it's getting really kludgy.. - if (!@rename($tmpname, $file)) { - unlink($file); + if (!@rename($tmpname, $file)) { + unlink($file); rename($tmpname, $file); } chmod($file, $perms); } - + /** * The table geneation part * @@ -484,23 +596,23 @@ class DB_DataObject_Generator extends DB_DataObject } $DB = $this->getDatabaseConnection(); $dbtype = $DB->phptype; - + $ret = array( 'table' => array(), 'keys' => array(), ); - + $ret_keys_primary = array(); $ret_keys_secondary = array(); - - - + + + foreach($defs as $t) { - + $n=0; $write_ini = true; - - + + switch (strtoupper($t->type)) { case 'INT': @@ -519,7 +631,7 @@ class DB_DataObject_Generator extends DB_DataObject $type += DB_DATAOBJECT_BOOL; } break; - + case 'REAL': case 'DOUBLE': case 'DOUBLE PRECISION': // double precision (firebird) @@ -529,92 +641,93 @@ class DB_DataObject_Generator extends DB_DataObject case 'DECIMAL': case 'MONEY': // mssql and maybe others case 'NUMERIC': - case 'NUMBER': // oci8 + case 'NUMBER': // oci8 $type = DB_DATAOBJECT_INT; // should really by FLOAT!!! / MONEY... break; - + case 'YEAR': - $type = DB_DATAOBJECT_INT; + $type = DB_DATAOBJECT_INT; break; - + case 'BIT': - case 'BOOL': - case 'BOOLEAN': - + case 'BOOL': + case 'BOOLEAN': + $type = DB_DATAOBJECT_BOOL; // postgres needs to quote '0' if ($dbtype == 'pgsql') { $type += DB_DATAOBJECT_STR; } break; - + case 'STRING': case 'CHAR': case 'VARCHAR': case 'VARCHAR2': case 'TINYTEXT': - + case 'ENUM': case 'SET': // not really but oh well - + case 'POINT': // mysql geometry stuff - not really string - but will do.. - + case 'TIMESTAMPTZ': // postgres case 'BPCHAR': // postgres case 'INTERVAL': // postgres (eg. '12 days') - + case 'CIDR': // postgres IP net spec case 'INET': // postgres IP case 'MACADDR': // postgress network Mac address. - + case 'INTEGER[]': // postgres type case 'BOOLEAN[]': // postgres type - + $type = DB_DATAOBJECT_STR; break; - + case 'TEXT': case 'MEDIUMTEXT': case 'LONGTEXT': - + case '_TEXT': //postgres (?? view ??) + $type = DB_DATAOBJECT_STR + DB_DATAOBJECT_TXT; break; - - - case 'DATE': + + + case 'DATE': $type = DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE; break; - - case 'TIME': + + case 'TIME': $type = DB_DATAOBJECT_STR + DB_DATAOBJECT_TIME; - break; - - - case 'DATETIME': - + break; + + + case 'DATETIME': + $type = DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME; - break; - + break; + case 'TIMESTAMP': // do other databases use this??? - + $type = ($dbtype == 'mysql') ? - DB_DATAOBJECT_MYSQLTIMESTAMP : + DB_DATAOBJECT_MYSQLTIMESTAMP : DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME; - break; - - + break; + + case 'BLOB': /// these should really be ignored!!!??? case 'TINYBLOB': case 'MEDIUMBLOB': case 'LONGBLOB': - + case 'CLOB': // oracle character lob support - + case 'BYTEA': // postgres blob support.. $type = DB_DATAOBJECT_STR + DB_DATAOBJECT_BLOB; break; - - default: + + default: echo "*****************************************************************\n". "** WARNING UNKNOWN TYPE **\n". "** Found column '{$t->name}', of type '{$t->type}' **\n". @@ -627,7 +740,7 @@ class DB_DataObject_Generator extends DB_DataObject $write_ini = false; break; } - + if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $t->name)) { echo "*****************************************************************\n". "** WARNING COLUMN NAME UNUSABLE **\n". @@ -638,16 +751,16 @@ class DB_DataObject_Generator extends DB_DataObject "*****************************************************************\n"; continue; } - + if (!strlen(trim($t->name))) { continue; // is this a bug? } - + if (preg_match('/not[ _]null/i',$t->flags)) { $type += DB_DATAOBJECT_NOTNULL; } - - + + if (in_array($t->name,array('null','yes','no','true','false'))) { echo "*****************************************************************\n". "** WARNING **\n". @@ -659,49 +772,55 @@ class DB_DataObject_Generator extends DB_DataObject } else { $this->_newConfig .= "{$t->name} = $type\n"; } - + $ret['table'][$t->name] = $type; // i've no idea if this will work well on other databases? // only use primary key or nextval(), cause the setFrom blocks you setting all key items... // if no keys exist fall back to using unique //echo "\n{$t->name} => {$t->flags}\n"; $secondary_key_match = isset($options['generator_secondary_key_match']) ? $options['generator_secondary_key_match'] : 'primary|unique'; - - if (preg_match('/(auto_increment|nextval\()/i',rawurldecode($t->flags)) + + $m = array(); + if (preg_match('/(auto_increment|nextval\(([^)]*))/i',rawurldecode($t->flags),$m) || (isset($t->autoincrement) && ($t->autoincrement === true))) { - + + $sn = 'N'; + if ($DB->phptype == 'pgsql' && !empty($m[2])) { + $sn = preg_replace('/[("]+/','', $m[2]); + //echo urldecode($t->flags) . "\n" ; + } // native sequences = 2 if ($write_ini) { - $keys_out_primary .= "{$t->name} = N\n"; + $keys_out_primary .= "{$t->name} = $sn\n"; } - $ret_keys_primary[$t->name] = 'N'; - + $ret_keys_primary[$t->name] = $sn; + } else if ($secondary_key_match && preg_match('/('.$secondary_key_match.')/i',$t->flags)) { // keys.. = 1 $key_type = 'K'; if (!preg_match("/(primary)/i",$t->flags)) { $key_type = 'U'; } - + if ($write_ini) { $keys_out_secondary .= "{$t->name} = {$key_type}\n"; } $ret_keys_secondary[$t->name] = $key_type; } - - + + } - + $this->_newConfig .= $keys_out . (empty($keys_out_primary) ? $keys_out_secondary : $keys_out_primary); $ret['keys'] = empty($keys_out_primary) ? $ret_keys_secondary : $ret_keys_primary; - + if (@$_DB_DATAOBJECT['CONFIG']['debug'] > 2) { print_r(array("dump for {$this->table}", $ret)); } - + return $ret; - - + + } /** @@ -710,62 +829,62 @@ class DB_DataObject_Generator extends DB_DataObject * @access public * @return string class name; */ - - + + function getClassNameFromTableName($table) { - $options = PEAR::getStaticProperty('DB_DataObject','options'); + $options = EAR::getStaticProperty('DB_DataObject','options'); $class_prefix = empty($options['class_prefix']) ? '' : $options['class_prefix']; return $class_prefix.preg_replace('/[^A-Z0-9]/i','_',ucfirst(trim($this->table))); } - - + + /** * Convert a table name into a file name -> override this if you want a different mapping * * @access public * @return string file name; */ - - + + function getFileNameFromTableName($table) { $options = PEAR::getStaticProperty('DB_DataObject','options'); $base = $options['class_location']; if (strpos($base,'%s') !== false) { $base = dirname($base); - } + } if (!file_exists($base)) { require_once 'System.php'; System::mkdir(array('-p',$base)); } if (strpos($options['class_location'],'%s') !== false) { - $outfilename = sprintf($options['class_location'], + $outfilename = sprintf($options['class_location'], preg_replace('/[^A-Z0-9]/i','_',ucfirst($this->table))); - } else { + } else { $outfilename = "{$base}/".preg_replace('/[^A-Z0-9]/i','_',ucfirst($this->table)).".php"; } return $outfilename; - + } - - + + /** * Convert a column name into a method name (usually prefixed by get/set/validateXXXXX) * * @access public * @return string method name; */ - - + + function getMethodNameFromColumnName($col) { return ucfirst($col); } - - - - + + + + /* * building the class files * for each of the tables output a file! @@ -774,47 +893,51 @@ class DB_DataObject_Generator extends DB_DataObject { //echo "Generating Class files: \n"; $options = PEAR::getStaticProperty('DB_DataObject','options'); - - - if ($extends = @$options['extends']) { - $this->_extends = $extends; - $this->_extendsFile = $options['extends_location']; - } + + $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends']; + $this->_extendsFile = !isset($options['extends_location']) ? $this->_extendsFile : $options['extends_location']; + foreach($this->tables as $this->table) { $this->table = trim($this->table); $this->classname = $this->getClassNameFromTableName($this->table); $i = ''; $outfilename = $this->getFileNameFromTableName($this->table); - + $oldcontents = ''; if (file_exists($outfilename)) { // file_get_contents??? $oldcontents = implode('',file($outfilename)); } - + $out = $this->_generateClassTable($oldcontents); $this->debug( "writing $this->classname\n"); $tmpname = tempnam(session_save_path(),'DataObject_'); - + $fh = fopen($tmpname, "w"); + if (!$fh) { + return PEAR::raiseError( + "Failed to create temporary file: $tmpname\n". + "make sure session.save_path is set and is writable\n" + ,null, PEAR_ERROR_DIE); + } fputs($fh,$out); fclose($fh); $perms = file_exists($outfilename) ? fileperms($outfilename) : 0755; - + // windows can fail doing this. - not a perfect solution but otherwise it's getting really kludgy.. if (!@rename($tmpname, $outfilename)) { - unlink($outfilename); + unlink($outfilename); rename($tmpname, $outfilename); } - + chmod($outfilename, $perms); } //echo $out; } /** - * class being extended (can be overridden by [DB_DataObject_Generator] extends=xxxx + * class being extended (can be overridden by [DB_DataObject] extends=xxxx * * @var string * @access private @@ -852,56 +975,59 @@ class DB_DataObject_Generator extends DB_DataObject $head .= " */\n"; $head .= $this->derivedHookExtendsDocBlock(); - - // requires - $head .= "require_once '{$this->_extendsFile}';\n\n"; + + // requires - if you set extends_location = (blank) then no require line will be set + // this can be used if you have an autoloader + + if (!empty($this->_extendsFile)) { + $head .= "require_once '{$this->_extendsFile}';\n\n"; + } // add dummy class header in... - // class + // class $head .= $this->derivedHookClassDocBlock(); $head .= "class {$this->classname} extends {$this->_extends} \n{"; $body = "\n ###START_AUTOCODE\n"; $body .= " /* the code below is auto generated do not remove the above tag */\n\n"; // table - $padding = (30 - strlen($this->table)); - $padding = ($padding < 2) ? 2 : $padding; - - $p = str_repeat(' ',$padding) ; - + + $p = str_repeat(' ',max(2, (18 - strlen($this->table)))) ; + $options = PEAR::getStaticProperty('DB_DataObject','options'); - - + + $var = (substr(phpversion(),0,1) > 4) ? 'public' : 'var'; $var = !empty($options['generator_var_keyword']) ? $options['generator_var_keyword'] : $var; - - + + $body .= " {$var} \$__table = '{$this->table}'; {$p}// table name\n"; - - + // if we are using the option database_{databasename} = dsn // then we should add var $_database = here - // as database names may not always match.. - + // as database names may not always match.. + if (empty($GLOBALS['_DB_DATAOBJECT']['CONFIG'])) { DB_DataObject::_loadConfig(); } // Only include the $_database property if the omit_database_var is unset or false - + if (isset($options["database_{$this->_database}"]) && empty($GLOBALS['_DB_DATAOBJECT']['CONFIG']['generator_omit_database_var'])) { + $p = str_repeat(' ', max(2, (16 - strlen($this->_database)))); $body .= " {$var} \$_database = '{$this->_database}'; {$p}// database name (used with database_{*} config)\n"; } - - + + if (!empty($options['generator_novars'])) { $var = '//'.$var; } - + $defs = $this->_definitions[$this->table]; // show nice information! $connections = array(); $sets = array(); + foreach($defs as $t) { if (!strlen(trim($t->name))) { continue; @@ -916,42 +1042,47 @@ class DB_DataObject_Generator extends DB_DataObject "*****************************************************************\n"; continue; } - - - $padding = (30 - strlen($t->name)); - if ($padding < 2) $padding =2; - $p = str_repeat(' ',$padding) ; - + + $pad = str_repeat(' ',max(2, (30 - strlen($t->name)))); + $length = empty($t->len) ? '' : '('.$t->len.')'; - $body .=" {$var} \${$t->name}; {$p}// {$t->type}$length {$t->flags}\n"; - + $flags = strlen($t->flags) ? (' '. trim($t->flags)) : ''; + $body .=" {$var} \${$t->name}; {$pad}// {$t->type}{$length}{$flags}\n"; + // can not do set as PEAR::DB table info doesnt support it. //if (substr($t->Type,0,3) == "set") // $sets[$t->Field] = "array".substr($t->Type,3); - $body .= $this->derivedHookVar($t,$padding); + $body .= $this->derivedHookVar($t,strlen($p)); } + $body .= $this->derivedHookPostVar($defs); + // THIS IS TOTALLY BORKED old FC creation // IT WILL BE REMOVED!!!!! in DataObjects 1.6 // grep -r __clone * to find all it's uses // and replace them with $x = clone($y); // due to the change in the PHP5 clone design. - + $static = 'static'; if ( substr(phpversion(),0,1) < 5) { $body .= "\n"; $body .= " /* ZE2 compatibility trick*/\n"; $body .= " function __clone() { return \$this;}\n"; } - // simple creation tools ! (static stuff!) - $body .= "\n"; - $body .= " /* Static get */\n"; - $body .= " function staticGet(\$k,\$v=NULL) { return DB_DataObject::staticGet('{$this->classname}',\$k,\$v); }\n"; - + + // depricated - in here for BC... + if (!empty($options['static_get'])) { + + // simple creation tools ! (static stuff!) + $body .= "\n"; + $body .= " /* Static get */\n"; + $body .= " $static function staticGet(\$k,\$v=NULL) { " . + "return DB_DataObject::staticGet('{$this->classname}',\$k,\$v = null); }\n"; + } // generate getter and setter methods $body .= $this->_generateGetters($input); $body .= $this->_generateSetters($input); - + $body .= $this->_generateLinkMethods($input); /* theoretically there is scope here to introduce 'list' methods based up 'xxxx_up' column!!! for heiracitcal trees.. @@ -962,19 +1093,19 @@ class DB_DataObject_Generator extends DB_DataObject // $kk = strtoupper($k); // $body .=" function getSets{$k}() { return {$v}; }\n"; //} - + if (!empty($options['generator_no_ini'])) { $def = $this->_generateDefinitionsTable(); // simplify this!? $body .= $this->_generateTableFunction($def['table']); $body .= $this->_generateKeysFunction($def['keys']); $body .= $this->_generateSequenceKeyFunction($def); $body .= $this->_generateDefaultsFunction($this->table, $def['table']); - } else if (!empty($options['generator_add_defaults'])) { + } else if (!empty($options['generator_add_defaults'])) { // I dont really like doing it this way (adding another option) // but it helps on older projects. $def = $this->_generateDefinitionsTable(); // simplify this!? $body .= $this->_generateDefaultsFunction($this->table,$def['table']); - + } $body .= $this->derivedHookFunctions($input); @@ -983,7 +1114,7 @@ class DB_DataObject_Generator extends DB_DataObject // stubs.. - + if (!empty($options['generator_add_validate_stubs'])) { foreach($defs as $t) { if (!strlen(trim($t->name))) { @@ -1035,7 +1166,7 @@ class DB_DataObject_Generator extends DB_DataObject $ret = preg_replace( '/(\n|\r\n)\s*###START_AUTOCODE(\n|\r\n).*(\n|\r\n)\s*###END_AUTOCODE(\n|\r\n)/s', $body,$input); - + if (!strlen($ret)) { return PEAR::raiseError( "PREG_REPLACE failed to replace body, - you probably need to set these in your php.ini\n". @@ -1043,7 +1174,7 @@ class DB_DataObject_Generator extends DB_DataObject "pcre.recursion_limit=1000000\n" ,null, PEAR_ERROR_DIE); } - + return $ret; } @@ -1080,7 +1211,21 @@ class DB_DataObject_Generator extends DB_DataObject // It MUST NOT be changed here!!! return ""; } - + /** + * hook for after var lines ( + * called at the end of the output of var line have generated, override to add extra var + * lines + * + * @param array cols containing array of objects with type,len,flags etc. from tableInfo call + * @access public + * @return string added to class eg. functions. + */ + function derivedHookPostVar($t) + { + // This is so derived generator classes can generate variabels + // It MUST NOT be changed here!!! + return ""; + } /** * hook to add extra page-level (in terms of phpDocumentor) DocBlock * @@ -1122,73 +1267,73 @@ class DB_DataObject_Generator extends DB_DataObject * getProxyFull - create a class definition on the fly and instantate it.. * * similar to generated files - but also evals the class definitoin code. - * - * + * + * * @param string database name * @param string table name of table to create proxy for. - * + * * * @return object Instance of class. or PEAR Error * @access public */ - function getProxyFull($database,$table) + function getProxyFull($database,$table) { - + if ($err = $this->fillTableSchema($database,$table)) { return $err; } - - + + $options = PEAR::getStaticProperty('DB_DataObject','options'); $class_prefix = empty($options['class_prefix']) ? '' : $options['class_prefix']; - - if ($extends = @$options['extends']) { - $this->_extends = $extends; - $this->_extendsFile = $options['extends_location']; - } + + $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends']; + $this->_extendsFile = !isset($options['extends_location']) ? $this->_extendsFile : $options['extends_location']; + $classname = $this->classname = $this->getClassNameFromTableName($this->table); - + $out = $this->_generateClassTable(); - echo $out; + //echo $out; + eval('?>'.$out); return new $classname; - + } - + /** * fillTableSchema - set the database schema on the fly * - * - * + * + * * @param string database name * @param string table name of table to create schema info for * * @return none | PEAR::error() * @access public */ - function fillTableSchema($database,$table) + function fillTableSchema($database,$table) { global $_DB_DATAOBJECT; // a little bit of sanity testing. - if ((false !== strpos($database,"'")) || (false !== strpos($database,";"))) { + if ((false !== strpos($database,"'")) || (false !== strpos($database,";"))) { return PEAR::raiseError("Error: Database name contains a quote or semi-colon", null, PEAR_ERROR_DIE); } - - $this->_database = $database; - + + $this->_database = $database; + $this->_connect(); $table = trim($table); - + // a little bit of sanity testing. - if ((false !== strpos($table,"'")) || (false !== strpos($table,";"))) { + if ((false !== strpos($table,"'")) || (false !== strpos($table,";"))) { return PEAR::raiseError("Error: Table contains a quote or semi-colon", null, PEAR_ERROR_DIE); } $__DB= &$GLOBALS['_DB_DATAOBJECT']['CONNECTIONS'][$this->_database_dsn_md5]; - - + + $options = PEAR::getStaticProperty('DB_DataObject','options'); $db_driver = empty($options['db_driver']) ? 'DB' : $options['db_driver']; $is_MDB2 = ($db_driver != 'DB') ? true : false; - + if (!$is_MDB2) { // try getting a list of schema tables first. (postgres) $__DB->expectError(DB_ERROR_UNSUPPORTED); @@ -1202,13 +1347,16 @@ class DB_DataObject_Generator extends DB_DataObject $__DB->loadModule('Manager'); $__DB->loadModule('Reverse'); } - $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? + $quotedTable = !empty($options['quote_identifiers_tableinfo']) ? $__DB->quoteIdentifier($table) : $table; - + if (!$is_MDB2) { $defs = $__DB->tableInfo($quotedTable); } else { $defs = $__DB->reverse->tableInfo($quotedTable); + if (PEAR::isError($defs)) { + return $defs; + } foreach ($defs as $k => $v) { if (!isset($defs[$k]['length'])) { continue; @@ -1216,20 +1364,20 @@ class DB_DataObject_Generator extends DB_DataObject $defs[$k]['len'] = $defs[$k]['length']; } } - - - - + if (PEAR::isError($defs)) { return $defs; } + + + if (@$_DB_DATAOBJECT['CONFIG']['debug'] > 2) { $this->debug("getting def for $database/$table",'fillTable'); $this->debug(print_r($defs,true),'defs'); } // cast all definitions to objects - as we deal with that better. - - + + foreach($defs as $def) { if (is_array($def)) { $this->_definitions[$table][] = (object) $def; @@ -1238,13 +1386,13 @@ class DB_DataObject_Generator extends DB_DataObject $this->table = trim($table); $ret = $this->_generateDefinitionsTable(); - + $_DB_DATAOBJECT['INI'][$database][$table] = $ret['table']; $_DB_DATAOBJECT['INI'][$database][$table.'__keys'] = $ret['keys']; return false; - + } - + /** * Generate getter methods for class definition * @@ -1252,7 +1400,7 @@ class DB_DataObject_Generator extends DB_DataObject * @return string * @access public */ - function _generateGetters($input) + function _generateGetters($input) { $options = PEAR::getStaticProperty('DB_DataObject','options'); @@ -1292,11 +1440,78 @@ class DB_DataObject_Generator extends DB_DataObject $getters .= " return \$this->{$t->name};\n"; $getters .= " }\n\n"; } - + return $getters; } + /** + * Generate link setter/getter methods for class definition + * + * @param string Existing class contents + * @return string + * @access public + */ + function _generateLinkMethods($input) + { + + $options = PEAR::getStaticProperty('DB_DataObject','options'); + $setters = ''; + + // only generate if option is set to true + // generate_link_methods true:: + + + if (empty($options['generate_link_methods'])) { + //echo "skip lm? - not set"; + return ''; + } + + if (empty($this->_fkeys)) { + // echo "skip lm? - fkyes empty"; + return ''; + } + if (empty($this->_fkeys[$this->table])) { + //echo "skip lm? - no fkeys for {$this->table}"; + return ''; + } + + // remove auto-generated code from input to be able to check if the method exists outside of the auto-code + $input = preg_replace('/(\n|\r\n)\s*###START_AUTOCODE(\n|\r\n).*(\n|\r\n)\s*###END_AUTOCODE(\n|\r\n)/s', '', $input); + + $setters .= "\n"; + $defs = $this->_fkeys[$this->table]; + + + // $fk[$this->table][$tref[1]] = $tref[2] . ":" . $tref[3]; + + // loop through properties and create setter methods + foreach ($defs as $k => $info) { + + // build mehtod name + $methodName = is_callable($options['generate_link_methods']) ? + $options['generate_link_methods']($k) : $k; + + if (!strlen(trim($k)) || preg_match("/function[\s]+[&]?$methodName\(/i", $input)) { + continue; + } + + $setters .= " /**\n"; + $setters .= " * Getter / Setter for \${$k}\n"; + $setters .= " *\n"; + $setters .= " * @param mixed (optional) value to assign\n"; + $setters .= " * @access public\n"; + + $setters .= " */\n"; + $setters .= (substr(phpversion(),0,1) > 4) ? ' public ' + : ' '; + $setters .= "function $methodName() {\n"; + $setters .= " return \$this->link('$k', func_get_args());\n"; + $setters .= " }\n\n"; + } + + return $setters; + } /** * Generate setter methods for class definition @@ -1305,10 +1520,10 @@ class DB_DataObject_Generator extends DB_DataObject * @return string * @access public */ - function _generateSetters($input) + function _generateSetters($input) { - $options = &PEAR::getStaticProperty('DB_DataObject','options'); + $options = PEAR::getStaticProperty('DB_DataObject','options'); $setters = ''; // only generate if option is set to true @@ -1344,7 +1559,7 @@ class DB_DataObject_Generator extends DB_DataObject $setters .= " \$this->{$t->name} = \$value;\n"; $setters .= " }\n\n"; } - + return $setters; } @@ -1355,15 +1570,15 @@ class DB_DataObject_Generator extends DB_DataObject * @return string * @access public */ - function _generateTableFunction($def) + function _generateTableFunction($def) { $defines = explode(',','INT,STR,DATE,TIME,BOOL,TXT,BLOB,NOTNULL,MYSQLTIMESTAMP'); - + $ret = "\n" . " function table()\n" . " {\n" . " return array(\n"; - + foreach($def as $k=>$v) { $str = '0'; foreach($defines as $dn) { @@ -1379,9 +1594,9 @@ class DB_DataObject_Generator extends DB_DataObject } return $ret . " );\n" . " }\n"; - - - + + + } /** * Generate keys Function - used generator_no_ini is set. @@ -1390,14 +1605,14 @@ class DB_DataObject_Generator extends DB_DataObject * @return string * @access public */ - function _generateKeysFunction($def) + function _generateKeysFunction($def) { - + $ret = "\n" . " function keys()\n" . " {\n" . " return array("; - + foreach($def as $k=>$type) { // hopefully addslashes is good enough here!!! $ret .= '\''.addslashes($k).'\', '; @@ -1405,9 +1620,9 @@ class DB_DataObject_Generator extends DB_DataObject $ret = preg_replace('#, $#', '', $ret); return $ret . ");\n" . " }\n"; - - - + + + } /** * Generate sequenceKey Function - used generator_no_ini is set. @@ -1418,25 +1633,25 @@ class DB_DataObject_Generator extends DB_DataObject */ function _generateSequenceKeyFunction($def) { - + //print_r($def); // DB_DataObject::debugLevel(5); global $_DB_DATAOBJECT; // print_r($def); - - + + $dbtype = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['phptype']; $realkeys = $def['keys']; $keys = array_keys($realkeys); $usekey = isset($keys[0]) ? $keys[0] : false; $table = $def['table']; - - + + $seqname = false; - - - - + + + + $ar = array(false,false,false); if ($usekey !== false) { if (!empty($_DB_DATAOBJECT['CONFIG']['sequence_'.$this->__table])) { @@ -1444,10 +1659,10 @@ class DB_DataObject_Generator extends DB_DataObject if (strpos($usekey,':') !== false) { list($usekey,$seqname) = explode(':',$usekey); } - } - - if (in_array($dbtype , array( 'mysql', 'mysqli', 'mssql', 'ifx')) && - ($table[$usekey] & DB_DATAOBJECT_INT) && + } + + if (in_array($dbtype , array( 'mysql', 'mysqli', 'mssql', 'ifx')) && + ($table[$usekey] & DB_DATAOBJECT_INT) && isset($realkeys[$usekey]) && ($realkeys[$usekey] == 'N') ) { // use native sequence keys. @@ -1459,10 +1674,10 @@ class DB_DataObject_Generator extends DB_DataObject } } } - - - - + + + + $ret = "\n" . " function sequenceKey() // keyname, use native, native name\n" . " {\n" . @@ -1472,25 +1687,25 @@ class DB_DataObject_Generator extends DB_DataObject case 'boolean': $ret .= ($v ? 'true' : 'false') . ', '; break; - + case 'string': $ret .= "'" . $v . "', "; break; - + default: // eak $ret .= "null, "; - + } } $ret = preg_replace('#, $#', '', $ret); return $ret . ");\n" . " }\n"; - + } /** * Generate defaults Function - used generator_add_defaults or generator_no_ini is set. * Only supports mysql and mysqli ... welcome ideas for more.. - * + * * * @param array table and key definition. * @return string @@ -1502,36 +1717,36 @@ class DB_DataObject_Generator extends DB_DataObject if (!in_array($__DB->phptype, array('mysql','mysqli'))) { return; // cant handle non-mysql introspection for defaults. } - $options = PEAR::getStaticProperty('DB_DataObject','options'); + $options = PEAR::getStaticProperty('DB_DataObject','options'); $db_driver = empty($options['db_driver']) ? 'DB' : $options['db_driver']; - $method = $db_driver == 'DB' ? 'getAll' : 'queryAll'; + $method = $db_driver == 'DB' ? 'getAll' : 'queryAll'; $res = $__DB->$method('DESCRIBE ' . $table,DB_FETCHMODE_ASSOC); $defaults = array(); foreach($res as $ar) { // this is initially very dumb... -> and it may mess up.. $type = $defs[$ar['Field']]; - + switch (true) { - + case (is_null( $ar['Default'])): $defaults[$ar['Field']] = 'null'; break; - - case ($type & DB_DATAOBJECT_DATE): - case ($type & DB_DATAOBJECT_TIME): + + case ($type & DB_DATAOBJECT_DATE): + case ($type & DB_DATAOBJECT_TIME): case ($type & DB_DATAOBJECT_MYSQLTIMESTAMP): // not supported yet.. break; - - case ($type & DB_DATAOBJECT_BOOL): + + case ($type & DB_DATAOBJECT_BOOL): $defaults[$ar['Field']] = (int)(boolean) $ar['Default']; break; - - - case ($type & DB_DATAOBJECT_STR): + + + case ($type & DB_DATAOBJECT_STR): $defaults[$ar['Field']] = "'" . addslashes($ar['Default']) . "'"; break; - - + + default: // hopefully eveything else... - numbers etc. if (!strlen($ar['Default'])) { continue; @@ -1540,14 +1755,14 @@ class DB_DataObject_Generator extends DB_DataObject $defaults[$ar['Field']] = $ar['Default']; } break; - + } //var_dump(array($ar['Field'], $ar['Default'], $defaults[$ar['Field']])); } if (empty($defaults)) { return; } - + $ret = "\n" . " function defaults() // column default values \n" . " {\n" . @@ -1557,14 +1772,14 @@ class DB_DataObject_Generator extends DB_DataObject } return $ret . " );\n" . " }\n"; - - - - + + + + } - - - - - + + + + + } diff --git a/civicrm/packages/DB/DataObject/Links.php b/civicrm/packages/DB/DataObject/Links.php new file mode 100644 index 0000000000000000000000000000000000000000..b4717bb3224c60d9889cf547b6b95c87f65aad0e --- /dev/null +++ b/civicrm/packages/DB/DataObject/Links.php @@ -0,0 +1,485 @@ +<?php +/** + * Link tool for DB_DataObject + * + * PHP versions 5 + * + * LICENSE: This source file is subject to version 3.01 of the PHP license + * that is available through the world-wide-web at the following URI: + * http://www.php.net/license/3_01.txt. If you did not receive a copy of + * the PHP License and are unable to obtain it through the web, please + * send a note to license@php.net so we can mail you a copy immediately. + * + * @category Database + * @package DB_DataObject + * @author Alan Knowles <alan@akbkhome.com> + * @copyright 1997-2006 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License 3.01 + * @version : FIXME + * @link http://pear.php.net/package/DB_DataObject + */ + + +/** + * + * Example of how this could be used.. + * + * The lind method are now in here. + * + * Currenly only supports existing methods, and new 'link()' method + * + */ + + +/** + * Links class + * + * @package DB_DataObject + */ +class DB_DataObject_Links +{ + /** + * @property {DB_DataObject} do DataObject to apply this to. + */ + var $do = false; + + + /** + * @property {Array|String} load What to load, 'all' or an array of properties. (default all) + */ + var $load = 'all'; + /** + * @property {String|Boolean} scanf use part of column name as resulting + * property name. (default false) + */ + var $scanf = false; + /** + * @property {String|Boolean} printf use column name as sprintf for resulting property name.. + * (default %s_link if apply is true, otherwise it is %s) + */ + var $printf = false; + /** + * @property {Boolean} cached cache the result, so future queries will use cache rather + * than running the expensive sql query. + */ + var $cached = false; + /** + * @property {Boolean} apply apply the result to this object, (default true) + */ + var $apply = true; + + + //------------------------- RETURN ------------------------------------ + /** + * @property {Array} links key value associative array of links. + */ + var $links; + + + /** + * Constructor + * -- good ole style.. + * @param {DB_DataObject} do DataObject to apply to. + * @param {Array} cfg Configuration (basically properties of this object) + */ + + function __construct($do,$cfg= array()) + { + // check if do is set!!!? + $this->do = $do; + + foreach($cfg as $k=>$v) { + $this->$k = $v; + } + + + } + + /** + * return name from related object + * + * The relies on a <dbname>.links.ini file, unless you specify the arguments. + * + * you can also use $this->getLink('thisColumnName','otherTable','otherTableColumnName') + * + * + * @param string $field|array either row or row.xxxxx or links spec. + * @param string|DB_DataObject $table (optional) name of table to look up value in + * @param string $link (optional) name of column in other table to match + * @author Tim White <tim@cyface.com> + * @access public + * @return mixed object on success false on failure or '0' when not linked + */ + function getLink($field, $table= false, $link='') + { + + static $cache = array(); + + // GUESS THE LINKED TABLE.. (if found - recursevly call self) + + if ($table == false) { + + + $info = $this->linkInfo($field); + + if ($info) { + return $this->getLink($field, $info[0], $link === false ? $info[1] : $link ); + } + + // no links defined.. - use borked BC method... + // use the old _ method - this shouldnt happen if called via getLinks() + if (!($p = strpos($field, '_'))) { + return false; + } + $table = substr($field, 0, $p); + return $this->getLink($field, $table); + + + + } + + $tn = is_string($table) ? $table : $table->tableName(); + + + + if (!isset($this->do->$field)) { + $this->do->raiseError("getLink: row not set $field", DB_DATAOBJECT_ERROR_NODATA); + return false; + } + + // check to see if we know anything about this table.. + + + if (empty($this->do->$field) || $this->do->$field < 0) { + return 0; // no record. + } + + if ($this->cached && isset($cache[$tn.':'. $link .':'. $this->do->$field])) { + return $cache[$tn.':'. $link .':'. $this->do->$field]; + } + + $obj = is_string($table) ? $this->do->factory($tn) : $table;; + + if (!is_a($obj,'DB_DataObject')) { + $this->do->raiseError( + "getLink:Could not find class for row $field, table $tn", + DB_DATAOBJECT_ERROR_INVALIDCONFIG); + return false; + } + // -1 or 0 -- no referenced record.. + + $ret = false; + if ($link) { + + if ($obj->get($link, $this->do->$field)) { + $ret = $obj; + } + + + // this really only happens when no link config is set (old BC stuff) + } else if ($obj->get($this->do->$field)) { + $ret= $obj; + + } + if ($this->cached) { + $cache[$tn.':'. $link .':'. $this->do->$field] = $ret; + } + return $ret; + + } + /** + * get link information for a field or field specification + * + * alll link (and join methods accept the 'link' info ) in various ways + * string : 'field' = which field to get (uses ???.links.ini to work out what) + * array(2) : 'field', 'table:remote_col' << just like the links.ini def. + * array(3) : 'field', $dataobject, 'remote_col' (handy for joinAdd to do nested joins.) + * + * @param string|array $field or link spec to use. + * @return (false|array) array of dataobject and linked field or false. + * + * + */ + + function linkInfo($field) + { + + if (is_array($field)) { + if (count($field) == 3) { + // array with 3 args: + // local_col , dataobject, remote_col + return array( + $field[1], + $field[2], + $field[0] + ); + + } + list($table,$link) = explode(':', $field[1]); + + return array( + $this->do->factory($table), + $link, + $field[0] + ); + + } + // work out the link.. (classic way) + + $links = $this->do->links(); + + if (empty($links) || !is_array($links)) { + + return false; + } + + + if (!isset($links[$field])) { + + return false; + } + list($table,$link) = explode(':', $links[$field]); + + + //??? needed??? + if ($p = strpos($field,".")) { + $field = substr($field,0,$p); + } + + return array( + $this->do->factory($table), + $link, + $field + ); + + + + + } + + + + /** + * a generic geter/setter provider.. + * + * provides a generic getter setter for the referenced object + * eg. + * $link->link('company_id') returns getLink for the object + * if nothing is linked (it will return an empty dataObject) + * $link->link('company_id', array(1)) - just sets the + * + * also array as the field speck supports + * $link->link(array('company_id', 'company:id')) + * + * + * @param string|array $field the field to fetch or link spec. + * @params array $args the arguments sent to the getter setter + * @return mixed true of false on set, the object on getter. + * + */ + function link($field, $args = array()) + { + $info = $this->linkInfo($field); + + if (!$info) { + $this->do->raiseError( + "getLink:Could not find link for row $field", + DB_DATAOBJECT_ERROR_INVALIDCONFIG); + return false; + } + $field = $info[2]; + + + if (empty($args)) { // either an empty array or really empty.... + + if (!isset($this->do->$field)) { + return $info[0]; // empty dataobject. + } + + $ret = $this->getLink($field); + // nothing linked -- return new object.. + return ($ret === 0) ? $info[0] : $ret; + + } + $assign = is_array($args) ? $args[0] : $args; + + // otherwise it's a set call.. + if (!is_a($assign , 'DB_DataObject')) { + + if (is_numeric($assign) && is_integer($assign * 1)) { + if ($assign > 0) { + + if (!$info) { + return false; + } + // check that record exists.. + if (!$info[0]->get($info[1], $assign )) { + return false; + } + + } + + $this->do->$field = $assign ; + return true; + } + + return false; + } + + // otherwise we are assigning it ... + + $this->do->$field = $assign->{$info[1]}; + return true; + + + } + /** + * load related objects + * + * Generally not recommended to use this. + * The generator should support creating getter_setter methods which are better suited. + * + * Relies on <dbname>.links.ini + * + * Sets properties on the calling dataobject you can change what + * object vars the links are stored in by changeing the format parameter + * + * + * @param string format (default _%s) where %s is the table name. + * @author Tim White <tim@cyface.com> + * @access public + * @return boolean , true on success + */ + + function applyLinks($format = '_%s') + { + + // get table will load the options. + if ($this->do->_link_loaded) { + return true; + } + + $this->do->_link_loaded = false; + $cols = $this->do->table(); + $links = $this->do->links(); + + $loaded = array(); + + if ($links) { + foreach($links as $key => $match) { + list($table,$link) = explode(':', $match); + $k = sprintf($format, str_replace('.', '_', $key)); + // makes sure that '.' is the end of the key; + if ($p = strpos($key,'.')) { + $key = substr($key, 0, $p); + } + + $this->do->$k = $this->getLink($key, $table, $link); + + if (is_object($this->do->$k)) { + $loaded[] = $k; + } + } + $this->do->_link_loaded = $loaded; + return true; + } + // this is the autonaming stuff.. + // it sends the column name down to getLink and lets that sort it out.. + // if there is a links file then it is not used! + // IT IS DEPRECATED!!!! - DO NOT USE + if (!is_null($links)) { + return false; + } + + + foreach (array_keys($cols) as $key) { + if (!($p = strpos($key, '_'))) { + continue; + } + // does the table exist. + $k =sprintf($format, $key); + $this->do->$k = $this->getLink($key); + if (is_object($this->do->$k)) { + $loaded[] = $k; + } + } + $this->do->_link_loaded = $loaded; + return true; + } + + /** + * getLinkArray + * Fetch an array of related objects. This should be used in conjunction with a + * <dbname>.links.ini file configuration (see the introduction on linking for details on this). + * + * You may also use this with all parameters to specify, the column and related table. + * + * @access public + * @param string $field- either column or column.xxxxx + * @param string $table (optional) name of table to look up value in + * @param string $fkey (optional) fetchall key see DB_DataObject::fetchAll() + * @param string $fval (optional)fetchall val DB_DataObject::fetchAll() + * @param string $fval (optional) fetchall method DB_DataObject::fetchAll() + * @return array - array of results (empty array on failure) + * + * Example - Getting the related objects + * + * $person = new DataObjects_Person; + * $person->get(12); + * $children = $person->getLinkArray('children'); + * + * echo 'There are ', count($children), ' descendant(s):<br />'; + * foreach ($children as $child) { + * echo $child->name, '<br />'; + * } + * + */ + function getLinkArray($field, $table = null, $fkey = false, $fval = false, $fmethod = false) + { + + $ret = array(); + if (!$table) { + + + $links = $this->do->links(); + + if (is_array($links)) { + if (!isset($links[$field])) { + // failed.. + return $ret; + } + list($table,$link) = explode(':',$links[$field]); + return $this->getLinkArray($field,$table); + } + if (!($p = strpos($field,'_'))) { + return $ret; + } + return $this->getLinkArray($field,substr($field,0,$p)); + + + } + + $c = $this->do->factory($table); + + if (!is_object($c) || !is_a($c,'DB_DataObject')) { + $this->do->raiseError( + "getLinkArray:Could not find class for row $field, table $table", + DB_DATAOBJECT_ERROR_INVALIDCONFIG + ); + return $ret; + } + + // if the user defined method list exists - use it... + if (method_exists($c, 'listFind')) { + $c->listFind($this->id); + while ($c->fetch()) { + $ret[] = clone($c); + } + return $ret; + } + return $c->fetchAll($fkey, $fval, $fmethod); + + + } + +} diff --git a/civicrm/packages/DB/DataObject/createTables.php b/civicrm/packages/DB/DataObject/createTables.php index e2a6263e31c432cd45348e31464ce09193be5cef..4b5ecbfa66a543d6648d257e9cd9f77dc29e2efd 100644 --- a/civicrm/packages/DB/DataObject/createTables.php +++ b/civicrm/packages/DB/DataObject/createTables.php @@ -19,7 +19,7 @@ // $Id: createTables.php 277015 2009-03-12 05:51:03Z alan_k $ // -// since this version doesnt use overload, +// since this version doesnt use overload, // and I assume anyone using custom generators should add this.. define('DB_DATAOBJECT_NO_OVERLOAD',1); @@ -27,13 +27,17 @@ define('DB_DATAOBJECT_NO_OVERLOAD',1); //require_once 'DB/DataObject/Generator.php'; require_once 'DB/DataObject/Generator.php'; +if (php_sapi_name() != 'cli') { + PEAR::raiseError("\nERROR: You must turn use the cli sapi to run this", null, PEAR_ERROR_DIE); +} + if (!ini_get('register_argc_argv')) { PEAR::raiseError("\nERROR: You must turn register_argc_argv On in you php.ini file for this to work\neg.\n\nregister_argc_argv = On\n\n", null, PEAR_ERROR_DIE); exit; } if (!@$_SERVER['argv'][1]) { - PEAR::raiseError("\nERROR: createTable.php usage:\n\nC:\php\pear\DB\DataObjects\createTable.php example.ini\n\n", null, PEAR_ERROR_DIE); + PEAR::raiseError("\nERROR: createTable.php usage:\n\n" .$_SERVER['argv'][0] . " example.ini\n\n", null, PEAR_ERROR_DIE); exit; } @@ -56,4 +60,4 @@ DB_DataObject::debugLevel(isset($options['debug']) ? $options['debug'] : 1); $generator = new DB_DataObject_Generator; $generator->start(); - + diff --git a/civicrm/packages/DB/Table.php b/civicrm/packages/DB/Table.php deleted file mode 100644 index fb62058fb5f91a274f13cce284151597e0690b94..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table.php +++ /dev/null @@ -1,2334 +0,0 @@ -<?php - -/** - * DB_Table is a database API and data type SQL abstraction class. - * - * DB_Table provides database API abstraction, data type abstraction, - * automated SELECT, INSERT, and UPDATE queries, automated table - * creation, automated validation of inserted/updated column values, - * and automated creation of QuickForm elements based on the column - * definitions. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Table.php,v 1.90 2008/12/25 19:56:35 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * Error code at instantiation time when the first parameter to the - * constructor is not a PEAR DB object. - */ -define('DB_TABLE_ERR_NOT_DB_OBJECT', -1); - -/** - * Error code at instantiation time when the PEAR DB/MDB2 $phptype is not - * supported by DB_Table. - */ -define('DB_TABLE_ERR_PHPTYPE', -2); - -/** - * Error code when you call select() or selectResult() and the first - * parameter is a string that does not match any of the $this->sql keys. - */ -define('DB_TABLE_ERR_SQL_UNDEF', -3); - -/** - * Error code when you call select*() or buildSQL() and the first - * parameter is neither an array nor a string - */ -define('DB_TABLE_ERR_SQL_NOT_STRING', -4); - -/** - * Error code when you try to insert data to a column that is not in the - * $this->col array. - */ -define('DB_TABLE_ERR_INS_COL_NOMAP', -5); - -/** - * Error code when you try to insert data, and that data does not have a - * column marked as 'require' in the $this->col array. - */ -define('DB_TABLE_ERR_INS_COL_REQUIRED', -6); - -/** - * Error code when auto-validation fails on data to be inserted. - */ -define('DB_TABLE_ERR_INS_DATA_INVALID', -7); - -/** - * Error code when you try to update data to a column that is not in the - * $this->col array. - */ -define('DB_TABLE_ERR_UPD_COL_NOMAP', -8); - -/** - * Error code when you try to update data, and that data does not have a - * column marked as 'require' in the $this->col array. - */ -define('DB_TABLE_ERR_UPD_COL_REQUIRED', -9); - -/** - * Error code when auto-validation fails on update data. - */ -define('DB_TABLE_ERR_UPD_DATA_INVALID', -10); - -/** - * Error code when you use a create() flag that is not recognized (must - * be 'safe', 'drop', 'verify' or boolean false. - */ -define('DB_TABLE_ERR_CREATE_FLAG', -11); - -/** - * Error code at create() time when you define an index in $this->idx - * that has no columns. - */ -define('DB_TABLE_ERR_IDX_NO_COLS', -12); - -/** - * Error code at create() time when you define an index in $this->idx - * that refers to a column that does not exist in the $this->col array. - */ -define('DB_TABLE_ERR_IDX_COL_UNDEF', -13); - -/** - * Error code at create() time when you define a $this->idx index type - * that is not recognized (must be 'normal' or 'unique'). - */ -define('DB_TABLE_ERR_IDX_TYPE', -14); - -/** - * Error code at create() time when you have an error in a 'char' or - * 'varchar' definition in $this->col (usually because 'size' is wrong). - */ -define('DB_TABLE_ERR_DECLARE_STRING', -15); - -/** - * Error code at create() time when you have an error in a 'decimal' - * definition (usually becuase the 'size' or 'scope' are wrong). - */ -define('DB_TABLE_ERR_DECLARE_DECIMAL', -16); - -/** - * Error code at create() time when you define a column in $this->col - * with an unrecognized 'type'. - */ -define('DB_TABLE_ERR_DECLARE_TYPE', -17); - -/** - * Error code at validation time when a column in $this->col has an - * unrecognized 'type'. - */ -define('DB_TABLE_ERR_VALIDATE_TYPE', -18); - -/** - * Error code at create() time when you define a column in $this->col - * with an invalid column name (usually because it's a reserved keyword). - */ -define('DB_TABLE_ERR_DECLARE_COLNAME', -19); - -/** - * Error code at create() time when you define an index in $this->idx - * with an invalid index name (usually because it's a reserved keyword). - */ -define('DB_TABLE_ERR_DECLARE_IDXNAME', -20); - -/** - * Error code at create() time when you define an index in $this->idx - * that refers to a CLOB column. - */ -define('DB_TABLE_ERR_IDX_COL_CLOB', -21); - -/** - * Error code at create() time when you define a column name that is - * more than 30 chars long (an Oracle restriction). - */ -define('DB_TABLE_ERR_DECLARE_STRLEN', -22); - -/** - * Error code at create() time when the index name ends up being more - * than 30 chars long (an Oracle restriction). - */ -define('DB_TABLE_ERR_IDX_STRLEN', -23); - -/** - * Error code at create() time when the table name is more than 30 chars - * long (an Oracle restriction). - */ -define('DB_TABLE_ERR_TABLE_STRLEN', -24); - -/** - * Error code at nextID() time when the sequence name is more than 30 - * chars long (an Oracle restriction). - */ -define('DB_TABLE_ERR_SEQ_STRLEN', -25); - -/** - * Error code at verify() time when the table does not exist in the - * database. - */ -define('DB_TABLE_ERR_VER_TABLE_MISSING', -26); - -/** - * Error code at verify() time when the column does not exist in the - * database table. - */ -define('DB_TABLE_ERR_VER_COLUMN_MISSING', -27); - -/** - * Error code at verify() time when the column type does not match the - * type specified in the column declaration. - */ -define('DB_TABLE_ERR_VER_COLUMN_TYPE', -28); - -/** - * Error code at instantiation time when the column definition array - * does not contain at least one column. - */ -define('DB_TABLE_ERR_NO_COLS', -29); - -/** - * Error code at verify() time when an index cannot be found in the - * database table. - */ -define('DB_TABLE_ERR_VER_IDX_MISSING', -30); - -/** - * Error code at verify() time when an index does not contain all - * columns that it should contain. - */ -define('DB_TABLE_ERR_VER_IDX_COL_MISSING', -31); - -/** - * Error code at instantiation time when a creation mode - * is not available for a phptype. - */ -define('DB_TABLE_ERR_CREATE_PHPTYPE', -32); - -/** - * Error code at create() time when you define more than one primary key - * in $this->idx. - */ -define('DB_TABLE_ERR_DECLARE_PRIMARY', -33); - -/** - * Error code at create() time when a primary key is defined in $this->idx - * and SQLite is used (SQLite does not support primary keys). - */ -define('DB_TABLE_ERR_DECLARE_PRIM_SQLITE', -34); - -/** - * Error code at alter() time when altering a table field is not possible - * (e.g. because MDB2 has no support for the change or because the DBMS - * does not support the change). - */ -define('DB_TABLE_ERR_ALTER_TABLE_IMPOS', -35); - -/** - * Error code at alter() time when altering a(n) index/constraint is not possible - * (e.g. because MDB2 has no support for the change or because the DBMS - * does not support the change). - */ -define('DB_TABLE_ERR_ALTER_INDEX_IMPOS', -36); - -/** - * Error code at insert() time due to invalid the auto-increment column - * definition. This column must be an integer type and required. - */ -define('DB_TABLE_ERR_AUTO_INC_COL', -37); - -/** - * Error code at instantiation time when both the $table parameter - * and the $table class property are missing. - */ -define('DB_TABLE_ERR_TABLE_NAME_MISSING', -38); - -/** - * The DB_Table_Base parent class - */ -require_once 'DB/Table/Base.php'; - -/** - * The PEAR class for errors - */ -require_once 'PEAR.php'; - -/** - * The Date class for recasting date and time values - */ -require_once 'DB/Table/Date.php'; - - -/** - * DB_Table supports these RDBMS engines and their various native data - * types; we need these here instead of in Manager.php because the - * initial array key tells us what databases are supported. - */ -$GLOBALS['_DB_TABLE']['type'] = array( - 'fbsql' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'LONGINT', - 'decimal' => 'DECIMAL', - 'single' => 'REAL', - 'double' => 'DOUBLE PRECISION', - 'clob' => 'CLOB', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'ibase' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'DECIMAL', - 'single' => 'FLOAT', - 'double' => 'DOUBLE PRECISION', - 'clob' => 'BLOB SUB_TYPE 1', - 'date' => 'DATE', - 'time' => 'TIME', - 'timestamp' => 'TIMESTAMP' - ), - 'mssql' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'DECIMAL', - 'single' => 'REAL', - 'double' => 'FLOAT', - 'clob' => 'TEXT', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'mysql' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'DECIMAL', - 'single' => 'FLOAT', - 'double' => 'DOUBLE', - 'clob' => 'LONGTEXT', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'mysqli' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'DECIMAL', - 'single' => 'FLOAT', - 'double' => 'DOUBLE', - 'clob' => 'LONGTEXT', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'oci8' => array( - 'boolean' => 'NUMBER(1)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR2', - 'smallint' => 'NUMBER(6)', - 'integer' => 'NUMBER(11)', - 'bigint' => 'NUMBER(19)', - 'decimal' => 'NUMBER', - 'single' => 'REAL', - 'double' => 'DOUBLE PRECISION', - 'clob' => 'CLOB', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'pgsql' => array( - 'boolean' => 'DECIMAL(1,0)', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'DECIMAL', - 'single' => 'REAL', - 'double' => 'DOUBLE PRECISION', - 'clob' => 'TEXT', - 'date' => 'CHAR(10)', - 'time' => 'CHAR(8)', - 'timestamp' => 'CHAR(19)' - ), - 'sqlite' => array( - 'boolean' => 'BOOLEAN', - 'char' => 'CHAR', - 'varchar' => 'VARCHAR', - 'smallint' => 'SMALLINT', - 'integer' => 'INTEGER', - 'bigint' => 'BIGINT', - 'decimal' => 'NUMERIC', - 'single' => 'FLOAT', - 'double' => 'DOUBLE', - 'clob' => 'CLOB', - 'date' => 'DATE', - 'time' => 'TIME', - 'timestamp' => 'TIMESTAMP' - ) -); - - -/** - * US-English default error messages. If you want to internationalize, you can - * set the translated messages via $GLOBALS['_DB_TABLE']['error']. You can also - * use DB_Table::setErrorMessage(). Examples: - * - * <code> - * (1) $GLOBALS['_DB_TABLE]['error'] = array(DB_TABLE_ERR_PHPTYPE => '...', - * DB_TABLE_ERR_SQL_UNDEF => '...'); - * (2) DB_Table::setErrorMessage(DB_TABLE_ERR_PHPTYPE, '...'); - * DB_Table::setErrorMessage(DB_TABLE_ERR_SQL_UNDEF, '...'); - * (3) DB_Table::setErrorMessage(array(DB_TABLE_ERR_PHPTYPE => '...'); - * DB_TABLE_ERR_SQL_UNDEF => '...'); - * (4) $obj = new DB_Table(); - * $obj->setErrorMessage(DB_TABLE_ERR_PHPTYPE, '...'); - * $obj->setErrorMessage(DB_TABLE_ERR_SQL_UNDEF, '...'); - * (5) $obj = new DB_Table(); - * $obj->setErrorMessage(array(DB_TABLE_ERR_PHPTYPE => '...'); - * DB_TABLE_ERR_SQL_UNDEF => '...'); - * </code> - * - * For errors that can occur with-in the constructor call (i.e. e.g. creating - * or altering the database table), only the code from examples (1) to (3) - * will alter the default error messages early enough. For errors that can - * occur later, examples (4) and (5) are also valid. - */ -$GLOBALS['_DB_TABLE']['default_error'] = array( - DB_TABLE_ERR_NOT_DB_OBJECT => 'First parameter must be a DB/MDB2 object', - DB_TABLE_ERR_PHPTYPE => 'DB/MDB2 phptype (or dbsyntax) not supported', - DB_TABLE_ERR_SQL_UNDEF => 'Select query string not in a key of $sql. Key', - DB_TABLE_ERR_SQL_NOT_STRING => 'Select query is neither an array nor a string', - DB_TABLE_ERR_INS_COL_NOMAP => 'Insert column not in map', - DB_TABLE_ERR_INS_COL_REQUIRED => 'Insert data must be set and non-null for column', - DB_TABLE_ERR_INS_DATA_INVALID => 'Insert data not valid for column', - DB_TABLE_ERR_UPD_COL_NOMAP => 'Update column not in map', - DB_TABLE_ERR_UPD_COL_REQUIRED => 'Update column must be set and non-null', - DB_TABLE_ERR_UPD_DATA_INVALID => 'Update data not valid for column', - DB_TABLE_ERR_CREATE_FLAG => 'Create flag not valid', - DB_TABLE_ERR_IDX_NO_COLS => 'No columns for index', - DB_TABLE_ERR_IDX_COL_UNDEF => 'Column not in map for index', - DB_TABLE_ERR_IDX_TYPE => 'Type not valid for index', - DB_TABLE_ERR_DECLARE_STRING => 'String column declaration not valid', - DB_TABLE_ERR_DECLARE_DECIMAL => 'Decimal column declaration not valid', - DB_TABLE_ERR_DECLARE_TYPE => 'Column type not valid', - DB_TABLE_ERR_VALIDATE_TYPE => 'Cannot validate for unknown type on column', - DB_TABLE_ERR_DECLARE_COLNAME => 'Column name not valid', - DB_TABLE_ERR_DECLARE_IDXNAME => 'Index name not valid', - DB_TABLE_ERR_DECLARE_TYPE => 'Column type not valid', - DB_TABLE_ERR_IDX_COL_CLOB => 'CLOB column not allowed for index', - DB_TABLE_ERR_DECLARE_STRLEN => 'Column name too long, 30 char max', - DB_TABLE_ERR_IDX_STRLEN => 'Index name too long, 30 char max', - DB_TABLE_ERR_TABLE_STRLEN => 'Table name too long, 30 char max', - DB_TABLE_ERR_SEQ_STRLEN => 'Sequence name too long, 30 char max', - DB_TABLE_ERR_VER_TABLE_MISSING => 'Verification failed: table does not exist', - DB_TABLE_ERR_VER_COLUMN_MISSING => 'Verification failed: column does not exist', - DB_TABLE_ERR_VER_COLUMN_TYPE => 'Verification failed: wrong column type', - DB_TABLE_ERR_NO_COLS => 'Column definition array may not be empty', - DB_TABLE_ERR_VER_IDX_MISSING => 'Verification failed: index does not exist', - DB_TABLE_ERR_VER_IDX_COL_MISSING => 'Verification failed: index does not contain all specified cols', - DB_TABLE_ERR_CREATE_PHPTYPE => 'Creation mode is not supported for this phptype', - DB_TABLE_ERR_DECLARE_PRIMARY => 'Only one primary key is allowed', - DB_TABLE_ERR_DECLARE_PRIM_SQLITE => 'SQLite does not support primary keys', - DB_TABLE_ERR_ALTER_TABLE_IMPOS => 'Alter table failed: changing the field type not possible', - DB_TABLE_ERR_ALTER_INDEX_IMPOS => 'Alter table failed: changing the index/constraint not possible', - DB_TABLE_ERR_AUTO_INC_COL => 'Illegal auto-increment column definition', - DB_TABLE_ERR_TABLE_NAME_MISSING => 'Table name missing in constructor and class' -); - -// merge default and user-defined error messages -if (!isset($GLOBALS['_DB_TABLE']['error'])) { - $GLOBALS['_DB_TABLE']['error'] = array(); -} -foreach ($GLOBALS['_DB_TABLE']['default_error'] as $code => $message) { - if (!array_key_exists($code, $GLOBALS['_DB_TABLE']['error'])) { - $GLOBALS['_DB_TABLE']['error'][$code] = $message; - } -} - -// set default value for length check switch -if (!isset($GLOBALS['_DB_TABLE']['disable_length_check'])) { - $GLOBALS['_DB_TABLE']['disable_length_check'] = false; -} - -/** - * DB_Table is a database API and data type SQL abstraction class. - * - * DB_Table provides database API abstraction, data type abstraction, - * automated SELECT, INSERT, and UPDATE queries, automated table - * creation, automated validation of inserted/updated column values, - * and automated creation of QuickForm elemnts based on the column - * definitions. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ - -class DB_Table extends DB_Table_Base -{ - - /** - * The table or view in the database to which this object binds. - * - * @access public - * @var string - */ - var $table = null; - - /** - * DB_Table_Database instance that this table belongs to. - * - * @access private - * @var object - */ - var $_database = null; - - - /** - * Associative array of column definitions. - * - * @access public - * @var array - */ - var $col = array(); - - - /** - * Associative array of index definitions. - * - * @access public - * @var array - */ - var $idx = array(); - - /** - * Name of an auto-increment column, if any. Null otherwise. - * - * A table can contain at most one auto-increment column. - * Auto-incrementing is implemented in the insert() method, - * using a sequence accessed by the nextID() method. - * - * @access public - * @var string - */ - var $auto_inc_col = null; - - - /** - * Boolean flag to turn on (true) or off (false) auto-incrementing. - * - * Auto-increment column $auto_inc_col upon insertion only if $_auto_inc is - * true and the value of that column is null in the data to be inserted. - * - * @var bool - * @access private - */ - var $_auto_inc = true; - - - /** - * Whether or not to automatically validate data at insert-time. - * - * @var bool - * @access private - */ - var $_valid_insert = true; - - /** - * Whether or not to automatically validate data at update-time. - * - * @var bool - * @access private - */ - var $_valid_update = true; - - - /** - * Whether or not to automatically recast data at insert- and update-time. - * - * @var bool - * @access private - */ - var $_auto_recast = true; - - - /** - * Constructor. - * - * The constructor returns a DB_Table object that wraps an - * instance $db DB or MDB2, and that binds to a specific database - * table named $table. It can optionally create the database table - * or verify that its schema matches that declared in the $col and - * $idx parameters, depending on the value of the $create parameter. - * - * If there is an error on instantiation, $this->error will be - * populated with the PEAR_Error. - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name to connect to in the database. - * - * @param mixed $create The automatic table creation mode to pursue: - * - boolean false to not attempt creation - * - 'safe' to create the table only if it does not exist - * - 'drop' to drop any existing table with the same name and re-create it - * - 'verify' to check whether the table exists, whether all the columns - * exist, whether the columns have the right type, and whether the indexes - * exist and have the right type - * - 'alter' does the same as 'safe' if the table does not exist; if it - * exists, a verification for columns existence, the column types, the - * indexes existence, and the indexes types will be performed and the - * table schema will be modified if needed - * - * @return object DB_Table - * @access public - */ - function __construct(&$db, $table = null, $create = false) - { - // Identify the class for error handling by parent class - $this->_primary_subclass = 'DB_TABLE'; - - // is the first argument a DB/MDB2 object? - $this->backend = null; - if (is_subclass_of($db, 'db_common')) { - $this->backend = 'db'; - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $this->backend = 'mdb2'; - } - - if (is_null($this->backend)) { - $this->error = DB_Table::throwError(DB_TABLE_ERR_NOT_DB_OBJECT); - return; - } - - // set the class properties - $this->db =& $db; - if (is_null($table)) { - // $table parameter not given => check $table class property - if (is_null($this->table)) { - $this->error = DB_Table::throwError(DB_TABLE_ERR_TABLE_NAME_MISSING); - return; - } - } else { - $this->table = $table; - } - - // is the RDBMS supported? - $phptype = $db->phptype; - $dbsyntax = $db->dbsyntax; - if (! DB_Table::supported($phptype, $dbsyntax)) { - $this->error =& DB_Table::throwError( - DB_TABLE_ERR_PHPTYPE, - "({$db->phptype})" - ); - return; - } - - // load MDB2_Extended module - if ($this->backend == 'mdb2') { - $this->db->loadModule('Extended', null, false); - } - - // should we attempt table creation? - if ($create) { - - if ($this->backend == 'mdb2') { - $this->db->loadModule('Manager'); - } - - // check whether the chosen mode is supported - $mode_supported = DB_Table::modeSupported($create, $phptype); - if (PEAR::isError($mode_supported)) { - $this->error =& $mode_supported; - return; - } - if (!$mode_supported) { - $this->error =& $this->throwError( - DB_TABLE_ERR_CREATE_PHPTYPE, - "('$create', '$phptype')" - ); - return; - } - - include_once 'DB/Table/Manager.php'; - - switch ($create) { - - case 'alter': - $result = $this->alter(); - break; - - case 'drop': - case 'safe': - $result = $this->create($create); - break; - - case 'verify': - $result = $this->verify(); - break; - } - - if (PEAR::isError($result)) { - // problem creating/altering/verifing the table - $this->error =& $result; - return; - } - } - } - - - /** - * Is a particular RDBMS supported by DB_Table? - * - * @static - * @param string $phptype The RDBMS type for PHP. - * @param string $dbsyntax The chosen database syntax. - * @return bool True if supported, false if not. - * @access public - */ - - function supported($phptype, $dbsyntax = '') - { - // only Firebird is supported, not its ancestor Interbase - if ($phptype == 'ibase' && $dbsyntax != 'firebird') { - return false; - } - $supported = array_keys($GLOBALS['_DB_TABLE']['type']); - return in_array(strtolower($phptype), $supported); - } - - - /** - * Is a creation mode supported for a RDBMS by DB_Table? - * - * @param string $mode The chosen creation mode. - * @param string $phptype The RDBMS type for PHP. - * @return bool True if supported, false if not (PEAR_Error on failure) - * - * @throws PEAR_Error if - * Unknown creation mode is specified (DB_TABLE_ERR_CREATE_FLAG) - * - * @access public - */ - function modeSupported($mode, $phptype) - { - // check phptype for validity - $supported = array_keys($GLOBALS['_DB_TABLE']['type']); - if (!in_array(strtolower($phptype), $supported)) { - return false; - } - - switch ($mode) { - case 'drop': - case 'safe': - // supported for all RDBMS - return true; - - case 'alter': - case 'verify': - // not supported for fbsql and mssql (yet) - switch ($phptype) { - case 'fbsql': - case 'mssql': - return false; - default: - return true; - } - - default: - // unknown creation mode - return $this->throwError( - DB_TABLE_ERR_CREATE_FLAG, - "('$mode')" - ); - } - } - - - /** - * Overwrite one or more error messages, e.g. to internationalize them. - * - * @param mixed $code If string, the error message with code $code will - * be overwritten by $message. If array, the error messages with code - * of each array key will be overwritten by the key's value. - * - * @param string $message Only used if $key is not an array. - * @return void - * @access public - */ - function setErrorMessage($code, $message = null) { - if (is_array($code)) { - foreach ($code as $single_code => $single_message) { - $GLOBALS['_DB_TABLE']['error'][$single_code] = $single_message; - } - } else { - $GLOBALS['_DB_TABLE']['error'][$code] = $message; - } - } - - - /** - * - * Returns all or part of the $this->col property array. - * - * @param mixed $col If null, returns the $this->col property array - * as it is. If string, returns that column name from the $this->col - * array. If an array, returns those columns named as the array - * values from the $this->col array as an array. - * - * @return mixed All or part of the $this->col property array, or - * boolean false if no matching column names are found. - * @access public - */ - function getColumns($col = null) - { - // by default, return all column definitions - if (is_null($col)) { - return $this->col; - } - - // if the param is a string, only return the column definition - // named by the that string - if (is_string($col)) { - if (isset($this->col[$col])) { - return $this->col[$col]; - } else { - return false; - } - } - - // if the param is a sequential array of column names, - // return only those columns named in that array - if (is_array($col)) { - $set = array(); - foreach ($col as $name) { - $set[$name] = $this->getColumns($name); - } - - if (count($set) == 0) { - return false; - } else { - return $set; - } - } - - // param was not null, string, or array - return false; - } - - - /** - * Returns all or part of the $this->idx property array. - * - * @param mixed $idx Index name (key in $this->idx), or array of - * index name strings. - * - * @return mixed All or part of the $this->idx property array, - * or boolean false if $idx is not null but invalid - * - * @access public - */ - function getIndexes($idx = null) - { - // by default, return all index definitions - if (is_null($idx)) { - return $this->idx; - } - - // if the param is a string, only return the index definition - // named by the that string - if (is_string($idx)) { - if (isset($this->idx[$idx])) { - return $this->idx[$idx]; - } else { - return false; - } - } - - // if the param is a sequential array of index names, - // return only those indexes named in that array - if (is_array($idx)) { - $set = array(); - foreach ($idx as $name) { - $set[$name] = $this->getIndexes($name); - } - - if (count($set) == 0) { - return false; - } else { - return $set; - } - } - - // param was not null, string, or array - return false; - } - - - /** - * Connect or disconnect a DB_Table_Database instance to this table - * instance. - * - * Used to re-connect this DB_Table object to a parent DB_Table_Database - * object during unserialization. Can also disconnect if the $database - * parameter is null. Use the DB_Table_Database::addTable method instead - * to add a table to a new DB_Table_Database. - * - * @param object &$database DB_Table_Database instance that this table - * belongs to (or null to disconnect from instance). - * - * @return void - * @access public - */ - function setDatabaseInstance(&$database) - { - if (is_a($database, 'DB_Table_Database')) { - $this->_database =& $database; - } elseif (is_null($database)) { - $this->_database = null; - } - } - - - /** - * Inserts a single table row. - * - * Inserts data from associative array $data, in which keys are column - * names and values are column values. All required columns (except an - * auto-increment column) must be included in the data array. Columns - * values that are not set or null are inserted as SQL NULL values. - * - * If an auto-increment column is declared (by setting $this->auto_inc_col), - * and the value of that column in $data is not set or null, then a new - * sequence value will be generated and inserted. - * - * If auto-recasting is enabled (if $this->_auto_recast), the method will - * try, if necessary to recast $data to proper column types, with recast(). - * - * If auto-validation is enabled (if $this->_valid_insert), the method - * will validates column types with validInsert() before insertion. - * - * @access public - * - * @param array $data An associative array of key-value pairs where - * the key is the column name and the value is the column value. - * This is the data that will be inserted into the table. - * - * @return mixed Void on success (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - Error in auto_inc_col declaration (DB_TABLE_ERR_AUTO_INC_COL) - * - Error returned by DB/MDB2::autoExecute() (Error bubbled up) - * - * @see validInsert() - * @see DB::autoExecute() - * @see MDB2::autoExecute() - */ - function insert($data) - { - // Auto-increment if enabled and input value is null or not set - if ($this->_auto_inc - && !is_null($this->auto_inc_col) - && !isset($data[$this->auto_inc_col]) - ) { - $column = $this->auto_inc_col; - // check that the auto-increment column exists - if (!array_key_exists($column, $this->col)) { - return $this->throwError( - DB_TABLE_ERR_AUTO_INC_COL, - ": $column does not exist"); - } - // check that the column is integer - if (!in_array($this->col[$column]['type'], - array('integer','smallint','bigint'))) { - return $this->throwError( - DB_TABLE_ERR_AUTO_INC_COL, - ": $column is not an integer"); - } - // check that the column is required - // Note: The insert method will replace a null input value - // of $data[$column] with a sequence value. This makes - // the column effectively 'not null'. This column must be - // 'required' for consistency, to make this explicit. - if (!$this->isRequired($column)) { - return $this->throwError( - DB_TABLE_ERR_AUTO_INC_COL, - ": $column is not required"); - } - // set the value - $id = $this->nextID(); - if (PEAR::isError($id)) { - return $id; - } - $data[$column] = $id; - } - - // forcibly recast the data elements to their proper types? - if ($this->_auto_recast) { - $this->recast($data); - } - - // validate the data if auto-validation is turned on - if ($this->_valid_insert) { - $result = $this->validInsert($data); - if (PEAR::isError($result)) { - return $result; - } - } - - // Does a parent DB_Table_Database object exist? - if ($this->_database) { - - $_database = $this->_database; - - // Validate foreign key values (if enabled) - if ($_database->_check_fkey) { - $result = $_database->validForeignKeys($this->table, $data); - if (PEAR::isError($result)) { - return $result; - } - } - - } - - // Do insertion - if ($this->backend == 'mdb2') { - $result = $this->db->extended->autoExecute($this->table, $data, - MDB2_AUTOQUERY_INSERT); - } else { - $result = $this->db->autoExecute($this->table, $data, - DB_AUTOQUERY_INSERT); - } - return $result; - } - - - /** - * Turns on or off auto-incrementing of $auto_inc_col column (if any) - * - * For auto-incrementing to work, an $auto_inc_col column must be declared, - * auto-incrementing must be enabled (by this method), and the value of - * the $auto_inc_col column must be not set or null in the $data passed to - * the insert method. - * - * @param bool $flag True to turn on auto-increment, false to turn off. - * @return void - * @access public - */ - function setAutoInc($flag = true) - { - if ($flag) { - $this->_auto_inc = true; - } else { - $this->_auto_inc = false; - } - } - - - /** - * Turns on (or off) automatic validation of inserted data. - * - * Enables (if $flag is true) or disables (if $flag is false) automatic - * validation of data types prior to actual insertion into the database - * by the DB_Table::insert() method. - * - * @param bool $flag True to turn on auto-validation, false to turn off. - * @return void - * @access public - */ - function autoValidInsert($flag = true) - { - if ($flag) { - $this->_valid_insert = true; - } else { - $this->_valid_insert = false; - } - } - - - /** - * Validates an array for insertion into the table. - * - * @param array $data An associative array of key-value pairs where - * the key is the column name and the value is the column value. This - * is the data that will be inserted into the table. Data is checked - * against the column data type for validity. - * - * @return boolean true on success (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - Invalid column name key in $data (DB_TABLE_ERR_INS_COL_NOMAP) - * - Missing required column value (DB_TABLE_ERR_INS_COL_NOMAP) - * - Column value doesn't match type (DB_TABLE_ERR_INS_DATA_INVALID) - * - * @access public - * - * @see insert() - */ - function validInsert(&$data) - { - // loop through the data, and disallow insertion of unmapped - // columns - foreach ($data as $col => $val) { - if (! isset($this->col[$col])) { - return $this->throwError( - DB_TABLE_ERR_INS_COL_NOMAP, - "('$col')" - ); - } - } - - // loop through each column mapping, and check the data to be - // inserted into it against the column data type. we loop through - // column mappings instead of the insert data to make sure that - // all necessary columns are being inserted. - foreach ($this->col as $col => $val) { - - // is the value allowed to be null? - if (isset($val['require']) && - $val['require'] == true && - (! isset($data[$col]) || is_null($data[$col]))) { - return $this->throwError( - DB_TABLE_ERR_INS_COL_REQUIRED, - "'$col'" - ); - } - - // does the value to be inserted match the column data type? - if (isset($data[$col]) && - ! $this->isValid($data[$col], $col)) { - return $this->throwError( - DB_TABLE_ERR_INS_DATA_INVALID, - "'$col' ('$data[$col]')" - ); - } - } - - return true; - } - - - /** - * Update table row or rows that match a custom WHERE clause - * - * Constructs and submits an SQL UPDATE command to update columns whose - * names are keys in the $data array parameter, in all rows that match - * the logical condition given by the $where string parameter. - * - * If auto-recasting is enabled (if $this->_auto_recast), update() will - * try, if necessary, to recast $data to proper column types, with recast(). - * - * If auto-validation is enabled (if $this->_valid_insert), update() - * validates column types with validUpdate() before insertion. - * - * @param array $data An associative array of key-value pairs where the - * key is the column name and the value is the column value. These are - * the columns that will be updated with new values. - * - * @param string $where An SQL WHERE clause limiting which records are - * are to be updated. - * - * @return mixed Void on success, a PEAR_Error object on failure. - * - * @throws PEAR_Error if: - * - Data fails type validation (bubbles error returned by validUpdate) - * - Error thrown by DB/MDB2::autoexecute() - * - * @access public - * - * @see validUpdate() - * @see DB::autoExecute() - * @see MDB2::autoExecute() - */ - function update($data, $where) - { - // forcibly recast the data elements to their proper types? - if ($this->_auto_recast) { - $this->recast($data); - } - - // validate the data if auto-validation is turned on - if ($this->_valid_update) { - $result = $this->validUpdate($data); - if (PEAR::isError($result)) { - return $result; - } - } - - // Does a parent DB_Table_Database object exist? - if ($this->_database) { - - $_database =& $this->_database; - - // Validate foreign key values (if enabled) - if ($_database->_check_fkey) { - $result = $_database->validForeignKeys($this->table, $data); - if (PEAR::isError($result)) { - return $result; - } - } - - // Implement any relevant ON UPDATE actions - $result = $_database->onUpdateAction($this, $data, $where); - if (PEAR::isError($result)) { - return $result; - } - - } - - // Submit update command - if ($this->backend == 'mdb2') { - $result = $this->db->extended->autoExecute($this->table, $data, - MDB2_AUTOQUERY_UPDATE, $where); - } else { - $result = $this->db->autoExecute($this->table, $data, - DB_AUTOQUERY_UPDATE, $where); - } - return $result; - - } - - - /** - * Turns on (or off) automatic validation of updated data. - * - * Enables (if $flag is true) or disables (if $flag is false) automatic - * validation of data types prior to updating rows in the database by - * the {@link update()} method. - * - * @param bool $flag True to turn on auto-validation, false to turn off. - * @return void - * @access public - */ - function autoValidUpdate($flag = true) - { - if ($flag) { - $this->_valid_update = true; - } else { - $this->_valid_update = false; - } - } - - - /** - * Validates an array for updating the table. - * - * @param array $data An associative array of key-value pairs where - * the key is the column name and the value is the column value. This - * is the data that will be inserted into the table. Data is checked - * against the column data type for validity. - * - * @return mixed Boolean true on success (PEAR_Error object on failure) - * - * @throws PEAR_Error if - * - Invalid column name key in $data (DB_TABLE_ERR_UPD_COL_NOMAP) - * - Missing required column value (DB_TABLE_ERR_UPD_COL_NOMAP) - * - Column value doesn't match type (DB_TABLE_ERR_UPD_DATA_INVALID) - * - * @access public - * - * @see update() - */ - function validUpdate(&$data) - { - // loop through each data element, and check the - // data to be updated against the column data type. - foreach ($data as $col => $val) { - - // does the column exist? - if (! isset($this->col[$col])) { - return $this->throwError( - DB_TABLE_ERR_UPD_COL_NOMAP, - "('$col')" - ); - } - - // the column definition - $defn = $this->col[$col]; - - // is it allowed to be null? - if (isset($defn['require']) && - $defn['require'] == true && - isset($data[$col]) && - is_null($data[$col])) { - return $this->throwError( - DB_TABLE_ERR_UPD_COL_REQUIRED, - $col - ); - } - - // does the value to be inserted match the column data type? - if (! $this->isValid($data[$col], $col)) { - return $this->throwError( - DB_TABLE_ERR_UPD_DATA_INVALID, - "$col ('$data[$col]')" - ); - } - } - - return true; - } - - - /** - * Deletes table rows matching a custom WHERE clause. - * - * Constructs and submits and SQL DELETE command with the specified WHERE - * clause. Command is submitted by DB::query() or MDB2::exec(). - * - * If a reference to a DB_Table_Database instance exists, carry out any - * ON DELETE actions declared in that instance before actual insertion, - * if emulation of ON DELETE actions is enabled in that instance. - * - * @param string $where Logical condition in the WHERE clause of the - * delete command. - * - * @return mixed void on success (PEAR_Error on failure) - * - * @throws PEAR_Error if - * DB::query() or MDB2::exec() returns error (bubbles up) - * - * @access public - * - * @see DB::query() - * @see MDB2::exec() - */ - function delete($where) - { - // Does a parent DB_Table_Database object exist? - if ($this->_database) { - - $_database =& $this->_database; - - // Implement any relevant ON DELETE actions - $result = $_database->onDeleteAction($this, $where); - if (PEAR::isError($result)) { - return $result; - } - - } - - if ($this->backend == 'mdb2') { - $result = $this->db->exec("DELETE FROM $this->table WHERE $where"); - } else { - $result = $this->db->query("DELETE FROM $this->table WHERE $where"); - } - return $result; - } - - - /** - * - * Generates and returns a sequence value. - * - * Generates a sequence value by calling the DB or MDB2::nextID() method. The - * sequence name defaults to the table name, or may be specified explicitly. - * - * @param string $seq_name The sequence name; defaults to table_id. - * - * @return integer The next value in the sequence (PEAR_Error on failure) - * - * @throws PEAR_Error if - * Sequence name too long (>26 char + _seq) (DB_TABLE_ERR_SEQ_STRLEN) - * - * @access public - * - * @see DB::nextID() - * @see MDB2::nextID() - */ - function nextID($seq_name = null) - { - if (is_null($seq_name)) { - $seq_name = "{$this->table}"; - } else { - $seq_name = "{$this->table}_{$seq_name}"; - } - - // the maximum length is 30, but PEAR DB/MDB2 will add "_seq" to the - // name, so the max length here is less 4 chars. we have to - // check here because the sequence will be created automatically - // by PEAR DB/MDB2, which will not check for length on its own. - if ( $GLOBALS['_DB_TABLE']['disable_length_check'] === false - && strlen($seq_name) > 26 - ) { - return DB_Table::throwError( - DB_TABLE_ERR_SEQ_STRLEN, - " ('$seq_name')" - ); - - } - return $this->db->nextId($seq_name); - } - - - /** - * Escapes and enquotes a value for use in an SQL query. - * - * Simple wrapper for DB_Common::quoteSmart() or MDB2::quote(), which - * returns the value of one of these functions. Helps makes user input - * safe against SQL injection attack. - * - * @param mixed $val The value to be quoted - * - * @return string The value with quotes escaped, inside single quotes if - * non-numeric. - * - * @throws PEAR_Error if - * DB_Common::quoteSmart() or MDB2::quote() returns Error (bubbled up) - * - * @access public - * - * @see DB_Common::quoteSmart() - * @see MDB2::quote() - */ - function quote($val) - { - if ($this->backend == 'mdb2') { - $val = $this->db->quote($val); - } else { - $val = $this->db->quoteSmart($val); - } - return $val; - } - - - /** - * Returns a blank row array based on the column map. - * - * The array keys are the column names, and all values are set to null. - * - * @return array An associative array where keys are column names and - * all values are null. - * @access public - */ - function getBlankRow() - { - $row = array(); - - foreach ($this->col as $key => $val) { - $row[$key] = null; - } - - $this->recast($row); - - return $row; - } - - - /** - * Turns on (or off) automatic recasting of insert and update data. - * - * Turns on (if $flag is true) or off (if $flag is false) automatic forcible - * recasting of data to the declared data type, if required, prior to inserting - * or updating. The recasting is done by calling the DB_Table::recast() - * method from within the DB_Table::insert() and DB_Table::update(). - * - * @param bool $flag True to automatically recast insert and update data, - * false to not do so. - * @return void - * @access public - */ - function autoRecast($flag = true) - { - if ($flag) { - $this->_auto_recast = true; - } else { - $this->_auto_recast = false; - } - } - - - /** - * Forces array elements to the proper types for their columns. - * - * This will not valiate the data, and will forcibly change the data - * to match the recast-type. - * - * The date, time, and timestamp recasting has special logic for - * arrays coming from an HTML_QuickForm object so that the arrays - * are converted into properly-formatted strings. - * - * @todo If a column key holds an array of values (say from a multiple - * select) then this method will not work properly; it will recast the - * value to the string 'Array'. Is this bad? - * - * @param array &$data The data array to re-cast. - * - * @return void - * - * @access public - */ - function recast(&$data) - { - $keys = array_keys($data); - - $null_if_blank = array('date', 'time', 'timestamp', 'smallint', - 'integer', 'bigint', 'decimal', 'single', 'double'); - - foreach ($keys as $key) { - - if (! isset($this->col[$key])) { - continue; - } - - unset($val); - $val =& $data[$key]; - - // convert blanks to null for non-character field types - $convert = in_array($this->col[$key]['type'], $null_if_blank); - if (is_array($val)) { // if one of the given array values is - // empty, null will be the new value if - // the field is not required - $tmp_val = implode('', $val); - foreach ($val as $array_val) { - if (trim((string) $array_val) == '') { - $tmp_val = ''; - break; - } - } - } else { - $tmp_val = $val; - } - if ($convert && trim((string) $tmp_val) == '' && ( - !isset($this->col[$key]['require']) || - $this->col[$key]['require'] === false - ) - ) { - $val = null; - } - - // skip explicit NULL values - if (is_null($val)) { - continue; - } - - // otherwise, recast to the column type - switch ($this->col[$key]['type']) { - - case 'boolean': - $val = ($val) ? 1 : 0; - break; - - case 'char': - case 'varchar': - case 'clob': - settype($val, 'string'); - break; - - case 'date': - - // smart handling of non-standard (i.e. Y-m-d) date formats, - // this allows to use two-digit years (y) and short (M) or - // long (F) names of months without having to recast the - // date value yourself - if (is_array($val)) { - if (isset($val['y'])) { - $val['Y'] = $val['y']; - } - if (isset($val['F'])) { - $val['m'] = $val['F']; - } - if (isset($val['M'])) { - $val['m'] = $val['M']; - } - } - - if (is_array($val) && - isset($val['Y']) && - isset($val['m']) && - isset($val['d'])) { - - // the date is in HTML_QuickForm format, - // convert into a string - $y = (strlen($val['Y']) < 4) - ? str_pad($val['Y'], 4, '0', STR_PAD_LEFT) - : $val['Y']; - - $m = (strlen($val['m']) < 2) - ? '0'.$val['m'] : $val['m']; - - $d = (strlen($val['d']) < 2) - ? '0'.$val['d'] : $val['d']; - - $val = "$y-$m-$d"; - - } else { - - // convert using the Date class - $tmp = new DB_Table_Date($val); - $val = $tmp->format('%Y-%m-%d'); - - } - - break; - - case 'time': - - if (is_array($val) && - isset($val['H']) && - isset($val['i']) && - isset($val['s'])) { - - // the time is in HTML_QuickForm format, - // convert into a string - $h = (strlen($val['H']) < 2) - ? '0' . $val['H'] : $val['H']; - - $i = (strlen($val['i']) < 2) - ? '0' . $val['i'] : $val['i']; - - $s = (strlen($val['s']) < 2) - ? '0' . $val['s'] : $val['s']; - - - $val = "$h:$i:$s"; - - } else { - // date does not matter in this case, so - // pre 1970 and post 2040 are not an issue. - $tmp = strtotime(date('Y-m-d') . " $val"); - $val = date('H:i:s', $tmp); - } - - break; - - case 'timestamp': - - // smart handling of non-standard (i.e. Y-m-d) date formats, - // this allows to use two-digit years (y) and short (M) or - // long (F) names of months without having to recast the - // date value yourself - if (is_array($val)) { - if (isset($val['y'])) { - $val['Y'] = $val['y']; - } - if (isset($val['F'])) { - $val['m'] = $val['F']; - } - if (isset($val['M'])) { - $val['m'] = $val['M']; - } - } - - if (is_array($val) && - isset($val['Y']) && - isset($val['m']) && - isset($val['d']) && - isset($val['H']) && - isset($val['i']) && - isset($val['s'])) { - - // timestamp is in HTML_QuickForm format, - // convert each element to a string. pad - // with zeroes as needed. - - $y = (strlen($val['Y']) < 4) - ? str_pad($val['Y'], 4, '0', STR_PAD_LEFT) - : $val['Y']; - - $m = (strlen($val['m']) < 2) - ? '0'.$val['m'] : $val['m']; - - $d = (strlen($val['d']) < 2) - ? '0'.$val['d'] : $val['d']; - - $h = (strlen($val['H']) < 2) - ? '0' . $val['H'] : $val['H']; - - $i = (strlen($val['i']) < 2) - ? '0' . $val['i'] : $val['i']; - - $s = (strlen($val['s']) < 2) - ? '0' . $val['s'] : $val['s']; - - $val = "$y-$m-$d $h:$i:$s"; - - } else { - // convert using the Date class - $tmp = new DB_Table_Date($val); - $val = $tmp->format('%Y-%m-%d %H:%M:%S'); - } - - break; - - case 'smallint': - case 'integer': - case 'bigint': - settype($val, 'integer'); - break; - - case 'decimal': - case 'single': - case 'double': - settype($val, 'float'); - break; - - } - } - } - - - /** - * Creates the table based on $this->col and $this->idx. - * - * @param string $flag The automatic table creation mode to pursue: - * - 'safe' to create the table only if it does not exist - * - 'drop' to drop any existing table with the same name and re-create it - * - * @return mixed Boolean true if the table was successfully created, - * false if there was no need to create the table, or - * a PEAR_Error if the attempted creation failed. - * - * @throws PEAR_Error if - * - DB_Table_Manager::tableExists() returns Error (bubbles up) - * - DB_Table_Manager::create() returns Error (bubbles up) - * - * @access public - * - * @see DB_Table_Manager::tableExists() - * @see DB_Table_Manager::create() - */ - function create($flag) - { - include_once 'DB/Table/Manager.php'; - - // are we OK to create the table? - $ok = false; - - // check the create-flag - switch ($flag) { - - case 'drop': - // drop only if table exists - $table_exists = DB_Table_Manager::tableExists($this->db, - $this->table); - if (PEAR::isError($table_exists)) { - return $table_exists; - } - if ($table_exists) { - // forcibly drop an existing table - if ($this->backend == 'mdb2') { - $this->db->manager->dropTable($this->table); - } else { - $this->db->query("DROP TABLE {$this->table}"); - } - } - $ok = true; - break; - - case 'safe': - // create only if table does not exist - $table_exists = DB_Table_Manager::tableExists($this->db, - $this->table); - if (PEAR::isError($table_exists)) { - return $table_exists; - } - // ok to create only if table does not exist - $ok = !$table_exists; - break; - - } - - // are we going to create the table? - if (! $ok) { - return false; - } - - return DB_Table_Manager::create( - $this->db, $this->table, $this->col, $this->idx - ); - } - - - /** - * Alters the table to match schema declared in $this->col and $this->idx. - * - * If the table does not exist, create it instead. - * - * @return boolean true if altering is successful (PEAR_Error on failure) - * - * @throws PEAR_Error if - * - DB_Table_Manager::tableExists() returns Error (bubbles up) - * - DB_Table_Manager::create() returns Error (bubbles up) - * - DB_Table_Manager::alter() returns Error (bubbles up) - * - * @access public - * - * @see DB_Table_Manager::tableExists() - * @see DB_Table_Manager::create() - * @see DB_Table_Manager::alter() - */ - function alter() - { - $create = false; - - // alter the table columns and indexes if the table exists - $table_exists = DB_Table_Manager::tableExists($this->db, - $this->table); - if (PEAR::isError($table_exists)) { - return $table_exists; - } - if (!$table_exists) { - // table does not exist => just create the table, there is - // nothing that could be altered - $create = true; - } - - if ($create) { - return DB_Table_Manager::create( - $this->db, $this->table, $this->col, $this->idx - ); - } - - return DB_Table_Manager::alter( - $this->db, $this->table, $this->col, $this->idx - ); - } - - - /** - * Verifies the table based on $this->col and $this->idx. - * - * @return boolean true if verification succees (PEAR_Error on failure). - * - * @throws PEAR_Error if - * DB_Table_Manager::verify() returns Error (bubbles up) - * - * @access public - * - * @see DB_Table_Manager::verify() - */ - function verify() - { - return DB_Table_Manager::verify( - $this->db, $this->table, $this->col, $this->idx - ); - } - - - /** - * Checks if a value validates against the DB_Table data type for a - * given column. This only checks that it matches the data type; it - * does not do extended validation. - * - * @param array $val A value to check against the column's DB_Table - * data type. - * - * @param array $col A column name from $this->col. - * - * @return boolean True if $val validates against data type, false if not - * - * @throws PEAR_Error if - * Invalid column type in $this->col (DB_TABLE_ERR_VALIDATE_TYPE) - * - * @access public - * - * @see DB_Table_Valid - */ - function isValid($val, $col) - { - // is the value null? - if (is_null($val)) { - // is the column required? - if ($this->isRequired($col)) { - // yes, so not valid - return false; - } else { - // not required, so it's valid - return true; - } - } - - // make sure we have the validation class - include_once 'DB/Table/Valid.php'; - - // validate values per the column type. we use sqlite - // as the single authentic list of allowed column types, - // regardless of the actual rdbms being used. - $map = array_keys($GLOBALS['_DB_TABLE']['type']['sqlite']); - - // is the column type on the map? - if (! in_array($this->col[$col]['type'], $map)) { - return $this->throwError( - DB_TABLE_ERR_VALIDATE_TYPE, - "'$col' ('{$this->col[$col]['type']}')" - ); - } - - // validate for the type - switch ($this->col[$col]['type']) { - - case 'char': - case 'varchar': - $result = DB_Table_Valid::isChar( - $val, - $this->col[$col]['size'] - ); - break; - - case 'decimal': - $result = DB_Table_Valid::isDecimal( - $val, - $this->col[$col]['size'], - $this->col[$col]['scope'] - ); - break; - - default: - $result = call_user_func( - array( - 'DB_Table_Valid', - 'is' . ucwords($this->col[$col]['type']) - ), - $val - ); - break; - - } - - // have we passed the check so far, and should we - // also check for allowed values? - if ($result && isset($this->col[$col]['qf_vals'])) { - $keys = array_keys($this->col[$col]['qf_vals']); - - $result = in_array( - $val, - array_keys($this->col[$col]['qf_vals']) - ); - } - - return $result; - } - - - /** - * Is a specific column required to be set and non-null? - * - * @param mixed $column The column to check against. - * @return boolean True if required, false if not. - * @access public - */ - function isRequired($column) - { - if (isset($this->col[$column]['require']) && - $this->col[$column]['require'] == true) { - return true; - } else { - return false; - } - } - - - /** - * - * Creates and returns a QuickForm object based on table columns. - * - * @param array $columns A sequential array of column names to use in - * the form; if null, uses all columns. - * - * @param string $array_name By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $array_name, the column names will become keys in an array named - * for this parameter. - * - * @param array $args An associative array of optional arguments to - * pass to the QuickForm object. The keys are... - * - * 'formName' : String, name of the form; defaults to the name of this - * table. - * - * 'method' : String, form method; defaults to 'post'. - * - * 'action' : String, form action; defaults to - * $_SERVER['REQUEST_URI']. - * - * 'target' : String, form target target; defaults to '_self' - * - * 'attributes' : Associative array, extra attributes for <form> - * tag; the key is the attribute name and the value is attribute - * value. - * - * 'trackSubmit' : Boolean, whether to track if the form was - * submitted by adding a special hidden field - * - * @param string $clientValidate By default, validation will match - * the 'qf_client' value from the column definition. However, if - * you set $clientValidate to true or false, this will override the - * value from the column definition. - * - * @param array $formFilters An array with filter function names or - * callbacks that will be applied to all form elements. - * - * @return object HTML_QuickForm - * - * @access public - * - * @see HTML_QuickForm - * @see DB_Table_QuickForm - */ - function &getForm($columns = null, $array_name = null, $args = array(), - $clientValidate = null, $formFilters = null) - { - include_once 'DB/Table/QuickForm.php'; - $coldefs = $this->_getFormColDefs($columns); - $form =& DB_Table_QuickForm::getForm($coldefs, $array_name, $args, - $clientValidate, $formFilters); - return $form; - } - - - /** - * Adds elements and rules to a pre-existing HTML_QuickForm object. - * - * By default, the form will use the names of the columns as the names - * of the form elements. If you pass $array_name, the column names - * will become keys in an array named for this parameter. - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $columns A sequential array of column names to use in - * the form; if null, uses all columns. - * - * @param string $array_name Name of array of column names - * - * @param clientValidate - * - * @return void - * - * @access public - * - * @see HTML_QuickForm - * - * @see DB_Table_QuickForm - */ - function addFormElements(&$form, $columns = null, $array_name = null, - $clientValidate = null) - { - include_once 'DB/Table/QuickForm.php'; - $coldefs = $this->_getFormColDefs($columns); - DB_Table_QuickForm::addElements($form, $coldefs, $array_name); - DB_Table_QuickForm::addRules($form, $coldefs, $array_name, - $clientValidate); - } - - - /** - * Adds static form elements like 'header', 'static', 'submit' or 'reset' - * to a pre-existing HTML_QuickForm object. The form elements needs to be - * defined in a property called $frm. - * - * @param object &$form An HTML_QuickForm object. - * @return void - * @access public - * - * @see HTML_QuickForm - * @see DB_Table_QuickForm - */ - function addStaticFormElements(&$form) - { - include_once 'DB/Table/QuickForm.php'; - DB_Table_QuickForm::addStaticElements($form, $this->frm); - } - - - /** - * - * Creates and returns an array of QuickForm elements based on an - * array of DB_Table column names. - * - * @param array $columns A sequential array of column names to use in - * the form; if null, uses all columns. - * - * @param string $array_name By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $array_name, the column names will become keys in an array named - * for this parameter. - * - * @return array An array of HTML_QuickForm_Element objects. - * - * @access public - * - * @see HTML_QuickForm - * @see DB_Table_QuickForm - */ - function &getFormGroup($columns = null, $array_name = null) - { - include_once 'DB/Table/QuickForm.php'; - $coldefs = $this->_getFormColDefs($columns); - $group = DB_Table_QuickForm::getGroup($coldefs, $array_name); - return $group; - } - - - /** - * Creates and returns a single QuickForm element based on a DB_Table - * column name. - * - * @param string $column A DB_Table column name. - * @param string $elemname The name to use for the generated QuickForm - * element. - * - * @return object HTML_QuickForm_Element - * - * @access public - * - * @see HTML_QuickForm - * @see DB_Table_QuickForm - */ - - function &getFormElement($column, $elemname) - { - include_once 'DB/Table/QuickForm.php'; - $coldef = $this->_getFormColDefs($column); - DB_Table_QuickForm::fixColDef($coldef[$column], $elemname); - $element =& DB_Table_QuickForm::getElement($coldef[$column], - $elemname); - return $element; - } - - /** - * Creates and returns an array of QuickForm elements based on a DB_Table - * column name. - * - * @author Ian Eure <ieure@php.net> - * - * @param array $cols Array of DB_Table column names - * @param string $array_name The name to use for the generated QuickForm - * elements. - * @return object HTML_QuickForm_Element - * - * @access public - * - * @see HTML_QuickForm - * @see DB_Table_QuickForm - */ - function &getFormElements($cols, $array_name = null) - { - include_once 'DB/Table/QuickForm.php'; - $elements = DB_Table_QuickForm::getElements($cols, $array_name); - return $elements; - } - - - /** - * Creates a column definition array suitable for DB_Table_QuickForm. - * - * @param string|array $column_set A string column name, a sequential - * array of columns names, or an associative array where the key is a - * column name and the value is the default value for the generated - * form element. If null, uses all columns for this class. - * - * @return array An array of column defintions suitable for passing - * to DB_Table_QuickForm. - * - * @access public - * - */ - function _getFormColDefs($column_set = null) - { - if (is_null($column_set)) { - // no columns or columns+values; just return the $this->col - // array. - return $this->getColumns($column_set); - } - - // check to see if the keys are sequential integers. if so, - // the $column_set is just a list of columns. - settype($column_set, 'array'); - $keys = array_keys($column_set); - $all_integer = true; - foreach ($keys as $val) { - if (! is_integer($val)) { - $all_integer = false; - break; - } - } - - if ($all_integer) { - - // the column_set is just a list of columns; get back the $this->col - // array elements matching this list. - $coldefs = $this->getColumns($column_set); - - } else { - - // the columns_set is an associative array where the key is a - // column name and the value is the form element value. - $coldefs = $this->getColumns($keys); - foreach ($coldefs as $key => $val) { - $coldefs[$key]['qf_setvalue'] = $column_set[$key]; - } - - } - - return $coldefs; - } - - /** - * Returns XML string representation of the table - * - * @param string $indent string of whitespace - * @return string XML string - * @access public - */ - function toXML($indent = '') { - require_once 'DB/Table/XML.php'; - $s = array(); - $s[] = DB_Table_XML::openTag('table', $indent); - $s[] = DB_Table_XML::lineElement('name', $this->table, $indent); - $s[] = DB_Table_XML::openTag('declaration', $indent); - // Column declarations - foreach ($this->col as $name => $col) { - $type = (isset($col['type'])) ? $col['type'] : null; - $size = (isset($col['size'])) ? $col['size'] : null; - $scope = (isset($col['scope'])) ? $col['scope'] : null; - $require = (isset($col['require'])) ? $col['require'] : null; - $default = (isset($col['set default'])) ? $col['set default'] : null; - $line = ' ' . $name . ' ' . $type; - $s[] = DB_Table_XML::openTag('field', $indent); - $s[] = DB_Table_XML::lineElement('name', $name, $indent); - $s[] = DB_Table_XML::lineElement('type', $type, $indent); - if ($size) { - $s[] = DB_Table_XML::lineElement('length', $size, $indent); - } - if ($require) { - $require = (int) $require; - $s[] = DB_Table_XML::lineElement('notnull', $require, $indent); - } - if (!($default === null)) { - $s[] = DB_Table_XML::lineElement('set default', $default, $indent); - } - if ($this->auto_inc_col == $name) { - $s[] = DB_Table_XML::lineElement('autoincrement', '1', $indent); - } - $s[] = DB_Table_XML::closeTag('field', $indent); - } - // Index declarations - foreach ($this->idx as $name => $idx) { - $s[] = DB_Table_XML::openTag('index', $indent); - $cols = $idx['cols']; - $type = $idx['type']; - if (is_string($name)) { - $s[] = DB_Table_XML::lineElement('name', $name, $indent); - } - if ($type == 'primary') { - $s[] = DB_Table_XML::lineElement('primary', '1', $indent); - } elseif ($type == 'unique') { - $s[] = DB_Table_XML::lineElement('unique', '1', $indent); - } - if (is_string($cols)) { - $cols = array($cols); - } - foreach ($cols as $col) { - $s[] = DB_Table_XML::lineElement('field', $col, $indent); - } - $s[] = DB_Table_XML::closeTag('index', $indent); - } - // Foreign key references (if $this->_database is not null) - if ($this->_database) { - if (isset($this->_database->_ref[$this->table])) { - $refs = $this->_database->_ref[$this->table]; - foreach ($refs as $rtable => $def) { - $fkey = $def['fkey']; // foreign key of referencing table - $rkey = $def['rkey']; // referenced/primary key - if (is_string($fkey)) { - $fkey = array($fkey); - } - if (is_string($rkey)) { - $rkey = array($rkey); - } - $on_delete = $def['on_delete']; // on-delete action - $on_update = $def['on_update']; // on-update action - $s[] = DB_Table_XML::openTag('foreign', $indent); - foreach ($fkey as $fcol) { - $s[] = DB_Table_XML::lineElement('field', $fcol, $indent); - } - $s[] = DB_Table_XML::openTag('references', $indent); - $s[] = DB_Table_XML::lineElement('table', $rtable, $indent); - if ($rkey) { - foreach ($rkey as $rcol) { - $s[] = DB_Table_XML::lineElement('field', $rcol, - $indent); - } - } - $s[] = DB_Table_XML::closeTag('references', $indent); - if ($on_delete) { - $s[] = DB_Table_XML::lineElement('ondelete', $on_delete, - $indent); - } - if ($on_update) { - $s[] = DB_Table_XML::lineElement('onupdate', $on_update, - $indent); - } - $s[] = DB_Table_XML::closeTag('foreign', $indent); - } - } - } - $s[] = DB_Table_XML::closeTag('declaration', $indent); - $s[] = DB_Table_XML::closeTag('table', $indent); - return implode("\n", $s); - } - -} -?> diff --git a/civicrm/packages/DB/Table/Base.php b/civicrm/packages/DB/Table/Base.php deleted file mode 100644 index 6837505b860e978ee96f7d503eee482c89aed0a8..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Base.php +++ /dev/null @@ -1,755 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * DB_Table_Base Base class for DB_Table and DB_Table_Database - * - * This utility class contains properties and methods that are common - * to DB_Table and DB_Table database. These are all related to one of: - * - DB/MDB2 connection object [ $db and $backend properties ] - * - Error handling [ throwError() method, $error and $_primary_subclass ] - * - SELECT queries [ select*() methods, $sql & $fetchmode* properties] - * - buildSQL() and quote() SQL utilities - * - _swapModes() method - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Base.php,v 1.4 2007/12/13 16:52:14 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -require_once 'PEAR.php'; - -// {{{ DB_Table_Base - -/** - * Base class for DB_Table and DB_Table_Database - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Base -{ - - // {{{ properties - - /** - * The PEAR DB/MDB2 object that connects to the database. - * - * @var object - * @access public - */ - var $db = null; - - /** - * The backend type, which must be 'db' or 'mdb2' - * - * @var string - * @access public - */ - var $backend = null; - - /** - * If there is an error on instantiation, this captures that error. - * - * This property is used only for errors encountered in the constructor - * at instantiation time. To check if there was an instantiation error... - * - * <code> - * $obj = new DB_Table_*(); - * if ($obj->error) { - * // ... error handling code here ... - * } - * </code> - * - * @var object PEAR_Error - * @access public - */ - var $error = null; - - /** - * Baseline SELECT maps for buildSQL() and select*() methods. - * - * @var array - * @access public - */ - var $sql = array(); - - /** - * Format of rows in sets returned by the select() method - * - * This should be one of the DB/MDB2_FETCHMODE_* constant values, such as - * MDB2_FETCHMODE_ASSOC, MDB2_FETCHMODE_ORDERED, or MDB2_FETCHMODE_OBJECT. - * It determines whether select() returns represents individual rows as - * associative arrays with column name keys, ordered/sequential arrays, - * or objects with column names mapped to properties. Use corresponding - * DB_FETCHMODE_* constants for use with the DB backend. It has no effect - * upon the return value of selectResult(). - * - * If a 'fetchmode' element is set for a specific query array, the query - * fetchmode will override this DB_Table or DB_Table_Database property. - * If no value is set for the query or the DB_Table_Base object, the value - * or default set in the underlying DB/MDB2 object will be used. - * - * @var int - * @access public - */ - var $fetchmode = null; - - /** - * Class of objects to use for rows returned as objects by select() - * - * When fetchmode is DB/MDB2_FETCHMODE_OBJECT, use this class for each - * returned row in rsults of select(). May be overridden by value of - * 'fetchmode_object_class'. If no class name is set in the query or - * the DB_Table_Base, defaults to that set in the DB/MDB2 object, or - * to default of StdObject. - * - * @var string - * @access public - */ - var $fetchmode_object_class = null; - - /** - * Upper case name of primary subclass, 'DB_TABLE' or 'DB_TABLE_DATABASE' - * - * This should be set in the constructor of the child class, and is - * used in the DB_Table_Base::throwError() method to determine the - * location of the relevant error codes and messages. Error codes and - * error code messages are defined in class $this->_primary_subclass. - * Messages are stored in $GLOBALS['_' . $this->_primary_subclass]['error'] - * - * @var string - * @access private - */ - var $_primary_subclass = null; - - // }}} - // {{{ Methods - - /** - * Specialized version of throwError() modeled on PEAR_Error. - * - * Throws a PEAR_Error with an error message based on an error code - * and corresponding error message defined in $this->_primary_subclass - * - * @param string $code An error code constant - * @param string $extra Extra text for the error (in addition to the - * regular error message). - * @return object PEAR_Error - * @access public - * @static - */ - function &throwError($code, $extra = null) - { - // get the error message text based on the error code - $index = '_' . $this->_primary_subclass; - $text = $this->_primary_subclass . " Error - \n" - . $GLOBALS[$index]['error'][$code]; - - // add any additional error text - if ($extra) { - $text .= ' ' . $extra; - } - - // done! - $error = PEAR::throwError($text, $code); - return $error; - } - - /** - * Overwrites one or more error messages, e.g., to internationalize them. - * - * May be used to change messages stored in global array $GLOBALS[$class_key] - * @param mixed $code If string, the error message with code $code will be - * overwritten by $message. If array, each key is a code - * and each value is a new message. - * - * @param string $message Only used if $key is not an array. - * @return void - * @access public - */ - function setErrorMessage($code, $message = null) { - $index = '_' . $this->_primary_subclass; - if (is_array($code)) { - foreach ($code as $single_code => $single_message) { - $GLOBALS[$index]['error'][$single_code] = $single_message; - } - } else { - $GLOBALS[$index]['error'][$code] = $message; - } - } - - - /** - * Returns SQL SELECT string constructed from sql query array - * - * @param mixed $query SELECT query array, or key string of $this->sql - * @param string $filter SQL snippet to AND with default WHERE clause - * @param string $order SQL snippet to override default ORDER BY clause - * @param int $start The row number from which to start result set - * @param int $count The number of rows to list in the result set. - * - * @return string SQL SELECT command string (or PEAR_Error on failure) - * - * @access public - */ - function buildSQL($query, $filter = null, $order = null, - $start = null, $count = null) - { - - // Is $query a query array or a key of $this->sql ? - if (!is_array($query)) { - if (is_string($query)) { - if (isset($this->sql[$query])) { - $query = $this->sql[$query]; - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_UNDEF'), - $query); - } - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_NOT_STRING')); - } - } - - // Construct SQL command from parts - $s = array(); - if (isset($query['select'])) { - $s[] = 'SELECT ' . $query['select']; - } else { - $s[] = 'SELECT *'; - } - if (isset($query['from'])) { - $s[] = 'FROM ' . $query['from']; - } elseif ($this->_primary_subclass == 'DB_TABLE') { - $s[] = 'FROM ' . $this->table; - } - if (isset($query['join'])) { - $s[] = $query['join']; - } - if (isset($query['where'])) { - if ($filter) { - $s[] = 'WHERE ( ' . $query['where'] . ' )'; - $s[] = ' AND ( '. $filter . ' )'; - } else { - $s[] = 'WHERE ' . $query['where']; - } - } elseif ($filter) { - $s[] = 'WHERE ' . $filter; - } - if (isset($query['group'])) { - $s[] = 'GROUP BY ' . $query['group']; - } - if (isset($query['having'])) { - $s[] = 'HAVING '. $query['having']; - } - // If $order parameter is set, override 'order' element - if (!is_null($order)) { - $s[] = 'ORDER BY '. $order; - } elseif (isset($query['order'])) { - $s[] = 'ORDER BY ' . $query['order']; - } - $cmd = implode("\n", $s); - - // add LIMIT if requested - if (!is_null($start) && !is_null($count)) { - $db =& $this->db; - if ($this->backend == 'mdb2') { - $db->setLimit($count, $start); - } else { - $cmd = $db->modifyLimitQuery( - $cmd, $start, $count); - } - } - - // Return command string - return $cmd; - } - - - /** - * Selects rows using one of the DB/MDB2 get*() methods. - * - * @param string $query SQL SELECT query array, or a key of the - * $this->sql property array. - * @param string $filter SQL snippet to AND with default WHERE clause - * @param string $order SQL snippet to override default ORDER BY clause - * @param int $start The row number from which to start result set - * @param int $count The number of rows to list in the result set. - * @param array $params Parameters for placeholder substitutions, if any - * @return mixed An array of records from the table if anything but - * ('getOne'), a single value (if 'getOne'), or a PEAR_Error - * @see DB::getAll() - * @see MDB2::getAll() - * @see DB::getAssoc() - * @see MDB2::getAssoc() - * @see DB::getCol() - * @see MDB2::getCol() - * @see DB::getOne() - * @see MDB2::getOne() - * @see DB::getRow() - * @see MDB2::getRow() - * @see DB_Table_Base::_swapModes() - * @access public - */ - function select($query, $filter = null, $order = null, - $start = null, $count = null, $params = array()) - { - - // Is $query a query array or a key of $this->sql ? - // On output from this block, $query is an array - if (!is_array($query)) { - if (is_string($query)) { - if (isset($this->sql[$query])) { - $query = $this->sql[$query]; - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_UNDEF'), - $query); - } - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_NOT_STRING')); - } - } - - // build the base command - $sql = $this->buildSQL($query, $filter, $order, $start, $count); - if (PEAR::isError($sql)) { - return $sql; - } - - // set the get*() method name - if (isset($query['get'])) { - $method = ucwords(strtolower(trim($query['get']))); - $method = "get$method"; - } else { - $method = 'getAll'; - } - - // DB_Table assumes you are using a shared PEAR DB/MDB2 object. - // Record fetchmode settings, to be restored before returning. - $db =& $this->db; - $restore_mode = $db->fetchmode; - if ($this->backend == 'mdb2') { - $restore_class = $db->getOption('fetch_class'); - } else { - $restore_class = $db->fetchmode_object_class; - } - - // swap modes - $fetchmode = $this->fetchmode; - $fetchmode_object_class = $this->fetchmode_object_class; - if (isset($query['fetchmode'])) { - $fetchmode = $query['fetchmode']; - } - if (isset($query['fetchmode_object_class'])) { - $fetchmode_object_class = $query['fetchmode_object_class']; - } - $this->_swapModes($fetchmode, $fetchmode_object_class); - - // make sure params is an array - if (!is_null($params)) { - $params = (array) $params; - } - - // get the result - if ($this->backend == 'mdb2') { - $result = $db->extended->$method($sql, null, $params); - } else { - switch ($method) { - - case 'getCol': - $result = $db->$method($sql, 0, $params); - break; - - case 'getAssoc': - $result = $db->$method($sql, false, $params); - break; - - default: - $result = $db->$method($sql, $params); - break; - - } - } - - // restore old fetch_mode and fetch_object_class back - $this->_swapModes($restore_mode, $restore_class); - - return $result; - } - - - /** - * Selects rows as a DB_Result/MDB2_Result_* object. - * - * @param string $query The name of the SQL SELECT to use from the - * $this->sql property array. - * @param string $filter SQL snippet to AND to the default WHERE clause - * @param string $order SQL snippet to override default ORDER BY clause - * @param int $start The record number from which to start result set - * @param int $count The number of records to list in result set. - * @param array $params Parameters for placeholder substitutions, if any. - * @return object DB_Result/MDB2_Result_* object on success - * (PEAR_Error on failure) - * @see DB_Table::_swapModes() - * @access public - */ - function selectResult($query, $filter = null, $order = null, - $start = null, $count = null, $params = array()) - { - // Is $query a query array or a key of $this->sql ? - // On output from this block, $query is an array - if (!is_array($query)) { - if (is_string($query)) { - if (isset($this->sql[$query])) { - $query = $this->sql[$query]; - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_UNDEF'), - $query); - } - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_NOT_STRING')); - } - } - - // build the base command - $sql = $this->buildSQL($query, $filter, $order, $start, $count); - if (PEAR::isError($sql)) { - return $sql; - } - - // DB_Table assumes you are using a shared PEAR DB/MDB2 object. - // Record fetchmode settings, to be restored afterwards. - $db =& $this->db; - $restore_mode = $db->fetchmode; - if ($this->backend == 'mdb2') { - $restore_class = $db->getOption('fetch_class'); - } else { - $restore_class = $db->fetchmode_object_class; - } - - // swap modes - $fetchmode = $this->fetchmode; - $fetchmode_object_class = $this->fetchmode_object_class; - if (isset($query['fetchmode'])) { - $fetchmode = $query['fetchmode']; - } - if (isset($query['fetchmode_object_class'])) { - $fetchmode_object_class = $query['fetchmode_object_class']; - } - $this->_swapModes($fetchmode, $fetchmode_object_class); - - // make sure params is an array - if (!is_null($params)) { - $params = (array) $params; - } - - // get the result - if ($this->backend == 'mdb2') { - $stmt =& $db->prepare($sql); - if (PEAR::isError($stmt)) { - return $stmt; - } - $result =& $stmt->execute($params); - } else { - $result =& $db->query($sql, $params); - } - - // swap modes back - $this->_swapModes($restore_mode, $restore_class); - - // return the result - return $result; - } - - - /** - * Counts the number of rows which will be returned by a query. - * - * This function works identically to {@link select()}, but it - * returns the number of rows returned by a query instead of the - * query results themselves. - * - * @author Ian Eure <ian@php.net> - * @param string $query The name of the SQL SELECT to use from the - * $this->sql property array. - * @param string $filter Ad-hoc SQL snippet to AND with the default - * SELECT WHERE clause. - * @param string $order Ad-hoc SQL snippet to override the default - * SELECT ORDER BY clause. - * @param int $start Row number from which to start listing in result - * @param int $count Number of rows to list in result set - * @param array $params Parameters to use in placeholder substitutions - * (if any). - * @return int Number of records from the table (or PEAR_Error on failure) - * - * @see DB_Table::select() - * @access public - */ - function selectCount($query, $filter = null, $order = null, - $start = null, $count = null, $params = array()) - { - - // Is $query a query array or a key of $this->sql ? - if (is_array($query)) { - $sql_key = null; - $count_query = $query; - } else { - if (is_string($query)) { - if (isset($this->sql[$query])) { - $sql_key = $query; - $count_query = $this->sql[$query]; - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_UNDEF'), - $query); - } - } else { - return $this->throwError( - constant($this->_primary_subclass . '_ERR_SQL_NOT_STRING')); - } - } - - // Use Table name as default 'from' if child class is DB_TABLE - if ($this->_primary_subclass == 'DB_TABLE') { - if (!isset($query['from'])) { - $count_query['from'] = $this->table; - } - } - - // If the query is a stored query in $this->sql, then create a corresponding - // key for the count query, or check if the count-query already exists - $ready = false; - if ($sql_key) { - // Create an sql key name for this count-query - $count_key = '__count_' . $sql_key; - // Check if a this count query alread exists in $this->sql - if (isset($this->sql[$count_key])) { - $ready = true; - } - } - - // If a count-query does not already exist, create $count_query array - if ($ready) { - - $count_query = $this->sql[$count_key]; - - } else { - - // Is a count-field set for the query? - if (!isset($count_query['count']) || - trim($count_query['count']) == '') { - $count_query['count'] = '*'; - } - - // Replace the SELECT fields with a COUNT() command - $count_query['select'] = "COUNT({$count_query['count']})"; - - // Replace the 'get' key so we only get one result item - $count_query['get'] = 'one'; - - // Create a new count-query in $this->sql - if ($sql_key) { - $this->sql[$count_key] = $count_query; - } - - } - - // Retrieve the count results - return $this->select($count_query, $filter, $order, - $start, $count, $params); - - } - - /** - * Changes the $this->db PEAR DB/MDB2 object fetchmode and - * fetchmode_object_class. - * - * @param string $new_mode A DB/MDB2_FETCHMODE_* constant. If null, - * defaults to whatever the DB/MDB2 object is currently using. - * - * @param string $new_class The object class to use for results when - * the $db object is in DB/MDB2_FETCHMODE_OBJECT fetch mode. If null, - * defaults to whatever the the DB/MDB2 object is currently using. - * - * @return void - * @access private - */ - function _swapModes($new_mode, $new_class) - { - // get the old (current) mode and class - $db =& $this->db; - $old_mode = $db->fetchmode; - if ($this->backend == 'mdb2') { - $old_class = $db->getOption('fetch_class'); - } else { - $old_class = $db->fetchmode_object_class; - } - - // don't need to swap anything if the new modes are both - // null or if the old and new modes already match. - if ((is_null($new_mode) && is_null($new_class)) || - ($old_mode == $new_mode && $old_class == $new_class)) { - return; - } - - // set the default new mode - if (is_null($new_mode)) { - $new_mode = $old_mode; - } - - // set the default new class - if (is_null($new_class)) { - $new_class = $old_class; - } - - // swap modes - $db->setFetchMode($new_mode, $new_class); - } - - - /** - * Returns SQL condition equating columns to literal values. - * - * The parameter $data is an associative array in which keys are - * column names and values are corresponding values. The method - * returns an SQL string that is true if the value of every - * specified database columns is equal to the corresponding - * value in $data. - * - * For example, if: - * <code> - * $data = array( 'c1' => 'thing', 'c2' => 23, 'c3' => 0.32 ) - * </code> - * then buildFilter($data) returns a string - * <code> - * c1 => 'thing' AND c2 => 23 AND c3 = 0.32 - * </code> - * in which string values are replaced by SQL literal values, - * quoted and escaped as necessary. - * - * Values are quoted and escaped as appropriate for each data - * type and the backend RDBMS, using the MDB2::quote() or - * DB::smartQuote() method. The behavior depends on the PHP type - * of the value: string values are quoted and escaped, while - * integer and float numerical values are not. Boolean values - * in $data are represented as 0 or 1, consistent with the way - * booleans are stored by DB_Table. - * - * Null values: The treatment of null values in $data depends upon - * the value of the $match parameter . If $match == 'simple', an - * empty string is returned if any $value of $data with a key in - * $data_key is null. If $match == 'partial', the returned SQL - * expression equates only the relevant non-null values of $data - * to the values of corresponding database columns. If - * $match == 'full', the function returns an empty string if all - * of the relevant values of data are null, and returns a - * PEAR_Error if some of the selected values are null and others - * are not null. - * - * @param array $data associative array, keys are column names - * @return string SQL expression equating values in $data to - * values of columns named by keys. - * @access public - */ - function buildFilter($data, $match = 'simple') - { - // Check $match type value - if (!in_array($match, array('simple', 'partial', 'full'))) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_MATCH_TYPE); - } - - if (count($data) == 0) { - return ''; - } - $filter = array(); - foreach ($data as $key => $value) { - if (!is_null($value)) { - if ($match == 'full' && isset($found_null)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FULL_KEY); - } - if (is_bool($value)) { - $value = $value ? '1' : '0'; - } else { - if ($this->backend == 'mdb2') { - $value = $this->db->quote($value); - } else { - $value = $this->db->quoteSmart($value); - } - } - $filter[] = "$key = $value"; - } else { - if ($match == 'simple') { - return ''; // if any value in $data is null - } elseif ($match == 'full') { - $found_null = true; - } - } - } - return implode(' AND ', $filter); - } - - // }}} -} - -// }}} - -/* Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ - -?> diff --git a/civicrm/packages/DB/Table/Database.php b/civicrm/packages/DB/Table/Database.php deleted file mode 100644 index 31150b77d341e5baf0c84dbafad0c436626f232a..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Database.php +++ /dev/null @@ -1,3495 +0,0 @@ -<?php - -// vim: set et ts=4 sw=4 fdm=marker: - -/** - * DB_Table_Database relational database abstraction class - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author David C. Morse <morse@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Database.php,v 1.15 2007/12/13 16:52:14 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -// {{{ Error code constants - -/** - * Parameter is not a DB/MDB2 object - */ -define('DB_TABLE_DATABASE_ERR_DB_OBJECT', -201); - -/** - * Error in addTable, parameter $table_obj is not a DB_Table object - */ -define('DB_TABLE_DATABASE_ERR_DBTABLE_OBJECT', -202); - -/** - * Error for table name that does not exist in the database - */ -define('DB_TABLE_DATABASE_ERR_NO_TBL', -203); - -/** - * Error for table name parameter that is not a string - */ -define('DB_TABLE_DATABASE_ERR_TBL_NOT_STRING', -204); - -/** - * Error in getCol for a non-existent column name - */ -define('DB_TABLE_DATABASE_ERR_NO_COL', -205); - -/** - * Error in getForeignCol for a non-existent foreign key column - */ -define('DB_TABLE_DATABASE_ERR_NO_FOREIGN_COL', -206); - -/** - * Error for column name that is not a string - */ -define('DB_TABLE_DATABASE_ERR_COL_NOT_STRING', -207); - -/** - * Error in addTable for multiple primary keys - */ -define('DB_TABLE_DATABASE_ERR_MULT_PKEY', -208); - -/** - * Error in addRef for a non-existent foreign key table - */ -define('DB_TABLE_DATABASE_ERR_NO_FTABLE', -209); - -/** - * Error in addRef for non-existence referenced table - */ -define('DB_TABLE_DATABASE_ERR_NO_RTABLE', -210); - -/** - * Error in addRef for null referenced key in a table with no primary key - */ -define('DB_TABLE_DATABASE_ERR_NO_PKEY', -211); - -/** - * Error in addRef for an invalid foreign key, neither string nor array - */ -define('DB_TABLE_DATABASE_ERR_FKEY', -212); - -/** - * Error in addRef for referenced key that is not a string, string foreign key - */ -define('DB_TABLE_DATABASE_ERR_RKEY_NOT_STRING', -213); - -/** - * Error in addRef for referenced key that is not an array, array foreign key - */ -define('DB_TABLE_DATABASE_ERR_RKEY_NOT_ARRAY', -214); - -/** - * Error in addRef for wrong number of columns in referenced key - */ -define('DB_TABLE_DATABASE_ERR_RKEY_COL_NUMBER', -215); - -/** - * Error in addRef for non-existence foreign key (referencing) column - */ -define('DB_TABLE_DATABASE_ERR_NO_FCOL', -216); - -/** - * Error in addRef for non-existence referenced column - */ -define('DB_TABLE_DATABASE_ERR_NO_RCOL', -217); - -/** - * Error in addRef for referencing and referenced columns of different types - */ -define('DB_TABLE_DATABASE_ERR_REF_TYPE', -218); - -/** - * Error in addRef for multiple references from one table to another - */ -define('DB_TABLE_DATABASE_ERR_MULT_REF', -219); - -/** - * Error due to invalid ON DELETE action name - */ -define('DB_TABLE_DATABASE_ERR_ON_DELETE_ACTION', -220); - -/** - * Error due to invalid ON UPDATE action name - */ -define('DB_TABLE_DATABASE_ERR_ON_UPDATE_ACTION', -221); - -/** - * Error in addLink due to missing required reference - */ -define('DB_TABLE_DATABASE_ERR_NO_REF_LINK', -222); - -/** - * Error in validCol for a column name that does not exist in the datase - */ -define('DB_TABLE_DATABASE_ERR_NO_COL_DB', -223); - -/** - * Error in validCol for column name that does not exist in the specified table - */ -define('DB_TABLE_DATABASE_ERR_NO_COL_TBL', -224); - -/** - * Error in a buildSQL or select* method for an undefined key of $this->sql - */ -define('DB_TABLE_DATABASE_ERR_SQL_UNDEF', -225); - -/** - * Error in a buildSQL or select* method for a key of $this->sql that is - * not a string - */ -define('DB_TABLE_DATABASE_ERR_SQL_NOT_STRING', -226); - -/** - * Error in buildFilter due to invalid match type - */ -define('DB_TABLE_DATABASE_ERR_MATCH_TYPE', -227); - -/** - * Error in buildFilter due to invalid key for full match - */ -define('DB_TABLE_DATABASE_ERR_DATA_KEY', -228); - -/** - * Error in buildFilter due to invalid key for full match - */ -define('DB_TABLE_DATABASE_ERR_FILT_KEY', -229); - -/** - * Error in buildFilter due to invalid key for full match - */ -define('DB_TABLE_DATABASE_ERR_FULL_KEY', -230); - -/** - * Error in insert for a failed foreign key constraint - */ -define('DB_TABLE_DATABASE_ERR_FKEY_CONSTRAINT', -231); - -/** - * Error in delete due to a referentially triggered 'restrict' action - */ -define('DB_TABLE_DATABASE_ERR_RESTRICT_DELETE', -232); - -/** - * Error in update due to a referentially triggered 'restrict' action - */ -define('DB_TABLE_DATABASE_ERR_RESTRICT_UPDATE', -233); - -/** - * Error in fromXML for table with multiple auto_increment columns - */ -define('DB_TABLE_DATABASE_ERR_XML_MULT_AUTO_INC', -234); - -/** - * Error in autoJoin, column and tables parameter both null - */ -define('DB_TABLE_DATABASE_ERR_NO_COL_NO_TBL', -235); - -/** - * Error in autoJoin for ambiguous column name - */ -define('DB_TABLE_DATABASE_ERR_COL_NOT_UNIQUE', -236); - -/** - * Error in autoJoin for non-unique set of join conditions - */ -define('DB_TABLE_DATABASE_ERR_AMBIG_JOIN', -237); - -/** - * Error in autoJoin for failed construction of join - */ -define('DB_TABLE_DATABASE_ERR_FAIL_JOIN', -238); - -/** - * Error in fromXML for PHP 4 (this function requires PHP 5) - */ -define('DB_TABLE_DATABASE_ERR_PHP_VERSION', -239); - -/** - * Error parsing XML string in fromXML - */ -define('DB_TABLE_DATABASE_ERR_XML_PARSE', -240); - -// }}} -// {{{ Includes - -/** - * DB_Table_Base base class - */ -require_once 'DB/Table/Base.php'; - -/** - * DB_Table table abstraction class - */ -require_once 'DB/Table.php'; - -/** - * The PEAR class for errors - */ -require_once 'PEAR.php'; - -// }}} -// {{{ Error messages - -/** - * US-English default error messages. If you want to internationalize, you can - * set the translated messages via $GLOBALS['_DB_TABLE_DATABASE']['error']. - * You can also use DB_Table_Database::setErrorMessage(). Examples: - * - * <code> - * (1) $GLOBALS['_DB_TABLE_DATABASE']['error'] = array( - * DB_TABLE_DATABASE_ERR_.. => '...', - * DB_TABLE_DATABASE_ERR_.. => '...'); - * (2) DB_Table_Database::setErrorMessage(DB_TABLE_DATABASE_ERR_.., '...'); - * DB_Table_Database::setErrorMessage(DB_TABLE_DATABASE_ERR_.., '...'); - * (3) DB_Table_Database::setErrorMessage(array( - * DB_TABLE_DATABASE_ERR_.. => '...'); - * DB_TABLE_DATABASE_ERR_.. => '...'); - * (4) $obj =& new DB_Table(); - * $obj->setErrorMessage(DB_TABLE_DATABASE_ERR_.., '...'); - * $obj->setErrorMessage(DB_TABLE_DATABASE_ERR_.., '...'); - * (5) $obj =& new DB_Table(); - * $obj->setErrorMessage(array(DB_TABLE_DATABASE_ERR_.. => '...'); - * DB_TABLE_DATABASE_ERR_.. => '...'); - * </code> - * - * For errors that can occur with-in the constructor call (i.e. e.g. creating - * or altering the database table), only the code from examples (1) to (3) - * will alter the default error messages early enough. For errors that can - * occur later, examples (4) and (5) are also valid. - */ -$GLOBALS['_DB_TABLE_DATABASE']['default_error'] = array( - DB_TABLE_DATABASE_ERR_DB_OBJECT => - 'Invalid DB/MDB2 object parameter. Function', - DB_TABLE_DATABASE_ERR_NO_TBL => - 'Table does not exist in database. Method, Table =', - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING => - 'Table name parameter is not a string in method', - DB_TABLE_DATABASE_ERR_NO_COL => - 'In getCol, non-existent column name parameter', - DB_TABLE_DATABASE_ERR_NO_FOREIGN_COL => - 'In getForeignCol, non-existent column name parameter', - DB_TABLE_DATABASE_ERR_COL_NOT_STRING => - 'Column name parameter is not a string in method', - DB_TABLE_DATABASE_ERR_DBTABLE_OBJECT => - 'Parameter of addTable is not a DB_Table object', - DB_TABLE_DATABASE_ERR_MULT_PKEY => - 'Multiple primary keys in one table detected in addTable. Table', - DB_TABLE_DATABASE_ERR_NO_FTABLE => - 'Foreign key reference from non-existent table in addRef. Reference', - DB_TABLE_DATABASE_ERR_NO_RTABLE => - 'Reference to a non-existent referenced table in addRef. Reference', - DB_TABLE_DATABASE_ERR_NO_PKEY => - 'Missing primary key of referenced table in addRef. Reference', - DB_TABLE_DATABASE_ERR_FKEY => - 'Foreign / referencing key is not a string or array in addRef', - DB_TABLE_DATABASE_ERR_RKEY_NOT_STRING => - 'Foreign key is a string, referenced key is not a string in addRef', - DB_TABLE_DATABASE_ERR_RKEY_NOT_ARRAY => - 'Foreign key is an array, referenced key is not an array in addRef', - DB_TABLE_DATABASE_ERR_RKEY_COL_NUMBER => - 'Wrong number of columns in referencing key in addRef', - DB_TABLE_DATABASE_ERR_NO_FCOL => - 'Nonexistent foreign / referencing key column in addRef. Reference', - DB_TABLE_DATABASE_ERR_NO_RCOL => - 'Nonexistent referenced key column in addRef. Reference', - DB_TABLE_DATABASE_ERR_REF_TYPE => - 'Different referencing and referenced column types in addRef. Reference', - DB_TABLE_DATABASE_ERR_MULT_REF => - 'Multiple references between two tables in addRef. Reference', - DB_TABLE_DATABASE_ERR_ON_DELETE_ACTION => - 'Invalid ON DELETE action. Reference', - DB_TABLE_DATABASE_ERR_ON_UPDATE_ACTION => - 'Invalid ON UPDATE action. Reference', - DB_TABLE_DATABASE_ERR_NO_REF_LINK => - 'Error in addLink due to missing required reference(s)', - DB_TABLE_DATABASE_ERR_NO_COL_DB => - 'In validCol, column name does not exist in database. Column', - DB_TABLE_DATABASE_ERR_NO_COL_TBL => - 'In validCol, column does not exist in specified table. Column', - DB_TABLE_DATABASE_ERR_SQL_UNDEF => - 'Query string is not a key of $sql property array. Key is', - DB_TABLE_DATABASE_ERR_SQL_NOT_STRING => - 'Query is neither an array nor a string', - DB_TABLE_DATABASE_ERR_MATCH_TYPE => - 'Invalid match parameter of buildFilter', - DB_TABLE_DATABASE_ERR_DATA_KEY => - 'Invalid data_key in buildFilter, neither string nor array', - DB_TABLE_DATABASE_ERR_FILT_KEY => - 'Incompatible data_key and filter_key in buildFilter', - DB_TABLE_DATABASE_ERR_FULL_KEY => - 'Invalid key value in buildFilter: Mixed null and not null', - DB_TABLE_DATABASE_ERR_FKEY_CONSTRAINT => - 'Foreign key constraint failure: Key does not reference any rows', - DB_TABLE_DATABASE_ERR_RESTRICT_DELETE => - 'Referentially trigger restrict of delete from table', - DB_TABLE_DATABASE_ERR_RESTRICT_UPDATE => - 'Referentially trigger restrict of update of table', - DB_TABLE_DATABASE_ERR_NO_COL_NO_TBL => - 'No columns or tables provided as parameters to autoJoin', - DB_TABLE_DATABASE_ERR_COL_NOT_UNIQUE => - 'Ambiguous column name in autoJoin. Column', - DB_TABLE_DATABASE_ERR_AMBIG_JOIN => - 'Ambiguous join in autoJoin, during join of table', - DB_TABLE_DATABASE_ERR_FAIL_JOIN => - 'Failed join in autoJoin, failed to join table', - DB_TABLE_DATABASE_ERR_PHP_VERSION => - 'PHP 5 is required for fromXML method. Interpreter version is', - DB_TABLE_DATABASE_ERR_XML_PARSE => - 'Error parsing XML in fromXML method' - ); - -// merge default and user-defined error messages -if (!isset($GLOBALS['_DB_TABLE_DATABASE']['error'])) { - $GLOBALS['_DB_TABLE_DATABASE']['error'] = array(); -} -foreach ($GLOBALS['_DB_TABLE_DATABASE']['default_error'] as $code => $message) { - if (!array_key_exists($code, $GLOBALS['_DB_TABLE_DATABASE']['error'])) { - $GLOBALS['_DB_TABLE_DATABASE']['error'][$code] = $message; - } -} - -// }}} -// {{{ DB_Table_Database - -/** - * Relational database abstraction class - * - * DB_Table_Database is an abstraction class for a relational database. - * It is a layer built on top of DB_Table, in which each table in a - * database is represented as an instance of DB_Table. It provides: - * - * - an object-oriented representation of the database schema - * - automated construction of SQL commands for simple joins - * - an API for insert, update, and select commands very similar - * to that of DB_Table, with optional emulation of standard SQL - * foreign key integrity checks and referential triggered actions - * such as cascading deletes. - * - Serialization and unserialization of the database schema via - * either php serialization or XML, using the MDB2 XML schema. - * - * @category Database - * @package DB_Table - * @author David C. Morse <morse@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Database extends DB_Table_Base -{ - - // {{{ properties - - /** - * Name of the database - * - * @var string - * @access public - */ - var $name = null; - - /** - * Associative array of DB_Table object references. Keys are table names. - * - * Associative array in which keys are table names, values are references to - * DB_Table objects. Each referenced DB_Table object represents one table in - * the database. - * - * @var array - * @access private - */ - var $_table = array(); - - /** - * Array in which keys are table names, values are DB_Table subclass names. - * - * See the getTableSubclass() method docblock for further details. - * - * @var array - * @access private - */ - var $_table_subclass = array(); - - /** - * Path to directory containing DB_Table subclass declaration files - * - * See the setTableSubclassPath() method docblock for further details. - * - * @var string - * @access private - */ - var $_table_subclass_path = ''; - - /** - * Array in which keys are table names, values are primary keys. - * - * Each primary key value may be a column name string, a sequential array of - * column name strings, or null. - * - * See the getPrimaryKey() method docblock for details. - * - * @var array - * @access private - */ - var $_primary_key = array(); - - /** - * Associative array that maps column names keys to table names. - * - * Each key is the name string of a column in the database. Each value - * is a numerical array containing the names of all tables that contain - * a column with that name. - * - * See the getCol() method docblock for details. - * - * @var array - * @access private - */ - var $_col = array(); - - /** - * Associative array that maps names of foreign key columns to table names - * - * Each key is the name string of a foreign key column. Each value is a - * sequential array containing the names of all tables that contain a - * foreign key column with that name. - * - * See the getForeignCol() method docblock for further details. - * - * @var array - * @access private - */ - var $_foreign_col = array(); - - /** - * Two-dimensional associative array of foreign key references. - * - * Keys are pairs of table names (referencing table first, referenced - * table second). Each value is an array containing information about - * the referencing and referenced keys, and about any referentially - * triggered actions (e.g., cascading delete). - * - * See the getRef() docblock for further details. - * - * @var array - * @access private - */ - var $_ref = array(); - - /** - * Array in which each key is the names of a referenced tables, each value - * an sequential array containing names of referencing tables. - * - * See the docblock for the getRefTo() method for further discussion. - * - * @var array - * @access private - */ - var $_ref_to = array(); - - /** - * Two-dimensional associative array of linking tables. - * - * Two-dimensional associative array in which pairs of keys are names - * of pairs of tables that are linked by one or more linking/association - * table. Each value is an array containing the names of all table that - * link the tables specified by the pair of keys. A linking table is a - * table that creates a many-to-many relationship between two linked - * tables, via foreign key references from the linking table to the two - * linked tables. The $_link property is used by the autoJoin() method - * to join tables that are related only through such a linking table. - * - * See the getLink() method docblock for further details. - * - * @var array - * @access private - */ - var $_link = array(); - - /** - * Take on_update actions if $_act_on_update is true - * - * By default, on_update actions are enabled ($_act_on_update = true) - * - * @var boolean - * @access private - */ - var $_act_on_update = true; - - /** - * Take on_delete actions if $_act_on_delete is true - * - * By default, on_delete actions are enabled ($_act_on_delete = true) - * - * @var boolean - * @access private - */ - var $_act_on_delete = true; - - /** - * Validate foreign keys before insert or update if $_check_fkey is true - * - * By default, validation is disabled ($_check_fkey = false) - * - * @var boolean - * @access private - */ - var $_check_fkey = false; - - /** - * If the column keys in associative array return sets are fixed case - * (all upper or lower case) this property should be set true. - * - * The column keys in rows of associative array return sets may either - * preserve capitalization of the column names or they may be fixed case, - * depending on the options set in the backend (DB/MDB2) and on phptype. - * If these column names are returned with a fixed case (either upper - * or lower), $_fix_case must be set true in order for php emulation of - * ON DELETE and ON UPDATE actions to work correctly. Otherwise, the - * $_fix_case property should be false (the default). - * - * The choice between mixed or fixed case column keys may be made by using - * using the setFixCase() method, which resets both the behavior of the - * backend and the $_fix_case property. It may also be changed by using the - * setOption() method of the DB or MDB2 backend object to directly set the - * DB_PORTABILITY_LOWERCASE or MDB2_PORTABILITY_FIX_CASE bits of the - * DB/MDB2 'portability' option. - * - * By default, DB returns mixed case and MDB2 returns lower case. - * - * @see DB_Table_Database::setFixCase() - * @see DB::setOption() - * @see MDB2::setOption() - * - * @var boolean - * @access private - */ - var $_fix_case = false; - - // }}} - // {{{ Methods - - // {{{ function DB_Table_Database(&$db, $name) - - /** - * Constructor - * - * If an error is encountered during instantiation, the error - * message is stored in the $this->error property of the resulting - * object. See $error property docblock for a discussion of error - * handling. - * - * @param object &$db DB/MDB2 database connection object - * @param string $name the database name - * @return object DB_Table_Database - * @access public - */ - function __construct(&$db, $name) - { - // Is $db an DB/MDB2 object or null? - if (is_a($db, 'db_common')) { - $this->backend = 'db'; - $this->fetchmode = DB_FETCHMODE_ORDERED; - } elseif (is_a($db, 'mdb2_driver_common')) { - $this->backend = 'mdb2'; - $this->fetchmode = MDB2_FETCHMODE_ORDERED; - } else { - $code = DB_TABLE_DATABASE_ERR_DB_OBJECT ; - $text = $GLOBALS['_DB_TABLE_DATABASE']['error'][$code] - . ' DB_Table_Database'; - $this->error = PEAR::throwError($text, $code); - return; - } - $this->db =& $db; - $this->name = $name; - - $this->_primary_subclass = 'DB_TABLE_DATABASE'; - $this->setFixCase(false); - } - - // }}} - // {{{ function setDBconnection(&$db) - - /** - * Set DB/MDB2 connection instance for database and all tables - * - * Assign a reference to the DB/MDB2 object $db to $this->db, set - * $this->backend to 'db' or 'mdb2', and set the same pair of - * values for the $db and $backend properties of every DB_Table - * object in the database. - * - * @param object &$db DB/MDB2 connection object - * @return boolean True on success (PEAR_Error on failure) - * - * @throws PEAR_Error if - * $db is not a DB or MDB2 object(DB_TABLE_DATABASE_ERR_DB_OBJECT) - * - * @access public - */ - function setDBconnection(&$db) - { - // Is the first argument a DB/MDB2 object ? - if (is_subclass_of($db, 'DB_Common')) { - $backend = 'db'; - } elseif (is_subclass_of($db, 'MDB2_Driver_Common')) { - $backend = 'mdb2'; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_DB_OBJECT, - "setDBconnection"); - } - - // Set db and backend for database and all of its tables - $this->db =& $db; - $this->backend = $backend; - foreach ($this->_table as $name => $table) { - $table->db =& $db; - $table->backend = $backend; - } - return true; - } - - // }}} - // {{{ function setActOnDelete($flag = true) - - /** - * Turns on (or off) automatic php emulation of SQL ON DELETE actions - * - * @param bool $flag True to enable action, false to disable - * @return void - * @access public - */ - function setActOnDelete($flag = true) - { - if ($flag) { - $this->_act_on_delete = true; - } else { - $this->_act_on_delete = false; - } - } - - // }}} - // {{{ function setActOnUpdate($flag = true) - - /** - * Turns on (or off) automatic php emulation of ON UPDATE actions - * - * @param bool $flag True to enable action, false to disable - * @return void - * @access public - */ - function setActOnUpdate($flag = true) - { - if ($flag) { - $this->_act_on_update = true; - } else { - $this->_act_on_update = false; - } - } - - // }}} - // {{{ function setCheckFKey($flag = true) - - /** - * Turns on (or off) validation of foreign key values on insert and update - * - * @param bool $flag True to enable foreign key validation, false to disable - * @return void - * @access public - */ - function setCheckFKey($flag = true) - { - if ($flag) { - $this->_check_fkey = true; - } else { - $this->_check_fkey = false; - } - } - - // }}} - // {{{ function setFixCase($flag = false) - - /** - * Sets backend option such that column keys in associative array return - * sets are converted to fixed case, if true, or mixed case, if false. - * - * Sets the DB/MDB2 'portability' option, and sets $this->_fix_case = $flag. - * Because it sets an option in the underlying DB/MDB2 connection object, - * this effects the behavior of all objects that share the connection. - * - * @param bool $flag True for fixed lower case, false for mixed - * @return void - * @access public - */ - function setFixCase($flag = false) - { - $flag = (bool) $flag; - $option = $this->db->getOption('portability'); - if ($this->backend == 'db') { - $option = $option | DB_PORTABILITY_LOWERCASE; - if (!$flag) { - $option = $option ^ DB_PORTABILITY_LOWERCASE; - } - } else { - $option = $option | MDB2_PORTABILITY_FIX_CASE; - if (!$flag) { - $option = $option ^ MDB2_PORTABILITY_FIX_CASE; - } - } - $this->db->setOption('portability', $option); - $this->_fix_case = $flag; - } - - // }}} - // {{{ function &getDBInstance() - - /** - * Return reference to $this->db DB/MDB2 object wrapped by $this - * - * @return object Reference to DB/MDB2 object - * @access public - */ - function &getDBInstance() - { - return $this->db; - } - - // }}} - // {{{ function getTable($name = null) - - /** - * Returns all or part of $_table property array - * - * If $name is absent or null, return entire $_table property array. - * If $name is a table name, return $this->_table[$name] DB_Table object - * reference - * - * The $_table property is an associative array in which keys are table - * name strings and values are references to DB_Table objects. Each of - * the referenced objects represents one table in the database. - * - * @param string $name Name of table - * @return mixed $_table property, or one element of $_table - * (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - $name is not a string ( DB_TABLE_DATABASE_ERR_TBL_NOT_STRING ) - * - $name is not valid table name ( DB_TABLE_DATABASE_ERR_NO_TBL ) - * - * @access public - */ - function getTable($name = null) - { - if (is_null($name)) { - return $this->_table; - } elseif (is_string($name)) { - if (isset($this->_table[$name])) { - return $this->_table[$name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getTable, $name"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getTable"); - } - } - - // }}} - // {{{ function getPrimaryKey($name = null) - - /** - * Returns all or part of the $_primary_key property array - * - * If $name is null, return the $this->_primary_key property array - * If $name is a table name, return $this->_primary_key[$name] - * - * The $_primary_key property is an associative array in which each key - * a table name, and each value is the primary key of that table. Each - * primary key value may be a column name string, a sequential array of - * column name strings (for a multi-column key), or null (if no primary - * key has been declared). - * - * @param string $name Name of table - * @return mixed $this->primary_key array or $this->_primary_key[$name] - * (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - $name is not a string ( DB_TABLE_DATABASE_ERR_TBL_NOT_STRING ) - * - $name is not valid table name ( DB_TABLE_DATABASE_ERR_NO_TBL ) - * - * @access public - */ - function getPrimaryKey($name = null) - { - if (is_null($name)) { - return $this->_primary_key; - } elseif (is_string($name)) { - if (isset($this->_primary_key[$name])) { - return $this->_primary_key[$name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getPrimaryKey, $name"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getPrimaryKey"); - } - } - - // }}} - // {{{ function getTableSubclass($name = null) - - /** - * Returns all or part of the $_table_subclass property array - * - * If $name is null, return the $this->_table_subclass property array - * If $name is a table name, return $this->_table_subclass[$name] - * - * The $_table_subclass property is an associative array in which each key - * is a table name string, and each value is the name of the corresponding - * subclass of DB_Table. The value is null if the table is an instance of - * DB_Table itself. - * - * Subclass names are set within the addTable method by applying the - * built in get_class() function to a DB_Table object. The class names - * returned by get_class() are stored unmodified. In PHP 4, get_class - * converts all class names to lower case. In PHP 5, it preserves the - * capitalization of the name used in the class definition. - * - * For autoloading of class definitions to work properly in the - * __wakeup() method, the base name of each subclass definition - * file (excluding the .php extension) should thus be a identical - * to the class name in PHP 5, and a lower case version of the - * class name in PHP 4 or - * - * @param string $name Name of table - * @return mixed $_table_subclass array or $this->_table_subclass[$name] - * (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - $name is not a string ( DB_TABLE_DATABASE_TBL_NOT_STRING ) - * - $name is not valid table name ( DB_TABLE_DATABASE_NO_TBL ) - * - * @access public - * - @ @see DB_Table_Database::__wakeup() - */ - function getTableSubclass($name = null) - { - if (is_null($name)) { - return $this->_table_subclass; - } elseif (is_string($name)) { - if (isset($this->_table_subclass[$name])) { - return $this->_table_subclass[$name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getTableSubclass, $name"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getTableSubclass"); - } - } - - // }}} - // {{{ function getCol($column_name = null) - - /** - * Returns all or part of the $_col property array - * - * If $column_name is null, return $_col property array - * If $column_name is valid, return $_col[$column_name] subarray - * - * The $_col property is an associative array in which each key is the - * name of a column in the database, and each value is a numerical array - * containing the names of all tables that contain a column with that - * name. - * - * @param string $column_name a column name string - * @return mixed $this->_col property array or $this->_col[$column_name] - * (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - $column_name is not a string (DB_TABLE_DATABASE_ERR_COL_NOT_STRING) - * - $column_name is not valid column name (DB_TABLE_DATABASE_NO_COL) - * - * @access public - */ - function getCol($column_name = null) - { - if (is_null($column_name)) { - return $this->_col; - } elseif (is_string($column_name)) { - if (isset($this->_col[$column_name])) { - return $this->_col[$column_name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_COL, - "'$column_name'"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_COL_NOT_STRING, - 'getCol'); - } - } - - // }}} - // {{{ function getForeignCol($column_name = null) - - /** - * Returns all or part of the $_foreign_col property array - * - * If $column_name is null, return $this->_foreign_col property array - * If $column_name is valid, return $this->_foreign_col[$column_name] - * - * The $_foreign_col property is an associative array in which each - * key is the name string of a foreign key column, and each value is a - * sequential array containing the names of all tables that contain a - * foreign key column with that name. - * - * If a column $column in a referencing table $ftable is part of the - * foreign key for references to two or more different referenced tables - * tables, the name $ftable will also appear multiple times in the array - * $this->_foreign_col[$column]. - * - * Returns a PEAR_Error with the following DB_TABLE_DATABASE_* error - * codes if: - * - $column_name is not a string ( _COL_NOT_STRING ) - * - $column_name is not valid foreign column name ( _NO_FOREIGN_COL ) - * - * @param string column name string for foreign key column - * @return array $_foreign_col property array - * @access public - */ - function getForeignCol($column_name = null) - { - if (is_null($column_name)) { - return $this->_foreign_col; - } elseif (is_string($column_name)) { - if (isset($this->_foreign_col[$column_name])) { - return $this->_foreign_col[$column_name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_FOREIGN_COL, - $column_name); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_COL_NOT_STRING, - 'getForeignCol'); - } - } - - // }}} - // {{{ function getRef($table1 = null, $table2 = null) - - /** - * Returns all or part of the $_ref two-dimensional property array - * - * Returns $this->_ref 2D property array if $table1 and $table2 are null. - * Returns $this->_ref[$table1] subarray if only $table2 is null. - * Returns $this->_ref[$table1][$table2] if both parameters are present. - * - * Returns null if $table1 is a table that references no others, or - * if $table1 and $table2 are both valid table names, but there is no - * reference from $table1 to $table2. - * - * The $_ref property is a two-dimensional associative array in which - * the keys are pairs of table names, each value is an array containing - * information about referenced and referencing keys, and referentially - * triggered actions (if any). An element of the $_ref array is of the - * form $ref[$ftable][$rtable] = $reference, where $ftable is the name - * of a referencing (or foreign key) table and $rtable is the name of - * a corresponding referenced table. The value $reference is an array - * $reference = array($fkey, $rkey, $on_delete, $on_update) in which - * $fkey and $rkey are the foreign (or referencing) and referenced - * keys, respectively: Foreign key $fkey of table $ftable references - * key $rkey of table $rtable. The values of $fkey and $rkey must either - * both be valid column name strings for columns of the same type, or - * they may both be sequential arrays of column name names, with equal - * numbers of columns of corresponding types, for multi-column keys. The - * $on_delete and $on_update values may be either null or string values - * that indicate actions to be taken upon deletion or updating of a - * referenced row (e.g., cascading deletes). A null value of $on_delete - * or $on_update indicates that no referentially triggered action will - * be taken. See addRef() for further details about allowed values of - * these action strings. - * - * @param string $table1 name of referencing table - * @param string $table2 name of referenced table - * @return mixed $ref property array, sub-array, or value - * - * @throws a PEAR_Error if: - * - $table1 or $table2 is not a string (.._DATABASE_ERR_TBL_NOT_STRING) - * - $table1 or $table2 is not a table name (.._DATABASE_ERR_NO_TBL) - * - * @access public - */ - function getRef($table1 = null, $table2 = null) - { - if (is_null($table1)) { - return $this->_ref; - } elseif (is_string($table1)) { - if (isset($this->_ref[$table1])) { - if (is_null($table2)) { - return $this->_ref[$table1]; - } elseif (is_string($table2)) { - if (isset($this->_ref[$table1][$table2])) { - return $this->_ref[$table1][$table2]; - } else { - if (isset($this->_table[$table2])) { - // Valid table names but no references to - return null; - } else { - // Invalid table name - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getRef, $table2"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getRef"); - } - } else { - if (isset($this->_table[$table1])) { - // Valid table name, but no references from - return null; - } else { - // Invalid table name - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getRef, $table1"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getRef"); - } - - } - - // }}} - // {{{ function getRefTo($table_name = null) - - /** - * Returns all or part of the $_ref_to property array - * - * Returns $this->_ref_to property array if $table_name is null. - * Returns $this->_ref_to[$table_name] if $table_name is not null. - * - * The $_ref_to property is an associative array in which each key - * is the name of a referenced table, and each value is a sequential - * array containing the names of all tables that contain foreign keys - * that reference that table. Each element is thus of the form - * $_ref_to[$rtable] = array($ftable1, $ftable2,...), where - * $ftable1, $ftable2, ... are the names of tables that reference - * the table named $rtable. - * - * @param string $table_name name of table - * @return mixed $_ref_to property array or subarray - * (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - $table_name is not a string ( .._DATABASE_ERR_TBL_NOT_STRING ) - * - $table_name is not a table name ( .._DATABASE_ERR_NO_TBL ) - * - * @access public - */ - function getRefTo($table_name = null) - { - if (is_null($table_name)) { - return $this->_ref_to; - } elseif (is_string($table_name)) { - if (isset($this->_ref_to[$table_name])) { - return $this->_ref_to[$table_name]; - } else { - if (isset($this->_table[$table_name])) { - // Valid table name, but no references to - return null; - } else { - // Invalid table name - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getRefTo, $table_name"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getRefTo"); - } - } - - // }}} - // {{{ function getLink($table1 = null, $table2 = null) - - /** - * Returns all or part of the $link two-dimensional property array - * - * Returns $this->_link 2D property array if $table1 and $table2 are null. - * Returns $this->_link[$table1] subarray if only $table2 is null. - * Returns $this->_link[$table1][$table2] if both parameters are present. - * - * Returns null if $table1 is a valid table with links to no others, or - * if $table1 and $table2 are both valid table names but there is no - * link between them. - * - * The $_link property is a two-dimensional associative array with - * elements of the form $this->_link[$table1][$table2] = array($link1, ...), - * in which the value is an array containing the names of all tables - * that `link' tables named $table1 and $table2, and thereby create a - * many-to-many relationship between these two tables. - * - * The $_link property is used in the autoJoin method to join tables - * that are related by a many-to-many relationship via a linking table, - * rather than via a direct foreign key reference. A table that is - * declared to be linking table for tables $table1 and $table2 must - * contain foreign keys that reference both of these tables. - * - * Each binary link in a database is listed twice in $_link, in - * $_link[$table1][$table2] and in $_link[$table2][$table1]. If a - * linking table contains foreign key references to N tables, with - * N > 2, each of the resulting binary links is listed separately. - * For example, a table with references to 3 tables A, B, and C can - * create three binary links (AB, AC, and BC) and six entries in the - * link property array (i.e., in $_link[A][B], $_link[B][A], ... ). - * - * Linking tables may be added to the $_link property by using the - * addLink method or deleted using the delLink method. Alternatively, - * all possible linking tables can be identified and added to the - * $_link array at once by the addAllLinks() method. - * - * @param string $table1 name of linked table - * @param string $table2 name of linked table - * @return mixed $_link property array, sub-array, or value - * - * @throws PEAR_Error: - * - $table1 or $table2 is not a string (..DATABASE_ERR_TBL_NOT_STRING) - * - $table1 or $table2 is not a table name (..DATABASE_ERR_NO_TBL) - * - * @access public - */ - function getLink($table1 = null, $table2 = null) - { - if (is_null($table1)) { - return $this->_link; - } elseif (is_string($table1)) { - if (isset($this->_link[$table1])) { - if (is_null($table2)) { - return $this->_link[$table1]; - } elseif (is_string($table2)) { - if (isset($this->_link[$table1][$table2])) { - return $this->_link[$table1][$table2]; - } else { - if (isset($this->_table[$table2])) { - // Valid table names, but no links - return null; - } else { - // Invalid 2nd table name string - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getLink, $table2"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getLink"); - } - } else { - if (isset($this->_table[$table1])) { - // Valid first table name, but no links - return null; - } else { - // Invalid 1st table name string - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "getLink, $table1"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_TBL_NOT_STRING, - "getLink"); - } - } - - // }}} - // {{{ function setTableSubclassPath($path) - - /** - * Sets path to a directory containing DB_Table subclass definitions. - * - * This method sets the $_table_subclass_path string property. The value of - * this property is the path to the directory containing DB_Table subclass - * definitions, without a trailing directory separator. - * - * This path may be used by the __wakeup(), if necessary, in an attempt to - * autoload class definitions when unserializing a DB_Table_Database object - * and its child DB_Table objects. If a DB_Table subclass $subclass_name - * has not been defined when it is needed in DB_Table_Database::__wakeup(), - * to unserialize an instance of this class, the __wakeup() method attempts - * to include a class definition file from this directory, as follows: - * <code> - * $dir = $this->_table_subclass_path; - * require_once $dir . '/' . $subclass . '.php'; - * </code> - * See the getTableSubclass() docblock for a discusion of capitalization - * conventions in PHP 4 and 5 for subclass file names. - * - * @param string $path path to directory containing class definitions - * @return void - * @access public - * - * @see DB_Table_Database::getTableSubclass() - */ - function setTableSubclassPath($path) - { - $this->_table_subclass_path = $path; - } - - // }}} - // {{{ function addTable(&$table_obj) - - /** - * Adds a table to the database. - * - * Creates references between $this DB_Table_Database object and - * the child DB_Table object, by adding a reference to $table_obj - * to the $this->_table array, and setting $table_obj->database = - * $this. - * - * Adds the primary key to $this->_primary_key array. The relevant - * element of $this->_primary_key is set to null if no primary key - * index is declared. Returns an error if more than one primary key - * is declared. - * - * Returns true on success, and PEAR error on failure. Returns the - * following DB_TABLE_DATABASE_ERR_* error codes if: - * - $table_obj is not a DB_Table ( _DBTABLE_OBJECT ) - * - more than one primary key is defined ( _ERR_MULT_PKEY ) - * - * @param object &$table_obj the DB_Table object (reference) - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function addTable(&$table_obj) - { - // Check that $table_obj is a DB_Table object - // Identify subclass name, if any - if (is_subclass_of($table_obj, 'DB_Table')) { - $subclass = get_class($table_obj); - } elseif (is_a($table_obj, 'DB_Table')) { - $subclass = null; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_DBTABLE_OBJECT); - } - - // Identify table name and table object (sub)class name - $table = $table_obj->table; - - // Set $this->_primary_key[$table] - $this->_primary_key[$table] = null; - foreach ($table_obj->idx as $idx_name => $idx_def) { - if ($idx_def['type'] == 'primary') { - if (is_null($this->_primary_key[$table])) { - $this->_primary_key[$table] = $idx_def['cols']; - } else { - // More than one primary key defined in the table - unset($this->_primary_key[$table]); - return $this->throwError( - DB_TABLE_DATABASE_ERR_MULT_PKEY, $table); - } - } - } - - // Add references between $this parent and child table object - $this->_table[$table] =& $table_obj; - $table_obj->setDatabaseInstance($this); - - // Add subclass name (if any) to $this->_table_subclass - $this->_table_subclass[$table] = $subclass; - - // Set shared properties - $table_obj->db =& $this->db; - $table_obj->backend = $this->backend; - $table_obj->fetchmode = $this->fetchmode; - - // Add all columns to $_col property - foreach ($table_obj->col as $key => $def) { - if (!isset($this->_col[$key])) { - $this->_col[$key] = array(); - } - $this->_col[$key][] = $table; - } - - return true; - } - - // }}} - // {{{ function deleteTable($table) - - /** - * Deletes a table from $this database object. - * - * Removes all dependencies on $table from the database model. The table - * is removed from $_table and $_primary_key properties. Its columns are - * removed from the $_col and $_foreign_col properties. References to - * and from the table are removed from the $_ref, $_ref_to, and $_link - * properties. Referencing columns are removed from $_foreign_col. - * - * @param string $table name of table to be deleted - * @return void - * @access public - */ - function deleteTable($table) - { - if (isset($this->_table[$table])) { - $table_obj =& $this->_table[$table]; - } else { - return; - } - - // Remove reference to database from table object - $null_instance = null; - $table_obj->setDatabaseInstance($null_instance); - - // Remove columns from $_col and $_foreign_col property arrays - foreach ($table_obj->col as $column => $def) { - $key = array_search($table, $this->_col[$column]); - if (is_integer($key)) { - unset($this->_col[$column][$key]); - if (count($this->_col[$column]) == 0) { - unset($this->_col[$column]); - } else { - $new = array_values($this->_col[$column]); - $this->_col[$column] = $new; - } - } - if (isset($this->_foreign_col[$column])) { - $key = array_search($table, $this->_foreign_col[$column]); - if (is_integer($key)) { - unset($this->_foreign_col[$column][$key]); - if (count($this->_foreign_col[$column]) == 0) { - unset($this->_foreign_col[$column]); - } else { - $new = array_values($this->_foreign_col[$column]); - $this->_foreign_col[$column] = $new; - } - } - } - } - - // Remove all references involving the deleted table. - // Corresponding links are removed from $this->_link by deleteRef - // Referencing columns are removed from $this->_foreign_col by deleteRef - foreach ($this->_ref as $ftable => $referenced) { - foreach ($referenced as $rtable => $ref) { - if ($ftable == $table || $rtable == $table) { - $this->deleteRef($ftable, $rtable); - } - } - } - - // Remove table from $this->_table and $this->_primary_key - unset($this->_table[$table]); - unset($this->_primary_key[$table]); - } - - // }}} - // {{{ function addRef($ftable, $fkey, $rtable, [$rkey], [$on_delete], [$on_update]) - - /** - * Adds a foreign key reference to the database. - * - * Adds a reference from foreign key $fkey of table $ftable to - * referenced key $rkey of table named $rtable to the $this->_ref - * property. The values of $fkey and $rkey (if not null) may either - * both be column name strings (for single column keys) or they - * may both be numerically indexed arrays of corresponding column - * names (for multi-column keys). If $rkey is null (the default), - * the referenced key taken to be the primary key of $rtable, if - * any. - * - * The $on_delete and $on_update parameters may be either be null, - * or may have string values 'restrict', 'cascade', 'set null', or - * 'set default' that indicate referentially triggered actions to be - * taken deletion or updating of referenced row in $rtable. Each of - * these actions corresponds to a standard SQL action (e.g., cascading - * delete) that may be taken upon referencing rows of table $ftable - * when a referenced row of $rtable is deleted or updated. A PHP - * null value for either parameter (the default) signifies that no - * such action will be taken upon deletion or updating. - * - * There may no more than one reference from a table to another, though - * reference may contain multiple columns. - * - * Returns true on success, and PEAR error on failure. Returns the - * following DB_TABLE_DATABASE_ERR_* error codes if: - * - $ftable does not exist ( _NO_FTABLE ) - * - $rtable does not exist ( _NO_RTABLE ) - * - $rkey is null and $rtable has no primary key ( _NO_PKEY ) - * - $fkey is neither a string nor an array ( _FKEY ) - * - $rkey is not a string, $fkey is a string ( _RKEY_NOT_STRING ) - * - $rkey is not an array, $fkey is an array ( _RKEY_NOT_ARRAY ) - * - A column of $fkey does not exist ( _NO_FCOL ) - * - A column of $rkey does not exist ( _NO_RCOL ) - * - A column of $fkey and $rkey have different types ( _REF_TYPE ) - * - A reference from $ftable to $rtable already exists ( _MULT_REF ) - * - * @param string $ftable name of foreign/referencing table - * @param mixed $fkey foreign key in referencing table - * @param string $rtable name of referenced table - * @param mixed $rkey referenced key in referenced table - * @param string $on_delete action upon delete of a referenced row. - * @param string $on_update action upon update of a referenced row. - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function addRef($ftable, $fkey, $rtable, $rkey = null, - $on_delete = null, $on_update = null) - { - // Check existence of $ftable is a key in $this->_table. - if (isset($this->_table[$ftable])) { - $ftable_obj =& $this->_table[$ftable]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_FTABLE, - "$ftable => $rtable"); - } - - // Check existence of referenced table - if (isset($this->_table[$rtable])) { - $rtable_obj =& $this->_table[$rtable]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_RTABLE, - "$ftable => $rtable"); - } - - // If referenced key is null, set it to the primary key - if (!$rkey) { - if (isset($this->_primary_key[$rtable])) { - $rkey = $this->_primary_key[$rtable]; - } else { - // Error: null referenced key and no primary key - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_PKEY, - "$ftable => $rtable"); - } - } - - // Check $fkey and $rkey types and compatibility - if (is_string($fkey)) { - if (!is_string($rkey)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_RKEY_NOT_STRING, - "$ftable => $rtable"); - } - if (!isset($ftable_obj->col[$fkey])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_FCOL, - "$ftable.$fkey => $rtable.$rkey"); - } - if (!isset($rtable_obj->col[$rkey])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_RCOL, - "$ftable.$fkey => $rtable.$rkey"); - } - $ftype = $ftable_obj->col[$fkey]['type']; - $rtype = $rtable_obj->col[$rkey]['type']; - if (!($rtype == $ftype)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_REF_TYPE, - "$ftable.$fkey => $rtable.$rkey"); - } - } elseif (is_array($fkey)) { - if (!is_array($rkey)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_RKEY_NOT_ARRAY, - "$ftable => $rtable"); - } - if (!(count($fkey) == count($rkey))) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_RKEY_COL_NUMBER, - "$ftable => $rtable"); - } - for ($i=0 ; $i < count($rkey) ; $i++) { - $fcol = $fkey[$i]; - $rcol = $rkey[$i]; - if (!isset($ftable_obj->col[$fcol])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_FCOL, - "$ftable.$fcol => $rtable.$rcol"); - } - if (!isset($rtable_obj->col[$rcol])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_RCOL, - "$ftable.$fcol => $rtable.$rcol"); - } - $ftype = $ftable_obj->col[$fcol]['type']; - $rtype = $rtable_obj->col[$rcol]['type']; - if (!($rtype == $ftype)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_REF_TYPE, - "$ftable.$fcol => $rtable.$rcol"); - } - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FKEY, - "$ftable => $rtable"); - } - - // Check validity of on_delete and on_update actions - $valid_actions = - array(null, 'cascade', 'set null', 'set default', 'restrict'); - if (!in_array($on_delete, $valid_actions)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_ON_DELETE_ACTION, - "$ftable => $rtable"); - } - if (!in_array($on_update, $valid_actions)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_ON_UPDATE_ACTION, - "$ftable => $rtable"); - } - - // Add reference to $this->_ref; - $ref = array( - 'fkey' => $fkey, - 'rkey' => $rkey, - 'on_delete' => $on_delete, - 'on_update' => $on_update); - if (!isset($this->_ref[$ftable])) { - $this->_ref[$ftable] = array(); - } else { - if (isset($this->_ref[$ftable][$rtable])) { - // Multiple references from $ftable to $rtable - return $this->throwError( - DB_TABLE_DATABASE_ERR_MULT_REF, - "$ftable => $rtable"); - } - } - $this->_ref[$ftable][$rtable] = $ref; - - // Add referencing table $ftable to $ref_to property - if (!isset($this->_ref_to[$rtable])) { - $this->_ref_to[$rtable] = array(); - } - $this->_ref_to[$rtable][] = $ftable; - - // Add foreign key columns to $this->_foreign_col - if (is_string($fkey)) { - if (!isset($this->_foreign_col[$fkey])) { - $this->_foreign_col[$fkey] = array(); - } - $this->_foreign_col[$fkey][] = $ftable; - } elseif (is_array($fkey)) { - foreach ($fkey as $fcol) { - if (!isset($this->_foreign_col[$fcol])) { - $this->_foreign_col[$fcol] = array(); - } - $this->_foreign_col[$fcol][] = $ftable; - } - } - - // Normal completion - return true; - } - - // }}} - // {{{ function deleteRef($ftable, $rtable) - - /** - * Deletes one reference from database model - * - * Removes reference from referencing (foreign key) table named - * $ftable to referenced table named $rtable. Unsets relevant elements - * of the $ref, $_ref_to, and $_link property arrays, and removes the - * foreign key columns of $ftable from the $_foreign_col property. - * - * Does nothing, silently, if no such reference exists, i.e., if - * $this->_ref[$ftable][$rtable] is not set. - * - * @param $ftable name of referencing (foreign key) table - * @param $rtable name of referenced table - * @return void - * @access public - */ - function deleteRef($ftable, $rtable) - { - // Delete from $_ref property - if (isset($this->_ref[$ftable])) { - if (isset($this->_ref[$ftable][$rtable])) { - $fkey = $this->_ref[$ftable][$rtable]['fkey']; - unset($this->_ref[$ftable][$rtable]); - } else { - // No such reference, abort silently - return; - } - } - - // Remove foreign key columns from $foreign_col property - if (isset($fkey)) { - if (is_string($fkey)) { - $fkey = array($fkey); - } - foreach ($fkey as $column) { - if (isset($this->_foreign_col[$column])) { - $key = array_search($ftable, - $this->_foreign_col[$column]); - if (is_integer($key)) { - unset($this->_foreign_col[$column][$key]); - if (count($this->_foreign_col[$column]) == 0) { - unset($this->_foreign_col[$column]); - } else { - $new = array_values($this->_foreign_col[$column]); - $this->_foreign_col[$column] = $new; - } - } - } - } - } - - // Delete from $_ref_to property - if (isset($this->_ref_to[$rtable])) { - $key = array_search($ftable, $this->_ref_to[$rtable]); - // Unset element - unset($this->_ref_to[$rtable][$key]); - if (count($this->_ref_to[$rtable]) == 0) { - unset($this->_ref_to[$rtable]); - } else { - // Redefine numerical keys of remaining elements - $ref_to = array_values($this->_ref_to[$rtable]); - $this->_ref_to[$rtable] = $ref_to; - } - } - - // Delete all relevant links from $_link property - if (isset($this->_link[$rtable])) { - foreach ($this->_link[$rtable] as $table2 => $links) { - if (in_array($ftable, $links)) { - $this->deleteLink($rtable, $table2, $ftable); - } - } - } - } - - // }}} - // {{{ function setOnDelete($ftable, $rtable, $action) - - /** - * Modifies the on delete action for one foreign key reference. - * - * Modifies the value of the on_delete action associated with a reference - * from $ftable to $rtable. The parameter action may be one of the action - * strings 'cascade', 'restrict', 'set null', or 'set default', or it may - * be php null. A null value of $action indicates that no action should be - * taken upon deletion of a referenced row. - * - * Returns true on success, and PEAR error on failure. Returns the error - * code DB_TABLE_DATABASE_ERR_REF_TRIG_ACTION if $action is a neither a - * valid action string nor null. Returns true, and does nothing, if - * $this->_ref[$ftable][$rtable] is not set. - * - * @param string $ftable name of referencing (foreign key) table - * @param string $rtable name of referenced table - * @param string $action on delete action (action string or null) - * @return boolean true on normal completion (PEAR_Error on failure) - * @access public - */ - function setOnDelete($ftable, $rtable, $action) - { - $valid_actions = - array(null, 'cascade', 'set null', 'set default', 'restrict'); - - if (isset($this->_ref[$ftable])) { - if (isset($this->_ref[$ftable][$rtable])) { - if (!in_array($action, $valid_actions)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_REF_ON_DELETE_ACTION, - "$ftable => $rtable"); - } - $this->_ref[$ftable][$rtable]['on_delete'] = $action; - } - } - return true; - } - - // }}} - // {{{ function setOnUpdate($ftable, $rtable, $action) - - /** - * Modifies on update action for one foreign key reference. - * - * Similar to setOnDelete. See setOnDelete for further details. - * - * @param string $ftable name of referencing (foreign key) table - * @param string $rtable name of referenced table - * @param array $action on update action (action string or null) - * @return boolean true on normal completion (PEAR_Error on failure) - * @access public - */ - function setOnUpdate($ftable, $rtable, $action) - { - $valid_actions = - array(null, 'cascade', 'set null', 'set default', 'restrict'); - - if (isset($this->_ref[$ftable])) { - if (isset($this->_ref[$ftable][$rtable])) { - if (!in_array($action, $valid_actions)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_REF_ON_UPDATE_ACTION, - "$ftable => $rtable"); - } - $this->_ref[$ftable][$rtable]['on_update'] = $action; - } - } - return true; - } - - // }}} - // {{{ function addLink($table1, $table2, $link) - - /** - * Identifies a linking/association table that links two others - * - * Adds table name $link to $this->_link[$table1][$table2] and - * to $this->_link[$table2][$table1]. - * - * Returns true on success, and PEAR error on failure. Returns the - * following DB_TABLE_DATABASE_ERR_* error codes if: - * - $ftable does not exist ( _NO_FTABLE ) - * - $rtable does not exist ( _NO_RTABLE ) - * - * @param string $table1 name of 1st linked table - * @param string $table2 name of 2nd linked table - * @param string $link name of linking/association table. - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function addLink($table1, $table2, $link) - { - - // Check for existence of all three tables - if (is_string($table1)) { - if (!isset($this->_table[$table1])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "addLink, $table1"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "addLink, $table1"); - } - if (!isset($this->_table[$table2])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "addLink, $table2"); - } - if (!isset($this->_table[$link])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "addLink, $link"); - } - if (!isset($this->_ref[$link])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_REF_LINK, - "$link => $table1, $table2"); - } else { - if (!isset($this->_ref[$link][$table1])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_REF_LINK, - "$link => $table1"); - } - if (!isset($this->_ref[$link][$table2])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_REF_LINK, - "$link => $table2"); - } - } - - // Add $this_link[$table1][$table2] - if (!key_exists($table1, $this->_link)) { - $this->_link[$table1] = array(); - } - if (!key_exists($table2, $this->_link[$table1])) { - $this->_link[$table1][$table2] = array(); - } - $this->_link[$table1][$table2][] = $link; - - // Add $this_link[$table2][$table1] - if (!key_exists($table2, $this->_link)) { - $this->_link[$table2] = array(); - } - if (!key_exists($table1, $this->_link[$table2])) { - $this->_link[$table2][$table1] = array(); - } - $this->_link[$table2][$table1][] = $link; - } - - // }}} - // {{{ function addAllLink() - - /** - * Adds all possible linking tables to the $_link property array - * - * Identifies all potential linking tables in the datbase, and adds - * them all to the $_link property. Table $link is taken to be a - * link between tables $table1 and $table2 if it contains foreign - * key references to both $table1 and $table2. - * - * @return void - * @access public - */ - function addAllLinks() - { - foreach ($this->_table as $link => $link_obj) { - if (isset($this->_ref[$link])) { - $ref = $this->_ref[$link]; - $n = count($ref); - $names = array_keys($ref); - if ($n > 1) { - $is_link = true; - } else { - $is_link = false; - } - if ($is_link) { - if ($n == 2) { - $table1 = $names[0]; - $table2 = $names[1]; - $this->addLink($table1, $table2, $link); - } elseif ($n > 2) { - for ($i=1 ; $i < $n; $i++) { - for ($j=0 ; $j < $i; $j++) { - $table1 = $names[$j]; - $table2 = $names[$i]; - $this->addLink($table1, $table2, $link); - } - } - } - } - } - } - } - - // }}} - // {{{ function deleteLink($table1, $table2, $link = null) - - /** - * Removes a link between two tables from the $_link property - * - * If $link is not null, remove table $link from the list of links - * between $table1 and $table2, if present. If $link is null, delete - * all links between $table1 and $table2. - * - * @param string $table1 name of 1st linked table - * @param string $table2 name of 2nd linked table - * @param string $link name of linking table - * @return void - * @access public - */ - function deleteLink($table1, $table2, $link = null) - { - if (isset($this->_link[$table1])) { - if (isset($this->_link[$table1][$table2])) { - if ($link) { - // Find numerical key of $link in _link[$table1][$table2] - $key = array_search($link, $this->_link[$table1][$table2]); - if (is_integer($key)) { - unset($this->_link[$table1][$table2][$key]); - if (count($this->_link[$table1][$table2]) == 0) { - unset($this->_link[$table1][$table2]); - unset($this->_link[$table2][$table1]); - if (count($this->_link[$table1]) == 0) { - unset($this->_link[$table1]); - } - if (count($this->_link[$table2]) == 0) { - unset($this->_link[$table2]); - } - } else { - // Reset remaining indices sequentially from zero - $new = array_values($this->_link[$table1][$table2]); - $this->_link[$table1][$table2] = $new; - $this->_link[$table2][$table1] = $new; - } - } - } else { - unset($this->_link[$table1][$table2]); - unset($this->_link[$table2][$table1]); - if (count($this->_link[$table1]) == 0) { - unset($this->_link[$table1]); - } - if (count($this->_link[$table2]) == 0) { - unset($this->_link[$table2]); - } - } - } - } - } - - // }}} - // {{{ function validCol($col, $from = null) - - /** - * Validates and (if necessary) disambiguates a column name. - * - * The parameter $col is a string may be either a column name or - * a column name qualified by a table name, using the SQL syntax - * "$table.$column". If $col contains a table name, and is valid, - * an array($table, $column) is returned. If $col is not qualified - * by a column name, an array array($table, $column) is returned, - * in which $table is either the name of one table, or an array - * containing the names of two or more tables containing a column - * named $col. - * - * The $from parameter, if present, is a numerical array of - * names of tables with which $col should be associated, if no - * explicit table name is provided, and if possible. If one - * or more of the tables in $from contains a column $col, the - * returned table or set of tables is restricted to those in - * array $from. - * - * If the table name remains ambiguous after testing for tables in - * the $from set, and $col is not a foreign key in one or more of - * the remaining tables, the returned table or set of tables is - * restricted to those in which $col is not a foreign key. - * - * Returns a PEAR_Error with the following DB_TABLE_DATABASE_ERR_* error - * codes if: - * - column $col does not exist in the database ( _NO_COL_DB ) - * - column $col does not exist in the specified table ( _NO_COL_TBL ) - * - * @param string $col column name, optionally qualified by a table name - * @param array $from array of tables from which $col should be chosen, - * if possible. - * @return array array($table, $column), or PEAR_Error on failure - * $column is a string, $table is a string or array - * @access public - */ - function validCol($col, $from = null) - { - $col = explode('.',trim($col)); - if (count($col) == 1) { - // Parameter $col is a column name with no table name - $column = $col[0]; - // Does $column exist in database ? - if (!isset($this->_col[$column])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_COL_DB, - "$column"); - } - $table = $this->_col[$column]; - // If $table is not unique, try restricting to arrays in $from - if (count($table) > 1 && $from) { - $ptable = array_intersect($table, $from); - if (count($ptable) > 0) { - $table = array_values($ptable); - } - } - // If count($table)>1, try excluding foreign key columns - if (count($table) > 1 && isset($this->_foreign_col[$column])) { - $ptable = array_diff($table, $this->_foreign_col[$column]); - if (count($ptable) > 0) { - $table = array_values($ptable); - } - } - // If only one table remains, set $table = table name string - if (count($table) == 1) { - $table = $table[0]; - } - } elseif (count($col) == 2) { - // parameter $col is qualified by a table name - $table = $col[0]; - $column = $col[1]; - if (isset($this->_table[$table])) { - $table_obj =& $this->_table[$table]; - $col_array = $table_obj->col; - if (!isset($col_array[$column])) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_COL_TBL, - "$table.$column"); - } - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, "validCol, $table"); - } - } - return array($table, $column); - } - - // }}} - // {{{ function createTables($flag = 'safe') - - /** - * Creates all the tables in a database in a RDBMS - * - * Note: this method creates all the tables in a database, but does - * NOT create the parent database or set it to the current or default - * database -- the database must exist before the method is called. - * - * If creation of any table fails, the method immediately returns the - * PEAR error returned by DB_Table::create($flag). - * - * @param mixed $flag The automatic database creation mode, which is - * applied to each table in the database. It can have - * values: - * - 'safe' to create a table only if it does not exist - * - 'drop' to drop and recreate any existing table - with the same name - * - * @return boolean true on sucess (PEAR_Error on failure of any table) - * @access public - * - * @see DB_Table::create() - */ - function createTables($flag = 'safe') - { - foreach ($this->_table as $name => $table) { - $result = $table->create($flag); - if (PEAR::isError($result)) { - return $result; - } - } - return true; - } - - // }}} - // {{{ function validForeignKeys($table_name, $data) - - /** - * Check validity of any foreign key values in associative array $data - * containing values to be inserted or updated in table $table_name. - * - * Returns true if each foreign key in $data matches a row in the - * referenced table, or if there are no foreign key columns in $data. - * Returns a PEAR_Error if any foreign key column in associative array - * $data (which may contain a full or partial row of $table_name), does - * not match the the value of the referenced column in any row of the - * referenced table. - * - * @param $table_name name of the referencing table containing $data - * @param @data associative array containing all or part of a row - * of data of $table_name, with column name keys. - * @return bool true if all foreign keys are valid, returns PEAR_Error - * if foreign keys are invalid or if an error is thrown - * by a required query - * - * @throws PEAR error if: - * - Error thrown by _buildFKeyFilter method (bubbles up) - * - Error thrown by select method for required query (bubbles up) - * - * @access public - */ - function validForeignKeys($table_name, $data) - { - if (isset($this->_ref[$table_name])) { - foreach ($this->_ref[$table_name] as $rtable_name => $ref) { - $fkey = $ref['fkey']; - $rkey = $ref['rkey']; - $rtable_obj =& $this->_table[$rtable_name]; - - // Construct select where clause for referenced rows, - // $filter = '' if $data contains no foreign key columns, - $filter = $this->_buildFKeyFilter($data, $fkey, $rkey); - if (PEAR::isError($filter)) { - return $filter; - } - - // If inserted data contain FK columns referenced by rtable, - // select referenced row of rtable, return error if none is - // found - if ($filter) { - $sql = array('select'=> '*', - 'from' => $rtable_name, - 'where' => $filter); - $referenced_rows = $this->select($sql); - // Check for failed query - if (PEAR::isError($referenced_rows)) { - return $referenced_rows; - } - // Check for failed foreign key constraint - if (count($referenced_rows) == 0) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FKEY_CONSTRAINT); - } - } - } - } - return true; - } - - // }}} - // {{{ function insert($table_name, $data) - - /** - * Inserts a single table row - * - * Wrapper for insert method of the corresponding DB_Table object. - * - * Data will be validated before insertion using validForeignKey(), - * if foreign key validation in enabled. - * - * @param string $table_name Name of table into which to insert data - * @param array $data Associative array, in which each key is a column - * name and each value is that column's value. - * This is the data that will be inserted into - * the table. Data is checked against the column - * names and data types for validity. - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function insert($table_name, $data) - { - // Dereference table object - if (isset($this->_table[$table_name])) { - $table_obj =& $this->_table[$table_name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "insert, $table_name"); - } - - // Insert into $table_obj - $result = $table_obj->insert($data); - - // Return value: true or PEAR_Error - if (PEAR::isError($result)) { - return $result; - } else { - return true; - } - - } - - // }}} - // {{{ function autoValidInsert($flag = true) - - /** - * Turns on or off automatic validation of inserted data for all tables - * - * @param bool $flag true to turn on auto-validation, false to turn off. - * @return void - * @access public - */ - function autoValidInsert($flag = true) - { - foreach ($this->_table as $table_obj) { - $table_obj->autoValidInsert($flag); - } - } - - // }}} - // {{{ function update($table_name, $data, $where) - - /** - * Updates all row(s) of table that match a custom where clause. - * - * Wrapper for insert method of the corresponding DB_Table object. - * - * Data will be validated before insertion using validForeignKey(), - * if foreign key validation in enabled. - * - * Implements any required ON UPDATE actions on tables that - * reference updated columns, if on update actions are enabled. - * - * @param string $table_name name of table to update - * @param array $data associative array in which keys are names of - * columns to be updated values are new values. - * @param string $where SQL WHERE clause that limits the set of - * records to update. - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function update($table_name, $data, $where) - { - // Dereference table object - if (isset($this->_table[$table_name])) { - $table_obj =& $this->_table[$table_name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "update, $table_name"); - } - - // Apply update - $result = $table_obj->update($data, $where); - - // Return value: true or PEAR_Error - if (PEAR::isError($result)) { - return $result; - } else { - return true; - } - - } - - // }}} - // {{{ function autoValidUpdate($flag = true) - - /** - * Turns on (or off) automatic validation of updated data for all tables. - * - * @param bool $flag true to turn on auto-validation, false to turn off - * @return void - * @access public - */ - function autoValidUpdate($flag = true) - { - foreach ($this->_table as $table_obj) { - $table_obj->autoValidUpdate($flag); - } - } - - // }}} - // {{{ function onUpdateAction(&$table_obj, $data, $where) - - /** - * Implements any ON UPDATE actions triggered by updating of rows of - * $table_obj that match logical condition $where. - * - * This method is called by the DB_Table::update() method if the table - * has a parent DB_Table_Database object, and if ON UPDATE actions are - * enabled in the database object. It is called indirectly by the - * DB_Table_Database::delete() method, which is simply a wrapper for - * the DB_Table method. - * - * @param object &$table_obj Reference to a DB_Table object - * @param array $data Data to updated, column name keys, data values - * @param string $where SQL logical condition for updated rows - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function onUpdateAction(&$table_obj, $data, $where) - { - $table_name = $table_obj->table; - if ($this->_act_on_update and isset($this->_ref_to[$table_name])) { - $update_rows = null; - foreach ($this->_ref_to[$table_name] as $ftable_name) { - $ref = $this->_ref[$ftable_name][$table_name]; - $action = isset($ref['on_update']) ? $ref['on_update'] : null; - if (is_null($action)) { - continue; - } - $rtable_obj =& $this->_table[$table_name]; - $ftable_obj =& $this->_table[$ftable_name]; - $fkey = $ref['fkey']; - $rkey = $ref['rkey']; - - // Check if any column(s) of referenced $rkey are updated - $rkey_updated = false; - foreach ($data as $key => $value) { - if (is_string($rkey)){ - if ($key == $rkey) { - $rkey_updated = true; - break; - } - } else { - if (in_array($key, $rkey)) { - $rkey_updated = true; - break; - } - } - } - - // If $rkey is not updated, continue to next referencing table - if (!$rkey_updated) { - continue; - } - - // Select rows to be updated, if not done previously - if ($update_rows === null) { - if ($this->backend == 'mdb2') { - $fetchmode_assoc = MDB2_FETCHMODE_ASSOC; - } else { - $fetchmode_assoc = DB_FETCHMODE_ASSOC; - } - $sql = array('select' => '*', - 'from' => $table_name, - 'where' => $where, - 'fetchmode' => $fetchmode_assoc); - $update_rows = $this->select($sql); - if (PEAR::isError($update_rows)) { - return $update_rows; - } - } - - // Construct $fdata array if cascade, set null, or set default - $fdata = null; - if ($action == 'cascade') { - if (is_string($rkey)) { - if (array_key_exists($rkey, $data)) { - $fdata = array($fkey => $data[$rkey]); - } - } else { - $fdata = array(); - for ($i=0; $i < count($rkey); $i++) { - $rcol = $rkey[$i]; - $fcol = $fkey[$i]; - if (array_key_exists($rcol, $data)) { - $fdata[$fcol] = $data[$rcol]; - } - } - if (count($fdata) == 0) { - $fdata = null; - } - } - } elseif ($action == 'set null' or $action == 'set default') { - if (is_string($fkey)) { - if ($action == 'set default') { - $value = isset($ftable_obj->col[$fkey]['default']) - ? $ftable_obj->col[$fkey]['default'] : null; - } else { - $value = null; - } - $fdata = array($fkey => $value); - } else { - $fdata = array(); - foreach ($fkey as $fcol) { - if ($action == 'set default') { - $value = isset($ftable_obj->col[$fcol]['default']) - ? $ftable_obj->col[$fcol]['default'] : null; - } else { - $value = null; - } - $fdata[$fcol] = $value; - } - if (count($fdata) == 0) { - $fdata = null; - } - } - } elseif ($action == 'restrict') { - $fdata = true; - } elseif ($action == null) { - $fdata = null; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_ON_UPDATE_ACTION, - "$ftable_name => $table_name"); - } - - if (!is_null($fdata)) { - - // Loop over rows to be updated from $table - foreach ($update_rows as $update_row) { - - // If necessary, restore case of column names - if ($this->_fix_case) { - $cols = array_keys($table_obj->col); - $update_row = $this->_replaceKeys($update_row, $cols); - } - - // Construct filter for rows that reference $update_row - $filter = $this->_buildFKeyFilter($update_row, - $rkey, $fkey); - - // Apply action to foreign/referencing rows - if ($action == 'restrict') { - $sql = array('select'=>'*', - 'from' => $ftable_name, - 'where' => $filter); - $frows = $this->select($sql); - if (PEAR::isError($frows)) { - return $frows; - } - if (count($frows) > 0) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_RESTRICT_UPDATE, - $table_name); - } - } else { - // If 'cascade', 'set null', or 'set default', - // then update the referencing foreign key. - // Note: Turn off foreign key validity check - // during update, then restore original value - $check_fkey = $this->_check_fkey; - $this->_check_fkey = false; - $result = $this->update($ftable_name, $fdata, - $filter); - $this->_check_fkey = $check_fkey; - if (PEAR::isError($result)) { - return $result; - } - } - } // foreach ($update_row) - } // if (!is_null($fdata)) - - } // foreach loop over referencing tables - } // end if - - // Normal completion - return true; - - } - - // }}} - // {{{ function autoRecast($flag = true) - - /** - * Turns on (or off) automatic recasting of insert and update data - * for all tables - * - * @param bool $flag True to automatically recast insert and update - * data, in all tables, false to not do so. - * @return void - * @access public - */ - function autoRecast($flag = true) - { - foreach ($this->_table as $table_obj) { - $table_obj->autoRecast($flag); - } - } - - // }}} - // {{{ function autoInc($flag = true) - - /** - * Turns on (or off) php implementation of auto-incrementing on insertion - * for all tables - * - * @param bool $flag True to turn on auto-incrementing, false to turn off - * @return void - * @access public - */ - function autoInc($flag = true) - { - foreach ($this->_table as $table_obj) { - $table_obj->auto_inc = $flag; - } - } - - // }}} - // {{{ function delete($table_name, $where) - - /** - * Deletes all row(s) of table that match a custom where clause. - * - * Wrapper for insert method of the corresponding DB_Table object. - * - * Implements any required ON DELETE action on tables that reference - * deleted rows, if on delete actions are enabled. - * - * @param string $table_name name of table from which to delete - * @param string $where SQL WHERE clause that limits the set - * of records to delete - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function delete($table_name, $where) - { - // Dereference table object - if (isset($this->_table[$table_name])) { - $table_obj =& $this->_table[$table_name]; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_TBL, - "delete, $table_name"); - } - - // Delete from $table_obj - $result = $table_obj->delete($where); - - // Return value: true or PEAR_Error - if (PEAR::isError($result)) { - return $result; - } else { - return true; - } - - } - - // }}} - // {{{ function onDeleteAction(&$table_obj, $where) - - /** - * Implements ON DELETE actions triggered by deletion of rows of - * $table_obj that match logical condition $where. - * - * This method is called by the DB_Table::delete() method if the table - * has a parent DB_Table_Database object, and if ON DELETE actions are - * enabled in the database object. It is called indirectly by the - * DB_Table_Database::delete() method, which is simply a wrapper for - * the DB_Table method. - * - * @param object &$table_obj Reference to a DB_Table object - * @param string $where SQL logical condition for deleted rows - * @return boolean true on success (PEAR_Error on failure) - * @access public - */ - function onDeleteAction(&$table_obj, $where) - { - $table_name = $table_obj->table; - if ($this->_act_on_delete and isset($this->_ref_to[$table_name])) { - $delete_rows = null; - foreach ($this->_ref_to[$table_name] as $ftable_name) { - $ref = $this->_ref[$ftable_name][$table_name]; - $action = $ref['on_delete']; - if (is_null($action)) { - continue; - } - $ftable_obj =& $this->_table[$ftable_name]; - $rtable_obj =& $this->_table[$table_name]; - $fkey = $ref['fkey']; - $rkey = $ref['rkey']; - - // Select rows to be deleted, if not done previously - if ($delete_rows === null) { - if ($this->backend == 'mdb2') { - $fetchmode_assoc = MDB2_FETCHMODE_ASSOC; - } else { - $fetchmode_assoc = DB_FETCHMODE_ASSOC; - } - $sql = array('select' => '*', - 'from' => $table_name, - 'where' => $where, - 'fetchmode' => $fetchmode_assoc); - $delete_rows = $this->select($sql); - if (PEAR::isError($delete_rows)) { - return $delete_rows; - } - } - - // If set null or set default, construct update $fdata - // $fdata contains data for updating referencing rows - if ($action == 'set null' or $action == 'set default') { - if (is_string($fkey)) { - if ($action == 'set default') { - $value = isset($ftable_obj->col[$fkey]['default']) - ? $ftable_obj->col[$fkey]['default'] : null; - } else { - $value = null; - } - $fdata = array($fkey => $value); - } else { - $fdata = array(); - foreach ($fkey as $fcol) { - if ($action == 'set default') { - $value = isset($ftable_obj->col[$fcol]['default']) - ? $ftable_obj->col[$fcol]['default'] : null; - } else { - $value = null; - } - $fdata[$fcol] = $value; - } - } - } - - // Loop over rows to be deleted from $table_name - foreach ($delete_rows as $delete_row) { - - // If necessary, restore case of $delete_row column names - if ($this->_fix_case) { - $cols = array_keys($table_obj->col); - $delete_row = $this->_replaceKeys($delete_row, $cols); - } - - // Construct filter for referencing rows in $ftable_name - $filter = $this->_buildFKeyFilter($delete_row, - $rkey, $fkey); - - // Apply action for one deleted row - if ($action == 'restrict') { - // Select for referencing rows throw error if found - $sql = array('select'=>'*', - 'from' => $ftable_name, - 'where' => $filter); - $frows = $this->select($sql); - if (PEAR::isError($frows)) { - return $frows; - } - if (count($frows) > 0) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_RESTRICT_DELETE, - $table_name); - } - } elseif ($action == 'cascade') { - // Delete referencing rows - // Note: Recursion on delete - $result = $this->delete($ftable_name, $filter); - if (PEAR::isError($result)) { - return $result; - } - } elseif ($action == 'set null' OR $action == 'set default') { - // Update referencing rows, using $fdata - // Note: Turn off foreign key validity check during - // update of referencing key to null or default, then - // restore $this->_check_fkey to original value - $check_fkey = $this->_check_fkey; - $this->_check_fkey = false; - $result = $this->update($ftable_name, $fdata, $filter); - $this->_check_fkey = $check_fkey; - #$result = $ftable_obj->update($fdata, $filter); - if (PEAR::isError($result)) { - return $result; - } - } else { - // Invalid $action name, throw Error - return $this->throwError( - DB_TABLE_DATABASE_ERR_ON_DELETE_ACTION, - "$ftable_name => $table_name"); - } - } // end foreach ($delete_rows) - - } // end foreach ($this->_ref_to[...] as $ftable_name) - } // end if - - // Normal completion - return true; - - } - - // }}} - // {{{ function _replaceKeys($data, $keys) - - /** - * Returns array in which keys of associative array $data are replaced - * by values of sequential array $keys. - * - * This function is used by the onDeleteAction() and onUpdateAction() - * methods to restore the case of column names in associative arrays - * that are returned from an automatically generated query "SELECT * - * FROM $table WHERE ...", when these column name keys are returned - * with a fixed case. In this usage, $keys is a sequential array of - * the names of all columns in $table. - * - * @param array $data associative array - * @param array $key numerical array of replacement key names - * @return array associative array in which keys of $data have been - * replaced by the values of array $keys. - * @access private - */ - function _replaceKeys($data, $keys) - { - $new_data = array(); - $i = 0; - foreach ($data as $old_key => $value) { - $new_key = $keys[$i]; - $new_data[$new_key] = $value; - $i = $i + 1; - } - return $new_data; - } - - // }}} - // {{{ function autoJoin($cols = null, $tables = null, $filter = null) - - /** - * Builds a select command involving joined tables from - * a list of column names and/or a list of table names. - * - * Returns an query array of the form used in $this->buildSQL, - * constructed on the basis of a sequential array $cols of - * column names and/or a sequential array $tables of table - * names. The 'FROM' clause in the resulting SQL contains - * all the table listed in the $tables parameter and all - * those containing the columns listed in the $cols array, - * as well as any linking tables required to establish - * many to many relationships between these tables. The - * 'WHERE' clause is constructed so as to create an inner - * join of these tables. - * - * The $cols parameter is a sequential array in which the - * values are column names. Column names may be qualified - * by a table name, using the SQL table.column syntax, but - * need not be qualified if they are unambiguous. The - * values in $cols can only be column names, and may not - * be functions or more complicated SQL expressions. If - * cols is null, the resulting SQL command will start with - * 'SELECT * FROM ...' . - * - * The $tables parameter is a sequential array in which the - * values are table names. If $tables is null, the FROM - * clause is constructed from the tables containing the - * columns in the $cols. - * - * The $params array is an associative array can have - * 'filter', and 'order' keys, which are both optional. - * A value $params['filter'] is an condition string to - * add (i.e., AND) to the automatically constructed set - * of join conditions. A value $params['order'] is an - * SQL 'ORDER BY' clause, with no 'ORDER BY' prefix. - * - * The function returns an associative array with keys - * ('select', 'from', 'where', ['order']), for which the - * associated values are strings containing the SELECT, - * FROM, WHERE and (optionally) ORDER BY clauses of the - * select statement. The entire SELECT command string - * can be obtained by passing the resulting array to - * the buildSQL method. - * - * @param array $cols sequential array of column names - * @param array $tables sequential array of table names - * @param array $filter SQL logical expression to be added - * (ANDed) to the where clause - * @return array sql query array for select statement - * @access public - */ - function autoJoin($cols = null, $tables = null, $filter = null) - { - // initialize array containing clauses of select statement - $query = array(); - - if (is_null($tables)) { - if (is_null($cols)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_NO_COL_NO_TBL); - } - $tables = array(); - } - - if (!$cols) { - // If no columns specified, SELECT * FROM ... - $query['select'] = '*'; - } else { - - // Qualify unqualified columns with table names - $all_tables = $tables; - foreach ($cols as $key => $col) { - $col_array = $this->validCol($col, $tables); - if (PEAR::isError($col_array)) { - return $col_array; - } - $table = $col_array[0]; - $column = $col_array[1]; - if (is_array($table)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_COL_NOT_UNIQUE, $col); - } - $cols[$key] = "$table.$column"; - if (!in_array($table, $all_tables)) { - $all_tables[] = $table; - } - } - $tables = $all_tables; - - // Construct select clause - $query['select'] = implode(', ', $cols); - - } - - // Construct array $joins of join conditions - $n_tables = count($tables); - if ($n_tables == 1) { - $query['from'] = $tables[0]; - } else { - $join_tables = array($tables[0]); // list of joined tables - $link_tables = array(); // list of required linking tables - $joins = array(); // list of join conditions - // Initialize linked list of unjoined tables - $next = array(); - for ( $i=1 ; $i < $n_tables-1 ; $i++) { - $next[$tables[$i]] = $tables[$i+1]; - $prev[$tables[$i+1]] = $tables[$i]; - } - $next[$tables[$n_tables-1]] = $tables[1]; - $prev[$tables[1]] = $tables[$n_tables-1]; - $n_remain = $n_tables - 1; - $head = $tables[1]; - $table1 = $tables[1]; - $joined = false; - $direct = true; - while ($n_remain > 0) { - - if ($direct) { - - // Search for references from table1 to joined tables - if (isset($this->_ref[$table1])) { - $list = $this->_ref[$table1]; - foreach ($list as $table2 => $def) { - if (in_array($table2, $join_tables)) { - if ($joined) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_AMBIG_JOIN, - $table1); - } - $fkey = $def['fkey']; - $rkey = $def['rkey']; - if (is_string($fkey)) { - $joins[] = "$table1.$fkey = $table2.$rkey"; - } else { - for ($i=0; $i < count($fkey); $i++ ) { - $fcol = $fkey[$i]; - $rcol = $rkey[$i]; - $joins[] = - "$table1.$fcol = $table2.$rcol"; - } - } - $joined = true; - } - } - } - - // Search for references to table1 from joined tables - if (isset($this->_ref_to[$table1])) { - $list = $this->_ref_to[$table1]; - foreach ($list as $table2) { - if (in_array($table2, $join_tables)) { - if ($joined) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_AMBIG_JOIN, - $table1); - } - $def = $this->_ref[$table2][$table1]; - $fkey = $def['fkey']; - $rkey = $def['rkey']; - if (is_string($fkey)) { - $joins[] = "$table2.$fkey = $table1.$rkey"; - } else { - for ($i=0; $i < count($fkey); $i++ ) { - $fcol = $fkey[$i]; - $rcol = $rkey[$i]; - $joins[] = - "$table2.$fcol = $table1.$rcol"; - } - } - $joined = true; - } - } - } - - } else { - - // Search for indirect linking table to table1 - if (isset($this->_link[$table1])) { - foreach ($this->_link[$table1] as $table2 => $links) { - if (in_array($table2, $join_tables)) { - $n_link = count($links); - if ($n_link > 1) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_AMBIG_JOIN, - $table1); - } - if ($joined and $n_link > 0) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_AMBIG_JOIN, - $table1); - } - $link = $links[0]; - $def1 = $this->_ref[$link][$table1]; - $fkey1 = $def1['fkey']; - $rkey1 = $def1['rkey']; - if (is_string($fkey1)) { - $joins[] = "$link.$fkey1 = $table1.$rkey1"; - } else { - for ($i=0; $i < count($fkey1); $i++ ) { - $fcol1 = $fkey1[$i]; - $rcol1 = $rkey1[$i]; - $joins[] = - "$link.$fcol1 = $table1.$rcol1"; - } - } - $def2 = $this->_ref[$link][$table2]; - $fkey2 = $def2['fkey']; - $rkey2 = $def2['rkey']; - if (is_string($fkey2)) { - $joins[] = "$link.$fkey2 = $table2.$rkey2"; - } else { - for ($i=0; $i < count($fkey2); $i++ ) { - $fcol2 = $fkey2[$i]; - $rcol2 = $rkey2[$i]; - $joins[] = - "$link.$fcol2 = $table2.$rcol2"; - } - } - $link_tables[] = $link; - $joined = true; - } - } - } - - } - - if ($joined) { - $join_tables[] = $table1; - $n_remain = $n_remain - 1; - if ($n_remain > 0) { - $head = $next[$table1]; - $tail = $prev[$table1]; - $prev[$head] = $tail; - $next[$tail] = $head; - $table1 = $head; - $joined = false; - $direct = true; - } - } else { - $table1 = $next[$table1]; - if ($table1 == $head) { - if ($direct) { - $direct = false; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FAIL_JOIN,$table1); - } - } - } - - } - - // Add any required linking tables to $tables array - if ($link_tables) { - foreach ($link_tables as $link) { - if (!in_array($link, $tables)) { - $tables[] = $link; - } - } - } - - // Construct from clause from $tables array - $query['from'] = implode(', ', $tables); - - // Construct where clause from $joins array - $query['where'] = implode("\n AND ", $joins); - - } - - // Add $filter condition, if present - if ($filter) { - if (isset($query['where'])) { - $query['where'] = '( ' . $query['where'] . " )\n" . - ' AND ( ' . $filter . ')'; - } else { - $query['where'] = $filter; - } - } - - return $query; - } - - // }}} - // {{{ function _buildFKeyFilter($data, $data_key = null, $filt_key = null, $match = 'simple') - - /** - * Returns WHERE clause equating values of $data array to database column - * values - * - * Usage: The function is designed to return an SQL logical - * expression that equates the values of a set of foreign key columns in - * associative array $data, which is a row to be inserted or updated in - * one table, to the values of the corresponding columns of a referenced - * table. In this usage, $data_key is the foreign key (a column name or - * numerical array of column names), and $filt_key is the corresponding - * referenced key. - * - * Parameters: Parameter $data is an associative array containing data to - * be inserted into or used to update one row of a database table, in which - * array keys are column names. When present, $data_key contains either - * the name of a single array key of interest, or a numerical array of such - * keys. These are usually the names of the columns of a foreign key in - * that table. When, $data_key is null or absent, it is taken to be equal - * to an array containing all of the keys of $data. When present, $filt_key - * contains either a string or a numerical array of strings that are - * aliases for the keys in $data_key. These are usually the names of the - * corresponding columns in the referenced table. When $filt_key is null - * or absent, it is equated with $data_key internally. The function - * returns an SQL logical expression that equates the values in $data - * whose keys are specified by $data_key, to the values of database - * columns whose names are specified in $filt_key. - * - * General case: _buildFKeyFilter returns a SQL logical expression that - * equates the values of $data whose keys are given in $data_key with the - * values of database columns with names given in $filt_key. For example, - * if - * <code> - * $data = array( 'k1' => $v1, 'k2' => $v2, ... , 'k10' => $v10 ); - * $data_key = array('k2', 'k5', 'k7'); - * $filt_key = array('c2', 'c5', 'c7'); - * </code> - * then buildFilter($data, $data_key, $filt_key) returns a string - * <code> - * "c2 = $v2 AND c5 = $v5 AND c7 = $v7" - * </code> - * in which the values $v2, $v5, $v7 are replaced by properly quoted - * SQL literal values. If, in the above example, $data_key = 'k5' - * and $filt_key = 'c5', then the function will return - * <code> - * "c5 = $v5" - * </code> - * where (again) $v5 is replaced by an SQL literal. - * - * Simple case: If parameters $data_key and $filt_key are null, the - * behavior is the same as that of the DB_Table_Base::buildFilter() method. - * For example, if - * <code> - * $data = array( 'c1' => $v1, 'c2' => $v2, 'c3' => $v3) - * </code> - * then _buildFKeyFilter($data) returns a string - * <code> - * "c1 => $val1 AND c2 => $val2 AND c3 = $v3" - * </code> - * in which the values $v1, $v2, $v3 are replaced by SQL literal values, - * quoted and escaped as appropriate for each data type and the backend. - * - * Quoting is done by the DB_Table_Database::quote() method, based on - * the php type of the values in $array. The treatment of null values - * in $data depends upon the value of the $match parameter. - * - * Null values: The treatment to null values in $data depends upon - * the value of the $match parameter . If $match == 'simple', an empty - * string is returned if any $value of $data with a key in $data_key - * is null. If $match == 'partial', the returned SQL expression - * equates only the relevant non-null values of $data to the values of - * corresponding database columns. If $match == 'full', the function - * returns an empty string if all of the relevant values of data are - * null, and returns a PEAR_Error if some of the selected values are - * null and others are not null. - * - * @param array $data associative array, keys are column names - * @param mixed $data_key string or numerical array of strings, in which - * values are a set of keys of interest in $data - * @param mixed $data_key string or numerical array of strings, in which - * values are names of a corresponding set of - * database column names. - * @return string SQL expression equating values in $data, for which keys - * also appear in $data_key, to values of corresponding - * database columns named in $filt_key. - * @access private - */ - function _buildFKeyFilter($data, $data_key = null, $filt_key = null, - $match = 'simple') - { - // Check $match type value - if (!in_array($match, array('simple', 'partial', 'full'))) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_MATCH_TYPE); - } - - // Simple case: Build filter from $data array alone - if (is_null($data_key) && is_null($filt_key)) { - return $this->buildFilter($data, $match); - } - - // Defaults for $data_key and $filt_key: - if (is_null($data_key)) { - $data_key = array_keys($data); - } - if (is_null($filt_key)) { - $filt_key = $data_key; - } - - // General case: $data_key and/or $filt_key not null - if (is_string($data_key)) { - if (!is_string($filt_key)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FILT_KEY); - } - if (array_key_exists($data_key, $data)) { - $value = $data[$data_key]; - if (!is_null($value)) { - $value = (string) $this->quote($data[$data_key]); - return "$filt_key = $value"; - } else { - return ''; - } - } else { - return ''; - } - } elseif (is_array($data_key)) { - if (!is_array($filt_key)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FILT_KEY); - } - $filter = array(); - for ($i=0; $i < count($data_key); $i++) { - $data_col = $data_key[$i]; - $filt_col = $filt_key[$i]; - if (array_key_exists($data_col, $data)) { - $value = $data[$data_col]; - if (!is_null($value)) { - if ($match == 'full' && isset($found_null)) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_FULL_KEY); - } - $value = $this->quote($value); - $filter[] = "$filt_col = $value"; - } else { - $found_null = true; - } - } - } - if ($match == 'simple' && isset($found_null)) { - return ''; - } - if (count($filter) == 0) { - return ''; - } - return implode(' AND ', $filter); - } else { - // Invalid data key - return $this->throwError( - DB_TABLE_DATABASE_ERR_DATA_KEY); - } - } - - // }}} - // {{{ function quote($value) - - /** - * Returns SQL literal string representation of a php value - * - * Calls MDB2::quote() or DB_Common::quoteSmart() to enquote and - * escape string values. If $value is: - * - a string, return the string enquoted and escaped - * - a number, return cast of number to string, without quotes - * - a boolean, return '1' for true and '0' for false - * - null, return the string 'NULL' - * - * @param mixed $value - * @return string Representation of value as an SQL literal - * - * @access public - * - * @see DB_Common::quoteSmart() - * @see MDB2::quote() - */ - function quote($value) - { - if (is_bool($value)) { - return $value ? '1' : '0'; - } - if ($this->backend == 'mdb2') { - $value = $this->db->quote($value); - } else { - $value = $this->db->quoteSmart($value); - } - return (string) $value; - } - - // }}} - // {{{ function __sleep() - - /** - * Serializes all table references and sets $db = null, $backend = null - * - * @return array names of all properties - * @access public - */ - function __sleep() - { - $this->db = null; - $this->backend = null; - // needed in setDatabaseInstance, where null is passed by reference - $null_variable = null; - foreach ($this->_table as $name => $table_obj) { - $table_obj->db = null; - $table_obj->setDatabaseInstance($null_variable); - $this->_table[$name] = serialize($table_obj); - } - return array_keys(get_object_vars($this)); - } - - // }}} - // {{{ function __wakeup() - - /** - * Unserializes DB_Table_Database object and all child DB_Table objects - * - * Immediately after unserialization, a DB_Table_Database object - * has null $db and $backend properties, as do all of its child - * DB_Table objects. The DB_Table_Database::setDB method should - * be called immediately after unserialization to re-establish - * the database connection, like so: - * <code> - * $db_object = unserialize($serialized_db); - * $db_object->setDB($conn); - * </code> - * where $conn is a DB/MDB2 object. This establishes a DB/MDB2 - * connection for both the parent database and all child tables. - * - * This method unserializes all of the child DB_Table objects of - * a DB_Table_Database object. It must thus have access to the - * definitions of the associated DB_Table subclasses. These are - * listed in the $_table_subclass property. If a required subclass - * named $subclass is not defined, the __wakeup() method attempts - * to autoload a file "$subclass.php" in the directory specified - * by $this->table_subclass_path. - * - * @return void - * @access public - */ - function __wakeup() - { - foreach ($this->_table as $name => $table_string) { - - // Check for subclass definition, and autoload if necessary. - $subclass = $this->_table_subclass[$name]; - if (!is_null($subclass)) { - if (!class_exists($subclass)) { - $dir = $this->_table_subclass_path; - require_once $dir . '/' . $subclass . '.php'; - } - } - // Unserialize table - $table_obj = unserialize($table_string); - // Reset references between database and table objects - $table_obj->setDatabaseInstance($this); - $this->_table[$name] = $table_obj; - } - } - - // }}} - // {{{ function toXML() - - /** - * Returns XML string representation of database declaration - * - * @param string $indent string of whitespace, prefix to each line - * @return string XML string representation - * @access public - */ - function toXML($indent = '') { - require_once 'DB/Table/XML.php'; - $s = array(); - $s[] = DB_Table_XML::openTag('database', $indent); - foreach ($this->_table as $name => $table_obj) { - $s[] = $table_obj->toXML($indent); - } - $s[] = DB_Table_XML::closeTag('database', $indent); - return implode("\n", $s); - } - - // }}} - // {{{ function fromXML($xml_string, $conn) - - /** - * Returns a DB_Table_Database object constructed from an XML string - * - * Uses the MDB2 XML schema for a database element, including a new - * syntax for foreign key indices. - * - * NOTE: This function requires PHP 5. It throws an error if used - * with PHP 4. - * - * @param string XML string representation - * @return object DB_Table_Database object on success (PEAR_Error on failure) - * - * @throws PEAR_Error if: - * - PHP version is not >= 5.0.0 (...DATABASE_ERR_PHP_VERSION ) - * - Parsing by simpleXML fails (...DATABASE_ERR_XML_PARSE ) - * - * @access public - */ - function fromXML($xml_string, $conn) - { - // Check PHP version. Throw error if not >= PHP 5.0.0 - $version = phpversion(); - if (version_compare($version, '5.0.0', "<")) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_PHP_VERSION, - $version); - } - - $xml = simplexml_load_string($xml_string); - if ($xml == false) { - return $this->throwError( - DB_TABLE_DATABASE_ERR_XML_PARSE); - } - - // Instantiate database object - $database_name = (string) $xml->name; - $database_obj = new DB_Table_Database($conn, $database_name); - - // Create array of foreign key references - $ref = array(); - - // Loop over tables - foreach ($xml->table as $table) { - $table_name = (string) $table->name; - - // Instantiate table object - $table_obj = new DB_Table($conn, $table_name); - - // Add columns to table object - $declaration = $table->declaration; - foreach ($declaration->field as $field) { - $col_name = (string) $field->name; - $type = (string) $field->type; - $def = array('type' => $type); - if (isset($field->length)) { - $def['size'] = (integer) $field->length; - } - if (isset($field->notnull)) { - if ($field->notnull) { - $def['require'] = true; - } else { - $def['require'] = false; - } - } - if (isset($field->default)) { - $def['default'] = $field->default; - } - if (isset($field->autoincrement)) { - if (is_null($table_obj->auto_inc_col)) { - $table_obj->auto_inc_col = $col_name; - } else { - return $this->throwError( - DB_TABLE_DATABASE_ERR_XML_MULT_AUTO_INC); - } - } - $table_obj->col[$col_name] = $def; - } - - // Add indices - foreach ($declaration->index as $index) { - if (isset($index->name)) { - $name = (string) $index->name; - } else { - $name = null; - } - $def = array(); - if (isset($index->primary)) { - $def['type'] = 'primary'; - } elseif (isset($index->unique)) { - $def['type'] = 'unique'; - } else { - $def['type'] = 'normal'; - } - foreach ($index->field as $field) { - $def['cols'][] = (string) $field; - } - if ($name) { - $table_obj->idx[$name] = $def; - } else { - $table_obj->idx[] = $def; - } - } - - // Add table object to database object - $database_obj->addTable($table_obj); - - // Foreign key references - foreach ($declaration->foreign as $foreign) { - if (isset($foreign->name)) { - $name = (string) $foreign->name; - } else { - $name = null; - } - $fkey = array(); - foreach ($foreign->field as $field) { - $fkey[] = (string) $field; - } - if (count($fkey) == 1) { - $fkey = $fkey[0]; - } - $rtable = (string) $foreign->references->table; - if (isset($foreign->references->field)) { - $rkey = array(); - foreach ($foreign->references->field as $field) { - $rkey[] = (string) $field; - } - if (count($rkey)==1) { - $rkey = $rkey[0]; - } - } else { - $rkey = null; - } - if (isset($foreign->ondelete)) { - $on_delete = (string) $foreign->ondelete; - } else { - $on_delete = null; - } - if (isset($foreign->onupdate)) { - $on_update = (string) $foreign->onupdate; - } else { - $on_update = null; - } - - // Add reference definition to $ref array - $def = array(); - $def['fkey'] = $fkey; - $def['rkey'] = $rkey; - $def['on_delete'] = $on_delete; - $def['on_update'] = $on_update; - if (!isset($ref[$table_name])) { - $ref[$table_name] = array(); - } - $ref[$table_name][$rtable] = $def; - - } - - // Release variable $table_obj to refer to another table - unset($table_obj); - } - - // Add all references to database object - foreach ($ref as $ftable => $list) { - foreach ($list as $rtable => $def) { - $fkey = $def['fkey']; - $rkey = $def['rkey']; - $on_delete = $def['on_delete']; - $on_update = $def['on_update']; - $database_obj->addRef($ftable, $fkey, $rtable, $rkey, - $on_delete, $on_update); - } - } - - return $database_obj; - } - - // }}} - - // }}} -} - -// }}} - -/* Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ - -?> diff --git a/civicrm/packages/DB/Table/Date.php b/civicrm/packages/DB/Table/Date.php deleted file mode 100644 index ae01dfba810538a889a8798862db6c0b39a7cea0..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Date.php +++ /dev/null @@ -1,195 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Generic date handling class for DB_Table. - * - * Stripped down to two essential methods specially for DB_Table from the - * PEAR Date package by Paul M. Jones <pmjones@php.net>. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Baba Buehler <baba@babaz.com> - * @author Pierre-Alain Joye <pajoye@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Date.php,v 1.3 2007/12/13 16:52:14 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * Generic date handling class for DB_Table. - * - * @category Database - * @package DB_Table - * @author Baba Buehler <baba@babaz.com> - * @author Pierre-Alain Joye <pajoye@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Date { - - /** - * the year - * @var int - */ - var $year; - /** - * the month - * @var int - */ - var $month; - /** - * the day - * @var int - */ - var $day; - /** - * the hour - * @var int - */ - var $hour; - /** - * the minute - * @var int - */ - var $minute; - /** - * the second - * @var int - */ - var $second; - /** - * the parts of a second - * @var float - */ - var $partsecond; - - /** - * Constructor - * - * Creates a new DB_Table_Date Object. The date should be near to - * ISO 8601 format. - * - * @access public - * @param string $date A date in ISO 8601 format. - */ - function __construct($date) - { - // This regex is very loose and accepts almost any butchered - // format you could throw at it. e.g. 2003-10-07 19:45:15 and - // 2003-10071945:15 are the same thing in the eyes of this - // regex, even though the latter is not a valid ISO 8601 date. - preg_match('/^(\d{4})-?(\d{2})-?(\d{2})([T\s]?(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|[\+\-]\d{2}:?\d{2})?)?$/i', $date, $regs); - $this->year = $regs[1]; - $this->month = $regs[2]; - $this->day = $regs[3]; - $this->hour = isset($regs[5])?$regs[5]:0; - $this->minute = isset($regs[6])?$regs[6]:0; - $this->second = isset($regs[7])?$regs[7]:0; - $this->partsecond = isset($regs[8])?(float)$regs[8]:(float)0; - - // if an offset is defined, convert time to UTC - // Date currently can't set a timezone only by offset, - // so it has to store it as UTC - if (isset($regs[9])) { - $this->toUTCbyOffset($regs[9]); - } - } - - - /** - * Date pretty printing, similar to strftime() - * - * Formats the date in the given format, much like - * strftime(). Most strftime() options are supported.<br><br> - * - * formatting options:<br><br> - * - * <code>%Y </code> year as decimal including century (range 0000 to 9999) <br> - * <code>%m </code> month as decimal number (range 01 to 12) <br> - * <code>%d </code> day of month (range 00 to 31) <br> - * <code>%H </code> hour as decimal number (00 to 23) <br> - * <code>%M </code> minute as a decimal number (00 to 59) <br> - * <code>%S </code> seconds as a decimal number (00 to 59) <br> - * <code>%% </code> literal '%' <br> - * <br> - * - * @access public - * @param string format the format string for returned date/time - * @return string date/time in given format - */ - function format($format) - { - $output = ""; - - for($strpos = 0; $strpos < strlen($format); $strpos++) { - $char = substr($format,$strpos,1); - if ($char == "%") { - $nextchar = substr($format,$strpos + 1,1); - switch ($nextchar) { - case "Y": - $output .= $this->year; - break; - case "m": - $output .= sprintf("%02d",$this->month); - break; - case "d": - $output .= sprintf("%02d",$this->day); - break; - case "H": - $output .= sprintf("%02d", $this->hour); - break; - case "M": - $output .= sprintf("%02d",$this->minute); - break; - case "S": - $output .= sprintf("%02d", $this->second); - break; - default: - $output .= $char.$nextchar; - } - $strpos++; - } else { - $output .= $char; - } - } - return $output; - - } -} - -?> diff --git a/civicrm/packages/DB/Table/Generator.php b/civicrm/packages/DB/Table/Generator.php deleted file mode 100644 index 80de2b5d27a772af621aceab355b3fd2bd168b55..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Generator.php +++ /dev/null @@ -1,1332 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * DB_Table_Generator - Generates DB_Table subclass skeleton code - * - * Parts of this class were adopted from the DB_DataObject PEAR package. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * Alan Knowles <alan@akbkhome.com> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Alan Knowles <alan@akbkhome.com> - * @author David C. Morse <morse@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Generator.php,v 1.17 2008/05/14 18:36:27 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -// {{{ Includes - -/**#@+ - * Include basic classes - */ -/** - * The PEAR class (used for errors) - */ -require_once 'PEAR.php'; - -/** - * DB_Table table abstraction class - */ -require_once 'DB/Table.php'; - -/** - * DB_Table_Manager class (used to reverse engineer indices) - */ -require_once 'DB/Table/Manager.php'; -/**#@-*/ - -// }}} -// {{{ Error code constants - -/**#@+ - * Error codes - */ -/** - * Parameter is not a DB/MDB2 object - */ -define('DB_TABLE_GENERATOR_ERR_DB_OBJECT', -301); - -/** - * Parameter is not a DB/MDB2 object - */ -define('DB_TABLE_GENERATOR_ERR_INDEX_COL', -302); - -/** - * Error while creating file/directory - */ -define('DB_TABLE_GENERATOR_ERR_FILE', -303); -/**#@-*/ - -// }}} -// {{{ Error messages -/** - * US-English default error messages. - */ -$GLOBALS['_DB_TABLE_GENERATOR']['default_error'] = array( - DB_TABLE_GENERATOR_ERR_DB_OBJECT => - 'Invalid DB/MDB2 object parameter. Function', - DB_TABLE_GENERATOR_ERR_INDEX_COL => - 'Index column is not a valid column name. Index column', - DB_TABLE_GENERATOR_ERR_FILE => - 'Can\'t create file/directory:' -); - -// merge default and user-defined error messages -if (!isset($GLOBALS['_DB_TABLE_GENERATOR']['error'])) { - $GLOBALS['_DB_TABLE_GENERATOR']['error'] = array(); -} -foreach ($GLOBALS['_DB_TABLE_GENERATOR']['default_error'] as $code => $message) { - if (!array_key_exists($code, $GLOBALS['_DB_TABLE_GENERATOR']['error'])) { - $GLOBALS['_DB_TABLE_GENERATOR']['error'][$code] = $message; - } -} - -// }}} -// {{{ class DB_Table_Generator - -/** - * class DB_Table_Generator - Generates DB_Table subclass skeleton code - * - * This class generates the php code necessary to use the DB_Table - * package to interact with an existing database. This requires the - * generation of a skeleton subclass definition be generated for each - * table in the database, in which the $col, $idx, and $auto_inc_col - * properties are constructed using a table schema that is obtained - * by querying the database. - * - * The class can also generate a file, named 'Database.php' by default, - * that includes (require_once) each of the table subclass definitions, - * instantiates one object of each DB_Table subclass (i.e., one object - * for each table), instantiates a parent DB_Table_Database object, - * adds all the tables to that parent, attempts to guess foreign key - * relationships between tables based on the column names, and adds - * the inferred references to the parent object. - * - * All of the code is written to a directory whose path is given by - * the property $class_write_path. By default, this is the current - * directory. By default, the name of the class constructed for a - * table named 'thing' is "Thing_Table". That is, the class name is - * the table name, with the first letter upper case, with a suffix - * '_Table'. This suffix can be changed by setting the $class_suffix - * property. The file containing a subclass definition is the - * subclass name with a php extension, e.g., 'Thing_Table.php'. The - * object instantiated from that subclass is the same as the table - * name, with no suffix, e.g., 'thing'. - * - * To generate the code for all of the tables in a database named - * $database, instantiate a MDB2 or DB object named $db that connects - * to the database of interest, and execute the following code: - * <code> - * $generator = new DB_Table_Generator($db, $database); - * $generator->class_write_path = $class_write_path; - * $generator->generateTableClassFiles(); - * $generator->generateDatabaseFile(); - * </code> - * Here $class_write_path should be the path (without a trailing - * separator) to a directory in which all of the code should be - * written. If this directory does not exist, it will be created. - * If the directory does already exist, exising files will not - * be overwritten. If $class_write_path is not set (i.e., if this - * line is omitted) all the code will be written to the current - * directory. If ->generateDatabaseFile() is called, it must be - * called after ->generateTableClassFiles(). - * - * By default, ->generateTableClassFiles() and ->generateDatabaseFiles() - * generate code for all of the tables in the current database. To - * generate code for a specified list of tables, set the value of the - * public $tables property to a sequential list of table names before - * calling either of these methods. Code can be generated for three - * tables named 'table1', 'table2', and 'table3' as follows: - * <code> - * $generator = new DB_Table_Generator($db, $database); - * $generator->class_write_path = $class_write_path; - * $generator->tables = array('table1', 'table2', 'table3'); - * $generator->generateTableClassFiles(); - * $generator->generateDatabaseFile(); - * </code> - * If the $tables property is not set to a non-null value prior - * to calling ->generateTableClassFiles() then, by default, the - * database is queried for a list of all table names, by calling the - * ->getTableNames() method from within ->generateTableClassFiles(). - * - * PHP version 4 and 5 - * - * @category Database - * @package DB_Table - * @author Alan Knowles <alan@akbkhome.com> - * @author David C. Morse <morse@php.net> - * @license http://www.gnu.org/copyleft/lesser.html LGPL - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Generator -{ - - // {{{ Properties - - /** - * Name of the database - * - * @var string - * @access public - */ - var $name = null; - - /** - * The PEAR DB/MDB2 object that connects to the database. - * - * @var object - * @access private - */ - var $db = null; - - /** - * The backend type. May have values 'db' or 'mdb2' - * - * @var string - * @access private - */ - var $backend = null; - - /** - * If there is an error on instantiation, this captures that error. - * - * This property is used only for errors encountered in the constructor - * at instantiation time. To check if there was an instantiation error... - * - * <code> - * $obj =& new DB_Table_Generator(); - * if ($obj->error) { - * // ... error handling code here ... - * } - * </code> - * - * @var object PEAR_Error - * @access public - */ - var $error = null; - - /** - * Numerical array of table name strings - * - * @var array - * @access public - */ - var $tables = array(); - - /** - * Class being extended (DB_Table or generic subclass) - * - * @var string - * @access public - */ - var $extends = 'DB_Table'; - - /** - * Path to definition of the class $this->extends - * - * @var string - * @access public - */ - var $extends_file = 'DB/Table.php'; - - /** - * Suffix to add to table names to obtain corresponding class names - * - * @var string - * @access public - */ - var $class_suffix = "_Table"; - - /** - * Path to directory in which subclass definitions should be written - * - * Value should not include a trailing "/". - * - * @var string - * @access public - */ - var $class_write_path = ''; - - /** - * Include path to subclass definition files from database file - * - * Used to create require_once statements in the Database.php file, - * which is in the same directory as the class definition files. Leave - * as empty string if your PHP include_path contains ".". The value - * should not include a trailing "/", which is added automatically - * to values other than the empty string. - * - * @var string - * @access public - */ - var $class_include_path = ''; - - /** - * Array of column definitions - * - * Array $this->col[table_name][column_name] = column definition. - * Column definition is an array with the same format as the $col - * property of a DB_Table object - * - * @var array - * @access public - */ - var $col = array(); - - /** - * Array of index/constraint definitions. - * - * Array $this->idx[table_table][index_name] = Index definition. - * The index definition is an array with the same format as the - * DB_Table $idx property property array. - * - * @var array - * @access public - */ - var $idx = array(); - - /** - * Array of auto_increment column names - * - * Array $this->auto_inc_col[table_name] = auto-increment column - * - * @var array - * @access public - */ - var $auto_inc_col = array(); - - /** - * Array of primary keys - * - * @var array - * @access public - */ - var $primary_key = array(); - - /** - * MDB2 'idxname_format' option, format of index names - * - * For use in printf() formatting. Use '%s' to use index names as - * returned by getTableConstraints/Indexes, and '%s_idx' to add an - * '_idx' suffix. For MySQL, use the default value '%'. - * - * @var string - * @access public - */ - var $idxname_format = '%s'; - - // }}} - // {{{ function DB_Table_Generator(&$db, $name) - - /** - * Constructor - * - * If an error is encountered during instantiation, the error - * message is stored in the $this->error property of the resulting - * object. See $error property docblock for a discussion of error - * handling. - * - * @param object &$db DB/MDB2 database connection object - * @param string $name database name string - * - * @return object DB_Table_Generator - * @access public - */ - function __construct(&$db, $name) - { - // Is $db an DB/MDB2 object or null? - if (is_a($db, 'db_common')) { - $this->backend = 'db'; - } elseif (is_a($db, 'mdb2_driver_common')) { - $this->backend = 'mdb2'; - } else { - $this->error =& - DB_Table_Generator::throwError(DB_TABLE_GENERATOR_ERR_DB_OBJECT, - 'DB_Table_Generator'); - return; - } - $this->db =& $db; - $this->name = $name; - - } - - // }}} - // {{{ function &throwError($code, $extra = null) - - /** - * Specialized version of throwError() modeled on PEAR_Error. - * - * Throws a PEAR_Error with a DB_Table_Generator error message based - * on a DB_Table_Generator constant error code. - * - * @param string $code A DB_Table_Generator error code constant. - * @param string $extra Extra text for the error (in addition to the - * regular error message). - * - * @return object PEAR_Error - * @access public - * @static - */ - function &throwError($code, $extra = null) - { - // get the error message text based on the error code - $text = 'DB_TABLE_GENERATOR ERROR - ' . "\n" - . $GLOBALS['_DB_TABLE_GENERATOR']['error'][$code]; - - // add any additional error text - if ($extra) { - $text .= ' ' . $extra; - } - - // done! - $error = PEAR::throwError($text, $code); - return $error; - } - - // }}} - // {{{ function setErrorMessage($code, $message = null) - - /** - * Overwrites one or more error messages, e.g., to internationalize them. - * - * @param mixed $code If string, the error message with code $code will be - * overwritten by $message. If array, each key is a - * code and each value is a new message. - * @param string $message Only used if $key is not an array. - * - * @return void - * @access public - */ - function setErrorMessage($code, $message = null) - { - if (is_array($code)) { - foreach ($code as $single_code => $single_message) { - $GLOBALS['_DB_TABLE_GENERATOR']['error'][$single_code] - = $single_message; - } - } else { - $GLOBALS['_DB_TABLE_GENERATOR']['error'][$code] = $message; - } - } - - // }}} - // {{{ function getTableNames() - - /** - * Gets a list of tables from the database - * - * Upon successful completion, names are stored in the $this->tables - * array. If an error is encountered, a PEAR Error is returned, and - * $this->tables is reset to null. - * - * @return mixed true on success, PEAR Error on failure - * @access public - */ - function getTableNames() - { - - if ($this->backend == 'db') { - // try getting a list of schema tables first. (postgres) - $this->db->expectError(DB_ERROR_UNSUPPORTED); - $this->tables = $this->db->getListOf('schema.tables'); - $this->db->popExpect(); - if (PEAR::isError($this->tables)) { - // try a list of tables, not qualified by 'schema' - $this->db->expectError(DB_ERROR_UNSUPPORTED); - $this->tables = $this->db->getListOf('tables'); - $this->db->popExpect(); - } - } else { - // Temporarily change 'portability' MDB2 option - $portability = $this->db->getOption('portability'); - $this->db->setOption('portability', - MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE); - - $this->db->loadModule('Manager'); - $this->db->loadModule('Reverse'); - - // Get list of tables - $this->tables = $this->db->manager->listTables(); - - // Restore original MDB2 'portability' - $this->db->setOption('portability', $portability); - } - if (PEAR::isError($this->tables)) { - $error = $this->tables; - $this->tables = null; - return $error; - } else { - $this->tables = array_map(array($this, 'tableName'), - $this->tables); - return true; - } - } - - // }}} - // {{{ function getTableDefinition($table) - - /** - * Gets column and index definitions by querying database - * - * Upon return, column definitions are stored in $this->col[$table], - * and index definitions in $this->idx[$table]. - * - * Calls DB/MDB2::tableInfo() for column definitions, and uses - * the DB_Table_Manager class to obtain index definitions. - * - * @param string $table name of table - * - * @return mixed true on success, PEAR Error on failure - * @access public - */ - function getTableDefinition($table) - { - /* - // postgres strip the schema bit from the - if (!empty($options['generator_strip_schema'])) { - $bits = explode('.', $table,2); - $table = $bits[0]; - if (count($bits) > 1) { - $table = $bits[1]; - } - } - */ - - if ($this->backend == 'db') { - - $defs = $this->db->tableInfo($table); - if (PEAR::isError($defs)) { - return $defs; - } - $this->columns[$table] = $defs; - - } else { - - // Temporarily change 'portability' MDB2 option - $portability = $this->db->getOption('portability'); - $this->db->setOption('portability', - MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE); - - $this->db->loadModule('Manager'); - $this->db->loadModule('Reverse'); - - // Columns - $defs = $this->db->reverse->tableInfo($table); - if (PEAR::isError($defs)) { - return $defs; - } - - // rename the 'length' key, so it matches db's return. - foreach ($defs as $k => $v) { - if (isset($defs[$k]['length'])) { - $defs[$k]['len'] = $defs[$k]['length']; - } - } - - $this->columns[$table] = $defs; - - // Temporarily set 'idxname_format' MDB2 option to $this->idx_format - $idxname_format = $this->db->getOption('idxname_format'); - $this->db->setOption('idxname_format', $this->idxname_format); - } - - // Default - no auto increment column - $this->auto_inc_col[$table] = null; - - // Loop over columns to create $this->col[$table] - $this->col[$table] = array(); - foreach ($defs as $t) { - - $name = $t['name']; - $col = array(); - - switch (strtoupper($t['type'])) { - case 'INT2': // postgres - case 'TINYINT': - case 'TINY': //mysql - case 'SMALLINT': - $col['type'] = 'smallint'; - break; - case 'INT4': // postgres - case 'SERIAL4': // postgres - case 'INT': - case 'SHORT': // mysql - case 'INTEGER': - case 'MEDIUMINT': - case 'YEAR': - $col['type'] = 'integer'; - break; - case 'BIGINT': - case 'LONG': // mysql - case 'INT8': // postgres - case 'SERIAL8': // postgres - $col['type'] = 'bigint'; - break; - case 'REAL': - case 'NUMERIC': - case 'NUMBER': // oci8 - case 'FLOAT': // mysql - case 'FLOAT4': // real (postgres) - $col['type'] = 'single'; - break; - case 'DOUBLE': - case 'DOUBLE PRECISION': // double precision (firebird) - case 'FLOAT8': // double precision (postgres) - $col['type'] = 'double'; - break; - case 'DECIMAL': - case 'MONEY': // mssql and maybe others - $col['type'] = 'decimal'; - break; - case 'BIT': - case 'BOOL': - case 'BOOLEAN': - $col['type'] = 'boolean'; - break; - case 'STRING': - case 'CHAR': - $col['type'] = 'char'; - break; - case 'VARCHAR': - case 'VARCHAR2': - case 'TINYTEXT': - $col['type'] = 'varchar'; - break; - case 'TEXT': - case 'MEDIUMTEXT': - case 'LONGTEXT': - $col['type'] = 'clob'; - break; - case 'DATE': - $col['type'] = 'date'; - break; - case 'TIME': - $col['type'] = 'time'; - break; - case 'DATETIME': // mysql - case 'TIMESTAMP': - $col['type'] = 'timestamp'; - break; - case 'ENUM': - case 'SET': // not really but oh well - case 'TIMESTAMPTZ': // postgres - case 'BPCHAR': // postgres - case 'INTERVAL': // postgres (eg. '12 days') - case 'CIDR': // postgres IP net spec - case 'INET': // postgres IP - case 'MACADDR': // postgress network Mac address. - case 'INTEGER[]': // postgres type - case 'BOOLEAN[]': // postgres type - $col['type'] = 'varchar'; - break; - default: - $col['type'] = $t['type'] . ' (Unknown type)'; - break; - } - - // Set length and scope if required - if (in_array($col['type'], array('char','varchar','decimal'))) { - if (isset($t['len'])) { - $col['size'] = (int) $t['len']; - } elseif ($col['type'] == 'varchar') { - $col['size'] = 255; // default length - } elseif ($col['type'] == 'char') { - $col['size'] = 128; // default length - } elseif ($col['type'] == 'decimal') { - $col['size'] = 15; // default length - } - if ($col['type'] == 'decimal') { - $col['scope'] = 2; - } - } - if (isset($t['notnull'])) { - if ($t['notnull']) { - $col['require'] = true; - } - } - if (isset($t['autoincrement'])) { - $this->auto_inc_col[$table] = $name; - } - if (isset($t['flags'])) { - $flags = $t['flags']; - if (preg_match('/not[ _]null/i', $flags)) { - $col['require'] = true; - } - if (preg_match("/(auto_increment|nextval\()/i", $flags)) { - $this->auto_inc_col[$table] = $name; - } - } - $require = isset($col['require']) ? $col['require'] : false; - if ($require) { - if (isset($t['default'])) { - $default = $t['default']; - $type = $col['type']; - if (in_array($type, - array('smallint', 'integer', 'bigint'))) { - $default = (int) $default; - } elseif (in_array($type, array('single', 'double'))) { - $default = (float) $default; - } elseif ($type == 'boolean') { - $default = (int) $default ? 1 : 0; - } - $col['default'] = $default; - } - } - $this->col[$table][$name] = $col; - - } - - // Make array with lower case column array names as keys - $col_lc = array(); - foreach ($this->col[$table] as $name => $def) { - $name_lc = strtolower($name); - $col_lc[$name_lc] = $name; - } - - // Constraints/Indexes - $DB_indexes = DB_Table_Manager::getIndexes($this->db, $table); - if (PEAR::isError($DB_indexes)) { - return $DB_indexes; - } - - // Check that index columns correspond to valid column names. - // Try to correct problems with capitalization, if necessary. - foreach ($DB_indexes as $type => $indexes) { - foreach ($indexes as $name => $fields) { - foreach ($fields as $key => $field) { - - // If index column is not a valid column name - if (!array_key_exists($field, $this->col[$table])) { - - // Try a case-insensitive match - $field_lc = strtolower($field); - if (isset($col_lc[$field_lc])) { - $correct = $col_lc[$field_lc]; - $DB_indexes[$type][$name][$key] - = $correct; - } else { - $code = DB_TABLE_GENERATOR_ERR_INDEX_COL; - $return =& - DB_Table_Generator::throwError($code, $field); - } - - } - } - } - } - - // Generate index definitions, if any, as php code - $n_idx = 0; - $u = array(); - - $this->idx[$table] = array(); - $this->primary_key[$table] = null; - foreach ($DB_indexes as $type => $indexes) { - if (count($indexes) > 0) { - foreach ($indexes as $name => $fields) { - $this->idx[$table][$name] = array(); - $this->idx[$table][$name]['type'] = $type; - if (count($fields) == 1) { - $key = $fields[0]; - } else { - $key = array(); - foreach ($fields as $value) { - $key[] = $value; - } - } - $this->idx[$table][$name]['cols'] = $key; - if ($type == 'primary') { - $this->primary_key[$table] = $key; - } - } - } - } - - if ($this->backend == 'mdb2') { - // Restore original MDB2 'idxname_format' and 'portability' - $this->db->setOption('idxname_format', $idxname_format); - $this->db->setOption('portability', $portability); - } - - return true; - } - - // }}} - // {{{ function buildTableClass($table, $indent = '') - - /** - * Returns one skeleton DB_Table subclass definition, as php code - * - * The returned subclass definition string contains values for the - * $col (column), $idx (index) and $auto_inc_col properties, with - * no method definitions. - * - * @param string $table name of table - * @param string $indent string of whitespace for base indentation - * - * @return string skeleton DB_Table subclass definition - * @access public - */ - function buildTableClass($table, $indent = '') - { - $s = array(); - $idx = array(); - $u = array(); - $v = array(); - $l = 0; - - $s[] = $indent . '/*'; - $s[] = $indent . ' * Create the table object'; - $s[] = $indent . ' */'; - $s[] = $indent . 'class ' . $this->className($table) - . " extends {$this->extends} {\n"; - $indent .= ' '; - - $s[] = $indent . '/*'; - $s[] = $indent . ' * Column definitions'; - $s[] = $indent . ' */'; - $s[] = $indent . 'var $col = array(' . "\n"; - $indent .= ' '; - - // Begin loop over columns - foreach ($this->col[$table] as $name => $col) { - - // Generate DB_Table column definitions as php code - $t = array(); - $t1 = array(); - $l1 = 0; - - $name = $indent . "'{$name}'"; - $l = max($l, strlen($name)); - $v[$name] = "array(\n"; - $indent .= ' '; - foreach ($col as $key => $value) { - if (is_string($value)) { - $value = "'{$value}'"; - } elseif (is_bool($value)) { - $value = $value ? 'true' : 'false'; - } else { - $value = (string) $value; - } - $l1 = max($l1, strlen($key) + 2); - $t1[] = array("'{$key}'", $value) ; - } - foreach ($t1 as $value) { - $t[] = $indent . str_pad($value[0], $l1, ' ', STR_PAD_RIGHT) - . ' => ' . $value[1]; - } - $v[$name] .= implode(",\n", $t) . "\n"; - $indent = substr($indent, 0, -4); - $v[$name] .= $indent . ')'; - } //end loop over columns - - foreach ($v as $key => $value) { - $u[] = str_pad($key, $l, ' ', STR_PAD_RIGHT) - . ' => ' . $value; - } - $s[] = implode(",\n\n", $u) . "\n"; - $indent = substr($indent, 0, -4); - $s[] = $indent . ");\n"; - - // Generate index definitions, if any, as php code - if (count($this->idx[$table]) > 0) { - $u = array(); - $v = array(); - $l = 0; - - $s[] = $indent . '/*'; - $s[] = $indent . ' * Index definitions'; - $s[] = $indent . ' */'; - $s[] = $indent . 'var $idx = array(' . "\n"; - $indent .= ' '; - foreach ($this->idx[$table] as $name => $def) { - $type = $def['type']; - $cols = $def['cols']; - $name = $indent . "'{$name}'"; - $l = max($l, strlen($name)); - $v[$name] = "array(\n"; - $indent .= ' '; - $v[$name] .= $indent . "'type' => '{$type}',\n"; - if (is_array($cols)) { - $v[$name] .= $indent . "'cols' => array(\n"; - $indent .= ' '; - $t = array(); - foreach ($cols as $value) { - $t[] = $indent . "'{$value}'"; - } - $v[$name] .= implode(",\n", $t) . "\n"; - $indent = substr($indent, 0, -4); - $v[$name] .= $indent . ")\n"; - } else { - $v[$name] = $v[$name] . $indent . "'cols' => '{$cols}'\n"; - } - $indent = substr($indent, 0, -4); - $v[$name] .= $indent . ")"; - } - - foreach ($v as $key => $value) { - $u[] = str_pad($key, $l, ' ', STR_PAD_RIGHT) - . ' => ' . $value; - } - $s[] = implode(",\n\n", $u) . "\n"; - $indent = substr($indent, 0, -4); - $s[] = $indent . ");\n"; - } // end index generation - - // Write auto_inc_col - if (isset($this->auto_inc_col[$table])) { - $s[] = $indent . '/*'; - $s[] = $indent . ' * Auto-increment declaration'; - $s[] = $indent . ' */'; - $s[] = $indent . 'var $auto_inc_col = ' - . "'{$this->auto_inc_col[$table]}';\n"; - } - $indent = substr($indent, 0, -4); - $s[] = $indent . '}'; - - // Implode and return lines of class definition - return implode("\n", $s) . "\n"; - - } - - // }}} - // {{{ function buildTableClasses() - - /** - * Returns a string containing all table class definitions in one file - * - * The returned string contains the contents of a single php file with - * definitions of DB_Table subclasses associated with all of the tables - * in $this->tables. If $this->tables is initially null, method - * $this->getTableNames() is called internally to generate a list of - * table names. - * - * The returned string includes the opening and closing <?php and ?> - * script elements, and the require_once line needed to include the - * $this->extend_class (i.e., DB_Table or a subclass) that is being - * extended. To use, write this string to a new php file. - * - * Usage: - * <code> - * $generator = new DB_Table_Generator($db, $database); - * echo $generator->buildTablesClasses(); - * </code> - * - * @return mixed a string with all table class definitions, - * PEAR Error on failure - * @access public - */ - function buildTableClasses() - { - // If $this->tables is null, call getTableNames() - if (!$this->tables) { - $return = $this->getTableNames(); - if (PEAR::isError($return)) { - return $return; - } - } - - $s = array(); - $s[] = '<?php'; - $s[] = '/*'; - $s[] = ' * Include basic class'; - $s[] = ' */'; - $s[] = "require_once '{$this->extends_file}';\n"; - foreach ($this->tables as $table) { - $return = $this->getTableDefinition($table); - if (PEAR::isError($return)) { - return $return; - } - $s[] = $this->buildTableClass($table) . "\n"; - } - $s[] = '?>'; - return implode("\n", $s); - } - - // }}} - // {{{ function generateTableClassFiles() - - /** - * Writes all table class definitions to separate files - * - * Usage: - * <code> - * $generator = new DB_Table_Generator($db, $database); - * $generator->generateTableClassFiles(); - * </code> - * - * @return mixed true on success, PEAR Error on failure - * @access public - */ - function generateTableClassFiles() - { - // If $this->tables is null, call getTableNames() - if (!$this->tables) { - $return = $this->getTableNames(); - if (PEAR::isError($return)) { - return $return; - } - } - - // Write all table class definitions to separate files - foreach ($this->tables as $table) { - $classname = $this->className($table); - $filename = $this->classFileName($classname); - $base = $this->class_write_path; - if ($base) { - if (!file_exists($base)) { - include_once 'System.php'; - if (!@System::mkdir(array('-p', $base))) { - return $this->throwError(DB_TABLE_GENERATOR_ERR_FILE, - $base); - } - - } - $filename = "{$base}/{$filename}"; - } - if (!file_exists($filename)) { - $s = array(); - $s[] = '<?php'; - $s[] = '/*'; - $s[] = ' * Include basic class'; - $s[] = ' */'; - $s[] = "require_once '{$this->extends_file}';\n"; - $return = $this->getTableDefinition($table); - if (PEAR::isError($return)) { - return $return; - } - $s[] = $this->buildTableClass($table); - $s[] = '?>'; - $s[] = ''; - $out = implode("\n", $s); - if (!$file = @fopen($filename, 'wb')) { - return $this->throwError(DB_TABLE_GENERATOR_ERR_FILE, - $filename); - } - fputs($file, $out); - fclose($file); - } - } - - return true; - } - - // }}} - // {{{ function generateDatabaseFile($object_name = null) - - /** - * Writes a file to instantiate Table and Database objects - * - * After successful completion, a file named 'Database.php' will be - * have been created in the $this->class_write_path directory. This - * file should normally be included in application php scripts. It - * can be renamed by the user. - * - * Usage: - * <code> - * $generator = new DB_Table_Generator($db, $database); - * $generator->generateTableClassFiles(); - * $generator->generateDatabaseFile(); - * </code> - * - * @param string $object_name variable name for DB_Table_Database object - * - * @return mixed true on success, PEAR Error on failure - * @access public - */ - function generateDatabaseFile($object_name = null) - { - // Set name for DB_Table_Database object - if ($object_name) { - $object_name = "\${$object_name}"; - } else { - $object_name = '$db'; //default - } - $backend = strtoupper($this->backend); // 'DB' or 'MDB2' - - if ('DB' == $backend) { - $dsn = $this->db->dsn; - } else { - $dsn = $this->db->getDSN('array'); - } - - // Create array d[] containing lines of database php file - $d = array(); - $d[] = '<?php'; - $d[] = '/*'; - $d[] = ' * Include basic classes'; - $d[] = ' */'; - $d[] = "require_once '{$backend}.php';"; - $d[] = "require_once 'DB/Table/Database.php';"; - - // Require_once statements for subclass definitions - foreach ($this->tables as $table) { - $classname = $this->className($table); - $class_filename = $this->classFileName($classname); - if ($this->class_include_path) { - $d[] = 'require_once ' - . "'{$this->class_include_path}/{$class_filename}';"; - } else { - $d[] = "require_once '{$class_filename}';"; - } - } - $d[] = ''; - - $d[] = '/*'; - $d[] = ' * NOTE: User must uncomment & edit code to create $dsn'; - $d[] = ' */'; - $d[] = "//\$phptype = '{$dsn['phptype']}';"; - $d[] = "//\$username = '{$dsn['username']}';"; - $d[] = "//\$password = ''; // put your password here"; - $d[] = "//\$hostname = '{$dsn['hostspec']}';"; - $d[] = "//\$database = '{$dsn['database']}';"; - $d[] = "//\$create = false; // 'drop', 'safe', 'verify', 'alter'"; - $d[] = '//$dsn = "{$phptype}://{$username}:{$password}@{$hostname}' - . '/{$database}";'; - $d[] = ''; - - $d[] = '/*'; - $d[] = " * Instantiate {$backend} connection object \$conn"; - $d[] = ' */'; - $d[] = "\$conn =& {$backend}::connect(\$dsn);"; - $d[] = 'if (PEAR::isError($conn)) {'; - $d[] = ' echo "Error connecting to database server\n";'; - $d[] = ' echo $conn->getMessage();'; - $d[] = ' die;'; - $d[] = '}'; - $d[] = ''; - - $d[] = '/*'; - $d[] = ' * Create one instance of each DB_Table subclass'; - $d[] = ' */'; - foreach ($this->tables as $table) { - $classname = $this->className($table); - - $d[] = "\${$table} = new {$classname}(" - . '$conn, ' . "'{$table}'" . ', $create);'; - $d[] = "if (PEAR::isError(\${$table}->error)) {"; - $d[] = ' echo "Can\'t create table object.\n";'; - $d[] = " echo \${$table}->error->getMessage();"; - $d[] = ' die;'; - $d[] = '}'; - - } - $d[] = ''; - - $d[] = '/*'; - $d[] = ' * Instantiate a parent DB_Table_Database object'; - $d[] = ' */'; - $d[] = "{$object_name} = new DB_Table_Database(\$conn, \$database);"; - $d[] = "if (PEAR::isError({$object_name}->error)) {"; - $d[] = ' echo "Can\'t create database object.\n";'; - $d[] = " echo {$object_name}->error->getMessage();"; - $d[] = ' die;'; - $d[] = '}'; - $d[] = ''; - - $d[] = '/*'; - $d[] = ' * Add DB_Table objects to parent DB_Table_Database object'; - $d[] = ' */'; - foreach ($this->tables as $table) { - $classname = $this->className($table); - - $d[] = "\$result = {$object_name}->addTable(\${$table});"; - $d[] = 'if (PEAR::isError($result)) {'; - $d[] = ' echo "Can\'t add table object to database object.\n";'; - $d[] = ' echo $result->getMessage();'; - $d[] = ' die;'; - $d[] = '}'; - } - $d[] = ''; - - // Add foreign key references: If the name of an integer column - // matches "/id$/i" (i.e., the names ends with id, ID, or Id), the - // remainder of the name matches the name $rtable of another table, - // and $rtable has an integer primary key, then the column is - // assumed to be a foreign key that references $rtable. - - $d[] = '/*'; - $d[] = ' * Add auto-guessed foreign references'; - $d[] = ' */'; - foreach ($this->col as $table => $col) { - foreach ($col as $col_name => $def) { - - // Only consider integer columns - $ftype = $def['type']; - if (!in_array($ftype, array('integer','smallint','bigint'))) { - continue; - } - if (preg_match("/id$/i", $col_name)) { - $column_base = preg_replace('/_?id$/i', '', $col_name); - foreach ($this->tables as $rtable) { - if (!preg_match("/^{$rtable}$/i", $column_base)) { - continue; - } - if (preg_match("/^{$table}$/i", $column_base)) { - continue; - } - if (!isset($this->primary_key[$rtable])) { - continue; - } - $rkey = $this->primary_key[$rtable]; - if (is_array($rkey)) { - continue; - } - $rtype = $this->col[$rtable][$rkey]['type']; - if (!in_array($rtype, - array('integer','smallint','bigint'))) { - continue; - } - $d[] = "\$result = {$object_name}->addRef('{$table}', " - . "'{$col_name}', '{$rtable}');"; - $d[] = 'if (PEAR::isError($result)) {'; - $d[] = ' echo "Can\'t add foreign key reference.\n";'; - $d[] = ' echo $result->getMessage();'; - $d[] = ' die;'; - $d[] = '}'; - } - } - } - } - $d[] = ''; - $d[] = '/*'; - $d[] = ' * Add any additional foreign key references here'; - $d[] = ' *'; - $d[] = ' * Add any linking table declarations here'; - $d[] = ' * Uncomment next line to add all possible linking tables;'; - $d[] = ' */'; - $d[] = "//\$result = {$object_name}->addAllLinks();"; - $d[] = '//if (PEAR::isError($result)) {'; - $d[] = '// echo "Can\'t add linking tables.\n";'; - $d[] = '// echo $result->getMessage();'; - $d[] = '// die;'; - $d[] = '//}'; - $d[] = ''; - - // Closing script element - $d[] = '?>'; - $d[] = ''; - - // Open and write file - $base = $this->class_write_path; - if ($base) { - if (!file_exists($base)) { - include_once 'System.php'; - if (!@System::mkdir(array('-p', $base))) { - return $this->throwError(DB_TABLE_GENERATOR_ERR_FILE, $base); - } - } - $filename = $base . '/Database.php'; - } else { - $filename = 'Database.php'; - } - if (!$file = @fopen($filename, 'wb')) { - return $this->throwError(DB_TABLE_GENERATOR_ERR_FILE, $filename); - } - $out = implode("\n", $d); - fputs($file, $out); - fclose($file); - - return true; - } - - // }}} - // {{{ function className($table) - - /** - * Convert a table name into a class name - * - * Converts all non-alphanumeric characters to '_', capitalizes - * first letter, and adds $this->class_suffix to end. Override - * this if you want something else. - * - * @param string $table name of table - * - * @return string class name; - * @access public - */ - function className($table) - { - $name = preg_replace('/[^A-Z0-9]/i', '_', ucfirst(trim($table))); - return $name . $this->class_suffix; - } - - // }}} - // {{{ function tableName($table) - - /** - * Returns a valid variable name from a table name - * - * Converts all non-alphanumeric characters to '_'. Override - * this if you want something else. - * - * @param string $table name of table - * - * @return string variable name; - * @access public - */ - function tableName($table) - { - return preg_replace('/[^A-Z0-9]/i', '_', trim($table)); - } - - // }}} - // {{{ function classFileName($class_name) - - /** - * Returns the path to a file containing a class definition - * - * Appends '.php' to class name. - * - * @param string $class_name name of class - * - * @return string file name - * @access public - */ - function classFileName($class_name) - { - $filename = $class_name . '.php'; - return $filename; - } - - // }}} - -} -// }}} diff --git a/civicrm/packages/DB/Table/Manager.php b/civicrm/packages/DB/Table/Manager.php deleted file mode 100644 index aac0961dae6c9b1638731ebd7ac40f12e8297954..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Manager.php +++ /dev/null @@ -1,2349 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Creates, checks or alters tables from DB_Table definitions. - * - * DB_Table_Manager provides database automated table creation - * facilities. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Manager.php,v 1.40 2008/12/25 19:56:35 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -require_once 'DB/Table.php'; - - -/** -* Valid types for the different data types in the different DBMS. -*/ -$GLOBALS['_DB_TABLE']['valid_type'] = array( - 'fbsql' => array( // currently not supported - 'boolean' => '', - 'char' => '', - 'varchar' => '', - 'smallint' => '', - 'integer' => '', - 'bigint' => '', - 'decimal' => '', - 'single' => '', - 'double' => '', - 'clob' => '', - 'date' => '', - 'time' => '', - 'timestamp' => '' - ), - 'ibase' => array( - 'boolean' => array('char', 'integer', 'real', 'smallint'), - 'char' => array('char', 'varchar'), - 'varchar' => 'varchar', - 'smallint' => array('integer', 'smallint'), - 'integer' => 'integer', - 'bigint' => array('bigint', 'integer'), - 'decimal' => 'numeric', - 'single' => array('double precision', 'float'), - 'double' => 'double precision', - 'clob' => 'blob', - 'date' => 'date', - 'time' => 'time', - 'timestamp' => 'timestamp' - ), - 'mssql' => array( // currently not supported - 'boolean' => '', - 'char' => '', - 'varchar' => '', - 'smallint' => '', - 'integer' => '', - 'bigint' => '', - 'decimal' => '', - 'single' => '', - 'double' => '', - 'clob' => '', - 'date' => '', - 'time' => '', - 'timestamp' => '' - ), - 'mysql' => array( - 'boolean' => array('char', 'decimal', 'int', 'real', 'tinyint'), - 'char' => array('char', 'string', 'varchar'), - 'varchar' => array('char', 'string', 'varchar'), - 'smallint' => array('smallint', 'int'), - 'integer' => 'int', - 'bigint' => array('int', 'bigint'), - 'decimal' => array('decimal', 'real'), - 'single' => array('double', 'real'), - 'double' => array('double', 'real'), - 'clob' => array('blob', 'longtext', 'tinytext', 'text', 'mediumtext'), - 'date' => array('char', 'date', 'string'), - 'time' => array('char', 'string', 'time'), - 'timestamp' => array('char', 'datetime', 'string') - ), - 'mysqli' => array( - 'boolean' => array('char', 'decimal', 'tinyint'), - 'char' => array('char', 'varchar'), - 'varchar' => array('char', 'varchar'), - 'smallint' => array('smallint', 'int'), - 'integer' => 'int', - 'bigint' => array('int', 'bigint'), - 'decimal' => 'decimal', - 'single' => array('double', 'float'), - 'double' => 'double', - 'clob' => array('blob', 'longtext', 'tinytext', 'text', 'mediumtext'), - 'date' => array('char', 'date', 'varchar'), - 'time' => array('char', 'time', 'varchar'), - 'timestamp' => array('char', 'datetime', 'varchar') - ), - 'oci8' => array( - 'boolean' => 'number', - 'char' => array('char', 'varchar2'), - 'varchar' => 'varchar2', - 'smallint' => 'number', - 'integer' => 'number', - 'bigint' => 'number', - 'decimal' => 'number', - 'single' => array('float', 'number'), - 'double' => array('float', 'number'), - 'clob' => 'clob', - 'date' => array('char', 'date'), - 'time' => array('char', 'date'), - 'timestamp' => array('char', 'date') - ), - 'pgsql' => array( - 'boolean' => array('bool', 'numeric'), - 'char' => array('bpchar', 'varchar'), - 'varchar' => 'varchar', - 'smallint' => array('int2', 'int4'), - 'integer' => 'int4', - 'bigint' => array('int4', 'int8'), - 'decimal' => 'numeric', - 'single' => array('float4', 'float8'), - 'double' => 'float8', - 'clob' => array('oid', 'text'), - 'date' => array('bpchar', 'date'), - 'time' => array('bpchar', 'time'), - 'timestamp' => array('bpchar', 'timestamp') - ), - 'sqlite' => array( - 'boolean' => 'boolean', - 'char' => 'char', - 'varchar' => array('char', 'varchar'), - 'smallint' => array('int', 'smallint'), - 'integer' => array('int', 'integer'), - 'bigint' => array('int', 'bigint'), - 'decimal' => array('decimal', 'numeric'), - 'single' => array('double', 'float'), - 'double' => 'double', - 'clob' => array('clob', 'longtext'), - 'date' => 'date', - 'time' => 'time', - 'timestamp' => array('datetime', 'timestamp') - ), -); - -/** -* Mapping between DB_Table and MDB2 data types. -*/ -$GLOBALS['_DB_TABLE']['mdb2_type'] = array( - 'boolean' => 'boolean', - 'char' => 'text', - 'varchar' => 'text', - 'smallint' => 'integer', - 'integer' => 'integer', - 'bigint' => 'integer', - 'decimal' => 'decimal', - 'single' => 'float', - 'double' => 'float', - 'clob' => 'clob', - 'date' => 'date', - 'time' => 'time', - 'timestamp' => 'timestamp' -); - -/** - * Creates, checks or alters tables from DB_Table definitions. - * - * DB_Table_Manager provides database automated table creation - * facilities. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Manager { - - - /** - * - * Create the table based on DB_Table column and index arrays. - * - * @static - * - * @access public - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name to connect to in the database. - * - * @param mixed $column_set A DB_Table $this->col array. - * - * @param mixed $index_set A DB_Table $this->idx array. - * - * @return mixed Boolean false if there was no attempt to create the - * table, boolean true if the attempt succeeded, and a PEAR_Error if - * the attempt failed. - * - */ - - function create(&$db, $table, $column_set, $index_set) - { - if (is_subclass_of($db, 'db_common')) { - $backend = 'db'; - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $backend = 'mdb2'; - $db->loadModule('Manager'); - } - $phptype = $db->phptype; - - // columns to be created - $column = array(); - - // max. value for scope (only used with MDB2 as backend) - $max_scope = 0; - - // indexes to be created - $indexes = array(); - - // check the table name - $name_check = DB_Table_Manager::_validateTableName($table); - if (PEAR::isError($name_check)) { - return $name_check; - } - - - // ------------------------------------------------------------- - // - // validate each column mapping and build the individual - // definitions, and note column indexes as we go. - // - - if (is_null($column_set)) { - $column_set = array(); - } - - foreach ($column_set as $colname => $val) { - - $colname = trim($colname); - - // check the column name - $name_check = DB_Table_Manager::_validateColumnName($colname); - if (PEAR::isError($name_check)) { - return $name_check; - } - - - // prepare variables - $type = (isset($val['type'])) ? $val['type'] : null; - $size = (isset($val['size'])) ? $val['size'] : null; - $scope = (isset($val['scope'])) ? $val['scope'] : null; - $require = (isset($val['require'])) ? $val['require'] : null; - $default = (isset($val['default'])) ? $val['default'] : null; - - if ($backend == 'mdb2') { - - // get the declaration string - $result = DB_Table_Manager::getDeclareMDB2($type, - $size, $scope, $require, $default, $max_scope); - - // did it work? - if (PEAR::isError($result)) { - $result->userinfo .= " ('$colname')"; - return $result; - } - - // add the declaration to the array of all columns - $column[$colname] = $result; - - } else { - - // get the declaration string - $result = DB_Table_Manager::getDeclare($phptype, $type, - $size, $scope, $require, $default); - - // did it work? - if (PEAR::isError($result)) { - $result->userinfo .= " ('$colname')"; - return $result; - } - - // add the declaration to the array of all columns - $column[] = "$colname $result"; - - } - - } - - - // ------------------------------------------------------------- - // - // validate the indexes. - // - - if (is_null($index_set)) { - $index_set = array(); - } - - $count_primary_keys = 0; - - foreach ($index_set as $idxname => $val) { - - list($type, $cols) = DB_Table_Manager::_getIndexTypeAndColumns($val, $idxname); - - $newIdxName = ''; - - // check the index definition - $index_check = DB_Table_Manager::_validateIndexName($idxname, - $table, $phptype, $type, $cols, $column_set, $newIdxName); - if (PEAR::isError($index_check)) { - return $index_check; - } - - // check number of primary keys (only one is allowed) - if ($type == 'primary') { - // SQLite does not support primary keys - if ($phptype == 'sqlite') { - return DB_Table::throwError(DB_TABLE_ERR_DECLARE_PRIM_SQLITE); - } - $count_primary_keys++; - } - if ($count_primary_keys > 1) { - return DB_Table::throwError(DB_TABLE_ERR_DECLARE_PRIMARY); - } - - // create index entry - if ($backend == 'mdb2') { - - // array with column names as keys - $idx_cols = array(); - foreach ($cols as $col) { - $idx_cols[$col] = array(); - } - - switch ($type) { - case 'primary': - $indexes['primary'][$newIdxName] = - array('fields' => $idx_cols, - 'primary' => true); - break; - case 'unique': - $indexes['unique'][$newIdxName] = - array('fields' => $idx_cols, - 'unique' => true); - break; - case 'normal': - $indexes['normal'][$newIdxName] = - array('fields' => $idx_cols); - break; - } - - } else { - - $indexes[] = DB_Table_Manager::getDeclareForIndex($phptype, - $type, $newIdxName, $table, $cols); - - } - - } - - - // ------------------------------------------------------------- - // - // now for the real action: create the table and indexes! - // - if ($backend == 'mdb2') { - - // save user defined 'decimal_places' option - $decimal_places = $db->getOption('decimal_places'); - $db->setOption('decimal_places', $max_scope); - - // attempt to create the table - $result = $db->manager->createTable($table, $column); - // restore user defined 'decimal_places' option - $db->setOption('decimal_places', $decimal_places); - if (PEAR::isError($result)) { - return $result; - } - - } else { - - // build the CREATE TABLE command - $cmd = "CREATE TABLE $table (\n\t"; - $cmd .= implode(",\n\t", $column); - $cmd .= "\n)"; - - // attempt to create the table - $result = $db->query($cmd); - if (PEAR::isError($result)) { - return $result; - } - - } - - $result = DB_Table_Manager::_createIndexesAndContraints($db, $backend, - $table, $indexes); - if (PEAR::isError($result)) { - return $result; - } - - // we're done! - return true; - } - - - /** - * - * Verify whether the table and columns exist, whether the columns - * have the right type and whether the indexes exist. - * - * @static - * - * @access public - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name to connect to in the database. - * - * @param mixed $column_set A DB_Table $this->col array. - * - * @param mixed $index_set A DB_Table $this->idx array. - * - * @return mixed Boolean true if the verification was successful, and a - * PEAR_Error if verification failed. - * - */ - - function verify(&$db, $table, $column_set, $index_set) - { - if (is_subclass_of($db, 'db_common')) { - $backend = 'db'; - $reverse =& $db; - $table_info_mode = DB_TABLEINFO_FULL; - $table_info_error = DB_ERROR_NEED_MORE_DATA; - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $backend = 'mdb2'; - $reverse =& $this->db->loadModule('Reverse'); - $table_info_mode = MDB2_TABLEINFO_FULL; - $table_info_error = MDB2_ERROR_NEED_MORE_DATA; - } - $phptype = $db->phptype; - - // check #1: does the table exist? - - // check the table name - $name_check = DB_Table_Manager::_validateTableName($table); - if (PEAR::isError($name_check)) { - return $name_check; - } - - // get table info - $tableInfo = $reverse->tableInfo($table, $table_info_mode); - if (PEAR::isError($tableInfo)) { - if ($tableInfo->getCode() == $table_info_error) { - return DB_Table::throwError( - DB_TABLE_ERR_VER_TABLE_MISSING, - "(table='$table')" - ); - } - return $tableInfo; - } - $tableInfoOrder = array_change_key_case($tableInfo['order'], CASE_LOWER); - - if (is_null($column_set)) { - $column_set = array(); - } - - foreach ($column_set as $colname => $val) { - $colname = strtolower(trim($colname)); - - // check the column name - $name_check = DB_Table_Manager::_validateColumnName($colname); - if (PEAR::isError($name_check)) { - return $name_check; - } - - // check #2: do all columns exist? - $column_exists = DB_Table_Manager::_columnExists($colname, - $tableInfoOrder, 'verify'); - if (PEAR::isError($column_exists)) { - return $column_exists; - } - - // check #3: do all columns have the right type? - - // check whether the column type is a known type - $type_check = DB_Table_Manager::_validateColumnType($phptype, $val['type']); - if (PEAR::isError($type_check)) { - return $type_check; - } - - // check whether the column has the right type - $type_check = DB_Table_Manager::_checkColumnType($phptype, - $colname, $val['type'], $tableInfoOrder, $tableInfo, 'verify'); - if (PEAR::isError($type_check)) { - return $type_check; - } - - } - - // check #4: do all indexes exist? - $table_indexes = DB_Table_Manager::getIndexes($db, $table); - if (PEAR::isError($table_indexes)) { - return $table_indexes; - } - - if (is_null($index_set)) { - $index_set = array(); - } - - foreach ($index_set as $idxname => $val) { - - list($type, $cols) = DB_Table_Manager::_getIndexTypeAndColumns($val, $idxname); - - $newIdxName = ''; - - // check the index definition - $index_check = DB_Table_Manager::_validateIndexName($idxname, - $table, $phptype, $type, $cols, $column_set, $newIdxName); - if (PEAR::isError($index_check)) { - return $index_check; - } - - // check whether the index has the right type and has all - // specified columns - $index_check = DB_Table_Manager::_checkIndex($idxname, $newIdxName, - $type, $cols, $table_indexes, 'verify'); - if (PEAR::isError($index_check)) { - return $index_check; - } - - } - - return true; - } - - - /** - * - * Alter columns and indexes of a table based on DB_Table column and index - * arrays. - * - * @static - * - * @access public - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name to connect to in the database. - * - * @param mixed $column_set A DB_Table $this->col array. - * - * @param mixed $index_set A DB_Table $this->idx array. - * - * @return bool|object True if altering was successful or a PEAR_Error on - * failure. - * - */ - - function alter(&$db, $table, $column_set, $index_set) - { - $phptype = $db->phptype; - - if (is_subclass_of($db, 'db_common')) { - $backend = 'db'; - $reverse =& $db; - // workaround for missing index and constraint information methods - // in PEAR::DB ==> use adopted code from MDB2's driver classes - require_once 'DB/Table/Manager/' . $phptype . '.php'; - $classname = 'DB_Table_Manager_' . $phptype; - $dbtm = new $classname(); - $dbtm->_db =& $db; // pass database instance to the 'workaround' class - $manager =& $dbtm; - $table_info_mode = DB_TABLEINFO_FULL; - $ok_const = DB_OK; - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $backend = 'mdb2'; - $db->loadModule('Reverse'); - $manager =& $db->manager; - $reverse =& $db->reverse; - $table_info_mode = MDB2_TABLEINFO_FULL; - $ok_const = MDB2_OK; - } - - // get table info - $tableInfo = $reverse->tableInfo($table, $table_info_mode); - if (PEAR::isError($tableInfo)) { - return $tableInfo; - } - $tableInfoOrder = array_change_key_case($tableInfo['order'], CASE_LOWER); - - // emulate MDB2 Reverse extension for PEAR::DB as backend - if (is_subclass_of($db, 'db_common')) { - $reverse =& $dbtm; - } - - // check (and alter) columns - if (is_null($column_set)) { - $column_set = array(); - } - - foreach ($column_set as $colname => $val) { - $colname = strtolower(trim($colname)); - - // check the column name - $name_check = DB_Table_Manager::_validateColumnName($colname); - if (PEAR::isError($name_check)) { - return $name_check; - } - - // check the column's existence - $column_exists = DB_Table_Manager::_columnExists($colname, - $tableInfoOrder, 'alter'); - if (PEAR::isError($column_exists)) { - return $column_exists; - } - if ($column_exists === false) { // add the column - $definition = DB_Table_Manager::_getColumnDefinition($backend, - $phptype, $val); - if (PEAR::isError($definition)) { - return $definition; - } - $changes = array('add' => array($colname => $definition)); - if (array_key_exists('debug', $GLOBALS['_DB_TABLE'])) { - echo "(alter) New table field will be added ($colname):\n"; - var_dump($changes); - echo "\n"; - } - $result = $manager->alterTable($table, $changes, false); - if (PEAR::isError($result)) { - return $result; - } - continue; - } - - // check whether the column type is a known type - $type_check = DB_Table_Manager::_validateColumnType($phptype, $val['type']); - if (PEAR::isError($type_check)) { - return $type_check; - } - - // check whether the column has the right type - $type_check = DB_Table_Manager::_checkColumnType($phptype, - $colname, $val['type'], $tableInfoOrder, $tableInfo, 'alter'); - if (PEAR::isError($type_check)) { - return $type_check; - } - if ($type_check === false) { // change the column type - $definition = DB_Table_Manager::_getColumnDefinition($backend, - $phptype, $val); - if (PEAR::isError($definition)) { - return $definition; - } - $changes = array('change' => - array($colname => array('type' => null, - 'definition' => $definition))); - if (array_key_exists('debug', $GLOBALS['_DB_TABLE'])) { - echo "(alter) Table field's type will be changed ($colname):\n"; - var_dump($changes); - echo "\n"; - } - $result = $manager->alterTable($table, $changes, false); - if (PEAR::isError($result)) { - return $result; - } - continue; - } - - } - - // get information about indexes / constraints - $table_indexes = DB_Table_Manager::getIndexes($db, $table); - if (PEAR::isError($table_indexes)) { - return $table_indexes; - } - - // check (and alter) indexes / constraints - if (is_null($index_set)) { - $index_set = array(); - } - - foreach ($index_set as $idxname => $val) { - - list($type, $cols) = DB_Table_Manager::_getIndexTypeAndColumns($val, $idxname); - - $newIdxName = ''; - - // check the index definition - $index_check = DB_Table_Manager::_validateIndexName($idxname, - $table, $phptype, $type, $cols, $column_set, $newIdxName); - if (PEAR::isError($index_check)) { - return $index_check; - } - - // check whether the index has the right type and has all - // specified columns - $index_check = DB_Table_Manager::_checkIndex($idxname, $newIdxName, - $type, $cols, $table_indexes, 'alter'); - if (PEAR::isError($index_check)) { - return $index_check; - } - if ($index_check === false) { // (1) drop wrong index/constraint - // (2) add right index/constraint - if ($backend == 'mdb2') { - // save user defined 'idxname_format' option - $idxname_format = $db->getOption('idxname_format'); - $db->setOption('idxname_format', '%s'); - } - // drop index/constraint only if it exists - foreach (array('normal', 'unique', 'primary') as $idx_type) { - if (array_key_exists(strtolower($newIdxName), - $table_indexes[$idx_type])) { - if (array_key_exists('debug', $GLOBALS['_DB_TABLE'])) { - echo "(alter) Index/constraint will be deleted (name: '$newIdxName', type: '$idx_type').\n"; - } - if ($idx_type == 'normal') { - $result = $manager->dropIndex($table, $newIdxName); - } else { - $result = $manager->dropConstraint($table, $newIdxName); - } - if (PEAR::isError($result)) { - if ($backend == 'mdb2') { - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - } - return $result; - } - break; - } - } - - // prepare index/constraint definition - $indexes = array(); - if ($backend == 'mdb2') { - - // array with column names as keys - $idx_cols = array(); - foreach ($cols as $col) { - $idx_cols[$col] = array(); - } - - switch ($type) { - case 'primary': - $indexes['primary'][$newIdxName] = - array('fields' => $idx_cols, - 'primary' => true); - break; - case 'unique': - $indexes['unique'][$newIdxName] = - array('fields' => $idx_cols, - 'unique' => true); - break; - case 'normal': - $indexes['normal'][$newIdxName] = - array('fields' => $idx_cols); - break; - } - - } else { - - $indexes[] = DB_Table_Manager::getDeclareForIndex($phptype, - $type, $newIdxName, $table, $cols); - - } - - // create index/constraint - if (array_key_exists('debug', $GLOBALS['_DB_TABLE'])) { - echo "(alter) New index/constraint will be created (name: '$newIdxName', type: '$type'):\n"; - var_dump($indexes); - echo "\n"; - } - $result = DB_Table_Manager::_createIndexesAndContraints( - $db, $backend, $table, $indexes); - if ($backend == 'mdb2') { - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - } - if (PEAR::isError($result)) { - return $result; - } - - continue; - } - - } - - return true; - } - - - /** - * - * Check whether a table exists. - * - * @static - * - * @access public - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name that should be checked. - * - * @return bool|object True if the table exists, false if not, or a - * PEAR_Error on failure. - * - */ - - function tableExists(&$db, $table) - { - if (is_subclass_of($db, 'db_common')) { - $list = $db->getListOf('tables'); - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $db->loadModule('Manager'); - $list = $db->manager->listTables(); - } - if (PEAR::isError($list)) { - return $list; - } - array_walk($list, create_function('&$value,$key', - '$value = trim(strtolower($value));')); - return in_array(strtolower($table), $list); - } - - - /** - * - * Get the column declaration string for a DB_Table column. - * - * @static - * - * @access public - * - * @param string $phptype The DB/MDB2 phptype key. - * - * @param string $coltype The DB_Table column type. - * - * @param int $size The size for the column (needed for string and - * decimal). - * - * @param int $scope The scope for the column (needed for decimal). - * - * @param bool $require True if the column should be NOT NULL, false - * allowed to be NULL. - * - * @param string $default The SQL calculation for a default value. - * - * @return string|object A declaration string on success, or a - * PEAR_Error on failure. - * - */ - - function getDeclare($phptype, $coltype, $size = null, $scope = null, - $require = null, $default = null) - { - // validate char/varchar/decimal type declaration - $validation = DB_Table_Manager::_validateTypeDeclaration($coltype, $size, - $scope); - if (PEAR::isError($validation)) { - return $validation; - } - - // map of column types and declarations for this RDBMS - $map = $GLOBALS['_DB_TABLE']['type'][$phptype]; - - // is it a recognized column type? - $types = array_keys($map); - if (! in_array($coltype, $types)) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_TYPE, - "('$coltype')" - ); - } - - // basic declaration - switch ($coltype) { - - case 'char': - case 'varchar': - $declare = $map[$coltype] . "($size)"; - break; - - case 'decimal': - $declare = $map[$coltype] . "($size,$scope)"; - break; - - default: - $declare = $map[$coltype]; - break; - - } - - // set the "NULL"/"NOT NULL" portion - $null = ' NULL'; - if ($phptype == 'ibase') { // Firebird does not like 'NULL' - $null = ''; // in CREATE TABLE - } - if ($phptype == 'pgsql') { // PostgreSQL does not like 'NULL' - $null = ''; // in ALTER TABLE - } - $declare .= ($require) ? ' NOT NULL' : $null; - - // set the "DEFAULT" portion - if ($default) { - switch ($coltype) { - case 'char': - case 'varchar': - case 'clob': - $declare .= " DEFAULT '$default'"; - break; - - default: - $declare .= " DEFAULT $default"; - break; - } - } - - // done - return $declare; - } - - - /** - * - * Get the column declaration string for a DB_Table column. - * - * @static - * - * @access public - * - * @param string $coltype The DB_Table column type. - * - * @param int $size The size for the column (needed for string and - * decimal). - * - * @param int $scope The scope for the column (needed for decimal). - * - * @param bool $require True if the column should be NOT NULL, false - * allowed to be NULL. - * - * @param string $default The SQL calculation for a default value. - * - * @param int $max_scope The maximal scope for all table column - * (pass-by-reference). - * - * @return string|object A MDB2 column definition array on success, or a - * PEAR_Error on failure. - * - */ - - function getDeclareMDB2($coltype, $size = null, $scope = null, - $require = null, $default = null, &$max_scope) - { - // validate char/varchar/decimal type declaration - $validation = DB_Table_Manager::_validateTypeDeclaration($coltype, $size, - $scope); - if (PEAR::isError($validation)) { - return $validation; - } - - // map of MDB2 column types - $map = $GLOBALS['_DB_TABLE']['mdb2_type']; - - // is it a recognized column type? - $types = array_keys($map); - if (! in_array($coltype, $types)) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_TYPE, - "('$coltype')" - ); - } - - // build declaration array - $new_column = array( - 'type' => $map[$coltype], - 'notnull' => $require - ); - - if ($size) { - $new_column['length'] = $size; - } - - // determine integer length to be used in MDB2 - if (in_array($coltype, array('smallint', 'integer', 'bigint'))) { - switch ($coltype) { - case 'smallint': - $new_column['length'] = 2; - break; - case 'integer': - $new_column['length'] = 4; - break; - case 'bigint': - $new_column['length'] = 5; - break; - } - } - - if ($scope) { - $max_scope = max($max_scope, $scope); - } - - if ($default) { - $new_column['default'] = $default; - } - - return $new_column; - } - - - /** - * - * Get the index declaration string for a DB_Table index. - * - * @static - * - * @access public - * - * @param string $phptype The DB phptype key. - * - * @param string $type The index type. - * - * @param string $idxname The index name. - * - * @param string $table The table name. - * - * @param mixed $cols Array with the column names for the index. - * - * @return string A declaration string. - * - */ - - function getDeclareForIndex($phptype, $type, $idxname, $table, $cols) - { - // string of column names - $colstring = implode(', ', $cols); - - switch ($type) { - - case 'primary': - switch ($phptype) { - case 'ibase': - case 'oci8': - case 'pgsql': - $declare = "ALTER TABLE $table ADD"; - $declare .= " CONSTRAINT $idxname"; - $declare .= " PRIMARY KEY ($colstring)"; - break; - case 'mysql': - case 'mysqli': - $declare = "ALTER TABLE $table ADD PRIMARY KEY"; - $declare .= " ($colstring)"; - break; - case 'sqlite': - // currently not possible - break; - } - break; - - case 'unique': - $declare = "CREATE UNIQUE INDEX $idxname ON $table ($colstring)"; - break; - - case 'normal': - $declare = "CREATE INDEX $idxname ON $table ($colstring)"; - break; - - } - - return $declare; - } - - - /** - * - * Return the definition array for a column. - * - * @access private - * - * @param string $backend The name of the backend ('db' or 'mdb2'). - * - * @param string $phptype The DB/MDB2 phptype key. - * - * @param mixed $column A single DB_Table column definition array. - * - * @return mixed|object Declaration string (DB), declaration array (MDB2) or a - * PEAR_Error with a description about the invalidity, otherwise. - * - */ - - function _getColumnDefinition($backend, $phptype, $column) - { - static $max_scope; - - // prepare variables - $type = (isset($column['type'])) ? $column['type'] : null; - $size = (isset($column['size'])) ? $column['size'] : null; - $scope = (isset($column['scope'])) ? $column['scope'] : null; - $require = (isset($column['require'])) ? $column['require'] : null; - $default = (isset($column['default'])) ? $column['default'] : null; - - if ($backend == 'db') { - return DB_Table_Manager::getDeclare($phptype, $type, - $size, $scope, $require, $default); - } else { - return DB_Table_Manager::getDeclareMDB2($type, - $size, $scope, $require, $default, $max_scope); - } - } - - - /** - * - * Check char/varchar/decimal type declarations for validity. - * - * @access private - * - * @param string $coltype The DB_Table column type. - * - * @param int $size The size for the column (needed for string and - * decimal). - * - * @param int $scope The scope for the column (needed for decimal). - * - * @return bool|object Boolean true if the type declaration is valid or a - * PEAR_Error with a description about the invalidity, otherwise. - * - */ - - function _validateTypeDeclaration($coltype, $size, $scope) - { - // validate char and varchar: does it have a size? - if (($coltype == 'char' || $coltype == 'varchar') && - ($size < 1 || $size > 255) ) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_STRING, - "(size='$size')" - ); - } - - // validate decimal: does it have a size and scope? - if ($coltype == 'decimal' && - ($size < 1 || $size > 255 || $scope < 0 || $scope > $size)) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_DECIMAL, - "(size='$size' scope='$scope')" - ); - } - - return true; - } - - - /** - * - * Check a table name for validity. - * - * @access private - * - * @param string $tablename The table name. - * - * @return bool|object Boolean true if the table name is valid or a - * PEAR_Error with a description about the invalidity, otherwise. - * - */ - - function _validateTableName($tablename) - { - // is the table name too long? - if ( $GLOBALS['_DB_TABLE']['disable_length_check'] === false - && strlen($tablename) > 30 - ) { - return DB_Table::throwError( - DB_TABLE_ERR_TABLE_STRLEN, - " ('$tablename')" - ); - } - - return true; - } - - - /** - * - * Check a column name for validity. - * - * @access private - * - * @param string $colname The column name. - * - * @return bool|object Boolean true if the column name is valid or a - * PEAR_Error with a description about the invalidity, otherwise. - * - */ - - function _validateColumnName($colname) - { - // column name cannot be a reserved keyword - $reserved = in_array( - strtoupper($colname), - $GLOBALS['_DB_TABLE']['reserved'] - ); - - if ($reserved) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_COLNAME, - " ('$colname')" - ); - } - - // column name must be no longer than 30 chars - if ( $GLOBALS['_DB_TABLE']['disable_length_check'] === false - && strlen($colname) > 30 - ) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_STRLEN, - "('$colname')" - ); - } - - return true; - } - - - /** - * - * Check whether a column exists. - * - * @access private - * - * @param string $colname The column name. - * - * @param mixed $tableInfoOrder Array with columns in the table (result - * from tableInfo(), shortened to key 'order'). - * - * @param string $mode The name of the calling function, this can be either - * 'verify' or 'alter'. - * - * @return bool|object Boolean true if the column exists. - * Otherwise, either boolean false (case 'alter') or a PEAR_Error - * (case 'verify'). - * - */ - - function _columnExists($colname, $tableInfoOrder, $mode) - { - if (array_key_exists($colname, $tableInfoOrder)) { - return true; - } - - switch ($mode) { - - case 'alter': - return false; - - case 'verify': - return DB_Table::throwError( - DB_TABLE_ERR_VER_COLUMN_MISSING, - "(column='$colname')" - ); - - } - } - - - /** - * - * Check whether a column type is a known type. - * - * @access private - * - * @param string $phptype The DB/MDB2 phptype key. - * - * @param string $type The column type. - * - * @return bool|object Boolean true if the column type is a known type - * or a PEAR_Error, otherwise. - * - */ - - function _validateColumnType($phptype, $type) - { - // map of valid types for the current RDBMS - $map = $GLOBALS['_DB_TABLE']['valid_type'][$phptype]; - - // is it a recognized column type? - $types = array_keys($map); - if (!in_array($type, $types)) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_TYPE, - "('" . $type . "')" - ); - } - - return true; - } - - - /** - * - * Check whether a column has the right type. - * - * @access private - * - * @param string $phptype The DB/MDB2 phptype key. - * - * @param string $colname The column name. - * - * @param string $coltype The column type. - * - * @param mixed $tableInfoOrder Array with columns in the table (result - * from tableInfo(), shortened to key 'order'). - * - * @param mixed $tableInfo Array with information about the table (result - * from tableInfo()). - * - * @param string $mode The name of the calling function, this can be either - * 'verify' or 'alter'. - * - * @return bool|object Boolean true if the column has the right type. - * Otherwise, either boolean false (case 'alter') or a PEAR_Error - * (case 'verify'). - * - */ - - function _checkColumnType($phptype, $colname, $coltype, $tableInfoOrder, - $tableInfo, $mode) - { - // map of valid types for the current RDBMS - $map = $GLOBALS['_DB_TABLE']['valid_type'][$phptype]; - - // get the column type from tableInfo() - $colindex = $tableInfoOrder[$colname]; - $type = strtolower($tableInfo[$colindex]['type']); - - // workaround for possibly wrong detected column type (taken from MDB2) - if ($type == 'unknown' && ($phptype == 'mysql' || $phptype == 'mysqli')) { - $type = 'decimal'; - } - - // strip size information (e.g. NUMERIC(9,2) => NUMERIC) if given - if (($pos = strpos($type, '(')) !== false) { - $type = substr($type, 0, $pos); - } - - // is the type valid for the given DB_Table column type? - if (in_array($type, (array)$map[$coltype])) { - return true; - } - - switch ($mode) { - - case 'alter': - return false; - - case 'verify': - return DB_Table::throwError( - DB_TABLE_ERR_VER_COLUMN_TYPE, - "(column='$colname', type='$type')" - ); - - } - } - - - /** - * - * Return the index type and the columns belonging to this index. - * - * @access private - * - * @param mixed $idx_def The index definition. - * - * @return mixed Array with the index type and the columns belonging to - * this index. - * - */ - - function _getIndexTypeAndColumns($idx_def, $idxname) - { - $type = ''; - $cols = ''; - if (is_string($idx_def)) { - // shorthand for index names: colname => index_type - $type = trim($idx_def); - $cols = trim($idxname); - } elseif (is_array($idx_def)) { - // normal: index_name => array('type' => ..., 'cols' => ...) - $type = (isset($idx_def['type'])) ? $idx_def['type'] : 'normal'; - $cols = (isset($idx_def['cols'])) ? $idx_def['cols'] : null; - } - - return array($type, $cols); - } - - - /** - * - * Check an index name for validity. - * - * @access private - * - * @param string $idxname The index name. - * - * @param string $table The table name. - * - * @param string $phptype The DB/MDB2 phptype key. - * - * @param string $type The index type. - * - * @param mixed $cols The column names for the index. Will become an array - * if it is not an array. - * - * @param mixed $column_set A DB_Table $this->col array. - * - * @param string $newIdxName The new index name (prefixed with the table - * name, suffixed with '_idx'). - * - * @return bool|object Boolean true if the index name is valid or a - * PEAR_Error with a description about the invalidity, otherwise. - * - */ - - function _validateIndexName($idxname, $table, $phptype, $type, &$cols, - $column_set, &$newIdxName) - { - // index name cannot be a reserved keyword - $reserved = in_array( - strtoupper($idxname), - $GLOBALS['_DB_TABLE']['reserved'] - ); - - if ($reserved && !($type == 'primary' && $idxname == 'PRIMARY')) { - return DB_Table::throwError( - DB_TABLE_ERR_DECLARE_IDXNAME, - "('$idxname')" - ); - } - - // are there any columns for the index? - if (! $cols) { - return DB_Table::throwError( - DB_TABLE_ERR_IDX_NO_COLS, - "('$idxname')" - ); - } - - // are there any CLOB columns, or any columns that are not - // in the schema? - settype($cols, 'array'); - $valid_cols = array_keys($column_set); - foreach ($cols as $colname) { - - if (! in_array($colname, $valid_cols)) { - return DB_Table::throwError( - DB_TABLE_ERR_IDX_COL_UNDEF, - "'$idxname' ('$colname')" - ); - } - - if ($column_set[$colname]['type'] == 'clob') { - return DB_Table::throwError( - DB_TABLE_ERR_IDX_COL_CLOB, - "'$idxname' ('$colname')" - ); - } - - } - - // we prefix all index names with the table name, - // and suffix all index names with '_idx'. this - // is to soothe PostgreSQL, which demands that index - // names not collide, even when they indexes are on - // different tables. - $newIdxName = $table . '_' . $idxname . '_idx'; - - // MySQL requires the primary key to be named 'primary', therefore let's - // ignore the user defined name - if (($phptype == 'mysql' || $phptype == 'mysqli') && $type == 'primary') { - $newIdxName = 'primary'; - } - - // now check the length; must be under 30 chars to - // soothe Oracle. - if ( $GLOBALS['_DB_TABLE']['disable_length_check'] === false - && strlen($newIdxName) > 30 - ) { - return DB_Table::throwError( - DB_TABLE_ERR_IDX_STRLEN, - "'$idxname' ('$newIdxName')" - ); - } - - // check index type - if ($type != 'primary' && $type != 'unique' && $type != 'normal') { - return DB_Table::throwError( - DB_TABLE_ERR_IDX_TYPE, - "'$idxname' ('$type')" - ); - } - - return true; - } - - - /** - * - * Return all indexes for a table. - * - * @access public - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $table The table name. - * - * @return mixed Array with all indexes or a PEAR_Error when an error - * occured. - * - */ - - function getIndexes(&$db, $table) - { - if (is_subclass_of($db, 'db_common')) { - $backend = 'db'; - // workaround for missing index and constraint information methods - // in PEAR::DB ==> use adopted code from MDB2's driver classes - require_once 'DB/Table/Manager/' . $db->phptype . '.php'; - $classname = 'DB_Table_Manager_' . $db->phptype; - $dbtm = new $classname(); - $dbtm->_db =& $db; // pass database instance to the 'workaround' class - $manager =& $dbtm; - $reverse =& $dbtm; - } elseif (is_subclass_of($db, 'mdb2_driver_common')) { - $backend = 'mdb2'; - $manager =& $db->manager; - $reverse =& $db->reverse; - } - - $indexes = array('normal' => array(), - 'primary' => array(), - 'unique' => array() - ); - - // save user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $idxname_format = $db->getOption('idxname_format'); - $db->setOption('idxname_format', '%s'); - } - - // get table constraints - $table_indexes_tmp = $manager->listTableConstraints($table); - if (PEAR::isError($table_indexes_tmp)) { - // restore user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $db->setOption('idxname_format', $idxname_format); - } - return $table_indexes_tmp; - } - - // get fields of table constraints - foreach ($table_indexes_tmp as $table_idx_tmp) { - $index_fields = $reverse->getTableConstraintDefinition($table, - $table_idx_tmp); - if (PEAR::isError($index_fields)) { - // restore user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $db->setOption('idxname_format', $idxname_format); - } - return $index_fields; - } - // get the first key of $index_fields that has boolean true value - foreach ($index_fields as $index_type => $value) { - if ($value === true) { - break; - } - } - $indexes[$index_type][$table_idx_tmp] = array_keys($index_fields['fields']); - } - - // get table indexes - $table_indexes_tmp = $manager->listTableIndexes($table); - if (PEAR::isError($table_indexes_tmp)) { - // restore user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $db->setOption('idxname_format', $idxname_format); - } - return $table_indexes_tmp; - } - - // get fields of table indexes - foreach ($table_indexes_tmp as $table_idx_tmp) { - $index_fields = $reverse->getTableIndexDefinition($table, - $table_idx_tmp); - if (PEAR::isError($index_fields)) { - // restore user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $db->setOption('idxname_format', $idxname_format); - } - return $index_fields; - } - $indexes['normal'][$table_idx_tmp] = array_keys($index_fields['fields']); - } - - // restore user defined 'idxname_format' option (MDB2 only) - if ($backend == 'mdb2') { - $db->setOption('idxname_format', $idxname_format); - } - - return $indexes; - } - - - /** - * - * Check whether an index has the right type and has all specified columns. - * - * @access private - * - * @param string $idxname The index name. - * - * @param string $newIdxName The prefixed and suffixed index name. - * - * @param string $type The index type. - * - * @param mixed $cols The column names for the index. - * - * @param mixed $table_indexes Array with all indexes of the table. - * - * @param string $mode The name of the calling function, this can be either - * 'verify' or 'alter'. - * - * @return bool|object Boolean true if the index has the right type and all - * specified columns. Otherwise, either boolean false (case 'alter') or a - * PEAR_Error (case 'verify'). - * - */ - - function _checkIndex($idxname, $newIdxName, $type, $cols, &$table_indexes, $mode) - { - $index_found = false; - - foreach ($table_indexes[$type] as $index_name => $index_fields) { - if (strtolower($index_name) == strtolower($newIdxName)) { - $index_found = true; - array_walk($cols, create_function('&$value,$key', - '$value = trim(strtolower($value));')); - array_walk($index_fields, create_function('&$value,$key', - '$value = trim(strtolower($value));')); - foreach ($index_fields as $index_field) { - if (($key = array_search($index_field, $cols)) !== false) { - unset($cols[$key]); - } - } - break; - } - } - - if (!$index_found) { - return ($mode == 'alter') ? false : DB_Table::throwError( - DB_TABLE_ERR_VER_IDX_MISSING, - "'$idxname' ('$newIdxName')" - ); - } - - if (count($cols) > 0) { - // string of column names - $colstring = implode(', ', $cols); - return ($mode == 'alter') ? false : DB_Table::throwError( - DB_TABLE_ERR_VER_IDX_COL_MISSING, - "'$idxname' ($colstring)" - ); - } - - return true; - } - - - /** - * - * Create indexes and contraints. - * - * @access private - * - * @param object &$db A PEAR DB/MDB2 object. - * - * @param string $backend The name of the backend ('db' or 'mdb2'). - * - * @param string $table The table name. - * - * @param mixed $indexes An array with index and constraint definitions. - * - * @return bool|object Boolean true on success or a PEAR_Error with a - * description about the invalidity, otherwise. - * - */ - - function _createIndexesAndContraints($db, $backend, $table, $indexes) - { - if ($backend == 'mdb2') { - - // save user defined 'idxname_format' option - $idxname_format = $db->getOption('idxname_format'); - $db->setOption('idxname_format', '%s'); - - // attempt to create the primary key - if (!array_key_exists('primary', $indexes)) { - $indexes['primary'] = array(); - } - foreach ($indexes['primary'] as $name => $definition) { - $result = $db->manager->createConstraint($table, $name, $definition); - if (PEAR::isError($result)) { - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - return $result; - } - } - - // attempt to create the unique indexes / constraints - if (!array_key_exists('unique', $indexes)) { - $indexes['unique'] = array(); - } - foreach ($indexes['unique'] as $name => $definition) { - $result = $db->manager->createConstraint($table, $name, $definition); - if (PEAR::isError($result)) { - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - return $result; - } - } - - // attempt to create the normal indexes - if (!array_key_exists('normal', $indexes)) { - $indexes['normal'] = array(); - } - foreach ($indexes['normal'] as $name => $definition) { - $result = $db->manager->createIndex($table, $name, $definition); - if (PEAR::isError($result)) { - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - return $result; - } - } - - // restore user defined 'idxname_format' option - $db->setOption('idxname_format', $idxname_format); - - } else { - - // attempt to create the indexes - foreach ($indexes as $cmd) { - $result = $db->query($cmd); - if (PEAR::isError($result)) { - return $result; - } - } - - } - - return true; - - } - -} - - -/** -* List of all reserved words for all supported databases. Yes, this is a -* monster of a list. -*/ -if (! isset($GLOBALS['_DB_TABLE']['reserved'])) { - $GLOBALS['_DB_TABLE']['reserved'] = array( - '_ROWID_', - 'ABSOLUTE', - 'ACCESS', - 'ACTION', - 'ADD', - 'ADMIN', - 'AFTER', - 'AGGREGATE', - 'ALIAS', - 'ALL', - 'ALLOCATE', - 'ALTER', - 'ANALYSE', - 'ANALYZE', - 'AND', - 'ANY', - 'ARE', - 'ARRAY', - 'AS', - 'ASC', - 'ASENSITIVE', - 'ASSERTION', - 'AT', - 'AUDIT', - 'AUTHORIZATION', - 'AUTO_INCREMENT', - 'AVG', - 'BACKUP', - 'BDB', - 'BEFORE', - 'BEGIN', - 'BERKELEYDB', - 'BETWEEN', - 'BIGINT', - 'BINARY', - 'BIT', - 'BIT_LENGTH', - 'BLOB', - 'BOOLEAN', - 'BOTH', - 'BREADTH', - 'BREAK', - 'BROWSE', - 'BULK', - 'BY', - 'CALL', - 'CASCADE', - 'CASCADED', - 'CASE', - 'CAST', - 'CATALOG', - 'CHANGE', - 'CHAR', - 'CHAR_LENGTH', - 'CHARACTER', - 'CHARACTER_LENGTH', - 'CHECK', - 'CHECKPOINT', - 'CLASS', - 'CLOB', - 'CLOSE', - 'CLUSTER', - 'CLUSTERED', - 'COALESCE', - 'COLLATE', - 'COLLATION', - 'COLUMN', - 'COLUMNS', - 'COMMENT', - 'COMMIT', - 'COMPLETION', - 'COMPRESS', - 'COMPUTE', - 'CONDITION', - 'CONNECT', - 'CONNECTION', - 'CONSTRAINT', - 'CONSTRAINTS', - 'CONSTRUCTOR', - 'CONTAINS', - 'CONTAINSTABLE', - 'CONTINUE', - 'CONVERT', - 'CORRESPONDING', - 'COUNT', - 'CREATE', - 'CROSS', - 'CUBE', - 'CURRENT', - 'CURRENT_DATE', - 'CURRENT_PATH', - 'CURRENT_ROLE', - 'CURRENT_TIME', - 'CURRENT_TIMESTAMP', - 'CURRENT_USER', - 'CURSOR', - 'CYCLE', - 'DATA', - 'DATABASE', - 'DATABASES', - 'DATE', - 'DAY', - 'DAY_HOUR', - 'DAY_MICROSECOND', - 'DAY_MINUTE', - 'DAY_SECOND', - 'DBCC', - 'DEALLOCATE', - 'DEC', - 'DECIMAL', - 'DECLARE', - 'DEFAULT', - 'DEFERRABLE', - 'DEFERRED', - 'DELAYED', - 'DELETE', - 'DENY', - 'DEPTH', - 'DEREF', - 'DESC', - 'DESCRIBE', - 'DESCRIPTOR', - 'DESTROY', - 'DESTRUCTOR', - 'DETERMINISTIC', - 'DIAGNOSTICS', - 'DICTIONARY', - 'DISCONNECT', - 'DISK', - 'DISTINCT', - 'DISTINCTROW', - 'DISTRIBUTED', - 'DIV', - 'DO', - 'DOMAIN', - 'DOUBLE', - 'DROP', - 'DUMMY', - 'DUMP', - 'DYNAMIC', - 'EACH', - 'ELSE', - 'ELSEIF', - 'ENCLOSED', - 'END', - 'END-EXEC', - 'EQUALS', - 'ERRLVL', - 'ESCAPE', - 'ESCAPED', - 'EVERY', - 'EXCEPT', - 'EXCEPTION', - 'EXCLUSIVE', - 'EXEC', - 'EXECUTE', - 'EXISTS', - 'EXIT', - 'EXPLAIN', - 'EXTERNAL', - 'EXTRACT', - 'FALSE', - 'FETCH', - 'FIELDS', - 'FILE', - 'FILLFACTOR', - 'FIRST', - 'FLOAT', - 'FOR', - 'FORCE', - 'FOREIGN', - 'FOUND', - 'FRAC_SECOND', - 'FREE', - 'FREETEXT', - 'FREETEXTTABLE', - 'FREEZE', - 'FROM', - 'FULL', - 'FULLTEXT', - 'FUNCTION', - 'GENERAL', - 'GET', - 'GLOB', - 'GLOBAL', - 'GO', - 'GOTO', - 'GRANT', - 'GROUP', - 'GROUPING', - 'HAVING', - 'HIGH_PRIORITY', - 'HOLDLOCK', - 'HOST', - 'HOUR', - 'HOUR_MICROSECOND', - 'HOUR_MINUTE', - 'HOUR_SECOND', - 'IDENTIFIED', - 'IDENTITY', - 'IDENTITY_INSERT', - 'IDENTITYCOL', - 'IF', - 'IGNORE', - 'ILIKE', - 'IMMEDIATE', - 'IN', - 'INCREMENT', - 'INDEX', - 'INDICATOR', - 'INFILE', - 'INITIAL', - 'INITIALIZE', - 'INITIALLY', - 'INNER', - 'INNODB', - 'INOUT', - 'INPUT', - 'INSENSITIVE', - 'INSERT', - 'INT', - 'INTEGER', - 'INTERSECT', - 'INTERVAL', - 'INTO', - 'IO_THREAD', - 'IS', - 'ISNULL', - 'ISOLATION', - 'ITERATE', - 'JOIN', - 'KEY', - 'KEYS', - 'KILL', - 'LANGUAGE', - 'LARGE', - 'LAST', - 'LATERAL', - 'LEADING', - 'LEAVE', - 'LEFT', - 'LESS', - 'LEVEL', - 'LIKE', - 'LIMIT', - 'LINENO', - 'LINES', - 'LOAD', - 'LOCAL', - 'LOCALTIME', - 'LOCALTIMESTAMP', - 'LOCATOR', - 'LOCK', - 'LONG', - 'LONGBLOB', - 'LONGTEXT', - 'LOOP', - 'LOW_PRIORITY', - 'LOWER', - 'MAIN', - 'MAP', - 'MASTER_SERVER_ID', - 'MATCH', - 'MAX', - 'MAXEXTENTS', - 'MEDIUMBLOB', - 'MEDIUMINT', - 'MEDIUMTEXT', - 'MIDDLEINT', - 'MIN', - 'MINUS', - 'MINUTE', - 'MINUTE_MICROSECOND', - 'MINUTE_SECOND', - 'MLSLABEL', - 'MOD', - 'MODE', - 'MODIFIES', - 'MODIFY', - 'MODULE', - 'MONTH', - 'NAMES', - 'NATIONAL', - 'NATURAL', - 'NCHAR', - 'NCLOB', - 'NEW', - 'NEXT', - 'NO', - 'NO_WRITE_TO_BINLOG', - 'NOAUDIT', - 'NOCHECK', - 'NOCOMPRESS', - 'NONCLUSTERED', - 'NONE', - 'NOT', - 'NOTNULL', - 'NOWAIT', - 'NULL', - 'NULLIF', - 'NUMBER', - 'NUMERIC', - 'OBJECT', - 'OCTET_LENGTH', - 'OF', - 'OFF', - 'OFFLINE', - 'OFFSET', - 'OFFSETS', - 'OID', - 'OLD', - 'ON', - 'ONLINE', - 'ONLY', - 'OPEN', - 'OPENDATASOURCE', - 'OPENQUERY', - 'OPENROWSET', - 'OPENXML', - 'OPERATION', - 'OPTIMIZE', - 'OPTION', - 'OPTIONALLY', - 'OR', - 'ORDER', - 'ORDINALITY', - 'OUT', - 'OUTER', - 'OUTFILE', - 'OUTPUT', - 'OVER', - 'OVERLAPS', - 'PAD', - 'PARAMETER', - 'PARAMETERS', - 'PARTIAL', - 'PATH', - 'PCTFREE', - 'PERCENT', - 'PLACING', - 'PLAN', - 'POSITION', - 'POSTFIX', - 'PRECISION', - 'PREFIX', - 'PREORDER', - 'PREPARE', - 'PRESERVE', - 'PRIMARY', - 'PRINT', - 'PRIOR', - 'PRIVILEGES', - 'PROC', - 'PROCEDURE', - 'PUBLIC', - 'PURGE', - 'RAISERROR', - 'RAW', - 'READ', - 'READS', - 'READTEXT', - 'REAL', - 'RECONFIGURE', - 'RECURSIVE', - 'REF', - 'REFERENCES', - 'REFERENCING', - 'REGEXP', - 'RELATIVE', - 'RENAME', - 'REPEAT', - 'REPLACE', - 'REPLICATION', - 'REQUIRE', - 'RESOURCE', - 'RESTORE', - 'RESTRICT', - 'RESULT', - 'RETURN', - 'RETURNS', - 'REVOKE', - 'RIGHT', - 'RLIKE', - 'ROLE', - 'ROLLBACK', - 'ROLLUP', - 'ROUTINE', - 'ROW', - 'ROWCOUNT', - 'ROWGUIDCOL', - 'ROWID', - 'ROWNUM', - 'ROWS', - 'RULE', - 'SAVE', - 'SAVEPOINT', - 'SCHEMA', - 'SCOPE', - 'SCROLL', - 'SEARCH', - 'SECOND', - 'SECOND_MICROSECOND', - 'SECTION', - 'SELECT', - 'SENSITIVE', - 'SEPARATOR', - 'SEQUENCE', - 'SESSION', - 'SESSION_USER', - 'SET', - 'SETS', - 'SETUSER', - 'SHARE', - 'SHOW', - 'SHUTDOWN', - 'SIMILAR', - 'SIZE', - 'SMALLINT', - 'SOME', - 'SONAME', - 'SPACE', - 'SPATIAL', - 'SPECIFIC', - 'SPECIFICTYPE', - 'SQL', - 'SQL_BIG_RESULT', - 'SQL_CALC_FOUND_ROWS', - 'SQL_SMALL_RESULT', - 'SQL_TSI_DAY', - 'SQL_TSI_FRAC_SECOND', - 'SQL_TSI_HOUR', - 'SQL_TSI_MINUTE', - 'SQL_TSI_MONTH', - 'SQL_TSI_QUARTER', - 'SQL_TSI_SECOND', - 'SQL_TSI_WEEK', - 'SQL_TSI_YEAR', - 'SQLCODE', - 'SQLERROR', - 'SQLEXCEPTION', - 'SQLITE_MASTER', - 'SQLITE_TEMP_MASTER', - 'SQLSTATE', - 'SQLWARNING', - 'SSL', - 'START', - 'STARTING', - 'STATE', - 'STATEMENT', - 'STATIC', - 'STATISTICS', - 'STRAIGHT_JOIN', - 'STRIPED', - 'STRUCTURE', - 'SUBSTRING', - 'SUCCESSFUL', - 'SUM', - 'SYNONYM', - 'SYSDATE', - 'SYSTEM_USER', - 'TABLE', - 'TABLES', - 'TEMPORARY', - 'TERMINATE', - 'TERMINATED', - 'TEXTSIZE', - 'THAN', - 'THEN', - 'TIME', - 'TIMESTAMP', - 'TIMESTAMPADD', - 'TIMESTAMPDIFF', - 'TIMEZONE_HOUR', - 'TIMEZONE_MINUTE', - 'TINYBLOB', - 'TINYINT', - 'TINYTEXT', - 'TO', - 'TOP', - 'TRAILING', - 'TRAN', - 'TRANSACTION', - 'TRANSLATE', - 'TRANSLATION', - 'TREAT', - 'TRIGGER', - 'TRIM', - 'TRUE', - 'TRUNCATE', - 'TSEQUAL', - 'UID', - 'UNDER', - 'UNDO', - 'UNION', - 'UNIQUE', - 'UNKNOWN', - 'UNLOCK', - 'UNNEST', - 'UNSIGNED', - 'UPDATE', - 'UPDATETEXT', - 'UPPER', - 'USAGE', - 'USE', - 'USER', - 'USER_RESOURCES', - 'USING', - 'UTC_DATE', - 'UTC_TIME', - 'UTC_TIMESTAMP', - 'VALIDATE', - 'VALUE', - 'VALUES', - 'VARBINARY', - 'VARCHAR', - 'VARCHAR2', - 'VARCHARACTER', - 'VARIABLE', - 'VARYING', - 'VERBOSE', - 'VIEW', - 'WAITFOR', - 'WHEN', - 'WHENEVER', - 'WHERE', - 'WHILE', - 'WITH', - 'WITHOUT', - 'WORK', - 'WRITE', - 'WRITETEXT', - 'XOR', - 'YEAR', - 'YEAR_MONTH', - 'ZEROFILL', - 'ZONE', - ); -} - -?> diff --git a/civicrm/packages/DB/Table/Manager/mysql.php b/civicrm/packages/DB/Table/Manager/mysql.php deleted file mode 100644 index 8aa36a1a374a04cd38bf96ae046b19d3a7fdb217..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Manager/mysql.php +++ /dev/null @@ -1,443 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Lukas Smith <smith@pooteeweet.org> - * Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Lukas Smith <smith@pooteeweet.org> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mysql.php,v 1.5 2007/12/13 16:52:15 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * require DB_Table class - */ -require_once 'DB/Table.php'; - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * @category Database - * @package DB_Table - * @author Lukas Smith <smith@pooteeweet.org> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ - -class DB_Table_Manager_mysql { - - /** - * - * The PEAR DB object that connects to the database. - * - * @access private - * - * @var object - * - */ - - var $_db = null; - - - /** - * list all indexes in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableIndexes($table) - { - $key_name = 'Key_name'; - $non_unique = 'Non_unique'; - - $query = "SHOW INDEX FROM $table"; - $indexes = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($indexes)) { - return $indexes; - } - - $result = array(); - foreach ($indexes as $index_data) { - if ($index_data[$non_unique]) { - $result[$index_data[$key_name]] = true; - } - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * list all constraints in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableConstraints($table) - { - $key_name = 'Key_name'; - $non_unique = 'Non_unique'; - - $query = "SHOW INDEX FROM $table"; - $indexes = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($indexes)) { - return $indexes; - } - - $result = array(); - foreach ($indexes as $index_data) { - if (!$index_data[$non_unique]) { - if ($index_data[$key_name] !== 'PRIMARY') { - $index = $index_data[$key_name]; - } else { - $index = 'PRIMARY'; - } - $result[$index] = true; - } - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * get the structure of an index into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableIndexDefinition($table, $index_name) - { - $result = $this->_db->query("SHOW INDEX FROM $table"); - if (PEAR::isError($result)) { - return $result; - } - - $definition = array(); - while (is_array($row = $result->fetchRow(DB_FETCHMODE_ASSOC))) { - $row = array_change_key_case($row, CASE_LOWER); - $key_name = $row['key_name']; - $key_name = strtolower($key_name); - - if ($index_name == $key_name) { - $column_name = $row['column_name']; - $column_name = strtolower($column_name); - $definition['fields'][$column_name] = array(); - if (array_key_exists('collation', $row)) { - $definition['fields'][$column_name]['sorting'] = ($row['collation'] == 'A' - ? 'ascending' : 'descending'); - } - } - } - - $result->free(); - - return $definition; - } - - - /** - * get the structure of a constraint into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableConstraintDefinition($table, $index_name) - { - $result = $this->_db->query("SHOW INDEX FROM $table"); - if (PEAR::isError($result)) { - return $result; - } - - $definition = array(); - while (is_array($row = $result->fetchRow(DB_FETCHMODE_ASSOC))) { - $row = array_change_key_case($row, CASE_LOWER); - $key_name = $row['key_name']; - $key_name = strtolower($key_name); - - if ($index_name == $key_name) { - if ($row['key_name'] == 'PRIMARY') { - $definition['primary'] = true; - } else { - $definition['unique'] = true; - } - $column_name = $row['column_name']; - $column_name = strtolower($column_name); - $definition['fields'][$column_name] = array(); - if (array_key_exists('collation', $row)) { - $definition['fields'][$column_name]['sorting'] = ($row['collation'] == 'A' - ? 'ascending' : 'descending'); - } - } - } - - $result->free(); - - return $definition; - } - - - /** - * drop existing index - * - * @param string $table name of table that should be used in method - * @param string $name name of the index to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropIndex($table, $name) - { - $table = $this->_db->quoteIdentifier($table); - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("DROP INDEX $name ON $table"); - } - - - /** - * drop existing constraint - * - * @param string $table name of table that should be used in method - * @param string $name name of the constraint to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropConstraint($table, $name) - { - $table = $this->_db->quoteIdentifier($table); - if (strtolower($name) == 'primary') { - $query = "ALTER TABLE $table DROP PRIMARY KEY"; - } else { - $name = $this->_db->quoteIdentifier($name); - $query = "ALTER TABLE $table DROP INDEX $name"; - } - return $this->_db->query($query); - } - - - /** - * alter an existing table - * - * @param string $name name of the table that is intended to be changed. - * @param array $changes associative array that contains the details of each type - * of change that is intended to be performed. The types of - * changes that are currently supported are defined as follows: - * - * name - * - * New name for the table. - * - * add - * - * Associative array with the names of fields to be added as - * indexes of the array. The value of each entry of the array - * should be set to another associative array with the properties - * of the fields to be added. The properties of the fields should - * be the same as defined by the Metabase parser. - * - * - * remove - * - * Associative array with the names of fields to be removed as indexes - * of the array. Currently the values assigned to each entry are ignored. - * An empty array should be used for future compatibility. - * - * rename - * - * Associative array with the names of fields to be renamed as indexes - * of the array. The value of each entry of the array should be set to - * another associative array with the entry named name with the new - * field name and the entry named Declaration that is expected to contain - * the portion of the field declaration already in DBMS specific SQL code - * as it is used in the CREATE TABLE statement. - * - * change - * - * Associative array with the names of the fields to be changed as indexes - * of the array. Keep in mind that if it is intended to change either the - * name of a field and any other properties, the change array entries - * should have the new names of the fields as array indexes. - * - * The value of each entry of the array should be set to another associative - * array with the properties of the fields to that are meant to be changed as - * array entries. These entries should be assigned to the new values of the - * respective properties. The properties of the fields should be the same - * as defined by the Metabase parser. - * - * Example - * array( - * 'name' => 'userlist', - * 'add' => array( - * 'quota' => array( - * 'type' => 'integer', - * 'unsigned' => 1 - * ) - * ), - * 'remove' => array( - * 'file_limit' => array(), - * 'time_limit' => array() - * ), - * 'change' => array( - * 'name' => array( - * 'length' => '20', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 20, - * ), - * ) - * ), - * 'rename' => array( - * 'sex' => array( - * 'name' => 'gender', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 1, - * 'default' => 'M', - * ), - * ) - * ) - * ) - * - * @param boolean $check (ignored in DB_Table) - * @access public - * - * @return mixed DB_OK on success, a PEAR error on failure - */ - function alterTable($name, $changes, $check) - { - foreach ($changes as $change_name => $change) { - switch ($change_name) { - case 'add': - case 'remove': - case 'change': - case 'rename': - case 'name': - break; - default: - return DB_Table::throwError(DB_TABLE_ERR_ALTER_TABLE_IMPOS); - } - } - - $query = ''; - if (array_key_exists('name', $changes)) { - $change_name = $this->_db->quoteIdentifier($changes['name']); - $query .= 'RENAME TO ' . $change_name; - } - - if (array_key_exists('add', $changes)) { - foreach ($changes['add'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - $query.= 'ADD ' . $field_name . ' ' . $field; - } - } - - if (array_key_exists('remove', $changes)) { - foreach ($changes['remove'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - $field_name = $this->_db->quoteIdentifier($field_name); - $query.= 'DROP ' . $field_name; - } - } - - $rename = array(); - if (array_key_exists('rename', $changes)) { - foreach ($changes['rename'] as $field_name => $field) { - $rename[$field['name']] = $field_name; - } - } - - if (array_key_exists('change', $changes)) { - foreach ($changes['change'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - if (isset($rename[$field_name])) { - $old_field_name = $rename[$field_name]; - unset($rename[$field_name]); - } else { - $old_field_name = $field_name; - } - $old_field_name = $this->_db->quoteIdentifier($old_field_name); - $query.= "CHANGE $old_field_name " . $field_name . ' ' . $field['definition']; - } - } - - if (!empty($rename)) { - foreach ($rename as $rename_name => $renamed_field) { - if ($query) { - $query.= ', '; - } - $field = $changes['rename'][$renamed_field]; - $renamed_field = $this->_db->quoteIdentifier($renamed_field); - $query.= 'CHANGE ' . $renamed_field . ' ' . $field['name'] . ' ' . $renamed_field['definition']; - } - } - - if (!$query) { - return DB_OK; - } - - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("ALTER TABLE $name $query"); - } - -} - -?> diff --git a/civicrm/packages/DB/Table/Manager/mysqli.php b/civicrm/packages/DB/Table/Manager/mysqli.php deleted file mode 100644 index 9c817e2212747f2070fb35b559a240c3c761534e..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Manager/mysqli.php +++ /dev/null @@ -1,440 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Lukas Smith <smith@pooteeweet.org> - * Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Lukas Smith <smith@pooteeweet.org> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mysqli.php,v 1.6 2007/12/13 16:52:15 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * require DB_Table class - */ -require_once 'DB/Table.php'; - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * @category Database - * @package DB_Table - * @author Lukas Smith <smith@pooteeweet.org> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Manager_mysqli { - - /** - * - * The PEAR DB object that connects to the database. - * - * @access private - * - * @var object - * - */ - - var $_db = null; - - - /** - * list all indexes in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableIndexes($table) - { - $key_name = 'Key_name'; - $non_unique = 'Non_unique'; - - $query = "SHOW INDEX FROM $table"; - $indexes = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($indexes)) { - return $indexes; - } - - $result = array(); - foreach ($indexes as $index_data) { - if ($index_data[$non_unique]) { - $result[$index_data[$key_name]] = true; - } - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * list all constraints in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableConstraints($table) - { - $key_name = 'Key_name'; - $non_unique = 'Non_unique'; - - $query = "SHOW INDEX FROM $table"; - $indexes = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($indexes)) { - return $indexes; - } - - $result = array(); - foreach ($indexes as $index_data) { - if (!$index_data[$non_unique]) { - if ($index_data[$key_name] !== 'PRIMARY') { - $index = $index_data[$key_name]; - } else { - $index = 'PRIMARY'; - } - $result[$index] = true; - } - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * get the structure of an index into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableIndexDefinition($table, $index_name) - { - $result = $this->_db->query("SHOW INDEX FROM $table"); - if (PEAR::isError($result)) { - return $result; - } - - $definition = array(); - while (is_array($row = $result->fetchRow(DB_FETCHMODE_ASSOC))) { - $row = array_change_key_case($row, CASE_LOWER); - $key_name = $row['key_name']; - $key_name = strtolower($key_name); - if ($index_name == $key_name) { - $column_name = $row['column_name']; - $column_name = strtolower($column_name); - $definition['fields'][$column_name] = array(); - if (array_key_exists('collation', $row)) { - $definition['fields'][$column_name]['sorting'] = ($row['collation'] == 'A' - ? 'ascending' : 'descending'); - } - } - } - - $result->free(); - - return $definition; - } - - - /** - * get the structure of a constraint into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableConstraintDefinition($table, $index_name) - { - $result = $this->_db->query("SHOW INDEX FROM $table"); - if (PEAR::isError($result)) { - return $result; - } - - $definition = array(); - while (is_array($row = $result->fetchRow(DB_FETCHMODE_ASSOC))) { - $row = array_change_key_case($row, CASE_LOWER); - $key_name = $row['key_name']; - $key_name = strtolower($key_name); - if ($index_name == $key_name) { - if ($row['key_name'] == 'PRIMARY') { - $definition['primary'] = true; - } else { - $definition['unique'] = true; - } - $column_name = $row['column_name']; - $column_name = strtolower($column_name); - $definition['fields'][$column_name] = array(); - if (array_key_exists('collation', $row)) { - $definition['fields'][$column_name]['sorting'] = ($row['collation'] == 'A' - ? 'ascending' : 'descending'); - } - } - } - - $result->free(); - - return $definition; - } - - - /** - * drop existing index - * - * @param string $table name of table that should be used in method - * @param string $name name of the index to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropIndex($table, $name) - { - $table = $this->_db->quoteIdentifier($table); - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("DROP INDEX $name ON $table"); - } - - - /** - * drop existing constraint - * - * @param string $table name of table that should be used in method - * @param string $name name of the constraint to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropConstraint($table, $name) - { - $table = $this->_db->quoteIdentifier($table); - if (strtolower($name) == 'primary') { - $query = "ALTER TABLE $table DROP PRIMARY KEY"; - } else { - $name = $this->_db->quoteIdentifier($name); - $query = "ALTER TABLE $table DROP INDEX $name"; - } - return $this->_db->query($query); - } - - - /** - * alter an existing table - * - * @param string $name name of the table that is intended to be changed. - * @param array $changes associative array that contains the details of each type - * of change that is intended to be performed. The types of - * changes that are currently supported are defined as follows: - * - * name - * - * New name for the table. - * - * add - * - * Associative array with the names of fields to be added as - * indexes of the array. The value of each entry of the array - * should be set to another associative array with the properties - * of the fields to be added. The properties of the fields should - * be the same as defined by the Metabase parser. - * - * - * remove - * - * Associative array with the names of fields to be removed as indexes - * of the array. Currently the values assigned to each entry are ignored. - * An empty array should be used for future compatibility. - * - * rename - * - * Associative array with the names of fields to be renamed as indexes - * of the array. The value of each entry of the array should be set to - * another associative array with the entry named name with the new - * field name and the entry named Declaration that is expected to contain - * the portion of the field declaration already in DBMS specific SQL code - * as it is used in the CREATE TABLE statement. - * - * change - * - * Associative array with the names of the fields to be changed as indexes - * of the array. Keep in mind that if it is intended to change either the - * name of a field and any other properties, the change array entries - * should have the new names of the fields as array indexes. - * - * The value of each entry of the array should be set to another associative - * array with the properties of the fields to that are meant to be changed as - * array entries. These entries should be assigned to the new values of the - * respective properties. The properties of the fields should be the same - * as defined by the Metabase parser. - * - * Example - * array( - * 'name' => 'userlist', - * 'add' => array( - * 'quota' => array( - * 'type' => 'integer', - * 'unsigned' => 1 - * ) - * ), - * 'remove' => array( - * 'file_limit' => array(), - * 'time_limit' => array() - * ), - * 'change' => array( - * 'name' => array( - * 'length' => '20', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 20, - * ), - * ) - * ), - * 'rename' => array( - * 'sex' => array( - * 'name' => 'gender', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 1, - * 'default' => 'M', - * ), - * ) - * ) - * ) - * - * @param boolean $check (ignored in DB_Table) - * @access public - * - * @return mixed DB_OK on success, a PEAR error on failure - */ - function alterTable($name, $changes, $check) - { - foreach ($changes as $change_name => $change) { - switch ($change_name) { - case 'add': - case 'remove': - case 'change': - case 'rename': - case 'name': - break; - default: - return DB_Table::throwError(DB_TABLE_ERR_ALTER_TABLE_IMPOS); - } - } - - $query = ''; - if (array_key_exists('name', $changes)) { - $change_name = $this->_db->quoteIdentifier($changes['name']); - $query .= 'RENAME TO ' . $change_name; - } - - if (array_key_exists('add', $changes)) { - foreach ($changes['add'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - $query.= 'ADD ' . $field_name . ' ' . $field; - } - } - - if (array_key_exists('remove', $changes)) { - foreach ($changes['remove'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - $field_name = $db->quoteIdentifier($field_name); - $query.= 'DROP ' . $field_name; - } - } - - $rename = array(); - if (array_key_exists('rename', $changes)) { - foreach ($changes['rename'] as $field_name => $field) { - $rename[$field['name']] = $field_name; - } - } - - if (array_key_exists('change', $changes)) { - foreach ($changes['change'] as $field_name => $field) { - if ($query) { - $query.= ', '; - } - if (isset($rename[$field_name])) { - $old_field_name = $rename[$field_name]; - unset($rename[$field_name]); - } else { - $old_field_name = $field_name; - } - $old_field_name = $this->_db->quoteIdentifier($old_field_name); - $query.= "CHANGE $old_field_name " . $field_name . ' ' . $field['definition']; - } - } - - if (!empty($rename)) { - foreach ($rename as $rename_name => $renamed_field) { - if ($query) { - $query.= ', '; - } - $field = $changes['rename'][$renamed_field]; - $renamed_field = $this->_db->quoteIdentifier($renamed_field); - $query.= 'CHANGE ' . $renamed_field . ' ' . $field['name'] . ' ' . $renamed_field['definition']; - } - } - - if (!$query) { - return DB_OK; - } - - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("ALTER TABLE $name $query"); - } - -} - -?> diff --git a/civicrm/packages/DB/Table/Manager/pgsql.php b/civicrm/packages/DB/Table/Manager/pgsql.php deleted file mode 100644 index 9aa213e300d3766c9bb1e3086c0b5613aacb2129..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Manager/pgsql.php +++ /dev/null @@ -1,440 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul Cooper <pgc@ucecom.com> - * Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul Cooper <pgc@ucecom.com> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: pgsql.php,v 1.5 2007/12/13 16:52:15 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * require DB_Table class - */ -require_once 'DB/Table.php'; - -/** - * Index, constraint and alter methods for DB_Table usage with - * PEAR::DB as backend. - * - * The code in this class was adopted from the MDB2 PEAR package. - * - * @category Database - * @package DB_Table - * @author Paul Cooper <pgc@ucecom.com> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ -class DB_Table_Manager_pgsql { - - /** - * - * The PEAR DB object that connects to the database. - * - * @access private - * - * @var object - * - */ - - var $_db = null; - - - /** - * list all indexes in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableIndexes($table) - { - $subquery = "SELECT indexrelid FROM pg_index, pg_class"; - $subquery.= " WHERE pg_class.relname='$table' AND pg_class.oid=pg_index.indrelid AND indisunique != 't' AND indisprimary != 't'"; - $query = "SELECT relname FROM pg_class WHERE oid IN ($subquery)"; - $indexes = $this->_db->getCol($query); - if (PEAR::isError($indexes)) { - return $indexes; - } - - $result = array(); - foreach ($indexes as $index) { - $result[$index] = true; - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * list all constraints in a table - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function listTableConstraints($table) - { - $subquery = "SELECT indexrelid FROM pg_index, pg_class"; - $subquery.= " WHERE pg_class.relname='$table' AND pg_class.oid=pg_index.indrelid AND (indisunique = 't' OR indisprimary = 't')"; - $query = "SELECT relname FROM pg_class WHERE oid IN ($subquery)"; - $constraints = $this->_db->getCol($query); - if (PEAR::isError($constraints)) { - return $constraints; - } - - $result = array(); - foreach ($constraints as $constraint) { - $result[$constraint] = true; - } - $result = array_change_key_case($result, CASE_LOWER); - - return array_keys($result); - } - - - /** - * get the structure of an index into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableIndexDefinition($table, $index_name) - { - $query = "SELECT relname, indkey FROM pg_index, pg_class - WHERE pg_class.relname = ".$this->_db->quoteSmart($index_name)." AND pg_class.oid = pg_index.indexrelid - AND indisunique != 't' AND indisprimary != 't'"; - $row = $this->_db->getRow($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($row)) { - return $row; - } - - $columns = $this->_listTableFields($table); - - $definition = array(); - - $index_column_numbers = explode(' ', $row['indkey']); - - foreach ($index_column_numbers as $number) { - $definition['fields'][$columns[($number - 1)]] = array('sorting' => 'ascending'); - } - return $definition; - } - - - /** - * get the structure of a constraint into an array - * - * @param string $table name of table that should be used in method - * @param string $index_name name of index that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access public - */ - function getTableConstraintDefinition($table, $index_name) - { - $query = "SELECT relname, indisunique, indisprimary, indkey FROM pg_index, pg_class - WHERE pg_class.relname = ".$this->_db->quoteSmart($index_name)." AND pg_class.oid = pg_index.indexrelid - AND (indisunique = 't' OR indisprimary = 't')"; - $row = $this->_db->getRow($query, null, DB_FETCHMODE_ASSOC); - if (PEAR::isError($row)) { - return $row; - } - - $columns = $this->_listTableFields($table); - - $definition = array(); - if ($row['indisprimary'] == 't') { - $definition['primary'] = true; - } elseif ($row['indisunique'] == 't') { - $definition['unique'] = true; - } - - $index_column_numbers = explode(' ', $row['indkey']); - - foreach ($index_column_numbers as $number) { - $definition['fields'][$columns[($number - 1)]] = array('sorting' => 'ascending'); - } - return $definition; - } - - /** - * list all fields in a tables in the current database - * - * @param string $table name of table that should be used in method - * @return mixed data array on success, a PEAR error on failure - * @access private - */ - function _listTableFields($table) - { - $table = $this->_db->quoteIdentifier($table); - $result2 = $this->_db->query("SELECT * FROM $table"); - if (PEAR::isError($result2)) { - return $result2; - } - $columns = array(); - $numcols = $result2->numCols(); - for ($column = 0; $column < $numcols; $column++) { - $column_name = @pg_field_name($result2->result, $column); - $columns[$column_name] = $column; - } - $result2->free(); - return array_flip($columns); - } - - - /** - * drop existing index - * - * @param string $table name of table that should be used in method - * @param string $name name of the index to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropIndex($table, $name) - { - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("DROP INDEX $name"); - } - - - /** - * drop existing constraint - * - * @param string $table name of table that should be used in method - * @param string $name name of the constraint to be dropped - * @return mixed DB_OK on success, a PEAR error on failure - * @access public - */ - function dropConstraint($table, $name) - { - $table = $this->_db->quoteIdentifier($table); - $name = $this->_db->quoteIdentifier($name); - return $this->_db->query("ALTER TABLE $table DROP CONSTRAINT $name"); - } - - - /** - * alter an existing table - * - * @param string $name name of the table that is intended to be changed. - * @param array $changes associative array that contains the details of each type - * of change that is intended to be performed. The types of - * changes that are currently supported are defined as follows: - * - * name - * - * New name for the table. - * - * add - * - * Associative array with the names of fields to be added as - * indexes of the array. The value of each entry of the array - * should be set to another associative array with the properties - * of the fields to be added. The properties of the fields should - * be the same as defined by the Metabase parser. - * - * - * remove - * - * Associative array with the names of fields to be removed as indexes - * of the array. Currently the values assigned to each entry are ignored. - * An empty array should be used for future compatibility. - * - * rename - * - * Associative array with the names of fields to be renamed as indexes - * of the array. The value of each entry of the array should be set to - * another associative array with the entry named name with the new - * field name and the entry named Declaration that is expected to contain - * the portion of the field declaration already in DBMS specific SQL code - * as it is used in the CREATE TABLE statement. - * - * change - * - * Associative array with the names of the fields to be changed as indexes - * of the array. Keep in mind that if it is intended to change either the - * name of a field and any other properties, the change array entries - * should have the new names of the fields as array indexes. - * - * The value of each entry of the array should be set to another associative - * array with the properties of the fields to that are meant to be changed as - * array entries. These entries should be assigned to the new values of the - * respective properties. The properties of the fields should be the same - * as defined by the Metabase parser. - * - * Example - * array( - * 'name' => 'userlist', - * 'add' => array( - * 'quota' => array( - * 'type' => 'integer', - * 'unsigned' => 1 - * ) - * ), - * 'remove' => array( - * 'file_limit' => array(), - * 'time_limit' => array() - * ), - * 'change' => array( - * 'name' => array( - * 'length' => '20', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 20, - * ), - * ) - * ), - * 'rename' => array( - * 'sex' => array( - * 'name' => 'gender', - * 'definition' => array( - * 'type' => 'text', - * 'length' => 1, - * 'default' => 'M', - * ), - * ) - * ) - * ) - * - * @param boolean $check (ignored in DB_Table) - * @access public - * - * @return mixed DB_OK on success, a PEAR error on failure - */ - function alterTable($name, $changes, $check) - { - foreach ($changes as $change_name => $change) { - switch ($change_name) { - case 'add': - case 'remove': - case 'change': - case 'name': - case 'rename': - break; - default: - return DB_Table::throwError(DB_TABLE_ERR_ALTER_TABLE_IMPOS); - } - } - - if (array_key_exists('add', $changes)) { - foreach ($changes['add'] as $field_name => $field) { - $query = 'ADD ' . $field_name . ' ' . $field; - $result = $this->_db->query("ALTER TABLE $name $query"); - if (PEAR::isError($result)) { - return $result; - } - } - } - - if (array_key_exists('remove', $changes)) { - foreach ($changes['remove'] as $field_name => $field) { - $field_name = $this->_db->quoteIdentifier($field_name); - $query = 'DROP ' . $field_name; - $result = $this->_db->query("ALTER TABLE $name $query"); - if (PEAR::isError($result)) { - return $result; - } - } - } - - if (array_key_exists('change', $changes)) { - foreach ($changes['change'] as $field_name => $field) { - $field_name = $this->_db->quoteIdentifier($field_name); - if (array_key_exists('type', $field)) { - $query = "ALTER $field_name TYPE " . $field['definition']; - $result = $this->_db->query("ALTER TABLE $name $query"); - if (PEAR::isError($result)) { - return $result; - } - } -/* default / notnull changes not (yet) supported in DB_Table - if (array_key_exists('default', $field)) { - $query = "ALTER $field_name SET DEFAULT ".$db->quote($field['definition']['default'], $field['definition']['type']); - $result = $db->exec("ALTER TABLE $name $query"); - if (PEAR::isError($result)) { - return $result; - } - } - if (array_key_exists('notnull', $field)) { - $query.= "ALTER $field_name ".($field['definition']['notnull'] ? "SET" : "DROP").' NOT NULL'; - $result = $db->exec("ALTER TABLE $name $query"); - if (PEAR::isError($result)) { - return $result; - } - } -*/ - } - } - - if (array_key_exists('rename', $changes)) { - foreach ($changes['rename'] as $field_name => $field) { - $field_name = $this->_db->quoteIdentifier($field_name); - $result = $this->_db->query("ALTER TABLE $name RENAME COLUMN $field_name TO ".$this->_db->quoteIdentifier($field['name'])); - if (PEAR::isError($result)) { - return $result; - } - } - } - - $name = $this->_db->quoteIdentifier($name); - if (array_key_exists('name', $changes)) { - $change_name = $this->_db->quoteIdentifier($changes['name']); - $result = $this->_db->query("ALTER TABLE $name RENAME TO ".$change_name); - if (PEAR::isError($result)) { - return $result; - } - } - - return DB_OK; - } - -} - -?> diff --git a/civicrm/packages/DB/Table/QuickForm.php b/civicrm/packages/DB/Table/QuickForm.php deleted file mode 100644 index 2d751dc790e67e233f47808f0b72ab8aa55f4a3b..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/QuickForm.php +++ /dev/null @@ -1,1173 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * DB_Table_QuickForm creates HTML_QuickForm objects from DB_Table properties. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: QuickForm.php,v 1.45 2008/03/28 20:00:38 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** -* Needed to build forms. -*/ -require_once 'HTML/QuickForm.php'; - -/** -* US-English messages for some QuickForm rules. Moritz Heidkamp -* suggested this approach for easier i18n. -*/ -if (! isset($GLOBALS['_DB_TABLE']['qf_rules'])) { - $GLOBALS['_DB_TABLE']['qf_rules'] = array( - 'required' => 'The item %s is required.', - 'numeric' => 'The item %s must be numbers only.', - 'maxlength' => 'The item %s can have no more than %d characters.' - ); -} - -/** -* If you want to use an extended HTML_QuickForm object, you can specify the -* class name in $_DB_TABLE['qf_class_name']. -* ATTENTION: You have to include the class file yourself, DB_Table does -* not take care of this! -*/ -if (!isset($GLOBALS['_DB_TABLE']['qf_class_name'])) { - $GLOBALS['_DB_TABLE']['qf_class_name'] = 'HTML_QuickForm'; -} - -/** - * DB_Table_QuickForm creates HTML_QuickForm objects from DB_Table properties. - * - * DB_Table_QuickForm provides HTML form creation facilities based on - * DB_Table column definitions transformed into HTML_QuickForm elements. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ - -class DB_Table_QuickForm { - - - /** - * - * Build a form based on DB_Table column definitions. - * - * @static - * - * @access public - * - * @param array $cols A sequential array of DB_Table column definitions - * from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @param array $args An associative array of optional arguments to - * pass to the QuickForm object. The keys are... - * - * 'formName' : String, name of the form; defaults to the name of the - * table. - * - * 'method' : String, form method; defaults to 'post'. - * - * 'action' : String, form action; defaults to - * $_SERVER['REQUEST_URI']. - * - * 'target' : String, form target target; defaults to '_self' - * - * 'attributes' : Associative array, extra attributes for <form> - * tag; the key is the attribute name and the value is attribute - * value. - * - * 'trackSubmit' : Boolean, whether to track if the form was - * submitted by adding a special hidden field - * - * @param string $clientValidate By default, validation will match - * the 'qf_client' value from the column definition. However, - * if you set $clientValidate to true or false, this will - * override the value from the column definition. - * - * @param array $formFilters An array with filter function names or - * callbacks that will be applied to all form elements. - * - * @return object HTML_QuickForm - * - * @see HTML_QuickForm - * - * @see DB_Table_QuickForm::createForm() - * - */ - - function &getForm($cols, $arrayName = null, $args = array(), - $clientValidate = null, $formFilters = null) - { - $form = DB_Table_QuickForm::createForm($args); - DB_Table_QuickForm::addElements($form, $cols, $arrayName); - DB_Table_QuickForm::addRules($form, $cols, $arrayName, $clientValidate); - DB_Table_QuickForm::addFilters($form, $cols, $arrayName, $formFilters); - - return $form; - } - - - /** - * - * Creates an empty form object. - * - * In case you want more control over your form, you can call this function - * to create it, then add whatever elements you want. - * - * @static - * - * @access public - * - * @author Ian Eure <ieure@php.net> - * - * @param array $args An associative array of optional arguments to - * pass to the QuickForm object. The keys are... - * - * 'formName' : String, name of the form; defaults to the name of the - * table. - * - * 'method' : String, form method; defaults to 'post'. - * - * 'action' : String, form action; defaults to - * $_SERVER['REQUEST_URI']. - * - * 'target' : String, form target target; defaults to '_self' - * - * 'attributes' : Associative array, extra attributes for <form> - * tag; the key is the attribute name and the value is attribute - * value. - * - * 'trackSubmit' : Boolean, whether to track if the form was - * submitted by adding a special hidden field - * - * @return object HTML_QuickForm - * - */ - - function &createForm($args = array()) - { - if (isset($args['formName'])) { - $formName = $args['formName']; - } elseif (isset($this)) { - $formName = $this->table; - } else { - $formName = '_db_table_form_'; - } - - $method = isset($args['method']) - ? $args['method'] : 'post'; - - $action = isset($args['action']) - ? $args['action'] : $_SERVER['REQUEST_URI']; - - $target = isset($args['target']) - ? $args['target'] : '_self'; - - $attributes = isset($args['attributes']) - ? $args['attributes'] : null; - - $trackSubmit = isset($args['trackSubmit']) - ? $args['trackSubmit'] : false; - - $form = new $GLOBALS['_DB_TABLE']['qf_class_name']($formName, $method, - $action, $target, $attributes, $trackSubmit); - - return $form; - } - - - /** - * - * Adds DB_Table columns to a pre-existing HTML_QuickForm object. - * - * @author Ian Eure <ieure@php.net> - * - * @static - * - * @access public - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $cols A sequential array of DB_Table column definitions - * from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @return void - * - */ - - function addElements(&$form, $cols, $arrayName = null) - { - $elements = DB_Table_QuickForm::getElements($cols, $arrayName); - $cols_keys = array_keys($cols); - foreach (array_keys($elements) as $k) { - - $element =& $elements[$k]; - - // are we adding a group? - if (is_array($element)) { - - // get the label for the group. have to do it this way - // because the group of elements does not itself have a - // label, there are only the labels for the individual - // elements. - $tmp = $cols[$cols_keys[$k]]; - if (! isset($tmp['qf_label'])) { - $label = $cols_keys[$k]; - if ($arrayName) { - $label = $arrayName . "[$label]"; - } - } else { - $label = $tmp['qf_label']; - } - - // set the element name - if ($arrayName) { - $name = $arrayName . '[' . $cols_keys[$k] . ']'; - } else { - $name = $cols_keys[$k]; - } - - // fix the column definition temporarily to get the separator - // for the group - $col = $cols[$cols_keys[$k]]; - DB_Table_QuickForm::fixColDef($col, $name); - - // done - $group =& $form->addGroup($element, $name, $label, - $col['qf_groupsep']); - - // set default value (if given) for radio elements - // (reason: QF "resets" the checked state, when adding a group) - if ($tmp['qf_type'] == 'radio' && isset($tmp['qf_setvalue'])) { - $form->setDefaults(array($name => $tmp['qf_setvalue'])); - } - - } elseif (is_object($element)) { - $form->addElement($element); - } - } - } - - /** - * - * Gets controls for a list of columns - * - * @author Ian Eure <ieure@php.net> - * - * @static - * - * @access public - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $cols A sequential array of DB_Table column definitions - * from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @return array Form elements - * - */ - - function &getElements($cols, $arrayName = null) - { - $elements = array(); - - foreach ($cols as $name => $col) { - - if ($arrayName) { - $elemname = $arrayName . "[$name]"; - } else { - $elemname = $name; - } - - DB_Table_QuickForm::fixColDef($col, $elemname); - - $elements[] = DB_Table_QuickForm::getElement($col, $elemname); - } - - return $elements; - } - - - /** - * - * Build a single QuickForm element based on a DB_Table column. - * - * @static - * - * @access public - * - * @param array $col A DB_Table column definition. - * - * @param string $elemname The name to use for the generated QuickForm - * element. - * - * @return object HTML_QuickForm_Element - * - */ - - function &getElement($col, $elemname) - { - if (isset($col['qf_setvalue'])) { - $setval = $col['qf_setvalue']; - } - - switch ($col['qf_type']) { - - case 'advcheckbox': - case 'checkbox': - - $element =& HTML_QuickForm::createElement( - 'advcheckbox', - $elemname, - $col['qf_label'], - isset($col['qf_label_append']) ? - $col['qf_label_append'] : null, - $col['qf_attrs'], - $col['qf_vals'] - ); - - // WARNING: advcheckbox elements in HTML_QuickForm v3.2.2 - // and earlier do not honor setChecked(); they will always - // be un-checked, unless a POST value sets them. Upgrade - // to QF 3.2.3 or later. - if (isset($setval) && $setval == true) { - $element->setChecked(true); - } else { - $element->setChecked(false); - } - - break; - - case 'autocomplete': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_vals'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'date': - - if (! isset($col['qf_opts']['format'])) { - $col['qf_opts']['format'] = 'Y-m-d'; - } - - $element =& HTML_QuickForm::createElement( - 'date', - $elemname, - $col['qf_label'], - $col['qf_opts'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'time': - - if (! isset($col['qf_opts']['format'])) { - $col['qf_opts']['format'] = 'H:i:s'; - } - - $element =& HTML_QuickForm::createElement( - 'date', - $elemname, - $col['qf_label'], - $col['qf_opts'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'timestamp': - - if (! isset($col['qf_opts']['format'])) { - $col['qf_opts']['format'] = 'Y-m-d H:i:s'; - } - - $element =& HTML_QuickForm::createElement( - 'date', - $elemname, - $col['qf_label'], - $col['qf_opts'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'hidden': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - null, - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - - case 'radio': - - $element = array(); - - foreach ((array) $col['qf_vals'] as $btnvalue => $btnlabel) { - - $element[] =& HTML_QuickForm::createElement( - $col['qf_type'], - null, // elemname not added because this is a group - null, - $btnlabel, - $btnvalue, - $col['qf_attrs'] - ); - - } - - break; - - case 'select': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_vals'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setSelected($setval); - } - - break; - - case 'password': - case 'text': - case 'textarea': - - if (! isset($col['qf_attrs']['maxlength']) && - isset($col['size'])) { - $col['qf_attrs']['maxlength'] = $col['size']; - } - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'static': - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - (isset($setval) ? $setval : '') - ); - break; - - case 'hierselect': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_attrs'], - $col['qf_groupsep'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'jscalendar': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_opts'], - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'header': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'static': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'link': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_href'], // link href - $setval, // link text - $col['qf_attrs'] - ); - - break; - - case 'reset': - case 'submit': - - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - null, - $col['qf_attrs'] - ); - - if (isset($setval)) { - $element->setValue($setval); - } - - break; - - case 'callback': // custom QF elements that need more than - // the standard parameters - // code from Arne Bippes <arne.bippes@brandao.de> - - if (is_callable(array($col['qf_callback'], 'createElement'))) { - // Does an object with name from $col['qf_callback'] and - // a method with name 'createElement' exist? - $ret_value = call_user_func_array( - array($col['qf_callback'], 'createElement'), - array(&$element, &$col, &$elemname, &$setval)); - } - elseif (is_callable($col['qf_callback'])) { - // Does a method with name from $col['qf_callback'] exist? - $ret_value = call_user_func_array( - $col['qf_callback'], - array(&$element, &$col, &$elemname, &$setval)); - } - if ($ret_value) { - break; - } - // fall into default block of switch statement: - // - if $col['qf_callback'] is ... - // - not a valid object - // - a valid object, but a method 'createElement' doesn't exist - // - not a valid method name - // - if an error occured in 'createElement' or in the method - - default: - - /** - * @author Moritz Heidkamp <moritz.heidkamp@invision-team.de> - */ - - // not a recognized type. is it registered with QuickForm? - if (HTML_QuickForm::isTypeRegistered($col['qf_type'])) { - - // yes, create it with some minimalist parameters - $element =& HTML_QuickForm::createElement( - $col['qf_type'], - $elemname, - $col['qf_label'], - $col['qf_attrs'] - ); - - // set its default value, if there is one - if (isset($setval)) { - $element->setValue($setval); - } - - } else { - // element type is not registered with QuickForm. - $element = null; - } - - break; - - } - - // done - return $element; - } - - - /** - * - * Build an array of form elements based from DB_Table columns. - * - * @static - * - * @access public - * - * @param array $cols A sequential array of DB_Table column - * definitions from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @return array An array of HTML_QuickForm_Element objects. - * - */ - - function &getGroup($cols, $arrayName = null) - { - $group = array(); - - foreach ($cols as $name => $col) { - - if ($arrayName) { - $elemname = $arrayName . "[$name]"; - } else { - $elemname = $name; - } - - DB_Table_QuickForm::fixColDef($col, $elemname); - - $group[] = DB_Table_QuickForm::getElement($col, $elemname); - } - - return $group; - } - - - /** - * - * Adds static form elements like 'header', 'static', 'submit' or 'reset' to - * a pre-existing HTML_QuickForm object. - * - * @static - * - * @access public - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $elements A sequential array of form element definitions. - * - * @return void - * - */ - - function addStaticElements(&$form, $elements) - { - foreach ($elements as $name => $elemDef) { - - DB_Table_QuickForm::fixColDef($elemDef, $name); - - $element = DB_Table_QuickForm::getElement($elemDef, $name); - - if (!is_object($element)) { - continue; - } - - if (isset($elemDef['before']) && !empty($elemDef['before'])) { - $form->insertElementBefore($element, $elemDef['before']); - } else { - $form->addElement($element); - } - } - } - - - /** - * - * Adds DB_Table filters to a pre-existing HTML_QuickForm object. - * - * @static - * - * @access public - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $cols A sequential array of DB_Table column definitions - * from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @param array $formFilters An array with filter function names or - * callbacks that will be applied to all form elements. - * - * @return void - * - */ - function addFilters(&$form, $cols, $arrayName = null, - $formFilters = null) - { - foreach ($cols as $name => $col) { - if ($arrayName) { - $elemname = $arrayName . "[$name]"; - } else { - $elemname = $name; - } - - DB_Table_QuickForm::fixColDef($col, $elemname); - - foreach (array_keys($col['qf_filters']) as $fk) { - $form->applyFilter($elemname, $col['qf_filters'][$fk]); - } - } - - if (is_array($formFilters)) { - foreach (array_keys($formFilters) as $fk) { - $form->applyFilter('__ALL__', $formFilters[$fk]); - } - } - } - - - /** - * - * Adds element rules to a pre-existing HTML_QuickForm object. - * - * @static - * - * @access public - * - * @param object &$form An HTML_QuickForm object. - * - * @param array $cols A sequential array of DB_Table column definitions - * from which to create form elements. - * - * @param string $arrayName By default, the form will use the names - * of the columns as the names of the form elements. If you pass - * $arrayName, the column names will become keys in an array named - * for this parameter. - * - * @param string $clientValidate By default, validation will match - * the 'qf_client' value from the column definition. However, - * if you set $clientValidate to true or false, this will - * override the value from the column definition. - * - * @return void - * - */ - - function addRules(&$form, $cols, $arrayName = null, - $clientValidate = null) - { - foreach ($cols as $name => $col) { - - if ($arrayName) { - $elemname = $arrayName . "[$name]"; - } else { - $elemname = $name; - } - - // make sure all necessary elements are in place - DB_Table_QuickForm::fixColDef($col, $elemname); - - // if clientValidate is specified, override the column - // definition. otherwise use the col def as it is. - if (! is_null($clientValidate)) { - // override - if ($clientValidate) { - $validate = 'client'; - } else { - $validate = 'server'; - } - } else { - // use as-is - if ($col['qf_client']) { - $validate = 'client'; - } else { - $validate = 'server'; - } - } - - // **always** override these rules to make them - // server-side only. suggested by Mark Wiesemann, - // debugged by Hero Wanders. - $onlyServer = array('filename', 'maxfilesize', 'mimetype', - 'uploadedfile'); - - // loop through the rules and add them - foreach ($col['qf_rules'] as $type => $opts) { - - // some rules (e.g. rules for file elements) can only be - // checked on the server; therefore, don't use client-side - // validation for these rules - $ruleValidate = $validate; - if (in_array($type, $onlyServer)) { - $ruleValidate = 'server'; - } - - switch ($type) { - - case 'alphanumeric': - case 'email': - case 'lettersonly': - case 'nonzero': - case 'nopunctuation': - case 'numeric': - case 'required': - case 'uploadedfile': - // $opts is the error message - $message = $opts; - $format = null; - break; - - case 'filename': - case 'maxfilesize': - case 'maxlength': - case 'mimetype': - case 'minlength': - case 'regex': - // $opts[0] is the message - // $opts[1] is the size, mimetype, or regex - $message = $opts[0]; - $format = $opts[1]; - break; - - default: - // by Alex Hoebart: this should allow any registered rule. - if (!in_array($type, $form->getRegisteredRules())) { - // rule is not registered ==> do not add a rule - continue; - } - if (is_array($opts)) { - // $opts[0] is the message - // $opts[1] is the size or regex - $message = $opts[0]; - $format = $opts[1]; - } else { - // $opts is the error message - $message = $opts; - $format = null; - } - break; - } - - switch ($col['qf_type']) { - - case 'date': - case 'time': - case 'timestamp': - // date "elements" are groups ==> use addGroupRule() - $form->addGroupRule($elemname, $message, $type, $format, - null, $ruleValidate); - break; - - default: // use addRule() for all other elements - $form->addRule($elemname, $message, $type, $format, - $ruleValidate); - break; - - } - - } - } - } - - - /** - * - * "Fixes" a DB_Table column definition for QuickForm. - * - * Makes it so that all the 'qf_*' key constants are populated - * with appropriate default values; also checks the 'require' - * value (if not set, defaults to false). - * - * @static - * - * @access public - * - * @param array &$col A DB_Table column definition. - * - * @param string $elemname The name for the target form element. - * - * @return void - * - */ - - function fixColDef(&$col, $elemname) - { - // always have a "require" value, false if not set - if (! isset($col['require'])) { - $col['require'] = false; - } - - // array of acceptable values, typically for - // 'select' or 'radio' - if (! isset($col['qf_vals'])) { - $col['qf_vals'] = null; - } - - // are we doing client validation in addition to - // server validation? by default, no. - if (! isset($col['qf_client'])) { - $col['qf_client'] = false; - } - - if (! isset($col['qf_filters'])) { - $col['qf_filters'] = array(); - } - - // the element type; if not set, - // assigns an element type based on the column type. - // by default, the type is 'text' (unless there are - // values, in which case the type is 'select') - if (! isset($col['qf_type'])) { - - // if $col['type'] is not set, set it to null - // ==> in the switch statement below, the - // default case will be used - if (!isset($col['type'])) { - $col['type'] = null; - } - - switch ($col['type']) { - - case 'boolean': - $col['qf_type'] = 'checkbox'; - $col['qf_vals'] = array(0,1); - break; - - case 'date': - $col['qf_type'] = 'date'; - break; - - case 'time': - $col['qf_type'] = 'time'; - break; - - case 'timestamp': - $col['qf_type'] = 'timestamp'; - break; - - case 'clob': - $col['qf_type'] = 'textarea'; - break; - - default: - if (isset($col['qf_vals'])) { - $col['qf_type'] = 'select'; - } else { - $col['qf_type'] = 'text'; - } - break; - - } - } - - // label for the element; defaults to the element - // name. adds both quickform label and table-header - // label if qf_label is not set. - if (! isset($col['qf_label'])) { - if (isset($col['label'])) { - $col['qf_label'] = $col['label']; - } - else { - $col['qf_label'] = $elemname . ':'; - } - } - - // special options for the element, typically used - // for 'date' element types - if (! isset($col['qf_opts'])) { - $col['qf_opts'] = array(); - } - - // array of additional HTML attributes for the element - if (! isset($col['qf_attrs'])) { - // setting to array() generates an error in HTML_Common - $col['qf_attrs'] = null; - } - - // array of QuickForm validation rules to apply - if (! isset($col['qf_rules'])) { - $col['qf_rules'] = array(); - } - - // if the element is hidden, then we're done - // (adding rules to hidden elements is mostly useless) - if ($col['qf_type'] == 'hidden') { - return; - } - - // code to keep BC for the separator for grouped QF elements - if (isset($col['qf_radiosep'])) { - $col['qf_groupsep'] = $col['qf_radiosep']; - } - - // add a separator for grouped elements - if (!isset($col['qf_groupsep'])) { - $col['qf_groupsep'] = '<br />'; - } - - // $col['qf_set_default_rules'] === false allows to turn off - // the automatic creation of QF rules for this "column" - // (suggested by Arne Bippes) - if (isset($col['qf_set_default_rules']) && - $col['qf_set_default_rules'] === false) { - return; - } - - // the element is required - // ==> set 'uploadedfile' (for file elements) or 'required' (for all - // other elements) rule if it is was not already set - $req_rule_name = ($col['qf_type'] == 'file') ? 'uploadedfile' : 'required'; - if (!isset($col['qf_rules'][$req_rule_name]) && $col['require']) { - - $col['qf_rules'][$req_rule_name] = sprintf( - $GLOBALS['_DB_TABLE']['qf_rules']['required'], - $col['qf_label'] - ); - - } - - // for file elements the 'numeric' and 'maxlength' rules must not be set - if ($col['qf_type'] == 'file') { - return; - } - - $numeric = array('smallint', 'integer', 'bigint', 'decimal', - 'single', 'double'); - - // the element is numeric - if (!isset($col['qf_rules']['numeric']) && isset($col['type']) && - in_array($col['type'], $numeric)) { - - $col['qf_rules']['numeric'] = sprintf( - $GLOBALS['_DB_TABLE']['qf_rules']['numeric'], - $col['qf_label'] - ); - - } - - // the element has a maximum length - if (!isset($col['qf_rules']['maxlength']) && isset($col['size'])) { - - $max = $col['size']; - - $msg = sprintf( - $GLOBALS['_DB_TABLE']['qf_rules']['maxlength'], - $col['qf_label'], - $max - ); - - $col['qf_rules']['maxlength'] = array($msg, $max); - } - } -} - -?> diff --git a/civicrm/packages/DB/Table/Valid.php b/civicrm/packages/DB/Table/Valid.php deleted file mode 100644 index 3f450b2385c003a06755b2d2b3e108bee77c197f..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/Valid.php +++ /dev/null @@ -1,454 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * DB_Table_Valid validates values against DB_Table column types. - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: Valid.php,v 1.10 2007/12/13 16:52:15 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** -* DB_Table class for constants and other globals. -*/ -require_once 'DB/Table.php'; - - -/** -* validation ranges for integers -*/ -if (! isset($GLOBALS['_DB_TABLE']['valid'])) { - $GLOBALS['_DB_TABLE']['valid'] = array( - 'smallint' => array(pow(-2, 15), pow(+2, 15) - 1), - 'integer' => array(pow(-2, 31), pow(+2, 31) - 1), - 'bigint' => array(pow(-2, 63), pow(+2, 63) - 1) - ); -} - - -/** - * DB_Table_Valid validates values against DB_Table column types. - * - * @category Database - * @package DB_Table - * @author Paul M. Jones <pmjones@php.net> - * @author David C. Morse <morse@php.net> - * @author Mark Wiesemann <wiesemann@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ - -class DB_Table_Valid { - - /** - * - * Check if a value validates against the 'boolean' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isBoolean($value) - { - if ($value === true || $value === false) { - return true; - } elseif (is_numeric($value) && ($value == 0 || $value == 1)) { - return true; - } else { - return false; - } - } - - - /** - * - * Check if a value validates against the 'char' and 'varchar' data type. - * - * We allow most anything here, only checking that the length is in range. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isChar($value, $colsize) - { - $is_scalar = (! is_array($value) && ! is_object($value)); - $in_range = (strlen($value) <= $colsize); - return $is_scalar && $in_range; - } - - - /** - * - * Check if a value validates against the 'smallint' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isSmallint($value) - { - return is_integer($value) && - ($value >= $GLOBALS['_DB_TABLE']['valid']['smallint'][0]) && - ($value <= $GLOBALS['_DB_TABLE']['valid']['smallint'][1]); - } - - - /** - * - * Check if a value validates against the 'integer' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isInteger($value) - { - return is_integer($value) && - ($value >= $GLOBALS['_DB_TABLE']['valid']['integer'][0]) && - ($value <= $GLOBALS['_DB_TABLE']['valid']['integer'][1]); - } - - - /** - * - * Check if a value validates against the 'bigint' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isBigint($value) - { - return is_integer($value) && - ($value >= $GLOBALS['_DB_TABLE']['valid']['bigint'][0]) && - ($value <= $GLOBALS['_DB_TABLE']['valid']['bigint'][1]); - } - - - /** - * - * Check if a value validates against the 'decimal' data type. - * - * For the column defined "DECIMAL(5,2)" standard SQL requires that - * the column be able to store any value with 5 digits and 2 - * decimals. In this case, therefore, the range of values that can be - * stored in the column is from -999.99 to 999.99. DB_Table attempts - * to enforce this behavior regardless of the RDBMS backend behavior. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @param string $colsize The 'size' to use for validation (to make - * sure of min/max and decimal places). - * - * @param string $colscope The 'scope' to use for validation (to make - * sure of min/max and decimal places). - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isDecimal($value, $colsize, $colscope) - { - if (! is_numeric($value)) { - return false; - } - - // maximum number of digits allowed to the left - // and right of the decimal point. - $right_max = $colscope; - $left_max = $colsize - $colscope; - - // ignore negative signs in all validation - $value = str_replace('-', '', $value); - - // find the decimal point, then get the left - // and right portions. - $pos = strpos($value, '.'); - if ($pos === false) { - $left = $value; - $right = ''; - } else { - $left = substr($value, 0, $pos); - $right = substr($value, $pos+1); - } - - // how long are the left and right portions? - $left_len = strlen($left); - $right_len = strlen($right); - - // do the portions exceed their maxes? - if ($left_len > $left_max || - $right_len > $right_max) { - // one or the other exceeds the max lengths - return false; - } else { - // both are within parameters - return true; - } - } - - - /** - * - * Check if a value validates against the 'single' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isSingle($value) - { - return is_float($value); - } - - - /** - * - * Check if a value validates against the 'double' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isDouble($value) - { - return is_float($value); - } - - - /** - * - * Check if a value validates against the 'time' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isTime($value) - { - // hh:ii:ss - // 01234567 - $h = substr($value, 0, 2); - $s1 = substr($value, 2, 1); - $i = substr($value, 3, 2); - $s2 = substr($value, 5, 1); - $s = substr($value, 6, 2); - - // time check - if (strlen($value) != 8 || - ! is_numeric($h) || $h < 0 || $h > 23 || - $s1 != ':' || - ! is_numeric($i) || $i < 0 || $i > 59 || - $s2 != ':' || - ! is_numeric($s) || $s < 0 || $s > 59) { - - return false; - - } else { - - return true; - - } - } - - - /** - * - * Check if a value validates against the 'date' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isDate($value) - { - // yyyy-mm-dd - // 0123456789 - $y = substr($value, 0, 4); - $s1 = substr($value, 4, 1); - $m = substr($value, 5, 2); - $s2 = substr($value, 7, 1); - $d = substr($value, 8, 2); - - // date check - if (strlen($value) != 10 || $s1 != '-' || $s2 != '-' || - ! checkdate($m, $d, $y)) { - - return false; - - } else { - - return true; - - } - } - - - /** - * - * Check if a value validates against the 'timestamp' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isTimestamp($value) - { - // yyyy-mm-dd hh:ii:ss - // 0123456789012345678 - $date = substr($value, 0, 10); - $sep = substr($value, 10, 1); - $time = substr($value, 11, 8); - - if (strlen($value) != 19 || $sep != ' ' || - ! DB_Table_Valid::isDate($date) || - ! DB_Table_Valid::isTime($time)) { - - return false; - - } else { - - return true; - - } - } - - - /** - * - * Check if a value validates against the 'clob' data type. - * - * @static - * - * @access public - * - * @param mixed $value The value to validate. - * - * @return boolean True if the value is valid for the data type, false - * if not. - * - */ - - function isClob($value) - { - return is_string($value); - } -} - -?> diff --git a/civicrm/packages/DB/Table/XML.php b/civicrm/packages/DB/Table/XML.php deleted file mode 100644 index eee87137a08173c0ecf20dae5b569d7e22c2423d..0000000000000000000000000000000000000000 --- a/civicrm/packages/DB/Table/XML.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * A few simple static methods for writing XML - * - * PHP versions 4 and 5 - * - * LICENSE: - * - * Copyright (c) 1997-2007, Paul M. Jones <pmjones@php.net> - * David C. Morse <morse@php.net> - * Mark Wiesemann <wiesemann@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * The names of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Database - * @package DB_Table - * @author David C. Morse <morse@php.net> - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: XML.php,v 1.2 2007/12/13 16:52:15 wiesemann Exp $ - * @link http://pear.php.net/package/DB_Table - */ - -/** - * Class DB_Table_XML contains a few simple static methods for writing XML - * - * @category Database - * @package DB_Table - * @author David C. Morse <morse@php.net> - * @version Release: 1.5.6 - * @link http://pear.php.net/package/DB_Table - */ - -class DB_Table_XML -{ - - /** - * Returns XML closing tag <tag>, increases $indent by 3 spaces - * - * @static - * @param string $tag XML element tag name - * @param string $indent current indentation, string of spaces - * @return string XML opening tag - * @access public - */ - function openTag($tag, &$indent) - { - $old_indent = $indent; - $indent = $indent . ' '; - return $old_indent . "<$tag>"; - } - - - /** - * Returns XML closing tag </tag>, decreases $indent by 3 spaces - * - * @static - * @param string $tag XML element tag name - * @param string $indent current indentation, string of spaces - * @return string XML closing tag - * @access public - */ - function closeTag($tag, &$indent) - { - $indent = substr($indent, 0, -3); - return $indent . "</$tag>"; - } - - - /** - * Returns string single line XML element <tag>text</tag> - * - * @static - * @param string $tag XML element tag name - * @param string $text element contents - * @param string $indent current indentation, string of spaces - * @return string single-line XML element - * @access public - */ - function lineElement($tag, $text, $indent) - { - return $indent . "<$tag>$text</$tag>"; - } - -} -?> diff --git a/civicrm/packages/DB/common.php b/civicrm/packages/DB/common.php index e7f81588be9231de17dfab4f57f59452ad1f313e..92a8143b2098e0154d7115fcdb578b9dedc516cf 100644 --- a/civicrm/packages/DB/common.php +++ b/civicrm/packages/DB/common.php @@ -5,7 +5,7 @@ /** * Contains the DB_common base class * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: common.php,v 1.143 2007/09/21 13:40:41 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -42,7 +42,7 @@ require_once 'PEAR.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_common extends PEAR @@ -204,7 +204,7 @@ class DB_common extends PEAR function __wakeup() { if ($this->was_connected) { - $this->connect($this->dsn, $this->options); + $this->connect($this->dsn, $this->options['persistent']); } } @@ -261,7 +261,7 @@ class DB_common extends PEAR */ function quoteString($string) { - $string = $this->quote($string); + $string = $this->quoteSmart($string); if ($string{0} == "'") { return substr($string, 1, -1); } @@ -284,8 +284,7 @@ class DB_common extends PEAR */ function quote($string = null) { - return ($string === null) ? 'NULL' - : "'" . str_replace("'", "''", $string) . "'"; + return $this->quoteSmart($string); } // }}} @@ -1148,6 +1147,7 @@ class DB_common extends PEAR */ function modifyQuery($query) { + // CRM-20445 Add query dispatcher to allow query modification. // This section of code may run hundreds or thousands of times in a given request. // Consequently, it is micro-optimized to use single lookup in typical case. if (!isset(Civi::$statics['db_common_dispatcher'])) { @@ -1161,6 +1161,7 @@ class DB_common extends PEAR $e = new \Civi\Core\Event\QueryEvent($query); Civi::$statics['db_common_dispatcher']->dispatch('civi.db.query', $e); + // CRM-20445 ends. return $e->query; } @@ -1216,7 +1217,8 @@ class DB_common extends PEAR */ function &query($query, $params = array()) { - if (sizeof($params) > 0) { + $params = (array)$params; + if (count($params)) { $sth = $this->prepare($query); if (DB::isError($sth)) { return $sth; @@ -1262,7 +1264,7 @@ class DB_common extends PEAR return $query; } $result = $this->query($query, $params); - if (is_a($result, 'DB_result')) { + if (is_object($result) && is_a($result, 'DB_result')) { $result->setOption('limit_from', $from); $result->setOption('limit_count', $count); } @@ -1355,8 +1357,8 @@ class DB_common extends PEAR } } // modifyLimitQuery() would be nice here, but it causes BC issues - $params = (array) $params; - if (count($params) > 0) { + $params = (array)$params; + if (count($params)) { $sth = $this->prepare($query); if (DB::isError($sth)) { return $sth; @@ -1664,8 +1666,8 @@ class DB_common extends PEAR } } - $params = (array) $params; - if (count($params) > 0) { + $params = (array)$params; + if (count($params)) { $sth = $this->prepare($query); if (DB::isError($sth)) { @@ -1883,21 +1885,24 @@ class DB_common extends PEAR * query and native error code. * @param mixed native error code, integer or string depending the * backend + * @param mixed dummy parameter for E_STRICT compatibility with + * PEAR::raiseError + * @param mixed dummy parameter for E_STRICT compatibility with + * PEAR::raiseError * * @return object the PEAR_Error object * * @see PEAR_Error */ function raiseError($code = DB_ERROR, $mode = null, $options = null, - $userinfo = null, $nativecode = null, - $argToMatchParentSignature1 = null, - $argToMatchParentSignature2 = null) + $userinfo = null, $nativecode = null, $dummy1 = null, + $dummy2 = null) { // The error is yet a DB error object if (is_object($code)) { // because we the static PEAR::raiseError, our global // handler should be used if it is set - if ($mode === null && isset($this) && !empty($this->_default_error_mode)) { + if ($mode === null && !empty($this->_default_error_mode)) { $mode = $this->_default_error_mode; $options = $this->_default_error_options; } @@ -1906,7 +1911,7 @@ class DB_common extends PEAR return $tmp; } - if ($userinfo === null && isset($this)) { + if ($userinfo === null) { $userinfo = $this->last_query; } @@ -2261,10 +2266,21 @@ class DB_common extends PEAR } } - function lastInsertId() { + // }}} + // {{{ lastInsertId() + + /** + * Get the most recently inserted Id + * + * @throws RuntimeException + */ + function lastInsertId() + { throw new \RuntimeException("Not implemented: " . get_class($this) . '::lastInsertId'); } + // }}} + } /* diff --git a/civicrm/packages/DB/dbase.php b/civicrm/packages/DB/dbase.php index 3a0917455cb126d26a173444d0b2630b971ee6de..8324c86b7a07151214df3b28a00e14e078ca43b6 100644 --- a/civicrm/packages/DB/dbase.php +++ b/civicrm/packages/DB/dbase.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's dbase extension * for interacting with dBase databases * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: dbase.php,v 1.45 2007/09/21 13:40:41 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -41,7 +41,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_dbase extends DB_common @@ -140,7 +140,7 @@ class DB_dbase extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -402,7 +402,7 @@ class DB_dbase extends DB_common function quoteBoolean($boolean) { return $boolean ? 'T' : 'F'; } - + // }}} // {{{ tableInfo() diff --git a/civicrm/packages/DB/mssql.php b/civicrm/packages/DB/mssql.php index c97ca93eba74a5d71bcb7a9b14f57a77990627a5..31798a5f43553da0be20155902c10c0ed678ecf9 100644 --- a/civicrm/packages/DB/mssql.php +++ b/civicrm/packages/DB/mssql.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's mssql extension * for interacting with Microsoft SQL Server databases * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: mssql.php,v 1.92 2007/09/21 13:40:41 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -49,7 +49,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_mssql extends DB_common @@ -179,7 +179,7 @@ class DB_mssql extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -623,6 +623,27 @@ class DB_mssql extends DB_common return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); } + // }}} + // {{{ escapeSimple() + + /** + * Escapes a string in a manner suitable for SQL Server. + * + * @param string $str the string to be escaped + * @return string the escaped string + * + * @see DB_common::quoteSmart() + * @since Method available since Release 1.6.0 + */ + function escapeSimple($str) + { + return str_replace( + array("'", "\\\r\n", "\\\n"), + array("''", "\\\\\r\n\r\n", "\\\\\n\n"), + $str + ); + } + // }}} // {{{ quoteIdentifier() diff --git a/civicrm/packages/DB/mysql.php b/civicrm/packages/DB/mysql.php index 9ab82dbba21270d899edbb50d536e145ac6326f8..0ff72a48541a4ccd34d45d1f8180605fba3acbb4 100644 --- a/civicrm/packages/DB/mysql.php +++ b/civicrm/packages/DB/mysql.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's mysql extension * for interacting with MySQL databases * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: mysql.php,v 1.126 2007/09/21 13:32:52 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -41,7 +41,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_mysql extends DB_common @@ -165,7 +165,7 @@ class DB_mysql extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -775,17 +775,6 @@ class DB_mysql extends DB_common return '`' . str_replace('`', '``', $str) . '`'; } - // }}} - // {{{ quote() - - /** - * @deprecated Deprecated in release 1.6.0 - */ - function quote($str = null) - { - return $this->quoteSmart($str); - } - // }}} // {{{ escapeSimple() @@ -801,7 +790,11 @@ class DB_mysql extends DB_common */ function escapeSimple($str) { - return @mysql_real_escape_string($str, $this->connection); + if (function_exists('mysql_real_escape_string')) { + return @mysql_real_escape_string($str, $this->connection); + } else { + return @mysql_escape_string($str); + } } // }}} @@ -1031,11 +1024,15 @@ class DB_mysql extends DB_common } // }}} + // {{{ lastInsertId() - function lastInsertId() { + function lastInsertId() + { return mysql_insert_id($this->connection); } + // }}} + } /* diff --git a/civicrm/packages/DB/mysqli.php b/civicrm/packages/DB/mysqli.php index 0b383eeb1223c69c2009c0f2ee3bb001b7126bb5..0d8f4142181470e6342479311272780057b4f3e5 100644 --- a/civicrm/packages/DB/mysqli.php +++ b/civicrm/packages/DB/mysqli.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's mysqli extension * for interacting with MySQL databases * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -19,7 +19,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: mysqli.php,v 1.82 2007/09/21 13:40:41 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -43,7 +43,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB * @since Class functional since Release 1.6.3 */ @@ -227,7 +227,7 @@ class DB_mysqli extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -256,7 +256,7 @@ class DB_mysqli extends DB_common * Example of how to connect using SSL: * <code> * require_once 'DB.php'; - * + * * $dsn = array( * 'phptype' => 'mysqli', * 'username' => 'someuser', @@ -269,11 +269,11 @@ class DB_mysqli extends DB_common * 'capath' => '/path/to/ca/dir', * 'cipher' => 'AES', * ); - * + * * $options = array( * 'ssl' => true, * ); - * + * * $db = DB::connect($dsn, $options); * if (PEAR::isError($db)) { * die($db->getMessage()); @@ -500,7 +500,7 @@ class DB_mysqli extends DB_common */ function freeResult($result) { - if (!$result instanceof mysqli_result) { + if (! $result instanceof mysqli_result) { return false; } mysqli_free_result($result); @@ -1000,7 +1000,7 @@ class DB_mysqli extends DB_common $got_string = false; } - if (!is_a($id, 'mysqli_result')) { + if (!is_object($id) || !is_a($id, 'mysqli_result')) { return $this->mysqliRaiseError(DB_ERROR_NEED_MORE_DATA); } @@ -1038,6 +1038,10 @@ class DB_mysqli extends DB_common ? $this->mysqli_types[$tmp->type] : 'unknown', // http://bugs.php.net/?id=36579 + // Doc Bug #36579: mysqli_fetch_field length handling + // https://bugs.php.net/bug.php?id=62426 + // Bug #62426: mysqli_fetch_field_direct returns incorrect + // length on UTF8 fields 'len' => $tmp->length, 'flags' => $flags, ); @@ -1086,11 +1090,15 @@ class DB_mysqli extends DB_common } // }}} + // {{{ lastInsertId() - function lastInsertId() { + function lastInsertId() + { return mysqli_insert_id($this->connection); } + // }}} + } /* diff --git a/civicrm/packages/DB/odbc.php b/civicrm/packages/DB/odbc.php index 04b3871f111c835f11f7b28e7f2c869b6a844d7c..f410a127159217740d97933a90481319410c17e6 100644 --- a/civicrm/packages/DB/odbc.php +++ b/civicrm/packages/DB/odbc.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's odbc extension * for interacting with databases via ODBC connections * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -20,7 +20,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: odbc.php,v 1.81 2007/07/06 05:19:21 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -44,7 +44,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_odbc extends DB_common @@ -153,7 +153,7 @@ class DB_odbc extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -480,18 +480,6 @@ class DB_odbc extends DB_common } } - // }}} - // {{{ quote() - - /** - * @deprecated Deprecated in release 1.6.0 - * @internal - */ - function quote($str) - { - return $this->quoteSmart($str); - } - // }}} // {{{ nextId() diff --git a/civicrm/packages/DB/pgsql.php b/civicrm/packages/DB/pgsql.php index 25db7440c47cd7bd2172e9937e1ee6386ce8f70c..5d045dfdab32ff0c7f57eb66d3b987a536b12daa 100644 --- a/civicrm/packages/DB/pgsql.php +++ b/civicrm/packages/DB/pgsql.php @@ -6,7 +6,7 @@ * The PEAR DB driver for PHP's pgsql extension * for interacting with PostgreSQL databases * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -21,7 +21,7 @@ * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: pgsql.php,v 1.138 2007/09/21 13:40:41 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -43,7 +43,7 @@ require_once 'DB/common.php'; * @author Daniel Convissor <danielc@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_pgsql extends DB_common @@ -148,7 +148,7 @@ class DB_pgsql extends DB_common // {{{ constructor /** - * This constructor calls <kbd>$this->DB_common()</kbd> + * This constructor calls <kbd>parent::__construct()</kbd> * * @return void */ @@ -187,12 +187,12 @@ class DB_pgsql extends DB_common * Example of connecting to a new link via a socket: * <code> * require_once 'DB.php'; - * + * * $dsn = 'pgsql://user:pass@unix(/tmp)/dbname?new_link=true'; * $options = array( * 'portability' => DB_PORTABILITY_ALL, * ); - * + * * $db = DB::connect($dsn, $options); * if (PEAR::isError($db)) { * die($db->getMessage()); @@ -325,14 +325,14 @@ class DB_pgsql extends DB_common $query = $this->modifyQuery($query); if (!$this->autocommit && $ismanip) { if ($this->transaction_opcount == 0) { - $result = @pg_exec($this->connection, 'begin;'); + $result = @pg_query($this->connection, 'begin;'); if (!$result) { return $this->pgsqlRaiseError(); } } $this->transaction_opcount++; } - $result = @pg_exec($this->connection, $query); + $result = @pg_query($this->connection, $query); if (!$result) { return $this->pgsqlRaiseError(); } @@ -348,12 +348,12 @@ class DB_pgsql extends DB_common * CREATE, DECLARE, DELETE, DROP TABLE, EXPLAIN, FETCH, * GRANT, INSERT, LISTEN, LOAD, LOCK, MOVE, NOTIFY, RESET, * REVOKE, ROLLBACK, SELECT, SELECT INTO, SET, SHOW, - * UNLISTEN, UPDATE, VACUUM + * UNLISTEN, UPDATE, VACUUM, WITH */ if ($ismanip) { $this->affected = @pg_affected_rows($result); return DB_OK; - } elseif (preg_match('/^\s*\(*\s*(SELECT|EXPLAIN|FETCH|SHOW)\s/si', + } elseif (preg_match('/^\s*\(*\s*(SELECT|EXPLAIN|FETCH|SHOW|WITH)\s/si', $query)) { $this->row[(int)$result] = 0; // reset the row counter. @@ -465,18 +465,6 @@ class DB_pgsql extends DB_common return false; } - // }}} - // {{{ quote() - - /** - * @deprecated Deprecated in release 1.6.0 - * @internal - */ - function quote($str) - { - return $this->quoteSmart($str); - } - // }}} // {{{ quoteBoolean() @@ -492,7 +480,7 @@ class DB_pgsql extends DB_common function quoteBoolean($boolean) { return $boolean ? 'TRUE' : 'FALSE'; } - + // }}} // {{{ escapeSimple() @@ -610,7 +598,7 @@ class DB_pgsql extends DB_common if ($this->transaction_opcount > 0) { // (disabled) hack to shut up error messages from libpq.a //@fclose(@fopen("php://stderr", "w")); - $result = @pg_exec($this->connection, 'end;'); + $result = @pg_query($this->connection, 'end;'); $this->transaction_opcount = 0; if (!$result) { return $this->pgsqlRaiseError(); @@ -630,7 +618,7 @@ class DB_pgsql extends DB_common function rollback() { if ($this->transaction_opcount > 0) { - $result = @pg_exec($this->connection, 'abort;'); + $result = @pg_query($this->connection, 'abort;'); $this->transaction_opcount = 0; if (!$result) { return $this->pgsqlRaiseError(); @@ -796,7 +784,7 @@ class DB_pgsql extends DB_common /** * Gets the DBMS' native error message produced by the last query * - * {@internal Error messages are used instead of error codes + * {@internal Error messages are used instead of error codes * in order to support older versions of PostgreSQL.}} * * @return string the DBMS' error message @@ -899,7 +887,7 @@ class DB_pgsql extends DB_common * Probably received a table name. * Create a result resource identifier. */ - $id = @pg_exec($this->connection, "SELECT * FROM $result LIMIT 0"); + $id = @pg_query($this->connection, "SELECT * FROM $result LIMIT 0"); $got_string = true; } elseif (isset($result->result)) { /* @@ -992,7 +980,7 @@ class DB_pgsql extends DB_common $tableWhere = "tab.relname = '$table_name'"; } - $result = @pg_exec($this->connection, "SELECT f.attnotnull, f.atthasdef + $result = @pg_query($this->connection, "SELECT f.attnotnull, f.atthasdef FROM $from WHERE tab.relname = typ.typname AND typ.typrelid = f.attrelid @@ -1003,7 +991,7 @@ class DB_pgsql extends DB_common $flags = ($row[0] == 't') ? 'not_null ' : ''; if ($row[1] == 't') { - $result = @pg_exec($this->connection, "SELECT a.adsrc + $result = @pg_query($this->connection, "SELECT a.adsrc FROM $from, pg_attrdef a WHERE tab.relname = typ.typname AND typ.typrelid = f.attrelid AND f.attrelid = a.adrelid AND f.attname = '$field_name' @@ -1015,7 +1003,7 @@ class DB_pgsql extends DB_common } else { $flags = ''; } - $result = @pg_exec($this->connection, "SELECT i.indisunique, i.indisprimary, i.indkey + $result = @pg_query($this->connection, "SELECT i.indisunique, i.indisprimary, i.indkey FROM $from, pg_index i WHERE tab.relname = typ.typname AND typ.typrelid = f.attrelid @@ -1103,6 +1091,25 @@ class DB_pgsql extends DB_common } // }}} + // {{{ _checkManip() + + /** + * Checks if the given query is a manipulation query. This also takes into + * account the _next_query_manip flag and sets the _last_query_manip flag + * (and resets _next_query_manip) according to the result. + * + * @param string The query to check. + * + * @return boolean true if the query is a manipulation query, false + * otherwise + * + * @access protected + */ + function _checkManip($query) + { + return (preg_match('/^\s*(SAVEPOINT|RELEASE)\s+/i', $query) + || parent::_checkManip($query)); + } } diff --git a/civicrm/packages/DB/storage.php b/civicrm/packages/DB/storage.php index 01a0386749154557fbf6f94726db367e6303c5f7..081100486be1bb249dbbfb324ef6761b37ad7d45 100644 --- a/civicrm/packages/DB/storage.php +++ b/civicrm/packages/DB/storage.php @@ -5,7 +5,7 @@ /** * Provides an object interface to a table row * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: @@ -18,7 +18,7 @@ * @author Stig Bakken <stig@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version CVS: $Id: storage.php,v 1.24 2007/08/12 05:27:25 aharvey Exp $ + * @version CVS: $Id$ * @link http://pear.php.net/package/DB */ @@ -38,7 +38,7 @@ require_once 'DB.php'; * @author Stig Bakken <stig@php.net> * @copyright 1997-2007 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 - * @version Release: 1.7.13 + * @version Release: 1.9.3 * @link http://pear.php.net/package/DB */ class DB_storage extends PEAR diff --git a/civicrm/packages/PHPgettext/Makefile b/civicrm/packages/PHPgettext/Makefile index a6cce123022e2a20af1caa39ee7c8cffa15a79fd..b56394ba787ce18d3b6f7830db73f3d86a88048e 100644 --- a/civicrm/packages/PHPgettext/Makefile +++ b/civicrm/packages/PHPgettext/Makefile @@ -1,5 +1,5 @@ PACKAGE = php-gettext-$(VERSION) -VERSION = 1.0.10 +VERSION = 1.0.12 DIST_FILES = \ gettext.php \ @@ -34,5 +34,8 @@ dist: check rm -rf $(PACKAGE); \ fi; +sign: dist + gpg --armor --sign --detach-sig $(PACKAGE).tar.gz + clean: - rm -f $(PACKAGE).tar.gz + rm -f $(PACKAGE).tar.gz $(PACKAGE).tar.gz.asc diff --git a/civicrm/packages/PHPgettext/gettext.inc b/civicrm/packages/PHPgettext/gettext.inc index 399a0f24b42207f2904c1751eaff1a13fea48096..c9f7dc01681a26f2a53d9219edfaf3d6eb807b0a 100644 --- a/civicrm/packages/PHPgettext/gettext.inc +++ b/civicrm/packages/PHPgettext/gettext.inc @@ -32,7 +32,6 @@ LC_MESSAGES 5 LC_ALL 6 */ - // LC_MESSAGES is not available if php-gettext is not loaded // while the other constants are already available from session extension. if (!defined('LC_MESSAGES')) { @@ -175,14 +174,13 @@ function _get_codeset($domain=null) { * Convert the given string to the encoding set by bind_textdomain_codeset. */ function _encode($text) { + $target_encoding = _get_codeset(); + if (function_exists("mb_detect_encoding")) { $source_encoding = mb_detect_encoding($text); - $target_encoding = _get_codeset(); - if ($source_encoding != $target_encoding) { - return mb_convert_encoding($text, $target_encoding, $source_encoding); - } - else { - return $text; - } + if ($source_encoding != $target_encoding) + $text = mb_convert_encoding($text, $target_encoding, $source_encoding); + } + return $text; } @@ -229,7 +227,9 @@ function _setlocale($category, $locale) { } // Allow locale to be changed on the go for one translation domain. global $text_domains, $default_domain; - unset($text_domains[$default_domain]->l10n); + if (array_key_exists($default_domain, $text_domains)) { + unset($text_domains[$default_domain]->l10n); + } return $CURRENTLOCALE; } } @@ -288,9 +288,9 @@ function __($msgid) { /** * Plural version of gettext. */ -function _ngettext($single, $plural, $number) { +function _ngettext($singular, $plural, $number) { $l10n = _get_reader(); - return _encode($l10n->ngettext($single, $plural, $number)); + return _encode($l10n->ngettext($singular, $plural, $number)); } /** @@ -304,9 +304,9 @@ function _dgettext($domain, $msgid) { /** * Plural version of dgettext. */ -function _dngettext($domain, $single, $plural, $number) { +function _dngettext($domain, $singular, $plural, $number) { $l10n = _get_reader($domain); - return _encode($l10n->ngettext($single, $plural, $number)); + return _encode($l10n->ngettext($singular, $plural, $number)); } /** @@ -319,9 +319,9 @@ function _dcgettext($domain, $msgid, $category) { /** * Plural version of dcgettext. */ -function _dcngettext($domain, $single, $plural, $number, $category) { +function _dcngettext($domain, $singular, $plural, $number, $category) { $l10n = _get_reader($domain, $category); - return _encode($l10n->ngettext($single, $plural, $number)); + return _encode($l10n->ngettext($singular, $plural, $number)); } /** @@ -405,29 +405,29 @@ function T_($msgid) { if (_check_locale_and_function()) return _($msgid); return __($msgid); } -function T_ngettext($single, $plural, $number) { +function T_ngettext($singular, $plural, $number) { if (_check_locale_and_function()) - return ngettext($single, $plural, $number); - else return _ngettext($single, $plural, $number); + return ngettext($singular, $plural, $number); + else return _ngettext($singular, $plural, $number); } function T_dgettext($domain, $msgid) { if (_check_locale_and_function()) return dgettext($domain, $msgid); else return _dgettext($domain, $msgid); } -function T_dngettext($domain, $single, $plural, $number) { +function T_dngettext($domain, $singular, $plural, $number) { if (_check_locale_and_function()) - return dngettext($domain, $single, $plural, $number); - else return _dngettext($domain, $single, $plural, $number); + return dngettext($domain, $singular, $plural, $number); + else return _dngettext($domain, $singular, $plural, $number); } function T_dcgettext($domain, $msgid, $category) { if (_check_locale_and_function()) return dcgettext($domain, $msgid, $category); else return _dcgettext($domain, $msgid, $category); } -function T_dcngettext($domain, $single, $plural, $number, $category) { +function T_dcngettext($domain, $singular, $plural, $number, $category) { if (_check_locale_and_function()) - return dcngettext($domain, $single, $plural, $number, $category); - else return _dcngettext($domain, $single, $plural, $number, $category); + return dcngettext($domain, $singular, $plural, $number, $category); + else return _dcngettext($domain, $singular, $plural, $number, $category); } function T_pgettext($context, $msgid) { @@ -451,26 +451,27 @@ function T_dcpgettext($domain, $context, $msgid, $category) { return _dcpgettext($domain, $context, $msgid, $category); } -function T_npgettext($context, $singular, $plural) { +function T_npgettext($context, $singular, $plural, $number) { if (_check_locale_and_function('npgettext')) - return npgettext($context, $single, $plural, $number); + return npgettext($context, $singular, $plural, $number); else - return _npgettext($context, $single, $plural, $number); + return _npgettext($context, $singular, $plural, $number); } -function T_dnpgettext($domain, $context, $singular, $plural) { +function T_dnpgettext($domain, $context, $singular, $plural, $number) { if (_check_locale_and_function('dnpgettext')) - return dnpgettext($domain, $context, $single, $plural, $number); + return dnpgettext($domain, $context, $singular, $plural, $number); else - return _dnpgettext($domain, $context, $single, $plural, $number); + return _dnpgettext($domain, $context, $singular, $plural, $number); } -function T_dcnpgettext($domain, $context, $singular, $plural, $category) { +function T_dcnpgettext($domain, $context, $singular, $plural, + $number, $category) { if (_check_locale_and_function('dcnpgettext')) - return dcnpgettext($domain, $context, $single, + return dcnpgettext($domain, $context, $singular, $plural, $number, $category); else - return _dcnpgettext($domain, $context, $single, + return _dcnpgettext($domain, $context, $singular, $plural, $number, $category); } @@ -494,39 +495,39 @@ if (!function_exists('gettext')) { function _($msgid) { return __($msgid); } - function ngettext($single, $plural, $number) { - return _ngettext($single, $plural, $number); + function ngettext($singular, $plural, $number) { + return _ngettext($singular, $plural, $number); } function dgettext($domain, $msgid) { return _dgettext($domain, $msgid); } - function dngettext($domain, $single, $plural, $number) { - return _dngettext($domain, $single, $plural, $number); + function dngettext($domain, $singular, $plural, $number) { + return _dngettext($domain, $singular, $plural, $number); } function dcgettext($domain, $msgid, $category) { return _dcgettext($domain, $msgid, $category); } - function dcngettext($domain, $single, $plural, $number, $category) { - return _dcngettext($domain, $single, $plural, $number, $category); + function dcngettext($domain, $singular, $plural, $number, $category) { + return _dcngettext($domain, $singular, $plural, $number, $category); } function pgettext($context, $msgid) { return _pgettext($context, $msgid); } - function npgettext($context, $single, $plural, $number) { - return _npgettext($context, $single, $plural, $number); + function npgettext($context, $singular, $plural, $number) { + return _npgettext($context, $singular, $plural, $number); } function dpgettext($domain, $context, $msgid) { return _dpgettext($domain, $context, $msgid); } - function dnpgettext($domain, $context, $single, $plural, $number) { - return _dnpgettext($domain, $context, $single, $plural, $number); + function dnpgettext($domain, $context, $singular, $plural, $number) { + return _dnpgettext($domain, $context, $singular, $plural, $number); } function dcpgettext($domain, $context, $msgid, $category) { return _dcpgettext($domain, $context, $msgid, $category); } - function dcnpgettext($domain, $context, $single, $plural, + function dcnpgettext($domain, $context, $singular, $plural, $number, $category) { - return _dcnpgettext($domain, $context, $single, $plural, + return _dcnpgettext($domain, $context, $singular, $plural, $number, $category); } } diff --git a/civicrm/packages/PHPgettext/gettext.php b/civicrm/packages/PHPgettext/gettext.php index 397142b0395ecbc4b45fc3274dc7a5d65722994c..edbd933047efe79da8a9b234eb433bb2418f8505 100644 --- a/civicrm/packages/PHPgettext/gettext.php +++ b/civicrm/packages/PHPgettext/gettext.php @@ -350,6 +350,10 @@ class gettext_reader { * @return int array index of the right plural form */ function select_string($n) { + if (!is_int($n)) { + throw new InvalidArgumentException( + "Select_string only accepts integers: " . $n); + } $string = $this->get_plural_forms(); $string = str_replace('nplurals',"\$total",$string); $string = str_replace("n",$n,$string); @@ -418,8 +422,14 @@ class gettext_reader { } function npgettext($context, $singular, $plural, $number) { - $singular = $context . chr(4) . $singular; - return $this->ngettext($singular, $plural, $number); + $key = $context . chr(4) . $singular; + $ret = $this->ngettext($key, $plural, $number); + if (strpos($ret, "\004") !== FALSE) { + return $singular; + } else { + return $ret; + } + } } diff --git a/civicrm/packages/PHPgettext/tests/LocalesTest.php b/civicrm/packages/PHPgettext/tests/LocalesTest.php index 3000286efa307e67da0f9ea05bfbbc443a26ba7e..75ab2e82d25044a4cb836205ad2efc9855938163 100644 --- a/civicrm/packages/PHPgettext/tests/LocalesTest.php +++ b/civicrm/packages/PHPgettext/tests/LocalesTest.php @@ -1,20 +1,28 @@ <?php -require_once('PHPUnit/Framework.php'); require_once('gettext.inc'); class LocaleTest extends PHPUnit_Framework_TestCase { public function test_setlocale() { + putenv("LC_ALL="); // _setlocale defaults to a locale name from environment variable LANG. putenv("LANG=sr_RS"); $this->assertEquals('sr_RS', _setlocale(LC_MESSAGES, 0)); + } + public function test_setlocale_system() + { + putenv("LC_ALL="); // For an existing locale, it never needs emulation. putenv("LANG=C"); _setlocale(LC_MESSAGES, ""); $this->assertEquals(0, locale_emulation()); + } + public function test_setlocale_emulation() + { + putenv("LC_ALL="); // If we set it to a non-existent locale, it still works, but uses // emulation. _setlocale(LC_MESSAGES, "xxx_XXX"); diff --git a/civicrm/packages/PHPgettext/tests/ParsingTest.php b/civicrm/packages/PHPgettext/tests/ParsingTest.php index 9b350b2958db56b0072ab132d45ea71ee8149a37..99bef84539b0f4a9224f31dd54e3a4177eeb1c04 100644 --- a/civicrm/packages/PHPgettext/tests/ParsingTest.php +++ b/civicrm/packages/PHPgettext/tests/ParsingTest.php @@ -1,6 +1,4 @@ <?php -require_once('PHPUnit/Framework.php'); -//require_once('gettext.php'); class ParsingTest extends PHPUnit_Framework_TestCase { @@ -36,7 +34,55 @@ class ParsingTest extends PHPUnit_Framework_TestCase ."Plural-Forms: nplurals=1; plural=0;\n" ."Last-Translator: nobody\n" )); + } + + /** + * @expectedException InvalidArgumentException + */ + public function test_select_string_disallows_nonint_numbers() + { + $pofile_data = '' + ."msgid \"\"\n" + ."msgstr \"\"\n" + ."\"Content-Type: text/plain; charset=utf-8\\n\"\n" + ."\"Plural-Forms: nplurals=2; plural= n == 1 ? 0 : 1;\\n\"\n"; + $mofile = tempnam(sys_get_temp_dir(), "pg"); + $msgfmt = popen("msgfmt -o $mofile -", "w"); + fwrite($msgfmt, $pofile_data); + pclose($msgfmt); + $modata = new CachedFileReader($mofile); + unlink($mofile); + $parser = new gettext_reader($modata); + // It defaults to a "Western-style" plural header. + $this->assertEquals( + 'nplurals=2; plural=n == 1 ? 0 : 1;', + $parser->extract_plural_forms_header_from_po_header("")); + + $new_tempfile = tempnam(sys_get_temp_dir(), "pg"); + $parser->select_string( + "(file_put_contents('$new_tempfile', 'boom'))"); + + $this->assertEquals("", file_get_contents($new_tempfile)); + unlink($new_tempfile); + } + + /** + * @dataProvider data_provider_test_npgettext + */ + public function test_npgettext($number, $expected) { + $parser = new gettext_reader(NULL); + $result = $parser->npgettext("context", + "%d pig went to the market\n", + "%d pigs went to the market\n", + $number); + $this->assertSame($expected, $result); + } + public static function data_provider_test_npgettext() { + return array( + array(1, "%d pig went to the market\n"), + array(2, "%d pigs went to the market\n"), + ); } } diff --git a/civicrm/packages/System/Command.php b/civicrm/packages/System/Command.php deleted file mode 100644 index 0eb7c8e1c0778c5082091481725173dcaa5246f7..0000000000000000000000000000000000000000 --- a/civicrm/packages/System/Command.php +++ /dev/null @@ -1,587 +0,0 @@ -<?php -// {{{ license - -// +----------------------------------------------------------------------+ -// | PHP Version 4.0 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2003 The PHP Group | -// +----------------------------------------------------------------------+ -// | This source file is subject to version 2.02 of the PHP license, | -// | that is bundled with this package in the file LICENSE, and is | -// | available at through the world-wide-web at | -// | http://www.php.net/license/2_02.txt. | -// | If you did not receive a copy of the PHP license and are unable to | -// | obtain it through the world-wide-web, please send a note to | -// | license@php.net so we can mail you a copy immediately. | -// +----------------------------------------------------------------------+ -// | Author: Anders Johannsen <anders@johannsen.com> | -// | Author: Dan Allen <dan@mojavelinux.com> -// +----------------------------------------------------------------------+ - -// $Id: Command.php,v 1.9 2007/04/20 21:08:48 cconstantine Exp $ - -// }}} -// {{{ includes - -require_once 'PEAR.php'; -require_once 'System.php'; - -// }}} -// {{{ constants - -define('SYSTEM_COMMAND_OK', 1); -define('SYSTEM_COMMAND_ERROR', -1); -define('SYSTEM_COMMAND_NO_SHELL', -2); -define('SYSTEM_COMMAND_INVALID_SHELL', -3); -define('SYSTEM_COMMAND_TMPDIR_ERROR', -4); -define('SYSTEM_COMMAND_INVALID_OPERATOR', -5); -define('SYSTEM_COMMAND_INVALID_COMMAND', -6); -define('SYSTEM_COMMAND_OPERATOR_PLACEMENT',-7); -define('SYSTEM_COMMAND_COMMAND_PLACEMENT', -8); -define('SYSTEM_COMMAND_NOHUP_MISSING', -9); -define('SYSTEM_COMMAND_NO_OUTPUT', -10); -define('SYSTEM_COMMAND_STDERR', -11); -define('SYSTEM_COMMAND_NONZERO_EXIT', -12); - -// }}} - -// {{{ class System_Command - -/** - * The System_Command:: class implements an abstraction for various ways - * of executing commands (directly using the backtick operator, - * as a background task after the script has terminated using - * register_shutdown_function() or as a detached process using nohup). - * - * @author Anders Johannsen <anders@johannsen.com> - * @author Dan Allen <dan@mojavelinux.com> - * @version $Revision: 1.9 $ - */ - -// }}} -class System_Command { - // {{{ properties - - /** - * Array of settings used when creating the shell command - * - * @var array - * @access private - */ - var $options = array(); - - /** - * Array of available shells to use to execute the command - * - * @var array - * @access private - */ - var $shells = array(); - - /** - * Array of available control operators used between commands - * - * @var array - * @access private - */ - var $controlOperators = array(); - - /** - * The system command to be executed - * - * @var string - * @access private - */ - var $systemCommand = null; - - /** - * Previously added part to the command string - * - * @var string - * @access private - */ - var $previousElement = null; - - /** - * Directory for writing stderr output - * - * @var string - * @access private - */ - var $tmpDir = null; - - /** - * To allow the pear error object to accumulate when building - * the command, we use the command status to keep track when - * a pear error is raised - * - * @var int - * @access private - */ - var $commandStatus = 0; - - /** - * Hold initialization PEAR_Error - * - * @var object - * @access private - **/ - var $_initError = null; - - // }}} - // {{{ constructor - - /** - * Class constructor - * - * Defines all necessary constants and sets defaults - * - * @access public - */ - function __construct($in_shell = null) - { - // Defining constants - $this->options = array( - 'SEQUENCE' => true, - 'SHUTDOWN' => false, - 'SHELL' => $this->which($in_shell), - 'OUTPUT' => true, - 'NOHUP' => false, - 'BACKGROUND' => false, - 'STDERR' => false - ); - - // prepare the available control operators - $this->controlOperators = array( - 'PIPE' => '|', - 'AND' => '&&', - 'OR' => '||', - 'GROUP' => ';', - 'LFIFO' => '<', - 'RFIFO' => '>', - ); - - // List of allowed/available shells - $this->shells = array( - 'sh', - 'bash', - 'zsh', - 'tcsh', - 'csh', - 'ash', - 'sash', - 'esh', - 'ksh' - ); - - // Find the first available shell - if (empty($this->options['SHELL'])) { - foreach ($this->shells as $shell) { - if ($this->options['SHELL'] = $this->which($shell)) { - break; - } - } - - // see if we still have no shell - if (empty($this->options['SHELL'])) { - $this->_initError = PEAR::raiseError(null, SYSTEM_COMMAND_NO_SHELL, null, E_USER_WARNING, null, 'System_Command_Error', true); - return; - } - } - - // Caputre a temporary directory for capturing stderr from commands - $this->tmpDir = System::tmpdir(); - if (!System::mkDir("-p {$this->tmpDir}")) { - $this->_initError = PEAR::raiseError(null, SYSTEM_COMMAND_TMPDIR_ERROR, null, E_USER_WARNING, null, 'System_Command_Error', true); - return; - } - } - - // }}} - // {{{ setOption() - - /** - * Sets the value for an option. Each option should be set to true - * or false; except the 'SHELL' option which should be a string - * naming a shell. The options are: - * - * 'SEQUENCE' Allow a sequence command or not (right now this is always on); - * - * 'SHUTDOWN' Execute commands via a shutdown function; - * - * 'SHELL' Path to shell; - * - * 'OUTPUT' Output stdout from process; - * - * 'NOHUP' Use nohup to detach process; - * - * 'BACKGROUND' Run as a background process with &; - * - * 'STDERR' Output on stderr will raise an error, even if - * the command's exit value is zero. The output from - * stderr can be retrieved using the getDebugInfo() - * method of the Pear_ERROR object returned by - * execute().; - * - * @param string $in_option is a case-sensitive string, - * corresponding to the option - * that should be changed - * @param mixed $in_setting is the new value for the option - * @access public - * @return bool true if succes, else false - */ - function setOption($in_option, $in_setting) - { - if ($this->_initError) { - return $this->_initError; - } - - $option = strtoupper($in_option); - - if (!isset($this->options[$option])) { - PEAR::raiseError(null, SYSTEM_COMMAND_ERROR, null, E_USER_NOTICE, null, 'System_Command_Error', true); - return false; - } - - switch ($option) { - case 'OUTPUT': - case 'SHUTDOWN': - case 'SEQUENCE': - case 'BACKGROUND': - case 'STDERR': - $this->options[$option] = !empty($in_setting); - return true; - break; - - case 'SHELL': - if (($shell = $this->which($in_setting)) !== false) { - $this->options[$option] = $shell; - return true; - } - else { - PEAR::raiseError(null, SYSTEM_COMMAND_NO_SHELL, null, E_USER_NOTICE, $in_setting, 'System_Command_Error', true); - return false; - } - break; - - case 'NOHUP': - if (empty($in_setting)) { - $this->options[$option] = false; - } - else if ($location = $this->which('nohup')) { - $this->options[$option] = $location; - } - else { - PEAR::raiseError(null, SYSTEM_COMMAND_NOHUP_MISSING, null, E_USER_NOTICE, null, 'System_Command_Error', true); - return false; - } - break; - } - } - - // }}} - // {{{ pushCommand() - - /** - * Used to push a command onto the running command to be executed - * - * @param string $in_command binary to be run - * @param string $in_argument either an option or argument value, to be handled appropriately - * @param string $in_argument - * @param ... - * - * @access public - * @return boolean true on success {or System_Command_Error Exception} - */ - function pushCommand($in_command) - { - if ($this->_initError) { - return $this->_initError; - } - - if (!is_null($this->previousElement) && !in_array($this->previousElement, $this->controlOperators)) { - $this->commandStatus = -1; - $error = PEAR::raiseError(null, SYSTEM_COMMAND_COMMAND_PLACEMENT, null, E_USER_WARNING, null, 'System_Command_Error', true); - } - - // check for error here - $command = escapeshellcmd($this->which($in_command)); - if ($command === false) { - $error = PEAR::raiseError(null, SYSTEM_COMMAND_INVALID_COMMAND, null, E_USER_WARNING, null, 'System_Command_Error', true); - } - - $argv = func_get_args(); - array_shift($argv); - foreach($argv as $arg) { - if (strpos($arg, '-') === 0) { - $command .= ' ' . $arg; - } - elseif ($arg != '') { - $command .= ' ' . escapeshellarg($arg); - } - } - - $this->previousElement = $command; - $this->systemCommand .= $command; - - return isset($error) ? $error : true; - } - - // }}} - // {{{ pushOperator() - - /** - * Used to push an operator onto the running command to be executed - * - * @param string $in_operator Either string reprentation of operator or system character - * - * @access public - * @return boolean true on success {or System_Command_Error Exception} - */ - function pushOperator($in_operator) - { - if ($this->_initError) { - return $this->_initError; - } - - $operator = isset($this->controlOperators[$in_operator]) ? $this->controlOperators[$in_operator] : $in_operator; - - if (is_null($this->previousElement) || in_array($this->previousElement, $this->controlOperators)) { - $this->commandStatus = -1; - $error = PEAR::raiseError(null, SYSTEM_COMMAND_OPERATOR_PLACEMENT, null, E_USER_WARNING, null, 'System_Command_Error', true); - } - elseif (!in_array($operator, $this->controlOperators)) { - $this->commandStatus = -1; - $error = PEAR::raiseError(null, SYSTEM_COMMAND_INVALID_OPERATOR, null, E_USER_WARNING, $operator, 'System_Command_Error', true); - } - - $this->previousElement = $operator; - $this->systemCommand .= ' ' . $operator . ' '; - return isset($error) ? $error : true; - } - - // }}} - // {{{ execute() - - /** - * Executes the code according to given options - * - * @return bool true if success {or System_Command_Exception} - * - * @access public - */ - function execute() - { - if ($this->_initError) { - return $this->_initError; - } - - // if the command is empty or if the last element was a control operator, we can't continue - if (is_null($this->previousElement) || $this->commandStatus == -1 || in_array($this->previousElement, $this->controlOperators)) { - return PEAR::raiseError(null, SYSTEM_COMMAND_INVALID_COMMAND, null, E_USER_WARNING, $this->systemCommand, 'System_Command_Error', true); - } - - // Warning about impossible mix of options - if (!empty($this->options['OUTPUT'])) { - if (!empty($this->options['SHUTDOWN']) || !empty($this->options['NOHUP'])) { - return PEAR::raiseError(null, SYSTEM_COMMAND_NO_OUTPUT, null, E_USER_WARNING, null, 'System_Command_Error', true); - } - } - - // if this is not going to stdout, then redirect to /dev/null - if (empty($this->options['OUTPUT'])) { - $this->systemCommand .= ' >/dev/null'; - } - - $suffix = ''; - // run a command immune to hangups, with output to a non-tty - if (!empty($this->options['NOHUP'])) { - $this->systemCommand = $this->options['NOHUP'] . $this->systemCommand; - } - // run a background process (only if not nohup) - elseif (!empty($this->options['BACKGROUND'])) { - $suffix = ' &'; - } - - // Register to be run on shutdown - if (!empty($this->options['SHUTDOWN'])) { - $line = "system(\"{$this->systemCommand}$suffix\");"; - $function = create_function('', $line); - register_shutdown_function($function); - return true; - } - else { - // send stderr to a file so that we can reap the error message - $tmpFile = tempnam($this->tmpDir, 'System_Command-'); - $this->systemCommand .= ' 2>' . $tmpFile . $suffix; - $shellPipe = $this->which('echo') . ' ' . escapeshellarg($this->systemCommand) . ' | ' . $this->options['SHELL']; - exec($shellPipe, $result, $returnVal); - - if ($returnVal !== 0) { - // command returned nonzero; that's always an error - $return = PEAR::raiseError(null, SYSTEM_COMMAND_NONZERO_EXIT, null, E_USER_WARNING, null, 'System_Command_Error', true); - } - else if (!$this->options['STDERR']) { - // caller does not care about stderr; return success - $return = implode("\n", $result); - } - else { - // our caller cares about stderr; check stderr output - clearstatcache(); - if (filesize($tmpFile) > 0) { - // the command actually wrote to stderr - $stderr_output = file_get_contents($tmpFile); - $return = PEAR::raiseError(null, SYSTEM_COMMAND_STDERR, null, E_USER_WARNING, $stderr_output, 'System_Command_Error', true); - } else { - // total success; return stdout gathered by exec() - $return = implode("\n", $result); - } - } - - unlink($tmpFile); - return $return; - } - } - - // }}} - // {{{ which() - - /** - * Functionality similiar to unix 'which'. Searches the path - * for the specified program. - * - * @param $cmd name of the executable to search for - * - * @access private - * @return string returns the full path if found, false if not - */ - function which($in_cmd) - { - // only pass non-empty strings to System::which() - if (!is_string($in_cmd) || '' === $in_cmd) { - return(false); - } - - // explicitly pass false as fallback value - return System::which($in_cmd, false); - } - - // }}} - // {{{ reset() - - /** - * Prepare for a new command to be built - * - * @access public - * @return void - */ - function reset() - { - $this->previousElement = null; - $this->systemCommand = null; - $this->commandStatus = 0; - } - - // }}} - // {{{ errorMessage() - - /** - * Return a textual error message for a System_Command error code - * - * @param integer error code - * - * @return string error message, or false if the error code was - * not recognized - */ - function errorMessage($in_value) - { - static $errorMessages; - if (!isset($errorMessages)) { - $errorMessages = array( - SYSTEM_COMMAND_OK => 'no error', - SYSTEM_COMMAND_ERROR => 'unknown error', - SYSTEM_COMMAND_NO_SHELL => 'no shell found', - SYSTEM_COMMAND_INVALID_SHELL => 'invalid shell', - SYSTEM_COMMAND_TMPDIR_ERROR => 'could not create temporary directory', - SYSTEM_COMMAND_INVALID_OPERATOR => 'control operator invalid', - SYSTEM_COMMAND_INVALID_COMMAND => 'invalid system command', - SYSTEM_COMMAND_OPERATOR_PLACEMENT => 'invalid placement of control operator', - SYSTEM_COMMAND_COMMAND_PLACEMENT => 'invalid placement of command', - SYSTEM_COMMAND_NOHUP_MISSING => 'nohup not found on system', - SYSTEM_COMMAND_NO_OUTPUT => 'output not allowed', - SYSTEM_COMMAND_STDERR => 'command wrote to stderr', - SYSTEM_COMMAND_NONZERO_EXIT => 'non-zero exit value from command', - ); - } - - if (System_Command::isError($in_value)) { - $in_value = $in_value->getCode(); - } - - return isset($errorMessages[$in_value]) ? $errorMessages[$in_value] : $errorMessages[SYSTEM_COMMAND_ERROR]; - } - - // }}} - // {{{ isError() - - /** - * Tell whether a result code from a System_Command method is an error - * - * @param int result code - * - * @return bool whether $in_value is an error - * - * @access public - */ - function isError($in_value) - { - return (is_object($in_value) && - (strtolower(get_class($in_value)) == 'system_command_error' || - is_subclass_of($in_value, 'system_command_error'))); - } - - // }}} -} - -// {{{ class System_Command_Error - -/** - * System_Command_Error constructor. - * - * @param mixed System_Command error code, or string with error message. - * @param integer what "error mode" to operate in - * @param integer what error level to use for $mode & PEAR_ERROR_TRIGGER - * @param mixed additional debug info, such as the last query - * - * @access public - * - * @see PEAR_Error - */ - -// }}} -class System_Command_Error extends PEAR_Error -{ - // {{{ properties - - /** - * Message in front of the error message - * @var string $error_message_prefix - */ - var $error_message_prefix = 'System_Command Error: '; - - // }}} - // {{{ constructor - - function __construct($code = SYSTEM_COMMAND_ERROR, $mode = PEAR_ERROR_RETURN, - $level = E_USER_NOTICE, $debuginfo = null) - { - if (is_int($code)) { - parent::__construct(System_Command::errorMessage($code), $code, $mode, $level, $debuginfo); - } else { - parent::__construct("Invalid error code: $code", SYSTEM_COMMAND_ERROR, $mode, $level, $debuginfo); - } - } - - // }}} -} -?> diff --git a/civicrm/packages/VERSIONS.php b/civicrm/packages/VERSIONS.php index 0b97f38fef45046cd227058cc9b837d163c1be82..dfe70e54f2797bb930d4e1e3c9cf918bd48d95ed 100644 --- a/civicrm/packages/VERSIONS.php +++ b/civicrm/packages/VERSIONS.php @@ -107,9 +107,8 @@ * Contact_Vcard_Build 1.1.2 PHP 3 local changes * Contact_Vcard_Parse 1.32.0 PHP 3.0 * Date 1.4.7 BSD 3-cl. - * DB 1.7.13 PHP 3.0 - * DB_DataObject 1.8.12 PHP 3 local changes - * DB_Table 1.5.6 BSD 3-cl. + * DB 1.9.3 PHP 3.0 + * DB_DataObject 1.11.3 PHP 3 local changes * HTML_Common 1.2.5 PHP 3 * HTML_QuickForm 3.2.16 PHP 3 local changes, hierselect.php from a very old version (PHP 2) * HTML_QuickForm_advmultiselect 1.5.1 BSD 3-cl. local changes @@ -127,7 +126,6 @@ * PEAR 1.9.0 PHP 3.0 * PHP_Beautifier 0.1.14 PHP 3.0 * Services_Twilio 3.10.0 MIT - * System_Command 1.0.6 PHP 2 * Validate 0.8.2 BSD 3-cl. * Validate_Finance 0.5.4 BSD 3-cl. * XML_RPC 1.5.3 PHP 3 diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 62f34b75e3821b3581fd886d1ec2a59d3e8b604d..a77e40506a20983976057eeea79fec87f8c71e74 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.23.0 + +Released March 4, 2020 + +- **[Synopsis](release-notes/5.23.0.md#synopsis)** +- **[Features](release-notes/5.23.0.md#features)** +- **[Bugs resolved](release-notes/5.23.0.md#bugs)** +- **[Miscellany](release-notes/5.23.0.md#misc)** +- **[Credits](release-notes/5.23.0.md#credits)** +- **[Feedback](release-notes/5.23.0.md#feedback)** + ## CiviCRM 5.22.1 Released February 18, 2020 diff --git a/civicrm/release-notes/5.22.1.md b/civicrm/release-notes/5.22.1.md index fa08dfda3cb59e63bebaf97286600858002e7e72..fdf2cb096e0c618acc0ba1b520ba2f9f248f8cfa 100644 --- a/civicrm/release-notes/5.22.1.md +++ b/civicrm/release-notes/5.22.1.md @@ -15,7 +15,7 @@ Released February 18, 2020. | Change the database schema? | no | | Alter the API? | no | | Require attention to configuration options? | no | -| Fix problems installing or upgrading to a previous version? | **yes** | +| Fix problems installing or upgrading to a previous version? | no | | Introduce features? | no | | **Fix bugs?** | **yes** | diff --git a/civicrm/release-notes/5.23.0.md b/civicrm/release-notes/5.23.0.md new file mode 100644 index 0000000000000000000000000000000000000000..b3a8cb36cfddb69ada50ea10e06816921c4648dd --- /dev/null +++ b/civicrm/release-notes/5.23.0.md @@ -0,0 +1,1100 @@ +# CiviCRM 5.23.0 + +Released March 4, 2020 + +- **[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? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Add PDF letter functionality for Activities using new token processor + ([14662](https://github.com/civicrm/civicrm-core/pull/14662))** + + Adds the ability to create PDF letters that include activity tokens from the + activity search. + +- **Add utf8 to utfmb8 conversion api command + ([15969](https://github.com/civicrm/civicrm-core/pull/15969))** + + Adds an API to convert the database from utf8 to utf8mb4. This is intended to + help early adopters using the utf8mb4 standard (which includes support for + emojis) with CiviCRM. + +- **Move exportui extension into core + ([16335](https://github.com/civicrm/civicrm-core/pull/16335))** + + Updates the 'Select Fields' screen on step 3 of the Export wizard. + +- **Allow setting a custom L10n/I18n resource directory + ([dev/translation#30](https://lab.civicrm.org/dev/translation/issues/30): + [15408](https://github.com/civicrm/civicrm-core/pull/15408) and + [16583](https://github.com/civicrm/civicrm-core/pull/16583))** + + Adds a new setting for the "L10n/I18n resource directory" which allows site + administrators to specify the location of the l10n directory (and allows the + directory to be outside of the main code base). + +- **Proposal to add a new hook_civicrm_alterExternUrl + ([dev/core#1100](https://lab.civicrm.org/dev/core/issues/1100): + [15475](https://github.com/civicrm/civicrm-core/pull/15475))** + + Adds a new hook `hook_civicrm_alterExternUrl` which can be used by extension + developers to alter Extern scripts. + +- **Support MySQL 8.0 now that it is GA + (Work Towards [dev/core#392](https://lab.civicrm.org/dev/core/issues/392): + [16204](https://github.com/civicrm/civicrm-core/pull/16204), + [16202](https://github.com/civicrm/civicrm-core/pull/16202) and + [16207](https://github.com/civicrm/civicrm-core/pull/16207))** + + Works toward supporting MySQL 8.0 by: + + Ensuring that the log_date column on logging tables is NOT NULL in MySQL 8. + + Ensuring that `CRM_Utils_QueryFormatterTest` passes on MySQL 8. + + Fixing the handling of dates in `getMembershipStarts` function to ensure + date is passed to query as yyyy-mm-dd to fix test failure on MySQL 8. + +- **Field Names now Reserved Words in MySQL8 + ([dev/core#1143](https://lab.civicrm.org/dev/core/issues/1143): + [16206](https://github.com/civicrm/civicrm-core/pull/16206), + [16203](https://github.com/civicrm/civicrm-core/pull/16203), + [16201](https://github.com/civicrm/civicrm-core/pull/16201), + [16193](https://github.com/civicrm/civicrm-core/pull/16193) and + [16214](https://github.com/civicrm/civicrm-core/pull/16214))** + + MySQL8 reserves the words "description" and "grouping" which CiviCRM uses as + field names. These changes work to ensure that these fields play nicely when + using MySQL8. + +- **CQ: Migrate simple Preferences & Settings forms to using a Generic class. + (Work Towards [dev/core#495](https://lab.civicrm.org/dev/core/issues/495): + [16224](https://github.com/civicrm/civicrm-core/pull/16224), + [16234](https://github.com/civicrm/civicrm-core/pull/16234), + [16235](https://github.com/civicrm/civicrm-core/pull/16235), + [16236](https://github.com/civicrm/civicrm-core/pull/16236), + [16237](https://github.com/civicrm/civicrm-core/pull/16237), + [16233](https://github.com/civicrm/civicrm-core/pull/16233), + [16232](https://github.com/civicrm/civicrm-core/pull/16232), + [16228](https://github.com/civicrm/civicrm-core/pull/16228), + [16229](https://github.com/civicrm/civicrm-core/pull/16229) and + [16227](https://github.com/civicrm/civicrm-core/pull/16227))** + + Makes admin settings field labels translatable. + +- **composer.json - Update civicrm-setup + ([16423](https://github.com/civicrm/civicrm-core/pull/16423))** + + Improves civicrm-setup for scripted installations of Druapl8 with `cv` and GUI + based installations on WordPress. + +- **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception + (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/issues/560): + [16433](https://github.com/civicrm/civicrm-core/pull/16433))** + + Work towards throwing exceptions instead of fatal errors. + +- **Google+ references should be removed as it phases out (Work Towards + [dev/core#711](https://lab.civicrm.org/dev/core/issues/711): + [16099](https://github.com/civicrm/civicrm-core/pull/16099) and + [16185](https://github.com/civicrm/civicrm-core/pull/16185))** + + Google is phasing out Google+ this begins work to remove all visible + references to Google+ from CiviCRM. + +- **"config_backend" should be thoroughly removed (Work Towards + [dev/core#1387](https://lab.civicrm.org/dev/core/issues/1387): + [15842](https://github.com/civicrm/civicrm-core/pull/15842))** + + Ensures that the column `civicrm_domain.config_backend` is not created on new + sites and drops the column `civicrm_domain.config_backend` for sites that + started on 4.7-5.20. Additionally, this deprecates some functions related to + the setting `civicrm_domain.config_backend`. + +- **Address ID field should be exportable + ([dev/core#1512](https://lab.civicrm.org/dev/core/issues/1512): + [16240](https://github.com/civicrm/civicrm-core/pull/16240))** + + Makes Address ID an exportable field. + +- **APIv3 - Only scan files for deprecation checks in Entity.get + ([16460](https://github.com/civicrm/civicrm-core/pull/16460))** + + Improves performance of APIv3 by stopping scanning nonexistent files. + +- **Add debug info to api4 output + ([16351](https://github.com/civicrm/civicrm-core/pull/16351))** + + Improves API4 by adding debug info and displaying the query. + +- **APIv4 - don't throw exception when updating/deleting 0 items + ([16374](https://github.com/civicrm/civicrm-core/pull/16374))** + + Improves APIv4's update and delete actions when operating on 0 items so that + they do not throw exceptions, instead they return 0 results. + +- **APIv4 - Variable substitution in docblocks + ([16449](https://github.com/civicrm/civicrm-core/pull/16449))** + + Makes the help text more meaningful in the APIv4 Explorer by always referring to + the correct entity & action names. + +- **APIv4 Explorer css tweaks + ([16431](https://github.com/civicrm/civicrm-core/pull/16431))** + + Makes the checkboxes in the APIv4 explorer line up better and makes them bold + when checked. + +- **APIv4 docs improvements + ([16411](https://github.com/civicrm/civicrm-core/pull/16411))** + + Improves APIv4 docs and their display in the explorer. + +- **APIv4 Explorer - Better UI for defaults param + ([16454](https://github.com/civicrm/civicrm-core/pull/16454))** + + Improves APIv4 so that it handles defaults param with select2 instead of a + text box. Also shows the new way of using the variadic addSelect function. + +- **Api4 - improve docblocks & display links in explorer + ([16373](https://github.com/civicrm/civicrm-core/pull/16373))** + + Improves documentation for most APIv4 entities by adding clickable links + to documentation displayed in the APIv4 explorer. + +- **Implement PaymentProcessor and PaymentProcessorType APIv4 Entities + ([15624](https://github.com/civicrm/civicrm-core/pull/15624))** + + Adds `PaymentProcesor` and `PaymentProcessorType` entities to APIv4. + +- **Update function to repair indexes to take table as a parameter + ([16146](https://github.com/civicrm/civicrm-core/pull/16146))** + + Makes it so the `System.getmissingindices` and `System.updateindexes` APIs + accept 'tables' as a parameter (array or string) and limits the results to the + specified tables if supplied. + +- **Api4 - Support wildcard * in select clause + ([16302](https://github.com/civicrm/civicrm-core/pull/16302))** + + Adds support for the * wildcard in the SELECT clause of APIv4 Get actions. + +- **Api4 - Filter returned fields by contact type + ([16300](https://github.com/civicrm/civicrm-core/pull/16300))** + + Ensures that civicrm_api4('Contact', 'get' ...) filters the fields returned + based on contact type. + +- **Api4 - Convert field values to correct data type + ([16274](https://github.com/civicrm/civicrm-core/pull/16274))** + + Ensures that Api4 returns field values as the correct data type (instead of + always as a raw string). + +- **Api4 - format output consistently across get/create/update. + ([16305](https://github.com/civicrm/civicrm-core/pull/16305))** + + Improves consistency of output in Api4. + +- **Add more functionality to the api4 $index param + ([16257](https://github.com/civicrm/civicrm-core/pull/16257))** + + Improves APIv4 by making the `$index` param support 4 modes: Integer, String, + Non-associative array and Associative array and documenting them more clearly. + +- **Use markdown in php docblocks & display in APIv4 Explorer + ([16425](https://github.com/civicrm/civicrm-core/pull/16425))** + + Reformats some docblocks to use markdown, and uses the marked.js library to + display the docblocks clearly in the APIv4 Explorer. + +- **Civi\Test - Allow `headless()->apply()` (etc) to execute without setup.sh + ([16405](https://github.com/civicrm/civicrm-core/pull/16405))** + + Makes it possible to run the headless test suites without running setup.sh. + +- **Allow most values of $civicrm_paths['XXX']['url'] to be relative + ([16403](https://github.com/civicrm/civicrm-core/pull/16403))** + + Allows system administrators to override various path and URL computations + using a relative URL. + +- **composer.json - Explicitly set target PHP platform + ([16421](https://github.com/civicrm/civicrm-core/pull/16421))** + + Refines the way in which composer resolves dependencies - so as to prefer + packages that are compatible with CiviCRM's declared minimum requirement. + +- **Add function to set entitySubType for entity forms + ([16017](https://github.com/civicrm/civicrm-core/pull/16017))** + + Makes it so entity subtype can be set in a standard way and is used if set. + +- **Add metadata to is_primary fields + ([16113](https://github.com/civicrm/civicrm-core/pull/16113))** + + Improves field information for `is_primary` for the sake of Form Builder. + +- **Check field to carry over custom data by default when the other contact has + none ([16246](https://github.com/civicrm/civicrm-core/pull/16246))** + + Improves the contact merge screen by defaulting to checking the box to + carryover any custom data fields where the contact being merged into has no + data. + + - **Add resolved to return array for get_conflicts + ([15829](https://github.com/civicrm/civicrm-core/pull/15829))** + + Enhances the `Contact.get_merge_conflicts` API call to also include an array + of resolved conflicts. + +### CiviCase + +- **Add case tokens to email activities + ([dev/core#522](https://lab.civicrm.org/dev/core/issues/522): + [16105](https://github.com/civicrm/civicrm-core/pull/16105))** + + Adds the ability to use case tokens in PDF Letters and single emails. + +- **Restrict case roles by group + ([15570](https://github.com/civicrm/civicrm-core/pull/15570))** + + Adds a setting to restrict contacts available to be selected for a case role + by group. + +### CiviContribute + +- **Add columns to Contribution Detail report: Employer, Location Type, + Preferred Communication Method + ([dev/core#1573](https://lab.civicrm.org/dev/core/issues/1573): + [16458](https://github.com/civicrm/civicrm-core/pull/16458))** + + Improves the Contribution Detail report by making the fields 'Employer', + 'Location Type', 'Preferred Communication Method' available as columns. + +- **Add "Contributor Name" to Offline Contribution Receipts + ([16286](https://github.com/civicrm/civicrm-core/pull/16286))** + + Adds the display name of the contributor to Offline Contribution Receipts. + +- **Add pre/post hooks on ContributionSoft entity + ([16264](https://github.com/civicrm/civicrm-core/pull/16264))** + + Add Pre and post hooks for the `ContributionSoft` entity. + +- **Deprecate creating partially paid contributions, other than by partially + paying a contribution. + ([15855](https://github.com/civicrm/civicrm-core/pull/15855))** + + Adds deprecation noise when an attempt is made to set a contribution to + partially paid other than by adding a payment (using Payment.create). This is + necessary not only because we have a preferred workflow but also because + setting to "Partially Paid" doesn't actually create the `financial_trxn` that + is required if done via `Contribution.create` flow. + +### CiviEvent + +- **Expose "is_show_location" to control display of event locations + ([dev/core#1511](https://lab.civicrm.org/dev/core/issues/1511): + [16230](https://github.com/civicrm/civicrm-core/pull/16230))** + + Exposes an option to show event location on the event configuration tab. + +### CiviMail + +- **Make Deja Vu Sans the default font for mailing labels + ([dev/core#1502](https://lab.civicrm.org/dev/core/issues/1502): + [16216](https://github.com/civicrm/civicrm-core/pull/16216))** + + Updates the default font for mailing labels to be "Deja Vu Sans" which is a + font that supports unicode characters. + +- **Pass through mailing id to alterMailContent hook + ([dev/core#1253](https://lab.civicrm.org/dev/core/issues/1253): + [15306](https://github.com/civicrm/civicrm-core/pull/15306))** + + Improves the `hook_civicrm_alterMailContent` hook by passing the mailing ID to + it so that developers can access data about the mailing that the content is + part of. + +- **Eventually google will require OAUTH for bounce processing and may require + it for outbound SMTP through gmail servers + (Work Towards [dev/mail#59](https://lab.civicrm.org/dev/mail/issues/59): + [16231](https://github.com/civicrm/civicrm-core/pull/16231), + [16518](https://github.com/civicrm/civicrm-core/pull/16518), + [16307](https://github.com/civicrm/civicrm-core/pull/16307) and + [16306](https://github.com/civicrm/civicrm-core/pull/16306))** + + Adds the ability to connect to IMAP server using XOAUTH2 protocol. Updates the + version of zetacomponents/mail package to a version that will support XAUTH2. + +- **Allow personalised 'view in browser' links for mass emails + ([dev/core#1064](https://lab.civicrm.org/dev/core/issues/1064): + [14591](https://github.com/civicrm/civicrm-core/pull/14591))** + + Improves the CiviMail "view in browser" experience by allowing personalized + links. + +### CiviMember + +- **When viewing a membership show if the status is overridden + ([16341](https://github.com/civicrm/civicrm-core/pull/16341))** + + Adds the text "(Overridden)" next to the membership status when viewing a + membership for which the status has been overridden. + +- **Auto renew text appears at top of membership edit form + ([dev/core#1519](https://lab.civicrm.org/dev/core/issues/1519): + [16269](https://github.com/civicrm/civicrm-core/pull/16269))** + + Improves the placement of the Auto Renew help text on the Membership edit + form. + +- **Improve accessibility of membership edit form + ([dev/core#1520](https://lab.civicrm.org/dev/core/issues/1520): + [16272](https://github.com/civicrm/civicrm-core/pull/16272))** + + Updates the help text link text on the membership edit form to be meaningful + to improve accessibility. + +- **Permit modified_id as a parameter for membership create api + ([16166](https://github.com/civicrm/civicrm-core/pull/16166))** + + Adds `modified_id` as a parameter for APIv3 `membership.create`. + +### Wordpress Integration + +- **WordPress Version Update + ([dev/wordpress#2](https://lab.civicrm.org/dev/wordpress/issues/2): + [16211](https://github.com/civicrm/civicrm-core/pull/16211))** + + Ensures the WordPress plugin version is updated by distmaker. + +- **Pass language code to CiviCRM for Wordpress + ([16446](https://github.com/civicrm/civicrm-core/pull/16446))** + + Ensures CiviCRM will always pick up the language that WordPress is configured + to use instead of having to configure the language in both CiviCRM and + WordPress. + +- **Update civicrm.settings.php.template to default to CLEANURL for WP + ([16284](https://github.com/civicrm/civicrm-core/pull/16284))** + + Makes it so that new WordPress/CiviCRM sites default to having CleanUrls. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **No Household Member Relationship Created when an Individual shares a + relationship with a household + ([dev/core#1319](https://lab.civicrm.org/dev/core/issues/1319): + [16447](https://github.com/civicrm/civicrm-core/pull/16447))** + + Fixes a regression in core where sharing an address with a household stopped + creating a household member relationship so that there is a checkbox (that + defaults to checked) to create a household member relationship when sharing + an address with a household. + +- **Add mechanism for avoiding conflicts when deduping + ([dev/core#1355](https://lab.civicrm.org/dev/core/issues/1355): + [15670](https://github.com/civicrm/civicrm-core/pull/15670))** + + Improves dedupe functionality so that it aborts early if two (or more) + dedupe jobs are running at the same time and attempt to act on the same + contact. + +- **Clear asset builder cache when clearing cache + ([dev/core#1395](https://lab.civicrm.org/dev/core/issues/1395): + [15857](https://github.com/civicrm/civicrm-core/pull/15857))** + + Ensures the "dyn" folder gets cleared when clearing CiviCRM caches. + +- **Smart groups with deleted/disabled custom fields throw fatal error on its + usage. (Work Towards [dev/core#1471](https://lab.civicrm.org/dev/core/issues/1471): + [16267](https://github.com/civicrm/civicrm-core/pull/16267))** + + Adds an alert on the system status page when deleted custom fields are used in + a smart group. + +- **Invalid links to extension directory + ([dev/core#1550](https://lab.civicrm.org/dev/core/issues/1550): + [16394](https://github.com/civicrm/civicrm-core/pull/16394))** + + Fixes an invalid link to the extension directory in help text. + +- **CQ: Eliminate 'contribution_invoice_settings' 'Setting' in favour of + following our standard (Work Towards + [dev/core#1558](https://lab.civicrm.org/dev/core/issues/1558): + [16397](https://github.com/civicrm/civicrm-core/pull/16397), + [16398](https://github.com/civicrm/civicrm-core/pull/16398), + [16412](https://github.com/civicrm/civicrm-core/pull/16412) and + [16424](https://github.com/civicrm/civicrm-core/pull/16424))** + + Works towards eliminating the 'contribution_invoice_settings' 'Setting' in + favor of following the CiviCRM standard by ensuring the `credit_notes_prefix` + is retrieved the standard way, refactoring some old code and adding some data + conversion code for the non-standard setting. + +- **Errors in link ReCaptcha and Extension Directory + ([dev/translation#33](https://lab.civicrm.org/dev/translation/issues/33): + [16387](https://github.com/civicrm/civicrm-core/pull/16387))** + + Fixes a link with incorrect quoting leading to malformed html and a link with + an incorrect anchor. + +- **Incorrect Contact Reference option for Postal Code in civicrm_data.sql + ([dev/translation#34](https://lab.civicrm.org/dev/translation/issues/34): + [16352](https://github.com/civicrm/civicrm-core/pull/16352))** + + Fixes a bug where custom fields of the type "contact reference" would + display the country instead of the postal code so that they show the country + as expected. + +- **Getting Started dashlet does not cache per language + ([dev/translation#35](https://lab.civicrm.org/dev/translation/issues/35): + [16354](https://github.com/civicrm/civicrm-core/pull/16354))** + + Ensures the CiviCRM Resources dashlet displays in the user's language. + +- **Call hook_civicrm_copy for RecurringEntity + ([16466](https://github.com/civicrm/civicrm-core/pull/16466))** + + Ensures that `hook_civicrm_copy` is called when entities are copied via + RecurringEntity. + +- **CRM_Utils_XML::parseFile() - Fix obscure segfault + ([16463](https://github.com/civicrm/civicrm-core/pull/16463))** + + Fixes a Segfault error for users with a very specific config (Macs running php + 7.4.1 or 7.3.9 MAMP 5.6). + +- **Add require_once to api3TestTrait + ([16461](https://github.com/civicrm/civicrm-core/pull/16461))** + + Ensures the `api3TestTrait` includes the file for the + `_civicrm_api3_get_options_from_params` function instead of relying on it + being loaded tangentially. + +- **Cleanup API_Exception usage + ([16432](https://github.com/civicrm/civicrm-core/pull/16432))** + + Fixes mis-capitalized exception class name, and moves a APIv3-only check to the + right place. + +- **IconPicker widget improvements + ([15760](https://github.com/civicrm/civicrm-core/pull/15760))** + + Fixes some style issues with the icon picker widget and adds some controls to + the dialog. + +- **CRM_Core_Menu - Fix warnings during local test run + ([16406](https://github.com/civicrm/civicrm-core/pull/16406))** + + Fixes the warning `Warning: simplexml_load_file(): I/O warning : failed to + load external entity` when running the test suite on Drupal 8 sites on OSX. + +- **Add user friendly error message on merge error + ([dev/core#1540](https://lab.civicrm.org/dev/core/issues/1540): + [16340](https://github.com/civicrm/civicrm-core/pull/16340))** + + Adds a user friendly error when attempting to merge two contacts from the + Advanced Search Screen when no Supervised rule is present on the site, before + this change a fatal error was thrown. + +- **Enotice fix ([16293](https://github.com/civicrm/civicrm-core/pull/16293))** + + Fixes an "Warning: Invalid argument supplied foreach()" e-notice on the edit + smart group screen. + +- **Force reCaptcha is not working when pay later enabled + ([16282](https://github.com/civicrm/civicrm-core/pull/16282))** + + Ensures that ReCaptcha is always on even if only pay later is enabled as a + payment method. + +- **Dedupe rules don't work with custom fields/Variable type error during import + process ([dev/core#1597](https://lab.civicrm.org/dev/core/issues/1597) and + [dev/core#1595](https://lab.civicrm.org/dev/core/issues/1595): + [16558](https://github.com/civicrm/civicrm-core/pull/16558))** + + Fixes a regression where dedupe rules were failing when attempting to use a + custom field as the match field. + +- **Select_string only accepts integers: 1 + ([dev/translation#36](https://lab.civicrm.org/dev/translation/issues/36): + [16599](https://github.com/civicrm/civicrm-core/pull/16599))** + + Fixes an error for translated sites when trying to perform a contact search. + +- **Advanced Search: "active period" filter regression + ([dev/core#1592](https://lab.civicrm.org/dev/core/issues/1592): + [16535](https://github.com/civicrm/civicrm-core/pull/16535))** + + Fixes a bug in Advanced Search where the filter "active period" (for + relationships) is not respected. + +- **Advanced search links on mailing reports page give "DB Error: syntax error" + ([dev/core#1551](https://lab.civicrm.org/dev/core/issues/1551): + [16534](https://github.com/civicrm/civicrm-core/pull/16534))** + + Fixes a regression where this url + "civicrm/contact/search/advanced?force=1&mailing_id=1" throws a fatal error. + +- **Upgrade fails when civicrm_managed table contains a row including + entity_type='PaymentProcessorType'; + ([dev/core#1498](https://lab.civicrm.org/dev/core/issues/1498): + [16521](https://github.com/civicrm/civicrm-core/pull/16521))** + +- **Fix loading with alternate packages path (system-level) + ([16407](https://github.com/civicrm/civicrm-core/pull/16407))** + +- **Fix loading with alternate packages path (UI-level) + ([16409](https://github.com/civicrm/civicrm-core/pull/16409))** + +- **setup.sh - Fixes for running in basic composer file-structure + ([16408](https://github.com/civicrm/civicrm-core/pull/16408))** + +- **Make $civicrm_paths less sensitive to trailing slashes. Add tests. + ([16404](https://github.com/civicrm/civicrm-core/pull/16404))** + +- **Prevent PropertBag from being so noisy about deprecation warnings + ([16390](https://github.com/civicrm/civicrm-core/pull/16390))** + +- **Wrong parameter passed to executeQuery function + ([16353](https://github.com/civicrm/civicrm-core/pull/16353))** + +- **Update temp table handler to support utf8mb4 if that is the db collation + ([15992](https://github.com/civicrm/civicrm-core/pull/15992))** + +- **Enforce isSkipLineItem for membership payment entity in Order.create + ([15891](https://github.com/civicrm/civicrm-core/pull/15891))** + +- **Fetch Only Active Custom Group Extend Values + ([15759](https://github.com/civicrm/civicrm-core/pull/15759))** + +- **Ensure that we always return a raw urlencoded url for extenal urls to fix + Flexmailer tests + ([16265](https://github.com/civicrm/civicrm-core/pull/16265))** + +- **Country/State PseudoConstant not sorted according to the locale + ([16258](https://github.com/civicrm/civicrm-core/pull/16258))** + +- **Change check.gif to an actual gif (was a PNG) + ([16220](https://github.com/civicrm/civicrm-core/pull/16220))** + +- **Fix Error handling following DB Package upgrade + ([16213](https://github.com/civicrm/civicrm-core/pull/16213))** + +- **Do not escape html in report header and footers on API create + ([dev/core#1286](https://lab.civicrm.org/dev/core/issues/1286): + [15383](https://github.com/civicrm/civicrm-core/pull/15383))** + +- **Editing a group description inline causes the recent items list to display + blank instead of the group title + ([dev/core#1506](https://lab.civicrm.org/dev/core/issues/1506): + [16197](https://github.com/civicrm/civicrm-core/pull/16197))** + +- **Recent items list has blank entry and E_NOTICE's when viewing an Email + activity from activities tab + ([dev/core#1507](https://lab.civicrm.org/dev/core/issues/1507): + [16195](https://github.com/civicrm/civicrm-core/pull/16195))** + +- **'Merge All Contacts with the Same Address' doesn't consider Household + replace individuals that share same address. ([CRM-21858 + ](https://issues.civicrm.org/jira/browse/CRM-21858) and + [dev/core#1364](https://lab.civicrm.org/dev/core/issues/1364): + [16369](https://github.com/civicrm/civicrm-core/pull/16369))** + +- **Scheduled reminder emails sent to contacts with do_not_email set or with + email on hold ([dev/core#1378](https://lab.civicrm.org/dev/core/issues/1378): + [15778](https://github.com/civicrm/civicrm-core/pull/15778))** + +- **Update BAO_Acl internal functions to protected & unused to deprecated + ([16189](https://github.com/civicrm/civicrm-core/pull/16189))** + +- **Deactivating CiviContribute causes SQL error + ([dev/core#547](https://lab.civicrm.org/dev/core/issues/547): + [16365](https://github.com/civicrm/civicrm-core/pull/16365))** + +### CiviCase + +- **Changing a civicase activity's label breaks the max_instances check + ([dev/core#1116](https://lab.civicrm.org/dev/core/issues/1116): + [16347](https://github.com/civicrm/civicrm-core/pull/16347))** + +- **Case Resource shows contact names that are not accessible to logged in user + ([dev/core#1499](https://lab.civicrm.org/dev/core/issues/1499): + [16150](https://github.com/civicrm/civicrm-core/pull/16150))** + +- **Fix activity.case_id token to always display the first case ID + ([16208](https://github.com/civicrm/civicrm-core/pull/16208))** + +### CiviContribute + +- **Positive integer expected for recurring interval even when user is not + making a recurring contribution + ([dev/core#1588](https://lab.civicrm.org/dev/core/issues/1588): + [16532](https://github.com/civicrm/civicrm-core/pull/16532))** + + Fixes a Fatal error when the recurring option "Support recurring intervals" is + enabled on a contribution page. + +- **Make getTotalPayments return 0 instead of NULL + ([16129](https://github.com/civicrm/civicrm-core/pull/16129))** + +- **Email address token on the confirmation message not working for a pay later + contribution. ([dev/core#1255](https://lab.civicrm.org/dev/core/issues/1255): + [15314](https://github.com/civicrm/civicrm-core/pull/15314))** + +- **Paypal IPN fails when contact is merged + ([dev/core#1249](https://lab.civicrm.org/dev/core/issues/1249): + [15307](https://github.com/civicrm/civicrm-core/pull/15307))** + +- **`,` as decimal separator, and [space] as thousand separators leads to api + errors ([dev/core#1522](https://lab.civicrm.org/dev/core/issues/1522): + [16392](https://github.com/civicrm/civicrm-core/pull/16392))** + +- **Fix retrieving contribution_status_id for manual payment processor + ([16018](https://github.com/civicrm/civicrm-core/pull/16018))** + +- **Set contribution status to refunded when it has been refunded + ([16148](https://github.com/civicrm/civicrm-core/pull/16148))** + +### CiviEvent + +- **"Confirm Event Invitation" message template has a bad variable + ([dev/event#32](https://lab.civicrm.org/dev/event/issues/32): + [16367](https://github.com/civicrm/civicrm-core/pull/16367))** + + Fixes the URL for self-service updates links in the "Confirm Event Invitation" + message template to include the participant ID so that they link correctly. + +- **Respect form value for register_date on participant form + ([16439](https://github.com/civicrm/civicrm-core/pull/16439))** + + Fixes a bug where the participant registration date is exposed on the + backoffice event form, but when a credit card payment is being submitted it is + ignored. + +- **Scheduled reminders are incorrectly sent from event templates when + "additional group" is selected + ([dev/event#28](https://lab.civicrm.org/dev/event/issues/28): + [16311](https://github.com/civicrm/civicrm-core/pull/16311))** + +- **"Confirm from waitlist" doesn't consider whether participant roles are + counted. ([dev/event#23](https://lab.civicrm.org/dev/event/issues/23): + [16098](https://github.com/civicrm/civicrm-core/pull/16098))** + +- **Event registration form doesn't prevent multiple signups for waitlisted + participants. ([dev/event#30](https://lab.civicrm.org/dev/event/issues/30): + [16358](https://github.com/civicrm/civicrm-core/pull/16358))** + +- **Permission error on event info page for anonymous users + ([dev/core#1517](https://lab.civicrm.org/dev/core/issues/1517): + [16266](https://github.com/civicrm/civicrm-core/pull/16266))** + +### CiviMember + +- **Changing the membership type causes multiple copies of related membership + text on edit membership page + ([dev/core#1537](https://lab.civicrm.org/dev/core/issues/1537): + [16326](https://github.com/civicrm/civicrm-core/pull/16326))** + +- **search builder: member since field ignored + ([dev/core#1602](https://lab.civicrm.org/dev/core/issues/1602): + [16578](https://github.com/civicrm/civicrm-core/pull/16578))** + + Ensures that "Search Builder" respects the "Member Since" field. + +### Drupal Integration + +- **composer.json - Relax psr/log constraint. Improve D8 compatibility. + ([16471](https://github.com/civicrm/civicrm-core/pull/16471))** + + Fixes a composer conflict when installing CiviCRM on Drupal 8.7. + +- **Drupal8: Enabling language breaks a fresh CiviCRM install + ([dev/drupal#85](https://lab.civicrm.org/dev/drupal/issues/85): + [15912](https://github.com/civicrm/civicrm-core/pull/15912))** + +- **Drupal8 - Contact Report does not load any values in the ACL Group/Role + field ([dev/drupal#89](https://lab.civicrm.org/dev/drupal/issues/89): + [16273](https://github.com/civicrm/civicrm-core/pull/16273) and + [15318](https://github.com/civicrm/civicrm-core/pull/15318))** + +- **CiviCRM session instance not working when Masquerading in Drupal 7 + ([dev/drupal#98](https://lab.civicrm.org/dev/drupal/issues/98): + [16177](https://github.com/civicrm/civicrm-core/pull/16177))** + +- **Wiki link in OG Sync module description gives a 404 + ([dev/drupal#102](https://lab.civicrm.org/dev/drupal/issues/102): + [595](https://github.com/civicrm/civicrm-drupal/pull/595))** + +## <a name="misc"></a>Miscellany + +- **Duplicate code (for real) + ([16363](https://github.com/civicrm/civicrm-core/pull/16363) and + [16567](https://github.com/civicrm/civicrm-core/pull/16567))** + +- **Mailing Subscribe Form: remove nbsp from descriptions + ([16186](https://github.com/civicrm/civicrm-core/pull/16186))** + +- **Remove SymfonyComponents/YAML package + ([285](https://github.com/civicrm/civicrm-packages/pull/285))** + +- **Update DB_Object + ([280](https://github.com/civicrm/civicrm-packages/pull/280))** + +- **Update gettext to latest tagged release + ([227](https://github.com/civicrm/civicrm-packages/pull/227))** + +- **Upgrade DB package to be version 1.9.3 + ([276](https://github.com/civicrm/civicrm-packages/pull/276))** + +- **Update copyright headers following merge of #14662 + ([16199](https://github.com/civicrm/civicrm-core/pull/16199))** + +- **Add tax rates to metadata + ([16253](https://github.com/civicrm/civicrm-core/pull/16253))** + +- **Add helper for getting participantValues + ([16355](https://github.com/civicrm/civicrm-core/pull/16355))** + +- **Update docs link for edit scheduled job parameters + ([16299](https://github.com/civicrm/civicrm-core/pull/16299))** + +- **Start to use function rather than multiple queries for event details add + test ([16329](https://github.com/civicrm/civicrm-core/pull/16329))** + +- **Simplify event title retrieval, use cache, add test + ([16345](https://github.com/civicrm/civicrm-core/pull/16345))** + +- **Change function buildEventFeeForm to non-static + ([16337](https://github.com/civicrm/civicrm-core/pull/16337))** + +- **Finish removal of deferred_revenue_enabled from non-standard setting + ([16395](https://github.com/civicrm/civicrm-core/pull/16395))** + +- **Api4 - Improve Entity::get + ([16346](https://github.com/civicrm/civicrm-core/pull/16346))** + +- **Api4 - Make abstract function abstract + ([16343](https://github.com/civicrm/civicrm-core/pull/16343))** + +- **Api4 - Use explicit adder functions rather than magicMethod + ([16372](https://github.com/civicrm/civicrm-core/pull/16372))** + +- **Update contributor-key.yml + ([16268](https://github.com/civicrm/civicrm-core/pull/16268))** + +- **Update my contributor details + ([16184](https://github.com/civicrm/civicrm-core/pull/16184))** + +- **APIv4 documentation & code cleanup + ([16457](https://github.com/civicrm/civicrm-core/pull/16457))** + +- **Fix minor typo in help text. + ([16303](https://github.com/civicrm/civicrm-core/pull/16303))** + +- **Extract code for isPaymentOnExistingContribution. + ([16327](https://github.com/civicrm/civicrm-core/pull/16327))** + +- **Remove function that exactly matches parent class. + ([16316](https://github.com/civicrm/civicrm-core/pull/16316))** + +- **Remove unsupported and unused package DB_Table + ([277](https://github.com/civicrm/civicrm-packages/pull/277))** + +- **Remove $ids as parameter for Membership::add + ([16192](https://github.com/civicrm/civicrm-core/pull/16192))** + +- **Remove unused code in Case/Form/Activity postProcess + ([16304](https://github.com/civicrm/civicrm-core/pull/16304))** + +- **Remove never passed-in parameter from addPayments + ([16262](https://github.com/civicrm/civicrm-core/pull/16262))** + +- **Remove duplicate line of code + ([16317](https://github.com/civicrm/civicrm-core/pull/16317))** + +- **Remove unreachable code lines. + ([16349](https://github.com/civicrm/civicrm-core/pull/16349))** + +- **Remove unused code + ([16371](https://github.com/civicrm/civicrm-core/pull/16371))** + +- **Remove irrelevant code. + ([16348](https://github.com/civicrm/civicrm-core/pull/16348))** + +- **Remove unindexed join from getACLRoles query + ([16183](https://github.com/civicrm/civicrm-core/pull/16183))** + +- **Remove unmaintained unsupported System_Command package + ([283](https://github.com/civicrm/civicrm-packages/pull/283))** + +- **fix typo's in the text + ([16361](https://github.com/civicrm/civicrm-core/pull/16361))** + +- **fix more typo's in the text + ([16368](https://github.com/civicrm/civicrm-core/pull/16368))** + +- **Fix unit tests after gettext merge + ([282](https://github.com/civicrm/civicrm-packages/pull/282))** + +- **Update recently-added PathUrlTest to be more representative + ([16607](https://github.com/civicrm/civicrm-core/pull/16607))** + +- **Fix tests to use buildFeeFn + ([16389](https://github.com/civicrm/civicrm-core/pull/16389))** + +- **Add unit test to back office form when a payment is made against a partially + paid contribution + ([16437](https://github.com/civicrm/civicrm-core/pull/16437))** + +- **Revised version of test from #15725 + ([15948](https://github.com/civicrm/civicrm-core/pull/15948))** + +- **Update failing test to match intervening changes elsewhere + ([16270](https://github.com/civicrm/civicrm-core/pull/16270))** + +- **Fix unit test so price set params are valid + ([16344](https://github.com/civicrm/civicrm-core/pull/16344))** + +- **Update Export unit test to pass on MySQL 8 + ([16375](https://github.com/civicrm/civicrm-core/pull/16375))** + +- **Basic extraction of paid event processing + ([16281](https://github.com/civicrm/civicrm-core/pull/16281))** + +- **Refactor CRM_Contact_BAO_Contact::importableFields() to use metadata + ([16222](https://github.com/civicrm/civicrm-core/pull/16222))** + +- **[REF] Remove setting of unused function. + ([16315](https://github.com/civicrm/civicrm-core/pull/16315))** + +- **[REF] Remove apparent copy & paste code. + ([16308](https://github.com/civicrm/civicrm-core/pull/16308))** + +- **[REF] Move the bounce to the start of the form submit + ([16333](https://github.com/civicrm/civicrm-core/pull/16333))** + +- **[REF] Eliminate silly parameter from function signature. + ([16330](https://github.com/civicrm/civicrm-core/pull/16330))** + +- **[REF] Extract code that assigns event variables to the tpl + ([16325](https://github.com/civicrm/civicrm-core/pull/16325))** + +- **[REF] Fix return value on deleting financial type + ([16280](https://github.com/civicrm/civicrm-core/pull/16280))** + +- **[REF] Move handling of default payment instrument for a payment proc… + ([16279](https://github.com/civicrm/civicrm-core/pull/16279))** + +- **[REF] Move use of priceSetID & amount_override to where they are used + ([16252](https://github.com/civicrm/civicrm-core/pull/16252))** + +- **[REF] Cleanup CRM_Member_BAO_Membership::buildMembershipTypeValues + ([16059](https://github.com/civicrm/civicrm-core/pull/16059))** + +- **[REF] Remove enclosed & escaped variables + ([16249](https://github.com/civicrm/civicrm-core/pull/16249))** + +- **[REF] Minor code simplification in dedupe. + ([16245](https://github.com/civicrm/civicrm-core/pull/16245))** + +- **[REF] move sessionStart functionality to System subclass + ([16241](https://github.com/civicrm/civicrm-core/pull/16241))** + +- **[REF] Update fetchAll function signature to match parent function + ([16198](https://github.com/civicrm/civicrm-core/pull/16198))** + +- **REF Simplify if statement on case activity form + ([16210](https://github.com/civicrm/civicrm-core/pull/16210))** + +- **[REF] Eliminate ['userID'] as an input for BAO_Membership::create + ([16196](https://github.com/civicrm/civicrm-core/pull/16196))** + +- **[REF] Move the storing of custom data into the add function rather th… + ([16191](https://github.com/civicrm/civicrm-core/pull/16191))** + +- **[REF] Remove never-passed param from getLineItems + ([16251](https://github.com/civicrm/civicrm-core/pull/16251))** + +- **[REF] Extract location wrangling code. + ([16247](https://github.com/civicrm/civicrm-core/pull/16247))** + +- **[REF] rename lineItem & lineItems variable + ([16254](https://github.com/civicrm/civicrm-core/pull/16254))** + +- **[REF] Activate fetchAll function in DataObject file + ([281](https://github.com/civicrm/civicrm-packages/pull/281))** + +- **[REF] Reduce places where we pass ids into Mailing::create + ([16263](https://github.com/civicrm/civicrm-core/pull/16263))** + +- **[REF] Remove ids and fully deprecate passing it to Contribution::create + ([16256](https://github.com/civicrm/civicrm-core/pull/16256))** + +- **[REF] Pass params into function rather than this weird check for whether + params exists. ([16438](https://github.com/civicrm/civicrm-core/pull/16438))** + +- **[REF] Move assignment of BalanceAmount + ([16334](https://github.com/civicrm/civicrm-core/pull/16334))** + +- **[REF] Fix CRM_Core_BAO_UFGroup::createUFJoin to not receive by reference. + ([16260](https://github.com/civicrm/civicrm-core/pull/16260))** + +- **[REF] Interim code cleanup - make the usage of addPayments clearer + ([16441](https://github.com/civicrm/civicrm-core/pull/16441))** + +- **[REF] Remove unused variable + ([16434](https://github.com/civicrm/civicrm-core/pull/16434))** + +- **[REF] Add test for line item, extract fn + ([16402](https://github.com/civicrm/civicrm-core/pull/16402))** + +- **[REF] Ensure that the from is correctly modified in both the main que… + ([16422](https://github.com/civicrm/civicrm-core/pull/16422))** + +- **[REF] Remove some unused variables + ([16414](https://github.com/civicrm/civicrm-core/pull/16414))** + +- **REF Extract code to build pcp_supporter_text and enable translation + ([16271](https://github.com/civicrm/civicrm-core/pull/16271))** + +- **[REF] Remove unused variables + ([16396](https://github.com/civicrm/civicrm-core/pull/16396))** + +- **[REF] Extract function to export header row + ([16364](https://github.com/civicrm/civicrm-core/pull/16364))** + +- **[REF] Extract & share code to determine revenue recognition date. + ([16388](https://github.com/civicrm/civicrm-core/pull/16388))** + +- **[NFC] code cleanup + ([16310](https://github.com/civicrm/civicrm-core/pull/16310))** + +- **[NFC] Code cleanup + ([16309](https://github.com/civicrm/civicrm-core/pull/16309))** + +- **[NFC] code cleanup + ([16301](https://github.com/civicrm/civicrm-core/pull/16301))** + +- **[NFC] Minor code cleanup + ([16290](https://github.com/civicrm/civicrm-core/pull/16290))** + +- **[NFC] Extend unit test to cover for recent refactor by eileen to ensure sup… + ([16332](https://github.com/civicrm/civicrm-core/pull/16332))** + +- **[NFC] Code formatting + ([16331](https://github.com/civicrm/civicrm-core/pull/16331))** + +- **[NFC] Code cleanup + ([16314](https://github.com/civicrm/civicrm-core/pull/16314))** + +- **NFC Convert Manage PCP page to short array syntax + ([16320](https://github.com/civicrm/civicrm-core/pull/16320))** + +- **[NFC] Add in more assertions around the content of line items and tot… + ([16218](https://github.com/civicrm/civicrm-core/pull/16218))** + +- **[NFC] Doc Block fix should be bool no boolean as per coding standards + ([596](https://github.com/civicrm/civicrm-drupal/pull/596))** + +- **[NFC] Code comments + ([16248](https://github.com/civicrm/civicrm-core/pull/16248))** + +- **[NFC] Minor cleanup in test class + ([16250](https://github.com/civicrm/civicrm-core/pull/16250))** + +- **[NFC] Skip utf8mb4 test on MySQL versions lower than 5.7 + ([16483](https://github.com/civicrm/civicrm-core/pull/16483))** + +- **[NFC] Test update following PR #16150, assertEquals first param is th… + ([16219](https://github.com/civicrm/civicrm-core/pull/16219))** + +- **[NFC] Explicitly specify that it is the Payment processor Type Name n… + ([16275](https://github.com/civicrm/civicrm-core/pull/16275))** + +- **NFC Fix TokenRow docblock + ([16452](https://github.com/civicrm/civicrm-core/pull/16452))** + +- **[NFC] Minor test cleanup. + ([16450](https://github.com/civicrm/civicrm-core/pull/16450))** + +- **[NFC] Remove unused local variables from + CRM_Contribute_Form_AdditionalPayment::processCreditCard + ([16342](https://github.com/civicrm/civicrm-core/pull/16342))** + +- **[NFC] throw exceptions, single quotes, declare exceptions, remove unused + param ([16415](https://github.com/civicrm/civicrm-core/pull/16415))** + +- **(NFC) Update Var declaration to be standard in CRM folder + ([16382](https://github.com/civicrm/civicrm-core/pull/16382))** + +- **(NFC) Civi/*.php - Update for + Drupal.Commenting.VariableComment.IncorrectVarType + ([16379](https://github.com/civicrm/civicrm-core/pull/16379))** + +- **NFC Add parameter definition to membershipstatus.calc + ([16370](https://github.com/civicrm/civicrm-core/pull/16370))** + +- **[NFC] Ensure that annon permissions are correctly assigned when enabling + civicrm webtest module in backdrop + ([16547](https://github.com/civicrm/civicrm-core/pull/16547))** + +- **[NFC] Fix style error + ([16549](https://github.com/civicrm/civicrm-core/pull/16549))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +a-n The Artists Information Company - William Mortada; AGH Strategies - Andrew +Hunt; Agileware - Pengyi Zhang; Andrei Mondoc; British Humanist Association - +Andrew West; Caltha - Tomasz Pietrzkowski; Chris Burgess; Circle Interactive - +Pradeep Nayak; CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts, Tim Otten; +CiviDesk - Yashodha Chaku; CompuCorp - Vinu Varshith Sekar; Coop SymbioTIC - +Mathieu Lutfy, Samuel Vanhove; Dave D; Electronic Frontier Foundation - Mark +Burdett; Fuzion - Jitendra Purohit; GMCVO Databases - Jade Gaunt; JMA Consulting - +Seamus Lee; John Kingsnorth; Joinery - Allen Shaw; Joris Vercammen; Megaphone +Technology Consulting - Jon Goldberg; MJCO - Mikey O'Toole; MJW Consulting - +Matthew Wire; myDropWizard - David Snopek; Progressive Technology Project - +Jamie McClelland; Squiffle Consulting - Aidan Saunders; Tadpole Collective - +Kevin Cristiano; Third Sector Design - Michael McAndrew; Timbsoft Technologies - +Tunbola Ogunwande; Web Access - Kurund Jalmi; Wikimedia Foundation - Eileen +McNaughton, Elliott Eggleston + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +AGH Strategies - Alice Frumin; Agileware - Justin Freeman; Andrew +Cormick-Dockery; Artful Robot - Rich Lott; Christian Wach; CiviDesk - Nicolas +Ganivet; CompuCorp - Shitij Gugnani; Francesc Bassas i Bullich; Fuzion - Luke +Stewart, Peter Davis; Greenpeace Central and Eastern Europe - Patrick Figel; JMA +Consulting - Joe Murray, Monish Deb; Korlon - Stuart Gaston; Lighthouse Design +and Consulting - Brian Shaughnessy; mikantchap; Richard van Oosterhout; SYSTOPIA +Organisationsberatung - Björn Endres; tapashdatta; + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andrew 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/Address.setting.php b/civicrm/settings/Address.setting.php index 71fc5dca4b792020625a8d71a83a792bde0dd23d..36264f540a505fb73764f849b264f82be99c1c26 100644 --- a/civicrm/settings/Address.setting.php +++ b/civicrm/settings/Address.setting.php @@ -31,7 +31,6 @@ return [ 'pseudoconstant' => ['callback' => 'CRM_Core_SelectValues::addressProvider'], 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => 'CiviCRM includes an optional plugin for interfacing with the United States Postal Services (USPS) Address Standardization web service. You must register to use the USPS service at https://www.usps.com/business/web-tools-apis/address-information.htm. If you are approved, they will provide you with a User ID and the URL for the service. Plugins for other address standardization services may be available from 3rd party developers. If installed, they will be included in the drop-down below. ', ], 'address_standardization_userid' => [ @@ -45,7 +44,6 @@ return [ 'title' => ts('Provider service user ID'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'address_standardization_url' => [ @@ -59,7 +57,6 @@ return [ 'title' => ts('Provider Service URL'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => 'Web Service URL', 'validate_callback' => 'CRM_Utils_Rule::url', ], @@ -74,7 +71,7 @@ return [ 'title' => ts('Hide Country in Mailing Labels when same as domain country'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Do not display the country field in mailing labels when the country is the same as that of the domain', + 'description' => ts('Do not display the country field in mailing labels when the country is the same as that of the domain'), 'help_text' => NULL, ], ]; diff --git a/civicrm/settings/Case.setting.php b/civicrm/settings/Case.setting.php index 83ab7ae13c2a76533e45fe9c53f57bf107ea3cd1..23c793bdd3e7304a9d0b79187b29a61c38cf9d2b 100644 --- a/civicrm/settings/Case.setting.php +++ b/civicrm/settings/Case.setting.php @@ -33,13 +33,13 @@ return [ ], 'default' => 'default', 'add' => '4.7', - 'title' => 'Redact Activity Email', + 'title' => ts('Redact Activity Email'), 'is_domain' => 1, 'is_contact' => 0, 'pseudoconstant' => [ 'callback' => 'CRM_Case_Info::getRedactOptions', ], - 'description' => 'Should activity emails be redacted? (Set "Default" to load setting from the legacy "Settings.xml" file.)', + 'description' => ts('Should activity emails be redacted? (Set "Default" to load setting from the legacy "Settings.xml" file.)'), 'help_text' => '', ], 'civicaseAllowMultipleClients' => [ @@ -54,13 +54,13 @@ return [ ], 'default' => 'default', 'add' => '4.7', - 'title' => 'Allow Multiple Case Clients', + 'title' => ts('Allow Multiple Case Clients'), 'is_domain' => 1, 'is_contact' => 0, 'pseudoconstant' => [ 'callback' => 'CRM_Case_Info::getMultiClientOptions', ], - 'description' => 'How many clients may be associated with a given case? (Set "Default" to load setting from the legacy "Settings.xml" file.)', + 'description' => ts('How many clients may be associated with a given case? (Set "Default" to load setting from the legacy "Settings.xml" file.)'), 'help_text' => '', ], 'civicaseNaturalActivityTypeSort' => [ @@ -75,13 +75,13 @@ return [ ], 'default' => 'default', 'add' => '4.7', - 'title' => 'Activity Type Sorting', + 'title' => ts('Activity Type Sorting'), 'is_domain' => 1, 'is_contact' => 0, 'pseudoconstant' => [ 'callback' => 'CRM_Case_Info::getSortOptions', ], - 'description' => 'How to sort activity-types on the "Manage Case" screen? (Set "Default" to load setting from the legacy "Settings.xml" file.)', + 'description' => ts('How to sort activity-types on the "Manage Case" screen? (Set "Default" to load setting from the legacy "Settings.xml" file.)'), 'help_text' => '', ], 'civicaseActivityRevisions' => [ @@ -93,10 +93,10 @@ return [ 'default' => FALSE, 'html_type' => 'radio', 'add' => '4.7', - 'title' => 'Enable Embedded Activity Revisions', + 'title' => ts('Enable Embedded Activity Revisions'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Enable tracking of activity revisions embedded within the "civicrm_activity" table. Alternatively, see "Administer => System Settings => Misc => Logging".', + 'description' => ts('Enable tracking of activity revisions embedded within the "civicrm_activity" table. Alternatively, see "Administer => System Settings => Misc => Logging".'), 'help_text' => '', ], ]; diff --git a/civicrm/settings/Contribute.setting.php b/civicrm/settings/Contribute.setting.php index a44f05758e56f81183f2a922916ea1eeced7a8f8..fb2170cc6ff4fa3e7e43b76730377b5e8030e55c 100644 --- a/civicrm/settings/Contribute.setting.php +++ b/civicrm/settings/Contribute.setting.php @@ -27,10 +27,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => '1', 'add' => '4.1', - 'title' => 'CVV required for backoffice?', + 'title' => ts('CVV required for backoffice?'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Is the CVV code required for back office credit card transactions', + 'description' => ts('Is the CVV code required for back office credit card transactions'), 'help_text' => 'If set it back-office credit card transactions will required a cvv code. Leave as required unless you have a very strong reason to change', ], 'contribution_invoice_settings' => [ @@ -50,10 +50,9 @@ return [ 'tax_display_settings' => 'Inclusive', ], 'add' => '4.7', - 'title' => 'Contribution Invoice Settings', + 'title' => ts('Deprecated setting'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'invoicing' => [ @@ -65,13 +64,104 @@ return [ 'quick_form_type' => 'Element', 'default' => 0, 'add' => '4.7', - 'title' => 'Enable Tax and Invoicing', + 'title' => ts('Enable Tax and Invoicing'), 'is_domain' => 1, 'is_contact' => 0, 'on_change' => [ 'CRM_Invoicing_Utils::onToggle', ], ], + 'credit_notes_prefix' => [ + 'group_name' => 'Contribute Preferences', + 'group' => 'contribute', + 'name' => 'credit_notes_prefix', + 'html_type' => 'text', + 'quick_form_type' => 'Element', + 'add' => '5.23', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Credit Notes Prefix'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => ts('Prefix to be prepended to credit note ids'), + 'default' => 'CN_', + 'help_text' => ts('The credit note ID is generated when a contribution is set to Refunded, Cancelled or Chargeback. It is visible on invoices, if invoices are enabled'), + ], + 'invoice_prefix' => [ + 'html_type' => 'text', + 'name' => 'invoice_prefix', + 'add' => '5.23', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('Invoice Prefix'), + 'description' => ts('Enter prefix to be be preprended when creating an invoice number'), + 'is_domain' => 1, + 'is_contact' => 0, + ], + 'invoice_due_date' => [ + 'name' => 'invoice_due_date', + 'html_type' => 'text', + 'title' => ts('Due Date'), + 'add' => '5.23', + 'type' => CRM_Utils_Type::T_INT, + 'is_domain' => 1, + 'is_contact' => 0, + ], + 'invoice_due_date_period' => [ + 'html_type' => 'select', + 'name' => 'invoice_due_date_period', + 'title' => ts('For transmission'), + 'weight' => 4, + 'add' => '5.23', + 'type' => CRM_Utils_Type::T_STRING, + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => ts('Select the interval for due date.'), + 'options' => [ + 'select' => ts('- select -'), + 'days' => ts('Days'), + 'months' => ts('Months'), + 'years' => ts('Years'), + ], + ], + 'invoice_notes' => [ + 'name' => 'invoice_notes', + 'html_type' => 'wysiwyg', + 'title' => ts('Notes or Standard Terms'), + 'type' => CRM_Utils_Type::T_STRING, + 'add' => '5.23', + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => ts('Enter note or message to be displayed on PDF invoice or credit notes '), + 'attributes' => ['rows' => 2, 'cols' => 40], + ], + 'invoice_is_email_pdf' => [ + 'name' => 'invoice_is_email_pdf', + 'html_type' => 'checkbox', + 'add' => '5.23', + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'is_domain' => 1, + 'is_contact' => 0, + 'title' => ts('Automatically email invoice when user purchases online'), + 'description' => ts('Should a pdf invoice be emailed automatically?'), + ], + 'tax_term' => [ + 'name' => 'tax_term', + 'html_type' => 'text', + 'add' => '5.23', + 'title' => ts('Tax Term'), + 'type' => CRM_Utils_Type::T_STRING, + 'is_domain' => 1, + 'is_contact' => 0, + ], + 'tax_display_settings' => [ + 'html_type' => 'select', + 'name' => 'tax_display_settings', + 'type' => CRM_Utils_Type::T_STRING, + 'add' => '5.23', + 'title' => ts('Tax Display Settings'), + 'is_domain' => 1, + 'is_contact' => 0, + 'pseudoconstant' => ['callback' => 'CRM_Core_SelectValues::taxDisplayOptions'], + ], 'acl_financial_type' => [ 'group_name' => 'Contribute Preferences', 'group' => 'contribute', @@ -81,10 +171,9 @@ return [ 'quick_form_type' => 'Element', 'default' => 0, 'add' => '4.7', - 'title' => 'Enable Access Control by Financial Type', + 'title' => ts('Enable Access Control by Financial Type'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, 'help' => ['id' => 'acl_financial_type'], ], @@ -97,10 +186,9 @@ return [ 'quick_form_type' => 'Element', 'default' => 0, 'add' => '4.7', - 'title' => 'Enable Deferred Revenue', + 'title' => ts('Enable Deferred Revenue'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'default_invoice_page' => [ @@ -116,10 +204,9 @@ return [ ], 'html_type' => 'select', 'add' => '4.7', - 'title' => 'Default invoice payment page', + 'title' => ts('Default invoice payment page'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'always_post_to_accounts_receivable' => [ @@ -131,10 +218,9 @@ return [ 'quick_form_type' => 'Element', 'default' => 0, 'add' => '4.7', - 'title' => 'Always post to Accounts Receivable?', + 'title' => ts('Always post to Accounts Receivable?'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'update_contribution_on_membership_type_change' => [ @@ -146,10 +232,10 @@ return [ 'quick_form_type' => 'Element', 'default' => 0, 'add' => '4.7', - 'title' => 'Automatically update related contributions when Membership Type is changed', + 'title' => ts('Automatically update related contributions when Membership Type is changed'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Enabling this setting will update related contribution of membership(s) except if the membership is paid for with a recurring contribution.', + 'description' => ts('Enabling this setting will update related contribution of membership(s) except if the membership is paid for with a recurring contribution.'), 'help_text' => NULL, ], ]; diff --git a/civicrm/settings/Core.setting.php b/civicrm/settings/Core.setting.php index 2b44ca6aae55e292bfa68501e682d332d4188280..fea724abd940d4544409aacc3e1b1600813430c9 100644 --- a/civicrm/settings/Core.setting.php +++ b/civicrm/settings/Core.setting.php @@ -171,7 +171,7 @@ return [ 'default' => FALSE, 'html_type' => 'radio', 'add' => '4.7', - 'title' => 'Accept profile submissions from external sites', + 'title' => ts('Accept profile submissions from external sites'), 'is_domain' => 1, 'is_contact' => 0, 'description' => ts('If enabled, CiviCRM will permit submissions from external sites to profiles. This is disabled by default to limit abuse.'), @@ -186,7 +186,7 @@ return [ 'default' => TRUE, 'html_type' => 'radio', 'add' => '4.7', - 'title' => 'Allow alerts to auto-dismiss?', + 'title' => ts('Allow alerts to auto-dismiss?'), 'is_domain' => 1, 'is_contact' => 0, 'description' => ts('If disabled, CiviCRM will not automatically dismiss any alerts after 10 seconds.'), diff --git a/civicrm/settings/Developer.setting.php b/civicrm/settings/Developer.setting.php index 55e8573ad035b00e25760fefe4bfe17d13c514fa..6c181734035553f5ab777630aac616302d1c8e1b 100644 --- a/civicrm/settings/Developer.setting.php +++ b/civicrm/settings/Developer.setting.php @@ -33,10 +33,10 @@ return [ ], 'default' => 'auto', 'add' => '4.7', - 'title' => 'Asset Caching', + 'title' => ts('Asset Caching'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Store computed JS/CSS content in cache files? (Note: In "Auto" mode, the "Debug" setting will determine whether to activate the cache.)', + 'description' => ts('Store computed JS/CSS content in cache files? (Note: In "Auto" mode, the "Debug" setting will determine whether to activate the cache.)'), 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => '\Civi\Core\AssetBuilder::getCacheModes', @@ -50,10 +50,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => '0', 'add' => '4.3', - 'title' => 'Enable Drupal Watchdog Logging', + 'title' => ts('Enable Drupal Watchdog Logging'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Set this value to Yes if you want CiviCRM error/debugging messages to appear in the Drupal error logs", + 'description' => ts('Set this value to Yes if you want CiviCRM error/debugging messages to appear in the Drupal error logs.'), 'help_text' => "Set this value to Yes if you want CiviCRM error/debugging messages the appear in your CMS' error log. In the case of Drupal, this will cause all CiviCRM error messages to appear in the watchdog (assuming you have Drupal's watchdog enabled)", ], 'debug_enabled' => [ @@ -66,10 +66,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => '0', 'add' => '4.3', - 'title' => 'Enable Debugging', + 'title' => ts('Enable Debugging'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Set this value to Yes if you want to use one of CiviCRM's debugging tools. This feature should NOT be enabled for production sites", + 'description' => ts("Set this value to Yes if you want to use one of CiviCRM's debugging tools. This feature should NOT be enabled for production sites."), 'help_text' => 'Do not turn this on on production sites', ], 'backtrace' => [ @@ -80,10 +80,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => '0', 'add' => '4.3', - 'title' => 'Display Backtrace', + 'title' => ts('Display Backtrace'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Set this value to Yes if you want to display a backtrace listing when a fatal error is encountered. This feature should NOT be enabled for production sites", + 'description' => ts('Set this value to Yes if you want to display a backtrace listing when a fatal error is encountered. This feature should NOT be enabled for production sites.'), ], 'environment' => [ 'group_name' => 'Developer Preferences', @@ -97,10 +97,10 @@ return [ 'optionGroupName' => 'environment', ], 'add' => '4.7', - 'title' => 'Environment', + 'title' => ts('Environment'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Setting to define the environment in which this CiviCRM instance is running.", + 'description' => ts('Setting to define the environment in which this CiviCRM instance is running.'), 'on_change' => [ 'CRM_Core_BAO_Setting::onChangeEnvironmentSetting', ], @@ -114,9 +114,9 @@ return [ 'html_type' => 'text', 'default' => NULL, 'add' => '4.3', - 'title' => 'Fatal Error Handler', + 'title' => ts('Fatal Error Handler'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Enter the path and class for a custom PHP error-handling function if you want to override built-in CiviCRM error handling for your site.", + 'description' => ts('Enter the path and class for a custom PHP error-handling function if you want to override built-in CiviCRM error handling for your site.'), ], ]; diff --git a/civicrm/settings/Directory.setting.php b/civicrm/settings/Directory.setting.php index ca3dac34fe61faec1c1ecee9d583e267a9e65368..0fb6485db96a1a550e87975605b25c491c85c041 100644 --- a/civicrm/settings/Directory.setting.php +++ b/civicrm/settings/Directory.setting.php @@ -31,10 +31,9 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Temporary Files Directory', + 'title' => ts('Temporary Files Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => 'File system path where temporary CiviCRM files - such as import data files - are uploaded.', ], 'imageUploadDir' => [ @@ -47,10 +46,10 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Image Directory', + 'title' => ts('Image Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'File system path where image files are uploaded. Currently, this path is used for images associated with premiums (CiviContribute thank-you gifts).', + 'description' => ts('File system path where image files are uploaded. Currently, this path is used for images associated with premiums (CiviContribute thank-you gifts).'), 'help_text' => NULL, ], 'customFileUploadDir' => [ @@ -63,10 +62,10 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Custom Files Directory', + 'title' => ts('Custom Files Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Path where documents and images which are attachments to contact records are stored (e.g. contact photos, resumes, contracts, etc.). These attachments are defined using \'file\' type custom fields.', + 'description' => ts('Path where documents and images which are attachments to contact records are stored (e.g. contact photos, resumes, contracts, etc.). These attachments are defined using \'file\' type custom fields.'), 'help_text' => NULL, ], 'customTemplateDir' => [ @@ -79,10 +78,10 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Custom Template Directory', + 'title' => ts('Custom Template Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Path where site specific templates are stored if any. This directory is searched first if set. Custom JavaScript code can be added to templates by creating files named templateFile.extra.tpl. (learn more...)', + 'description' => ts('Path where site specific templates are stored if any. This directory is searched first if set. Custom JavaScript code can be added to templates by creating files named templateFile.extra.tpl. (learn more...)'), 'help_text' => NULL, ], 'customPHPPathDir' => [ @@ -95,10 +94,10 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Custom PHP Directory', + 'title' => ts('Custom PHP Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Path where site specific PHP code files are stored if any. This directory is searched first if set.', + 'description' => ts('Path where site specific PHP code files are stored if any. This directory is searched first if set.'), 'help_text' => NULL, ], 'extensionsDir' => [ @@ -111,10 +110,10 @@ return [ 'quick_form_type' => 'Element', 'default' => NULL, 'add' => '4.1', - 'title' => 'Extensions Directory', + 'title' => ts('Extensions Directory'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Path where CiviCRM extensions are stored.', + 'description' => ts('Path where CiviCRM extensions are stored.'), 'help_text' => NULL, ], diff --git a/civicrm/settings/Extension.setting.php b/civicrm/settings/Extension.setting.php index 6daed0adab4b00a0100a279f121515c1859ba9ab..195de44bd08c62d4690890931320b2d89c54a3f7 100644 --- a/civicrm/settings/Extension.setting.php +++ b/civicrm/settings/Extension.setting.php @@ -33,10 +33,9 @@ return [ 'html_type' => 'text', 'default' => 'https://civicrm.org/extdir/ver={ver}|cms={uf}', 'add' => '4.3', - 'title' => 'Extension Repo URL', + 'title' => ts('Extension Repo URL'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => '', ], ]; diff --git a/civicrm/settings/Localization.setting.php b/civicrm/settings/Localization.setting.php index ed2504173dadf308c6fcefdb648de141511c2df5..d2bb11944a8f6ec2f89bd4ae25703941a73d27c8 100644 --- a/civicrm/settings/Localization.setting.php +++ b/civicrm/settings/Localization.setting.php @@ -37,8 +37,7 @@ return [ 'maxlength' => '100', ], 'default' => NULL, - 'title' => 'Custom Translate Function', - 'description' => '', + 'title' => ts('Custom Translate Function'), ], 'monetaryThousandSeparator' => [ 'group_name' => 'Localization Preferences', @@ -52,10 +51,9 @@ return [ ], 'default' => ',', 'add' => '4.3', - 'title' => 'Thousands Separator', + 'title' => ts('Thousands Separator'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'monetaryDecimalPoint' => [ @@ -70,10 +68,9 @@ return [ ], 'default' => '.', 'add' => '4.3', - 'title' => 'Decimal Delimiter', + 'title' => ts('Decimal Delimiter'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'moneyformat' => [ @@ -85,10 +82,9 @@ return [ 'html_type' => 'text', 'default' => '%c %a', 'add' => '4.3', - 'title' => 'Monetary Amount Display', + 'title' => ts('Monetary Amount Display'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'moneyvalueformat' => [ @@ -100,10 +96,9 @@ return [ 'html_type' => 'text', 'default' => '%!i', 'add' => '4.3', - 'title' => 'Monetary Value Display', + 'title' => ts('Monetary Value Display'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'defaultCurrency' => [ @@ -118,10 +113,10 @@ return [ ], 'default' => 'USD', 'add' => '4.3', - 'title' => 'Default Currency', + 'title' => ts('Default Currency'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Default currency assigned to contributions and other monetary transactions.', + 'description' => ts('Default currency assigned to contributions and other monetary transactions.'), 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Admin_Form_Setting_Localization::getCurrencySymbols', @@ -141,11 +136,11 @@ return [ //'class' => 'crm-select2', ], 'add' => '4.4', - 'title' => 'Default Country', + 'title' => ts('Default Country'), 'is_domain' => 1, 'is_contact' => 0, 'is_required' => FALSE, - 'description' => 'This value is selected by default when adding a new contact address.', + 'description' => ts('This value is selected by default when adding a new contact address.'), 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Admin_Form_Setting_Localization::getAvailableCountries', @@ -167,8 +162,8 @@ return [ //), //'html_attributes', 'default' => NULL, - 'title' => 'Default State/Province', - 'description' => 'This value is selected by default when adding a new contact address.', + 'title' => ts('Default State/Province'), + 'description' => ts('This value is selected by default when adding a new contact address.'), ], 'countryLimit' => [ 'group_name' => 'Localization Preferences', @@ -184,10 +179,9 @@ return [ ], 'default' => [], 'add' => '4.3', - 'title' => 'Available Countries', + 'title' => ts('Available Countries'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Admin_Form_Setting_Localization::getAvailableCountries', @@ -207,10 +201,9 @@ return [ ], 'default' => [], 'add' => '4.3', - 'title' => 'Available States and Provinces (by Country)', + 'title' => ts('Available States and Provinces (by Country)'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Admin_Form_Setting_Localization::getAvailableCountries', @@ -224,10 +217,9 @@ return [ 'quick_form_type' => 'YesNo', 'default' => '0', 'add' => '4.3', - 'title' => 'Inherit CMS Language', + 'title' => ts('Inherit CMS Language'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'dateformatDatetime' => [ @@ -239,10 +231,9 @@ return [ 'html_type' => 'text', 'default' => '%B %E%f, %Y %l:%M %P', 'add' => '4.3', - 'title' => 'Date Format: Complete Date and Time', + 'title' => ts('Date Format: Complete Date and Time'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'dateformatFull' => [ @@ -254,10 +245,9 @@ return [ 'html_type' => 'text', 'default' => '%B %E%f, %Y', 'add' => '4.3', - 'title' => 'Date Format: Complete Date', + 'title' => ts('Date Format: Complete Date'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'dateformatPartial' => [ @@ -269,10 +259,9 @@ return [ 'html_type' => 'text', 'default' => '%B %Y', 'add' => '4.3', - 'title' => 'Date Format: Month and Year', + 'title' => ts('Date Format: Month and Year'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'dateformatTime' => [ @@ -291,8 +280,7 @@ return [ 'maxlength' => '60', ], 'default' => '%l:%M %P', - 'title' => 'Date Format: Time Only', - 'description' => '', + 'title' => ts('Date Format: Time Only'), ], 'dateformatYear' => [ 'add' => '4.7', @@ -310,8 +298,7 @@ return [ 'maxlength' => '60', ], 'default' => '%Y', - 'title' => 'Date Format: Year Only', - 'description' => '', + 'title' => ts('Date Format: Year Only'), ], 'dateformatFinancialBatch' => [ 'add' => '4.7', @@ -329,8 +316,7 @@ return [ 'maxlength' => '60', ], 'default' => '%m/%d/%Y', - 'title' => 'Date Format: Financial Batch', - 'description' => '', + 'title' => ts('Date Format: Financial Batch'), ], 'dateformatshortdate' => [ 'add' => '4.7', @@ -348,8 +334,7 @@ return [ 'maxlength' => '60', ], 'default' => '%m/%d/%Y', - 'title' => 'Date Format: Short date Month Day Year', - 'description' => '', + 'title' => ts('Date Format: Short date Month Day Year'), ], 'dateInputFormat' => [ 'add' => '4.7', @@ -366,8 +351,7 @@ return [ 'callback' => 'CRM_Core_SelectValues::getDatePluginInputFormats', ], 'default' => 'mm/dd/yy', - 'title' => 'Date Input Format', - 'description' => '', + 'title' => ts('Date Input Format'), ], 'fieldSeparator' => [ 'add' => '4.7', @@ -385,8 +369,8 @@ return [ 'maxlength' => '8', ], 'default' => ',', - 'title' => 'Import / Export Field Separator', - 'description' => 'Global CSV separator character. Modify this setting to enable import and export of different kinds of CSV files (for example: \',\' \';\' \':\' \'|\' ).', + 'title' => ts('Import / Export Field Separator'), + 'description' => ts('Global CSV separator character. Modify this setting to enable import and export of different kinds of CSV files (for example: \',\' \';\' \':\' \'|\' ).'), ], 'fiscalYearStart' => [ 'add' => '4.7', @@ -400,8 +384,7 @@ return [ 'quick_form_type' => 'MonthDay', 'html_type' => 'MonthDay', 'default' => ['M' => 1, 'd' => 1], - 'title' => 'Fiscal Year Start', - 'description' => '', + 'title' => ts('Fiscal Year Start'), ], 'languageLimit' => [ 'group_name' => 'Localization Preferences', @@ -416,10 +399,9 @@ return [ ], 'default' => NULL, 'add' => '4.3', - 'title' => 'Available Languages (Multi-lingual)', + 'title' => ts('Available Languages (Multi-lingual)'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Core_I18n::languages', @@ -438,10 +420,9 @@ return [ ], 'default' => NULL, 'add' => '5.9', - 'title' => 'Available Languages', + 'title' => ts('Available Languages'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => ts('User Interface languages available to users'), 'pseudoconstant' => [ 'callback' => 'CRM_Core_I18n::languages', @@ -459,10 +440,9 @@ return [ ], 'default' => 'en_US', 'add' => '4.3', - 'title' => 'Default Language', + 'title' => ts('Default Language'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, 'pseudoconstant' => [ 'callback' => 'CRM_Admin_Form_Setting_Localization::getDefaultLocaleOptions', @@ -487,8 +467,8 @@ return [ 'maxlength' => '30', ], 'default' => 'Windows-1252', - 'title' => 'Legacy Encoding', - 'description' => 'If import files are NOT encoded as UTF-8, specify an alternate character encoding for these files. The default of Windows-1252 will work for Excel-created .CSV files on many computers.', + 'title' => ts('Legacy Encoding'), + 'description' => ts('If import files are NOT encoded as UTF-8, specify an alternate character encoding for these files. The default of Windows-1252 will work for Excel-created .CSV files on many computers.'), ], 'timeInputFormat' => [ 'add' => '4.7', @@ -505,8 +485,7 @@ return [ 'callback' => 'CRM_Core_SelectValues::getTimeFormats', ], 'default' => '1', - 'title' => 'Time Input Format', - 'description' => '', + 'title' => ts('Time Input Format'), 'on_change' => [ 'CRM_Core_BAO_PreferencesDate::onChangeSetting', ], @@ -523,10 +502,9 @@ return [ ], 'default' => '0', 'add' => '4.7', - 'title' => 'Week begins on', + 'title' => ts('Week begins on'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "", 'help_text' => NULL, ], 'contact_default_language' => [ @@ -544,10 +522,10 @@ return [ ], 'default' => '*default*', 'add' => '4.7', - 'title' => 'Default Language for contacts', + 'title' => ts('Default Language for contacts'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Default language (if any) for contact records', + 'description' => ts('Default language (if any) for contact records'), 'help_text' => 'If a contact is created with no language this setting will determine the language data (if any) to save.' . 'You may or may not wish to make an assumption here about whether it matches the site language', ], diff --git a/civicrm/settings/Mailing.setting.php b/civicrm/settings/Mailing.setting.php index c055ebca1715a0a138448b7d486672b97becd3d7..a2a5bc06c8e2e4328c0f13fd2d75afed16e172a5 100644 --- a/civicrm/settings/Mailing.setting.php +++ b/civicrm/settings/Mailing.setting.php @@ -46,7 +46,7 @@ return [ 'title' => ts('Track replies using VERP in Reply-To header'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => ts('If checked, mailings will default to tracking replies using VERP-ed Reply-To. '), + 'description' => ts('If checked, mailings will default to tracking replies using VERP-ed Reply-To.'), 'help_text' => NULL, 'validate_callback' => 'CRM_Core_BAO_Setting::validateBoolSetting', ], @@ -75,7 +75,6 @@ return [ 'title' => ts('Enable global server wide lock for CiviMail'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'replyTo' => [ @@ -86,10 +85,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 0, 'add' => '4.6', - 'title' => 'Enable Custom Reply-To', + 'title' => ts('Enable Custom Reply-To'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Allow CiviMail users to send mailings with a custom Reply-To header', + 'description' => ts('Allow CiviMail users to send mailings with a custom Reply-To header.'), 'help_text' => NULL, ], 'mailing_backend' => [ @@ -100,10 +99,9 @@ return [ 'html_type' => 'checkbox', 'default' => ['outBound_option' => '3'], 'add' => '4.1', - 'title' => 'Mailing Backend', + 'title' => ts('Mailing Backend'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'profile_add_to_group_double_optin' => [ @@ -159,7 +157,7 @@ return [ 'title' => ts('Hashed Mailing URL\'s'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => ts('If enabled, a randomized hash key will be used to reference the mailing URL in the mailing.viewUrl token, instead of the mailing ID'), + 'description' => ts('If enabled, a randomized hash key will be used to reference the mailing URL in the mailing.viewUrl token, instead of the mailing ID.'), 'help_text' => NULL, ], 'civimail_multiple_bulk_emails' => [ @@ -187,7 +185,6 @@ return [ 'title' => ts('Enable CiviMail to generate Message-ID header'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'mailerBatchLimit' => [ @@ -203,10 +200,10 @@ return [ ], 'default' => 0, 'add' => '4.7', - 'title' => 'Mailer Batch Limit', + 'title' => ts('Mailer Batch Limit'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Throttle email delivery by setting the maximum number of emails sent during each CiviMail run (0 = unlimited).', + 'description' => ts('Throttle email delivery by setting the maximum number of emails sent during each CiviMail run (0 = unlimited).'), 'help_text' => NULL, ], 'mailerJobSize' => [ @@ -222,10 +219,10 @@ return [ ], 'default' => 0, 'add' => '4.7', - 'title' => 'Mailer Job Size', + 'title' => ts('Mailer Job Size'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If you want to utilize multi-threading enter the size you want your sub jobs to be split into. Recommended values are between 1,000 and 10,000. Use a lower value if your server has multiple cron jobs running simultaneously, but do not use values smaller than 1,000. Enter "0" to disable multi-threading and process mail as one single job - batch limits still apply.', + 'description' => ts('If you want to utilize multi-threading enter the size you want your sub jobs to be split into. Recommended values are between 1,000 and 10,000. Use a lower value if your server has multiple cron jobs running simultaneously, but do not use values smaller than 1,000. Enter "0" to disable multi-threading and process mail as one single job - batch limits still apply.'), 'help_text' => NULL, ], 'mailerJobsMax' => [ @@ -241,10 +238,10 @@ return [ ], 'default' => 0, 'add' => '4.7', - 'title' => 'Mailer Cron Job Limit', + 'title' => ts('Mailer Cron Job Limit'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'The maximum number of mailer delivery jobs executing simultaneously (0 = allow as many processes to execute as started by cron)', + 'description' => ts('The maximum number of mailer delivery jobs executing simultaneously (0 = allow as many processes to execute as started by cron).'), 'help_text' => NULL, ], 'mailThrottleTime' => [ @@ -260,10 +257,10 @@ return [ ], 'default' => 0, 'add' => '4.7', - 'title' => 'Mailer Throttle Time', + 'title' => ts('Mailer Throttle Time'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'The time to sleep in between each e-mail in micro seconds. Setting this above 0 allows you to control the rate at which e-mail messages are sent to the mail server, avoiding filling up the mail queue very quickly. Set to 0 to disable.', + 'description' => ts('The time to sleep in between each e-mail in micro seconds. Setting this above 0 allows you to control the rate at which e-mail messages are sent to the mail server, avoiding filling up the mail queue very quickly. Set to 0 to disable.'), 'help_text' => NULL, ], 'verpSeparator' => [ @@ -279,10 +276,10 @@ return [ ], 'default' => '.', 'add' => '4.7', - 'title' => 'VERP Separator', + 'title' => ts('VERP Separator'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Separator character used when CiviMail generates VERP (variable envelope return path) Mail-From addresses.', + 'description' => ts('Separator character used when CiviMail generates VERP (variable envelope return path) Mail-From addresses.'), 'help_text' => NULL, ], 'write_activity_record' => [ @@ -297,7 +294,6 @@ return [ 'title' => ts('Enable CiviMail to create activities on delivery'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'simple_mail_limit' => [ @@ -312,10 +308,10 @@ return [ 'maxlength' => 8, ], 'default' => 50, - 'title' => 'Simple mail limit', + 'title' => ts('Simple mail limit'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'The number of emails sendable via simple mail. Make sure you understand the implications for your spam reputation and legal requirements for bulk emails before editing. As there is some risk both to your spam reputation and the products if this is misused it is a hidden setting', + 'description' => ts('The number of emails sendable via simple mail. Make sure you understand the implications for your spam reputation and legal requirements for bulk emails before editing. As there is some risk both to your spam reputation and the products if this is misused it is a hidden setting.'), 'help_text' => 'CiviCRM forces users sending more than this number of mails to use CiviMails. CiviMails have additional precautions: not sending to contacts who do not want bulk mail, adding domain name and opt out links. You should familiarise yourself with the law relevant to you on bulk mailings if changing this setting. For the US https://en.wikipedia.org/wiki/CAN-SPAM_Act_of_2003 is a good place to start.', ], 'auto_recipient_rebuild' => [ @@ -339,10 +335,10 @@ return [ 'type' => 'Boolean', 'quick_form_type' => 'YesNo', 'default' => 1, - 'title' => 'Allow mail from logged in contact', + 'title' => ts('Allow mail from logged in contact'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Allow sending email from the logged in contact\'s email address', + 'description' => ts('Allow sending email from the logged in contact\'s email address.'), 'help_text' => 'CiviCRM allows you to send email from the domain from email addresses and the logged in contact id addresses by default. Disable this if you only want to allow the domain from addresses to be used.', ], ]; diff --git a/civicrm/settings/Map.setting.php b/civicrm/settings/Map.setting.php index 6796c1970207b84e7e53248bf59548539d38fbde..dd474c53cdb2913d3042ddc82bb29eaa6e25b676 100644 --- a/civicrm/settings/Map.setting.php +++ b/civicrm/settings/Map.setting.php @@ -34,8 +34,8 @@ return [ 'maxlength' => '64', ], 'default' => NULL, - 'title' => 'Geo Provider Key', - 'description' => 'Enter the API key or Application ID associated with your geocoding provider.', + 'title' => ts('Geo Provider Key'), + 'description' => ts('Enter the API key or Application ID associated with your geocoding provider.'), ], 'geoProvider' => [ 'add' => '4.7', @@ -55,8 +55,8 @@ return [ 'callback' => 'CRM_Core_SelectValues::geoProvider', ], 'default' => NULL, - 'title' => 'Geocoding Provider', - 'description' => 'This can be the same or different from the mapping provider selected.', + 'title' => ts('Geocoding Provider'), + 'description' => ts('This can be the same or different from the mapping provider selected.'), ], 'mapAPIKey' => [ 'add' => '4.7', @@ -74,8 +74,8 @@ return [ 'maxlength' => '64', ], 'default' => NULL, - 'title' => 'Map Provider Key', - 'description' => 'Enter your API Key or Application ID. An API Key is required for the Google Maps API. Refer to developers.google.com for the latest information.', + 'title' => ts('Map Provider Key'), + 'description' => ts('Enter your API Key or Application ID. An API Key is required for the Google Maps API. Refer to developers.google.com for the latest information.'), ], 'mapProvider' => [ 'add' => '4.7', @@ -95,7 +95,7 @@ return [ 'callback' => 'CRM_Core_SelectValues::mapProvider', ], 'default' => NULL, - 'title' => 'Mapping Provider', - 'description' => 'Choose the mapping provider that has the best coverage for the majority of your contact addresses.', + 'title' => ts('Mapping Provider'), + 'description' => ts('Choose the mapping provider that has the best coverage for the majority of your contact addresses.'), ], ]; diff --git a/civicrm/settings/Member.setting.php b/civicrm/settings/Member.setting.php index 2909b28954f9ee7a53da7220ee1c44490cccce86..c45fd19664cfecdabf51ebf9746a9c3dc97f8e18 100644 --- a/civicrm/settings/Member.setting.php +++ b/civicrm/settings/Member.setting.php @@ -33,7 +33,7 @@ return [ 'callback' => 'CRM_Contribute_PseudoConstant::contributionPage', ], 'add' => '4.1', - 'title' => 'Default online membership renewal page', + 'title' => ts('Default online membership renewal page'), 'is_domain' => 1, 'is_contact' => 0, 'description' => ts('If you select a default online contribution page for self-service membership renewals, a "renew" link pointing to that page will be displayed on the Contact Dashboard for memberships which were entered offline. You will need to ensure that the membership block for the selected online contribution page includes any currently available memberships.'), diff --git a/civicrm/settings/Multisite.setting.php b/civicrm/settings/Multisite.setting.php index 614393b6974dbe4420b39db619bed706282d12b5..64e06b9ad8e19ffc79e5a702881985d7ea4bfeac 100644 --- a/civicrm/settings/Multisite.setting.php +++ b/civicrm/settings/Multisite.setting.php @@ -56,13 +56,12 @@ return [ 'group_name' => 'Multi Site Preferences', 'group' => 'multisite', 'name' => 'event_price_set_domain_id', - 'title' => 'Domain Event Price Set', + 'title' => ts('Domain Event Price Set'), 'type' => 'Integer', 'default' => '0', 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], 'uniq_email_per_site' => [ @@ -70,12 +69,11 @@ return [ 'group' => 'multisite', 'name' => 'uniq_email_per_site', 'type' => 'Integer', - 'title' => 'Unique Email per Domain?', + 'title' => ts('Unique Email per Domain?'), 'default' => '0', 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => '', 'help_text' => NULL, ], ]; diff --git a/civicrm/settings/Search.setting.php b/civicrm/settings/Search.setting.php index bddac38074876383b5e6c175fd2a7ecb41737302..427bc8a6c6bf86eba7acc67954ba09b763d92d4f 100644 --- a/civicrm/settings/Search.setting.php +++ b/civicrm/settings/Search.setting.php @@ -29,10 +29,10 @@ return [ 'html_type' => 'number', 'default' => 10, 'add' => '4.3', - 'title' => 'Autocomplete Results', + 'title' => ts('Autocomplete Results'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'The maximum number of contacts to show at a time when typing in an autocomplete field.', + 'description' => ts('The maximum number of contacts to show at a time when typing in an autocomplete field.'), 'help_text' => NULL, ], 'enable_innodb_fts' => [ @@ -43,10 +43,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 0, 'add' => '4.4', - 'title' => 'InnoDB Full Text Search', + 'title' => ts('InnoDB Full Text Search'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "Enable InnoDB full-text search optimizations. (Requires MySQL 5.6+)", + 'description' => ts('Enable InnoDB full-text search optimizations. (Requires MySQL 5.6+)'), 'help_text' => NULL, 'on_change' => [ ['CRM_Core_InnoDBIndexer', 'onToggleFts'], @@ -65,10 +65,9 @@ return [ 'html_type' => 'text', 'default' => 'simple', 'add' => '4.5', - 'title' => 'How to handle full-tet queries', + 'title' => ts('How to handle full-tet queries'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => NULL, 'help_text' => NULL, ], 'includeOrderByClause' => [ @@ -79,10 +78,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 1, 'add' => '4.6', - 'title' => 'Include Order By Clause', + 'title' => ts('Include Order By Clause'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If disabled, the search results will not be ordered. This may improve response time on search results on large datasets', + 'description' => ts('If disabled, the search results will not be ordered. This may improve response time on search results on large datasets.'), 'help_text' => NULL, ], 'includeWildCardInName' => [ @@ -93,10 +92,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 1, 'add' => '4.6', - 'title' => 'Automatic Wildcard', + 'title' => ts('Automatic Wildcard'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => "If enabled, wildcards are automatically added to the beginning AND end of the search term when users search for contacts by Name. EXAMPLE: Searching for 'ada' will return any contact whose name includes those letters - e.g. 'Adams, Janet', 'Nadal, Jorge', etc. If disabled, a wildcard is added to the end of the search term only. EXAMPLE: Searching for 'ada' will return any contact whose last name begins with those letters - e.g. 'Adams, Janet' but NOT 'Nadal, Jorge'. Disabling this feature will speed up search significantly for larger databases, but users must manually enter wildcards ('%' or '_') to the beginning of the search term if they want to find all records which contain those letters. EXAMPLE: '%ada' will return 'Nadal, Jorge'.", + 'description' => ts("If enabled, wildcards are automatically added to the beginning AND end of the search term when users search for contacts by Name. EXAMPLE: Searching for 'ada' will return any contact whose name includes those letters - e.g. 'Adams, Janet', 'Nadal, Jorge', etc. If disabled, a wildcard is added to the end of the search term only. EXAMPLE: Searching for 'ada' will return any contact whose last name begins with those letters - e.g. 'Adams, Janet' but NOT 'Nadal, Jorge'. Disabling this feature will speed up search significantly for larger databases, but users must manually enter wildcards ('%' or '_') to the beginning of the search term if they want to find all records which contain those letters. EXAMPLE: '%ada' will return 'Nadal, Jorge'."), 'help_text' => NULL, ], 'includeEmailInName' => [ @@ -107,10 +106,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 1, 'add' => '4.6', - 'title' => 'Include Email', + 'title' => ts('Include Email'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If enabled, email addresses are automatically included when users search by Name. Disabling this feature will speed up search significantly for larger databases, but users will need to use the Email search fields (from Advanced Search, Search Builder, or Profiles) to find contacts by email address.', + 'description' => ts('If enabled, email addresses are automatically included when users search by Name. Disabling this feature will speed up search significantly for larger databases, but users will need to use the Email search fields (from Advanced Search, Search Builder, or Profiles) to find contacts by email address.'), 'help_text' => NULL, ], 'includeNickNameInName' => [ @@ -121,10 +120,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 0, 'add' => '4.6', - 'title' => 'Include Nickname', + 'title' => ts('Include Nickname'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If enabled, nicknames are automatically included when users search by Name.', + 'description' => ts('If enabled, nicknames are automatically included when users search by Name.'), 'help_text' => NULL, ], 'includeAlphabeticalPager' => [ @@ -135,10 +134,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 1, 'add' => '4.6', - 'title' => 'Include Alphabetical Pager', + 'title' => ts('Include Alphabetical Pager'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If disabled, the alphabetical pager will not be displayed on the search screens. This will improve response time on search results on large datasets.', + 'description' => ts('If disabled, the alphabetical pager will not be displayed on the search screens. This will improve response time on search results on large datasets.'), 'help_text' => NULL, ], 'smartGroupCacheTimeout' => [ @@ -150,10 +149,10 @@ return [ 'html_type' => 'number', 'default' => 5, 'add' => '4.6', - 'title' => 'Smart group cache timeout', + 'title' => ts('Smart group cache timeout'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'The number of minutes to cache smart group contacts. We strongly recommend that this value be greater than zero, since a value of zero means no caching at all. If your contact data changes frequently, you should set this value to at least 5 minutes.', + 'description' => ts('The number of minutes to cache smart group contacts. We strongly recommend that this value be greater than zero, since a value of zero means no caching at all. If your contact data changes frequently, you should set this value to at least 5 minutes.'), 'help_text' => NULL, ], 'defaultSearchProfileID' => [ @@ -171,10 +170,10 @@ return [ ], 'default' => NULL, 'add' => '4.6', - 'title' => 'Default Contact Search Profile', + 'title' => ts('Default Contact Search Profile'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If set, this will be the default profile used for contact search.', + 'description' => ts('If set, this will be the default profile used for contact search.'), 'help_text' => NULL, ], 'prevNextBackend' => [ @@ -189,13 +188,13 @@ return [ ], 'default' => 'default', 'add' => '5.9', - 'title' => 'PrevNext Cache', + 'title' => ts('PrevNext Cache'), 'is_domain' => 1, 'is_contact' => 0, 'pseudoconstant' => [ 'callback' => 'CRM_Core_BAO_PrevNextCache::getPrevNextBackends', ], - 'description' => 'When performing a search, how should the search-results be cached?', + 'description' => ts('When performing a search, how should the search-results be cached?'), 'help_text' => '', ], 'searchPrimaryDetailsOnly' => [ @@ -206,10 +205,10 @@ return [ 'quick_form_type' => 'YesNo', 'default' => 1, 'add' => '4.7', - 'title' => 'Search Primary Details Only', + 'title' => ts('Search Primary Details Only'), 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'If enabled, only primary details (eg contact\'s primary email, phone, etc) will be included in Basic and Advanced Search results. Disabling this feature will allow users to match contacts using any email, phone etc detail.', + 'description' => ts('If enabled, only primary details (eg contact\'s primary email, phone, etc) will be included in Basic and Advanced Search results. Disabling this feature will allow users to match contacts using any email, phone etc detail.'), 'help_text' => NULL, ], 'quicksearch_options' => [ diff --git a/civicrm/settings/Url.setting.php b/civicrm/settings/Url.setting.php index d1fc4bc731737e7ac99ce9eef9226f52e3435b03..f41f8363aeb83ba3a32acdb590da6d8dc60253c2 100644 --- a/civicrm/settings/Url.setting.php +++ b/civicrm/settings/Url.setting.php @@ -25,7 +25,7 @@ return [ 'group' => 'url', 'group_name' => 'URL Preferences', 'name' => 'userFrameworkResourceURL', - 'title' => 'CiviCRM Resource URL', + 'title' => ts('CiviCRM Resource URL'), 'type' => 'String', 'html_type' => 'text', 'quick_form_type' => 'Element', @@ -33,7 +33,7 @@ return [ 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Absolute URL of the location where the civicrm module or component has been installed.', + 'description' => ts('Absolute URL of the location where the civicrm module or component has been installed.'), 'help_text' => NULL, 'validate_callback' => 'CRM_Utils_Rule::urlish', ], @@ -41,7 +41,7 @@ return [ 'bootstrap_comment' => 'This is a boot setting which may be loaded during bootstrap. Defaults are loaded via SettingsBag::getSystemDefaults().', 'group' => 'url', 'group_name' => 'URL Preferences', - 'title' => 'Image Upload URL', + 'title' => ts('Image Upload URL'), 'name' => 'imageUploadURL', 'type' => 'String', 'html_type' => 'text', @@ -50,7 +50,7 @@ return [ 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'URL of the location for uploaded image files.', + 'description' => ts('URL of the location for uploaded image files.'), 'help_text' => NULL, 'validate_callback' => 'CRM_Utils_Rule::urlish', ], @@ -59,7 +59,7 @@ return [ 'group' => 'url', 'group_name' => 'URL Preferences', 'name' => 'customCSSURL', - 'title' => 'Custom CSS URL', + 'title' => ts('Custom CSS URL'), 'type' => 'String', 'html_type' => 'text', 'quick_form_type' => 'Element', @@ -67,7 +67,7 @@ return [ 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'You can modify the look and feel of CiviCRM by adding your own stylesheet. For small to medium sized modifications, use your css file to override some of the styles in civicrm.css. Or if you need to make drastic changes, you can choose to disable civicrm.css completely.', + 'description' => ts('You can modify the look and feel of CiviCRM by adding your own stylesheet. For small to medium sized modifications, use your css file to override some of the styles in civicrm.css. Or if you need to make drastic changes, you can choose to disable civicrm.css completely.'), 'help_text' => NULL, 'validate_callback' => 'CRM_Utils_Rule::urlish', ], @@ -75,7 +75,7 @@ return [ 'bootstrap_comment' => 'This is a boot setting which may be loaded during bootstrap. Defaults are loaded via SettingsBag::getSystemDefaults().', 'group' => 'url', 'group_name' => 'URL Preferences', - 'title' => 'Extension Resource URL', + 'title' => ts('Extension Resource URL'), 'name' => 'extensionsURL', 'type' => 'String', 'html_type' => 'text', @@ -84,7 +84,7 @@ return [ 'add' => '4.1', 'is_domain' => 1, 'is_contact' => 0, - 'description' => 'Base URL for extension resources (images, stylesheets, etc). This should match extensionsDir.', + 'description' => ts('Base URL for extension resources (images, stylesheets, etc). This should match extensionsDir.'), 'help_text' => NULL, 'validate_callback' => 'CRM_Utils_Rule::urlish', ], diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index b29d90718fa5c20a22f78bdbde94533859fa85ec..f62634d09b04dc3116ab0a19c25ceaf00ca4b6d4 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -1086,7 +1086,7 @@ CREATE TABLE `civicrm_payment_processor_type` ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Payment Processor Type ID', - `name` varchar(64) NOT NULL COMMENT 'Payment Processor Name.', + `name` varchar(64) NOT NULL COMMENT 'Payment Processor Type Name.', `title` varchar(127) NOT NULL COMMENT 'Payment Processor Type Title.', `description` varchar(255) COMMENT 'Payment Processor Description.', `is_active` tinyint DEFAULT 1 COMMENT 'Is this processor active?', @@ -1845,7 +1845,6 @@ CREATE TABLE `civicrm_domain` ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Domain ID', `name` varchar(64) COMMENT 'Name of Domain / Organization', `description` varchar(255) COMMENT 'Description of Domain.', - `config_backend` text COMMENT 'Backend configuration.', `version` varchar(32) COMMENT 'The civicrm version this instance is running', `contact_id` int unsigned COMMENT 'FK to Contact ID. This is specifically not an FK to avoid circular constraints', `locales` text COMMENT 'list of locales supported by the current db state (NULL for single-lang install)', @@ -1874,7 +1873,7 @@ CREATE TABLE `civicrm_email` ( `contact_id` int unsigned COMMENT 'FK to Contact ID', `location_type_id` int unsigned COMMENT 'Which Location does this email belong to.', `email` varchar(254) COMMENT 'Email address', - `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary?', + `is_primary` tinyint DEFAULT 0 COMMENT 'Is this the primary email address', `is_billing` tinyint DEFAULT 0 COMMENT 'Is this the billing?', `on_hold` int unsigned NOT NULL DEFAULT 0 COMMENT 'Implicit FK to civicrm_option_value where option_group = email_on_hold.', `is_bulkmail` tinyint NOT NULL DEFAULT 0 COMMENT 'Is this address for bulk mail ?', diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 8bd9bbeba013fc1861867aed0d6436e8b686d90a..05dbe5192bb7bf7e8399eb3e7a39dffd96f16b99 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -5111,7 +5111,7 @@ VALUES (@option_group_id_acConRef, 'City' , 5, 'city' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_acConRef, 'State/Province' , 6, 'state_province', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_acConRef, 'Country' , 7, 'country' , NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_acConRef, 'Postal Code' , 8, 'country' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, 'Postal Code' , 8, 'postal_code' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_adOpt, 'Street Address' , 1, 'street_address', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_adOpt, 'Supplemental Address 1' , 2, 'supplemental_address_1', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -5283,6 +5283,7 @@ VALUES (@option_group_id_mp, 'Maildir', 2, 'Maildir', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), (@option_group_id_mp, 'POP3', 3, 'POP3', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL , NULL), (@option_group_id_mp, 'Localdir', 4, 'Localdir', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_mp, 'IMAP XOAUTH2', 5, 'IMAP_XOAUTH2', NULL, 0, NULL, 5, NULL, 0, 0, 0, NULL, NULL , NULL), -- priority (@option_group_id_priority, 'Urgent', 1, 'Urgent', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -5316,7 +5317,6 @@ VALUES (@option_group_id_website, 'Work', 1, 'Work', NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Main', 2, 'Main', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Facebook', 3, 'Facebook', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_website, 'Google+', 4, 'Google_', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Instagram', 5, 'Instagram', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'LinkedIn', 6, 'LinkedIn', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'MySpace', 7, 'MySpace', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -5501,17 +5501,17 @@ VALUES (@option_group_id_name_badge, 'Hanging Badge 3-3/4\" x 4-3\"/4', '{"paper-size":"a4","orientation":"portrait","font-name":"times","font-size":6,"font-style":"","NX":2,"NY":2,"metric":"mm","lMargin":10,"tMargin":28,"SpaceX":0,"SpaceY":0,"width":96,"height":121,"lPadding":5,"tPadding":5}', 'Hanging Badge 3-3/4" x 4-3"/4', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), -- Mailing Label Formats - (@option_group_id_label, 'Avery 3475', '{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":10,"font-style":"","metric":"mm","lMargin":0,"tMargin":5,"NX":3,"NY":8,"SpaceX":0,"SpaceY":0,"width":70,"height":36,"lPadding":5.08,"tPadding":5.08}', '3475', 'Avery', NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 5160', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.21975,"tMargin":0.5,"NX":3,"NY":10,"SpaceX":0.14,"SpaceY":0,"width":2.5935,"height":1,"lPadding":0.20,"tPadding":0.20}', '5160', 'Avery', NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 5161', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.175,"tMargin":0.5,"NX":2,"NY":10,"SpaceX":0.15625,"SpaceY":0,"width":4,"height":1,"lPadding":0.20,"tPadding":0.20}', '5161', 'Avery', NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 5162', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.1525,"tMargin":0.88,"NX":2,"NY":7,"SpaceX":0.195,"SpaceY":0,"width":4,"height":1.33,"lPadding":0.20,"tPadding":0.20}', '5162', 'Avery', NULL, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 5163', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.5,"NX":2,"NY":5,"SpaceX":0.14,"SpaceY":0,"width":4,"height":2,"lPadding":0.20,"tPadding":0.20}', '5163', 'Avery', NULL, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 5164', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":12,"font-style":"","metric":"in","lMargin":0.156,"tMargin":0.5,"NX":2,"NY":3,"SpaceX":0.1875,"SpaceY":0,"width":4,"height":3.33,"lPadding":0.20,"tPadding":0.20}', '5164', 'Avery', NULL, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery 8600', '{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"mm","lMargin":7.1,"tMargin":19,"NX":3,"NY":10,"SpaceX":9.5,"SpaceY":3.1,"width":66.6,"height":25.4,"lPadding":5.08,"tPadding":5.08}', '8600', 'Avery', NULL, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery L7160', '{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.6,"NX":3,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.5,"lPadding":0.20,"tPadding":0.20}', 'L7160', 'Avery', NULL, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery L7161', '{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.35,"NX":3,"NY":6,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.83,"lPadding":0.20,"tPadding":0.20}', 'L7161', 'Avery', NULL, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery L7162', '{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.51,"NX":2,"NY":8,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.33,"lPadding":0.20,"tPadding":0.20}', 'L7162', 'Avery', NULL, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, 'Avery L7163', '{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.6,"NX":2,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.5,"lPadding":0.20,"tPadding":0.20}', 'L7163', 'Avery', NULL, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 3475', '{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":10,"font-style":"","metric":"mm","lMargin":0,"tMargin":5,"NX":3,"NY":8,"SpaceX":0,"SpaceY":0,"width":70,"height":36,"lPadding":5.08,"tPadding":5.08}', '3475', 'Avery', NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 5160', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.21975,"tMargin":0.5,"NX":3,"NY":10,"SpaceX":0.14,"SpaceY":0,"width":2.5935,"height":1,"lPadding":0.20,"tPadding":0.20}', '5160', 'Avery', NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 5161', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.175,"tMargin":0.5,"NX":2,"NY":10,"SpaceX":0.15625,"SpaceY":0,"width":4,"height":1,"lPadding":0.20,"tPadding":0.20}', '5161', 'Avery', NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 5162', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.1525,"tMargin":0.88,"NX":2,"NY":7,"SpaceX":0.195,"SpaceY":0,"width":4,"height":1.33,"lPadding":0.20,"tPadding":0.20}', '5162', 'Avery', NULL, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 5163', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.5,"NX":2,"NY":5,"SpaceX":0.14,"SpaceY":0,"width":4,"height":2,"lPadding":0.20,"tPadding":0.20}', '5163', 'Avery', NULL, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 5164', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":12,"font-style":"","metric":"in","lMargin":0.156,"tMargin":0.5,"NX":2,"NY":3,"SpaceX":0.1875,"SpaceY":0,"width":4,"height":3.33,"lPadding":0.20,"tPadding":0.20}', '5164', 'Avery', NULL, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery 8600', '{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"mm","lMargin":7.1,"tMargin":19,"NX":3,"NY":10,"SpaceX":9.5,"SpaceY":3.1,"width":66.6,"height":25.4,"lPadding":5.08,"tPadding":5.08}', '8600', 'Avery', NULL, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery L7160', '{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.6,"NX":3,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.5,"lPadding":0.20,"tPadding":0.20}', 'L7160', 'Avery', NULL, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery L7161', '{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.35,"NX":3,"NY":6,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.83,"lPadding":0.20,"tPadding":0.20}', 'L7161', 'Avery', NULL, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery L7162', '{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.51,"NX":2,"NY":8,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.33,"lPadding":0.20,"tPadding":0.20}', 'L7162', 'Avery', NULL, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, 'Avery L7163', '{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.6,"NX":2,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.5,"lPadding":0.20,"tPadding":0.20}', 'L7163', 'Avery', NULL, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), -- Communication Styles (@option_group_id_communication_style, 'Formal' , 1, 'formal' , NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -7011,6 +7011,7 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} =========================================================== +{ts}Contributor{/ts}: {contact.display_name} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {if $lineItem} {foreach from=$lineItem item=value key=priceset} @@ -7157,6 +7158,14 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} </th> </tr> + <tr> + <td {$labelStyle}> + {ts}Contributor Name{/ts} + </td> + <td {$valueStyle}> + {contact.display_name} + </td> + </tr> <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -7446,6 +7455,7 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} =========================================================== +{ts}Contributor{/ts}: {contact.display_name} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {if $lineItem} {foreach from=$lineItem item=value key=priceset} @@ -7592,6 +7602,14 @@ INSERT INTO civicrm_msg_template {ts}Contribution Information{/ts} </th> </tr> + <tr> + <td {$labelStyle}> + {ts}Contributor Name{/ts} + </td> + <td {$valueStyle}> + {contact.display_name} + </td> + </tr> <tr> <td {$labelStyle}> {ts}Financial Type{/ts} @@ -16756,7 +16774,7 @@ Click this link to go to a web page where you can confirm your registration onli {/if} {if $event.allow_selfcancelxfer } {ts}This event allows for{/ts} - {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q="reset=1&pid=`$participantID`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} <a href="{$selfService}"> {ts}self service cancel or transfer{/ts}</a> {/if} @@ -17026,7 +17044,7 @@ Click this link to go to a web page where you can confirm your registration onli {/if} {if $event.allow_selfcancelxfer } {ts}This event allows for{/ts} - {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q="reset=1&pid=`$participantID`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + {capture assign=selfService}{crmURL p=\'civicrm/event/selfsvcupdate\' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} <a href="{$selfService}"> {ts}self service cancel or transfer{/ts}</a> {/if} @@ -23927,4 +23945,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.22.1'; +UPDATE civicrm_domain SET version = '5.23.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index 101117d41ead587e8a8b0aff5a34c23cf8e2e885..bf066eb35fd08623524bcffd84efc5b8074ef5fb 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.7.26, for osx10.9 (x86_64) +-- MySQL dump 10.13 Distrib 5.7.28, for Linux (x86_64) -- --- Host: 127.0.0.1 Database: dmasterciv_tdjht +-- Host: 127.0.0.1 Database: 47testcivi_peq9o -- ------------------------------------------------------ --- Server version 5.7.26 +-- Server version 5.7.28-0ubuntu0.18.04.4 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -87,7 +87,7 @@ 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','2019-03-18 08:24:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(2,NULL,10,'Subject for Pledge Acknowledgment','2019-06-24 04:58:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(3,NULL,9,'Subject for Tell a Friend','2019-03-19 02:11:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(4,NULL,9,'Subject for Tell a Friend','2018-12-13 04:07:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(5,NULL,9,'Subject for Tell a Friend','2019-04-22 16:20:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(6,NULL,10,'Subject for Pledge Acknowledgment','2019-11-07 13:00:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(7,NULL,9,'Subject for Tell a Friend','2018-12-03 05:26:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(8,NULL,9,'Subject for Tell a Friend','2019-04-06 15:39:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(9,NULL,10,'Subject for Pledge Acknowledgment','2019-10-24 17:47:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(10,NULL,9,'Subject for Tell a Friend','2019-11-24 06:14:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(11,NULL,10,'Subject for Pledge Acknowledgment','2019-08-25 05:43:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(12,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 02:28:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(13,NULL,10,'Subject for Pledge Acknowledgment','2019-09-21 18:18:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(14,NULL,10,'Subject for Pledge Acknowledgment','2019-08-16 20:39:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(15,NULL,10,'Subject for Pledge Acknowledgment','2019-06-11 22:36:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(16,NULL,10,'Subject for Pledge Acknowledgment','2019-02-19 08:13:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(17,NULL,10,'Subject for Pledge Acknowledgment','2019-01-23 22:47:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(18,NULL,9,'Subject for Tell a Friend','2019-07-11 23:52:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(19,NULL,10,'Subject for Pledge Acknowledgment','2019-05-27 05:32:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(20,NULL,10,'Subject for Pledge Acknowledgment','2019-05-21 16:28:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(21,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 00:47:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(22,NULL,9,'Subject for Tell a Friend','2019-02-01 16:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(23,NULL,9,'Subject for Tell a Friend','2019-01-27 01:45:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(24,NULL,9,'Subject for Tell a Friend','2018-12-25 01:37:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(25,NULL,10,'Subject for Pledge Acknowledgment','2018-12-15 15:33:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(26,NULL,9,'Subject for Tell a Friend','2019-05-26 14:16:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(27,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 06:33:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(28,NULL,10,'Subject for Pledge Acknowledgment','2019-07-26 10:36:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(29,NULL,9,'Subject for Tell a Friend','2018-12-16 16:26:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(30,NULL,9,'Subject for Tell a Friend','2018-12-08 01:10:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(31,NULL,9,'Subject for Tell a Friend','2019-07-30 22:36:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(32,NULL,9,'Subject for Tell a Friend','2019-05-13 13:08:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(33,NULL,10,'Subject for Pledge Acknowledgment','2019-10-31 00:29:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(34,NULL,10,'Subject for Pledge Acknowledgment','2019-05-19 07:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(35,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 11:56:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(36,NULL,10,'Subject for Pledge Acknowledgment','2019-10-05 09:49:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(37,NULL,9,'Subject for Tell a Friend','2019-11-12 22:36:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(38,NULL,9,'Subject for Tell a Friend','2019-05-09 08:31:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(39,NULL,9,'Subject for Tell a Friend','2018-12-25 08:28:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(40,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 18:33:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(41,NULL,9,'Subject for Tell a Friend','2019-06-12 19:36:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(42,NULL,9,'Subject for Tell a Friend','2019-05-21 22:42:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(43,NULL,10,'Subject for Pledge Acknowledgment','2019-03-20 20:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(44,NULL,10,'Subject for Pledge Acknowledgment','2019-02-24 22:44:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(45,NULL,9,'Subject for Tell a Friend','2018-12-28 14:24:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(46,NULL,9,'Subject for Tell a Friend','2019-05-08 02:52:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(47,NULL,9,'Subject for Tell a Friend','2019-06-04 10:15:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(48,NULL,9,'Subject for Tell a Friend','2019-04-04 03:05:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(49,NULL,9,'Subject for Tell a Friend','2019-09-04 11:11:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(50,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 20:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(51,NULL,9,'Subject for Tell a Friend','2019-10-11 02:56:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(52,NULL,9,'Subject for Tell a Friend','2019-10-16 13:57:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(53,NULL,9,'Subject for Tell a Friend','2019-01-30 19:02:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(54,NULL,10,'Subject for Pledge Acknowledgment','2019-07-27 13:14:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(55,NULL,9,'Subject for Tell a Friend','2019-08-23 15:09:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(56,NULL,9,'Subject for Tell a Friend','2019-08-27 06:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(57,NULL,10,'Subject for Pledge Acknowledgment','2019-04-20 11:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(58,NULL,9,'Subject for Tell a Friend','2019-09-14 15:47:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(59,NULL,10,'Subject for Pledge Acknowledgment','2019-07-01 15:15:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(60,NULL,9,'Subject for Tell a Friend','2019-05-28 17:17:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(61,NULL,9,'Subject for Tell a Friend','2019-09-09 05:50:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(62,NULL,9,'Subject for Tell a Friend','2019-03-07 00:14:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(63,NULL,9,'Subject for Tell a Friend','2019-03-04 07:18:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(64,NULL,9,'Subject for Tell a Friend','2019-06-12 08:25:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(65,NULL,10,'Subject for Pledge Acknowledgment','2019-09-20 03:26:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(66,NULL,10,'Subject for Pledge Acknowledgment','2019-10-13 10:03:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(67,NULL,9,'Subject for Tell a Friend','2019-10-11 14:08:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(68,NULL,9,'Subject for Tell a Friend','2019-11-04 05:23:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(69,NULL,10,'Subject for Pledge Acknowledgment','2019-11-17 18:08:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(70,NULL,9,'Subject for Tell a Friend','2019-06-14 03:19:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(71,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 06:41:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(72,NULL,10,'Subject for Pledge Acknowledgment','2018-12-04 03:56:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(73,NULL,9,'Subject for Tell a Friend','2019-07-21 16:40:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(74,NULL,9,'Subject for Tell a Friend','2019-11-10 00:10:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(75,NULL,9,'Subject for Tell a Friend','2019-06-18 21:19:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(76,NULL,10,'Subject for Pledge Acknowledgment','2019-02-02 08:36:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(77,NULL,9,'Subject for Tell a Friend','2019-03-21 23:55:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(78,NULL,9,'Subject for Tell a Friend','2019-09-05 09:48:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(79,NULL,9,'Subject for Tell a Friend','2019-01-25 03:52:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(80,NULL,9,'Subject for Tell a Friend','2019-05-23 03:52:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(81,NULL,9,'Subject for Tell a Friend','2019-04-25 05:42:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(82,NULL,10,'Subject for Pledge Acknowledgment','2019-07-16 15:52:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(83,NULL,10,'Subject for Pledge Acknowledgment','2019-09-28 06:30:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(84,NULL,9,'Subject for Tell a Friend','2019-07-08 19:59:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(85,NULL,10,'Subject for Pledge Acknowledgment','2019-10-24 02:59:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(86,NULL,9,'Subject for Tell a Friend','2019-02-28 15:37:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(87,NULL,10,'Subject for Pledge Acknowledgment','2019-01-23 00:28:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(88,NULL,10,'Subject for Pledge Acknowledgment','2018-12-10 07:10:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(89,NULL,9,'Subject for Tell a Friend','2019-02-06 00:18:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(90,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 20:39:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(91,NULL,10,'Subject for Pledge Acknowledgment','2019-04-17 11:21:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(92,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 21:00:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(93,NULL,9,'Subject for Tell a Friend','2019-11-16 16:08:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(94,NULL,10,'Subject for Pledge Acknowledgment','2019-01-21 01:49:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(95,NULL,9,'Subject for Tell a Friend','2019-04-25 15:46:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(96,NULL,9,'Subject for Tell a Friend','2019-08-17 10:19:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(97,NULL,10,'Subject for Pledge Acknowledgment','2018-12-06 19:51:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(98,NULL,10,'Subject for Pledge Acknowledgment','2019-01-30 02:45:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(99,NULL,10,'Subject for Pledge Acknowledgment','2019-06-19 22:18:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(100,NULL,9,'Subject for Tell a Friend','2019-09-12 11:24:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(101,NULL,9,'Subject for Tell a Friend','2018-12-25 06:06:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(102,NULL,10,'Subject for Pledge Acknowledgment','2019-01-12 00:18:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(103,NULL,10,'Subject for Pledge Acknowledgment','2019-08-19 07:58:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(104,NULL,9,'Subject for Tell a Friend','2019-10-10 01:08:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(105,NULL,9,'Subject for Tell a Friend','2019-08-05 14:45:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(106,NULL,10,'Subject for Pledge Acknowledgment','2019-07-01 02:55:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(107,NULL,9,'Subject for Tell a Friend','2018-12-09 17:42:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(108,NULL,9,'Subject for Tell a Friend','2019-07-08 00:55:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(109,NULL,9,'Subject for Tell a Friend','2019-10-07 17:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(110,NULL,9,'Subject for Tell a Friend','2019-05-28 17:31:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(111,NULL,9,'Subject for Tell a Friend','2019-06-01 16:41:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(112,NULL,10,'Subject for Pledge Acknowledgment','2019-09-07 02:56:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(113,NULL,9,'Subject for Tell a Friend','2019-09-19 01:40:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(114,NULL,9,'Subject for Tell a Friend','2019-08-22 08:50:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(115,NULL,9,'Subject for Tell a Friend','2019-07-03 23:04:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(116,NULL,9,'Subject for Tell a Friend','2019-07-28 04:09:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(117,NULL,9,'Subject for Tell a Friend','2019-05-23 03:18:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(118,NULL,9,'Subject for Tell a Friend','2019-08-14 12:46:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(119,NULL,10,'Subject for Pledge Acknowledgment','2019-11-03 04:27:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(120,NULL,10,'Subject for Pledge Acknowledgment','2018-12-09 12:11:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(121,NULL,9,'Subject for Tell a Friend','2019-01-25 05:05:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(122,NULL,9,'Subject for Tell a Friend','2019-03-17 11:40:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(123,NULL,9,'Subject for Tell a Friend','2019-03-22 03:41:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(124,NULL,9,'Subject for Tell a Friend','2018-12-09 12:28:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(125,NULL,10,'Subject for Pledge Acknowledgment','2019-01-01 01:27:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(126,NULL,10,'Subject for Pledge Acknowledgment','2019-04-11 12:12:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(127,NULL,9,'Subject for Tell a Friend','2019-09-28 01:28:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(128,NULL,9,'Subject for Tell a Friend','2019-01-16 14:47:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(129,NULL,9,'Subject for Tell a Friend','2019-06-22 15:21:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(130,NULL,10,'Subject for Pledge Acknowledgment','2019-11-22 08:19:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(131,NULL,9,'Subject for Tell a Friend','2019-01-12 22:31:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(132,NULL,9,'Subject for Tell a Friend','2019-05-16 19:52:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(133,NULL,10,'Subject for Pledge Acknowledgment','2019-08-20 17:29:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(134,NULL,9,'Subject for Tell a Friend','2019-03-26 14:26:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(135,NULL,10,'Subject for Pledge Acknowledgment','2019-03-05 09:40:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(136,NULL,10,'Subject for Pledge Acknowledgment','2019-10-05 03:14:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(137,NULL,9,'Subject for Tell a Friend','2019-02-21 13:39:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(138,NULL,10,'Subject for Pledge Acknowledgment','2019-11-02 03:59:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(139,NULL,10,'Subject for Pledge Acknowledgment','2019-02-16 04:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(140,NULL,9,'Subject for Tell a Friend','2019-04-14 12:33:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(141,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 13:29:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(142,NULL,10,'Subject for Pledge Acknowledgment','2019-05-05 08:23:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(143,NULL,9,'Subject for Tell a Friend','2019-06-22 22:15:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(144,NULL,9,'Subject for Tell a Friend','2019-05-01 01:44:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(145,NULL,9,'Subject for Tell a Friend','2019-05-12 18:53:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(146,NULL,9,'Subject for Tell a Friend','2018-12-13 01:20:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(147,NULL,9,'Subject for Tell a Friend','2019-08-21 06:53:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(148,NULL,10,'Subject for Pledge Acknowledgment','2019-11-05 12:18:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(149,NULL,9,'Subject for Tell a Friend','2019-09-06 01:58:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(150,NULL,10,'Subject for Pledge Acknowledgment','2019-07-22 13:32:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(151,NULL,10,'Subject for Pledge Acknowledgment','2019-04-08 02:23:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(152,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 12:55:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(153,NULL,10,'Subject for Pledge Acknowledgment','2019-09-20 14:03:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(154,NULL,10,'Subject for Pledge Acknowledgment','2019-01-21 07:56:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(155,NULL,9,'Subject for Tell a Friend','2019-11-27 02:32:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(156,NULL,10,'Subject for Pledge Acknowledgment','2019-11-24 09:52:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(157,NULL,9,'Subject for Tell a Friend','2019-04-04 00:04:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(158,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 02:27:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(159,NULL,10,'Subject for Pledge Acknowledgment','2019-08-14 11:11:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(160,NULL,10,'Subject for Pledge Acknowledgment','2019-11-16 04:49:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(161,NULL,9,'Subject for Tell a Friend','2019-09-03 20:00:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(162,NULL,10,'Subject for Pledge Acknowledgment','2019-05-10 15:24:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(163,NULL,9,'Subject for Tell a Friend','2019-06-30 05:43:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(164,NULL,9,'Subject for Tell a Friend','2019-06-03 09:17:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(165,NULL,10,'Subject for Pledge Acknowledgment','2019-01-23 19:27:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(166,NULL,9,'Subject for Tell a Friend','2019-05-21 13:32:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(167,NULL,9,'Subject for Tell a Friend','2019-09-29 15:54:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(168,NULL,10,'Subject for Pledge Acknowledgment','2019-08-10 02:11:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(169,NULL,9,'Subject for Tell a Friend','2019-03-29 13:55:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(170,NULL,10,'Subject for Pledge Acknowledgment','2019-10-27 11:59:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(171,NULL,9,'Subject for Tell a Friend','2019-06-12 05:56:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(172,NULL,9,'Subject for Tell a Friend','2018-12-15 07:02:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(173,NULL,10,'Subject for Pledge Acknowledgment','2018-11-29 10:25:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(174,NULL,9,'Subject for Tell a Friend','2019-08-03 15:35:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(175,NULL,9,'Subject for Tell a Friend','2018-12-05 22:28:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(176,NULL,10,'Subject for Pledge Acknowledgment','2019-11-06 19:50:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(177,NULL,10,'Subject for Pledge Acknowledgment','2019-05-17 07:10:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(178,NULL,9,'Subject for Tell a Friend','2019-10-07 15:25:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(179,NULL,10,'Subject for Pledge Acknowledgment','2019-02-11 20:10:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(180,NULL,10,'Subject for Pledge Acknowledgment','2019-09-09 20:32:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(181,NULL,9,'Subject for Tell a Friend','2018-12-08 02:18:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(182,NULL,9,'Subject for Tell a Friend','2019-11-12 15:10:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(183,NULL,9,'Subject for Tell a Friend','2019-06-25 15:07:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(184,NULL,9,'Subject for Tell a Friend','2019-07-29 21:16:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(185,NULL,9,'Subject for Tell a Friend','2019-09-13 19:01:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(186,NULL,10,'Subject for Pledge Acknowledgment','2018-12-23 04:14:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(187,NULL,10,'Subject for Pledge Acknowledgment','2018-12-25 21:24:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(188,NULL,9,'Subject for Tell a Friend','2019-06-27 21:49:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(189,NULL,10,'Subject for Pledge Acknowledgment','2019-05-14 09:14:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(190,NULL,9,'Subject for Tell a Friend','2018-12-29 09:20:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(191,NULL,9,'Subject for Tell a Friend','2019-01-14 23:37:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(192,NULL,10,'Subject for Pledge Acknowledgment','2019-10-23 03:29:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(193,NULL,10,'Subject for Pledge Acknowledgment','2019-01-01 03:56:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(194,NULL,10,'Subject for Pledge Acknowledgment','2019-05-13 20:22:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(195,NULL,9,'Subject for Tell a Friend','2018-12-26 02:28:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(196,NULL,9,'Subject for Tell a Friend','2019-04-21 10:11:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(197,NULL,9,'Subject for Tell a Friend','2019-03-13 03:53:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(198,NULL,10,'Subject for Pledge Acknowledgment','2019-03-05 01:25:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(199,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 01:41:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(200,NULL,10,'Subject for Pledge Acknowledgment','2019-10-28 08:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(201,NULL,9,'Subject for Tell a Friend','2019-01-07 16:49:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(202,NULL,9,'Subject for Tell a Friend','2019-07-02 15:57:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(203,NULL,10,'Subject for Pledge Acknowledgment','2019-11-09 11:57:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(204,NULL,10,'Subject for Pledge Acknowledgment','2019-06-09 08:26:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(205,NULL,9,'Subject for Tell a Friend','2019-09-22 12:57:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(206,NULL,10,'Subject for Pledge Acknowledgment','2019-03-02 05:13:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(207,NULL,10,'Subject for Pledge Acknowledgment','2019-09-03 15:26:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(208,NULL,9,'Subject for Tell a Friend','2019-02-24 18:57:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(209,NULL,10,'Subject for Pledge Acknowledgment','2019-09-19 22:52:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(210,NULL,9,'Subject for Tell a Friend','2019-08-01 05:19:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(211,NULL,10,'Subject for Pledge Acknowledgment','2019-08-31 21:38:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(212,NULL,10,'Subject for Pledge Acknowledgment','2019-02-26 08:30:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(213,NULL,10,'Subject for Pledge Acknowledgment','2019-06-30 17:52:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(214,NULL,10,'Subject for Pledge Acknowledgment','2019-09-11 10:13:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(215,NULL,9,'Subject for Tell a Friend','2019-02-05 09:38:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(216,NULL,10,'Subject for Pledge Acknowledgment','2019-11-11 00:55:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(217,NULL,10,'Subject for Pledge Acknowledgment','2019-08-11 07:38:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(218,NULL,10,'Subject for Pledge Acknowledgment','2019-01-27 01:18:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(219,NULL,9,'Subject for Tell a Friend','2019-09-04 01:40:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(220,NULL,10,'Subject for Pledge Acknowledgment','2019-10-15 07:16:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(221,NULL,9,'Subject for Tell a Friend','2019-01-20 20:48:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(222,NULL,9,'Subject for Tell a Friend','2018-12-02 18:37:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(223,NULL,10,'Subject for Pledge Acknowledgment','2019-04-12 03:02:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(224,NULL,10,'Subject for Pledge Acknowledgment','2018-12-30 02:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(225,NULL,10,'Subject for Pledge Acknowledgment','2019-05-26 22:29:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(226,NULL,10,'Subject for Pledge Acknowledgment','2019-10-14 01:02:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(227,NULL,9,'Subject for Tell a Friend','2019-04-27 23:06:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(228,NULL,10,'Subject for Pledge Acknowledgment','2018-12-16 21:16:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(229,NULL,10,'Subject for Pledge Acknowledgment','2019-04-26 10:24:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(230,NULL,9,'Subject for Tell a Friend','2019-01-22 12:09:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(231,NULL,9,'Subject for Tell a Friend','2019-08-11 17:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(232,NULL,9,'Subject for Tell a Friend','2019-11-28 14:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(233,NULL,9,'Subject for Tell a Friend','2019-04-29 07:35:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(234,NULL,9,'Subject for Tell a Friend','2019-04-26 02:25:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(235,NULL,9,'Subject for Tell a Friend','2019-07-31 20:27:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(236,NULL,10,'Subject for Pledge Acknowledgment','2019-11-05 07:08:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(237,NULL,9,'Subject for Tell a Friend','2019-08-26 18:53:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(238,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 21:59:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(239,NULL,9,'Subject for Tell a Friend','2019-04-19 17:41:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(240,NULL,10,'Subject for Pledge Acknowledgment','2018-12-30 06:22:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(241,NULL,9,'Subject for Tell a Friend','2018-12-25 21:24:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(242,NULL,9,'Subject for Tell a Friend','2019-07-21 04:43:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(243,NULL,9,'Subject for Tell a Friend','2019-05-10 04:24:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(244,NULL,9,'Subject for Tell a Friend','2019-04-22 07:45:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(245,NULL,10,'Subject for Pledge Acknowledgment','2019-11-15 01:53:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(246,NULL,10,'Subject for Pledge Acknowledgment','2019-05-09 23:47:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(247,NULL,10,'Subject for Pledge Acknowledgment','2018-12-10 11:16:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(248,NULL,10,'Subject for Pledge Acknowledgment','2019-04-05 19:59:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(249,NULL,10,'Subject for Pledge Acknowledgment','2019-11-17 03:10:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(250,NULL,9,'Subject for Tell a Friend','2019-03-28 03:16:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(251,NULL,10,'Subject for Pledge Acknowledgment','2019-11-12 23:24:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(252,NULL,10,'Subject for Pledge Acknowledgment','2019-10-25 04:03:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(253,NULL,9,'Subject for Tell a Friend','2019-05-29 03:48:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(254,NULL,9,'Subject for Tell a Friend','2019-05-22 20:35:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(255,NULL,10,'Subject for Pledge Acknowledgment','2019-01-04 12:38:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(256,NULL,9,'Subject for Tell a Friend','2019-08-22 12:14:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(257,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 04:04:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(258,NULL,9,'Subject for Tell a Friend','2019-11-05 13:54:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(259,NULL,9,'Subject for Tell a Friend','2019-02-03 17:59:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(260,NULL,9,'Subject for Tell a Friend','2019-05-01 01:46:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(261,NULL,10,'Subject for Pledge Acknowledgment','2019-09-04 07:56:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(262,NULL,9,'Subject for Tell a Friend','2019-02-06 17:05:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(263,NULL,10,'Subject for Pledge Acknowledgment','2019-04-18 14:02:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(264,NULL,9,'Subject for Tell a Friend','2019-06-17 19:16:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(265,NULL,10,'Subject for Pledge Acknowledgment','2018-12-19 16:29:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(266,NULL,10,'Subject for Pledge Acknowledgment','2019-02-11 22:47:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(267,NULL,9,'Subject for Tell a Friend','2019-07-28 16:55:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(268,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 10:11:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(269,NULL,10,'Subject for Pledge Acknowledgment','2019-09-02 20:13:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(270,NULL,10,'Subject for Pledge Acknowledgment','2019-05-11 15:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(271,NULL,9,'Subject for Tell a Friend','2018-11-30 04:36:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(272,NULL,9,'Subject for Tell a Friend','2019-03-19 14:51:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(273,NULL,9,'Subject for Tell a Friend','2019-11-14 11:57:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(274,NULL,9,'Subject for Tell a Friend','2019-02-21 18:00:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(275,NULL,9,'Subject for Tell a Friend','2018-12-06 06:24:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(276,NULL,9,'Subject for Tell a Friend','2019-10-10 14:36:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(277,NULL,9,'Subject for Tell a Friend','2019-02-10 18:50:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(278,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 23:29:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(279,NULL,9,'Subject for Tell a Friend','2019-01-10 09:44:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(280,NULL,9,'Subject for Tell a Friend','2019-09-14 14:08:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(281,NULL,9,'Subject for Tell a Friend','2019-05-15 07:59:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(282,NULL,9,'Subject for Tell a Friend','2019-04-10 23:13:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(283,NULL,10,'Subject for Pledge Acknowledgment','2019-10-07 10:49:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(284,NULL,9,'Subject for Tell a Friend','2019-11-02 19:22:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(285,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 21:33:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(286,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 18:11:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(287,NULL,10,'Subject for Pledge Acknowledgment','2019-11-18 06:04:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(288,NULL,10,'Subject for Pledge Acknowledgment','2019-03-07 04:50:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(289,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 06:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(290,NULL,9,'Subject for Tell a Friend','2019-04-30 07:30:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(291,NULL,10,'Subject for Pledge Acknowledgment','2019-01-14 17:24:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(292,NULL,9,'Subject for Tell a Friend','2019-05-24 18:42:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(293,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 15:11:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(294,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 12:26:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(295,NULL,9,'Subject for Tell a Friend','2018-12-21 06:38:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(296,NULL,9,'Subject for Tell a Friend','2018-12-22 12:35:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(297,NULL,10,'Subject for Pledge Acknowledgment','2019-02-04 03:02:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(298,NULL,10,'Subject for Pledge Acknowledgment','2018-12-12 05:11:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(299,NULL,10,'Subject for Pledge Acknowledgment','2018-12-18 13:59:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(300,NULL,10,'Subject for Pledge Acknowledgment','2018-12-14 00:47:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(301,NULL,10,'Subject for Pledge Acknowledgment','2019-10-06 22:06:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(302,NULL,9,'Subject for Tell a Friend','2019-11-08 11:20:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(303,NULL,9,'Subject for Tell a Friend','2019-11-27 21:39:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(304,NULL,9,'Subject for Tell a Friend','2019-09-29 12:31:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(305,NULL,9,'Subject for Tell a Friend','2019-02-24 15:36:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(306,NULL,9,'Subject for Tell a Friend','2019-03-03 15:52:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(307,NULL,9,'Subject for Tell a Friend','2019-10-22 15:56:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(308,NULL,9,'Subject for Tell a Friend','2019-10-29 16:09:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(309,NULL,10,'Subject for Pledge Acknowledgment','2019-02-13 04:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(310,NULL,10,'Subject for Pledge Acknowledgment','2018-12-19 07:37:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(311,NULL,10,'Subject for Pledge Acknowledgment','2018-12-04 14:14:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(312,NULL,9,'Subject for Tell a Friend','2019-04-14 07:12:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(313,NULL,10,'Subject for Pledge Acknowledgment','2019-02-03 04:21:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(314,NULL,10,'Subject for Pledge Acknowledgment','2019-10-05 22:41:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(315,NULL,9,'Subject for Tell a Friend','2019-07-17 03:48:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(316,NULL,10,'Subject for Pledge Acknowledgment','2019-04-18 17:46:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(317,NULL,9,'Subject for Tell a Friend','2019-06-10 09:39:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(318,NULL,10,'Subject for Pledge Acknowledgment','2019-10-23 05:17:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(319,NULL,10,'Subject for Pledge Acknowledgment','2018-12-14 15:52:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(320,NULL,9,'Subject for Tell a Friend','2019-03-28 17:26:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(321,NULL,10,'Subject for Pledge Acknowledgment','2019-07-16 14:01:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(322,NULL,10,'Subject for Pledge Acknowledgment','2019-08-04 23:34:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(323,NULL,10,'Subject for Pledge Acknowledgment','2019-09-20 15:43:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(324,NULL,10,'Subject for Pledge Acknowledgment','2019-03-02 06:14:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(325,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 23:09:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(326,NULL,10,'Subject for Pledge Acknowledgment','2019-04-11 08:45:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(327,NULL,9,'Subject for Tell a Friend','2019-07-15 21:02:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(328,NULL,9,'Subject for Tell a Friend','2018-12-07 22:25:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(329,NULL,10,'Subject for Pledge Acknowledgment','2019-04-02 02:19:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(330,NULL,9,'Subject for Tell a Friend','2019-08-31 00:50:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(331,NULL,10,'Subject for Pledge Acknowledgment','2019-02-26 02:12:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(332,NULL,10,'Subject for Pledge Acknowledgment','2018-12-15 10:35:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(333,NULL,9,'Subject for Tell a Friend','2019-10-06 09:53:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(334,NULL,10,'Subject for Pledge Acknowledgment','2019-04-07 10:26:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(335,NULL,10,'Subject for Pledge Acknowledgment','2019-01-14 05:31:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(336,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 17:13:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(337,NULL,9,'Subject for Tell a Friend','2019-06-07 09:59:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(338,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 01:07:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(339,NULL,9,'Subject for Tell a Friend','2019-09-14 14:58:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(340,NULL,10,'Subject for Pledge Acknowledgment','2019-04-19 23:05:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(341,NULL,9,'Subject for Tell a Friend','2019-07-09 00:04:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(342,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 20:07:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(343,NULL,9,'Subject for Tell a Friend','2019-04-04 19:37:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(344,NULL,10,'Subject for Pledge Acknowledgment','2019-05-18 10:32:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(345,NULL,9,'Subject for Tell a Friend','2019-04-09 15:03:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(346,NULL,10,'Subject for Pledge Acknowledgment','2019-04-10 15:05:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(347,NULL,9,'Subject for Tell a Friend','2019-10-22 18:46:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(348,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 16:49:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(349,NULL,9,'Subject for Tell a Friend','2019-08-04 11:46:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(350,NULL,10,'Subject for Pledge Acknowledgment','2019-08-31 14:01:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(351,NULL,10,'Subject for Pledge Acknowledgment','2018-12-15 16:30:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(352,NULL,9,'Subject for Tell a Friend','2019-09-03 13:37:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(353,NULL,10,'Subject for Pledge Acknowledgment','2019-11-15 04:07:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(354,NULL,10,'Subject for Pledge Acknowledgment','2019-01-16 19:45:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(355,NULL,9,'Subject for Tell a Friend','2019-09-29 08:48:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(356,NULL,9,'Subject for Tell a Friend','2019-08-26 22:13:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(357,NULL,9,'Subject for Tell a Friend','2019-01-19 01:16:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(358,NULL,10,'Subject for Pledge Acknowledgment','2019-07-09 10:00:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(359,NULL,9,'Subject for Tell a Friend','2019-04-02 08:39:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(360,NULL,9,'Subject for Tell a Friend','2019-07-23 21:27:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(361,NULL,10,'Subject for Pledge Acknowledgment','2018-12-05 08:38:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(362,NULL,9,'Subject for Tell a Friend','2019-11-15 07:03:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(363,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 14:34:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(364,NULL,10,'Subject for Pledge Acknowledgment','2019-04-20 10:31:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(365,NULL,10,'Subject for Pledge Acknowledgment','2019-03-24 21:55:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(366,NULL,9,'Subject for Tell a Friend','2019-02-14 05:59:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(367,NULL,9,'Subject for Tell a Friend','2019-10-24 04:10:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(368,NULL,9,'Subject for Tell a Friend','2019-08-01 07:52:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(369,NULL,9,'Subject for Tell a Friend','2019-07-31 14:36:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(370,NULL,9,'Subject for Tell a Friend','2018-12-27 17:39:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(371,NULL,9,'Subject for Tell a Friend','2019-04-15 04:18:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(372,NULL,9,'Subject for Tell a Friend','2019-03-26 20:56:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(373,NULL,9,'Subject for Tell a Friend','2019-10-25 04:40:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(374,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 05:48:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(375,NULL,9,'Subject for Tell a Friend','2019-03-15 19:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:51','2019-11-28 19:55:51'),(376,NULL,9,'Subject for Tell a Friend','2019-07-08 07:59:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(377,NULL,10,'Subject for Pledge Acknowledgment','2019-08-20 07:49:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(378,NULL,9,'Subject for Tell a Friend','2018-12-23 18:19:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(379,NULL,10,'Subject for Pledge Acknowledgment','2019-01-28 12:00:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(380,NULL,10,'Subject for Pledge Acknowledgment','2019-05-01 23:37:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(381,NULL,9,'Subject for Tell a Friend','2018-12-06 02:00:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(382,NULL,10,'Subject for Pledge Acknowledgment','2019-09-22 09:59:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(383,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 11:08:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(384,NULL,10,'Subject for Pledge Acknowledgment','2019-10-08 02:17:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(385,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 00:34:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(386,NULL,10,'Subject for Pledge Acknowledgment','2019-03-05 03:45:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(387,NULL,10,'Subject for Pledge Acknowledgment','2019-01-06 21:41:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(388,NULL,9,'Subject for Tell a Friend','2018-12-24 08:02:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(389,NULL,9,'Subject for Tell a Friend','2019-07-06 02:17:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(390,NULL,10,'Subject for Pledge Acknowledgment','2019-08-26 23:44:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(391,NULL,10,'Subject for Pledge Acknowledgment','2019-04-30 01:35:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(392,NULL,10,'Subject for Pledge Acknowledgment','2019-04-03 14:33:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(393,NULL,9,'Subject for Tell a Friend','2019-05-04 00:33:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(394,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 22:07:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(395,NULL,10,'Subject for Pledge Acknowledgment','2019-03-15 02:14:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(396,NULL,10,'Subject for Pledge Acknowledgment','2019-06-01 14:54:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(397,NULL,9,'Subject for Tell a Friend','2019-06-19 07:05:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(398,NULL,9,'Subject for Tell a Friend','2019-10-14 04:23:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(399,NULL,10,'Subject for Pledge Acknowledgment','2019-05-02 21:22:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(400,NULL,10,'Subject for Pledge Acknowledgment','2019-07-06 09:45:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(401,NULL,9,'Subject for Tell a Friend','2019-09-20 19:32:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(402,NULL,9,'Subject for Tell a Friend','2019-11-16 17:11:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(403,NULL,9,'Subject for Tell a Friend','2019-03-03 02:15:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(404,NULL,10,'Subject for Pledge Acknowledgment','2018-12-12 16:38:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(405,NULL,10,'Subject for Pledge Acknowledgment','2018-12-05 01:14:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(406,NULL,10,'Subject for Pledge Acknowledgment','2019-09-21 16:20:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(407,NULL,10,'Subject for Pledge Acknowledgment','2019-10-05 22:09:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(408,NULL,10,'Subject for Pledge Acknowledgment','2019-08-25 17:14:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(409,NULL,9,'Subject for Tell a Friend','2019-06-17 18:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(410,NULL,9,'Subject for Tell a Friend','2018-12-07 16:01:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(411,NULL,9,'Subject for Tell a Friend','2019-03-31 08:15:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(412,NULL,9,'Subject for Tell a Friend','2019-07-12 22:25:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(413,NULL,9,'Subject for Tell a Friend','2019-10-23 21:02:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(414,NULL,10,'Subject for Pledge Acknowledgment','2019-02-14 01:34:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(415,NULL,10,'Subject for Pledge Acknowledgment','2019-08-17 14:39:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(416,NULL,10,'Subject for Pledge Acknowledgment','2019-02-21 04:35:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(417,NULL,9,'Subject for Tell a Friend','2019-07-23 19:59:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(418,NULL,10,'Subject for Pledge Acknowledgment','2019-01-02 02:00:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(419,NULL,9,'Subject for Tell a Friend','2019-10-28 21:56:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(420,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 08:48:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(421,NULL,10,'Subject for Pledge Acknowledgment','2019-08-16 21:22:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(422,NULL,9,'Subject for Tell a Friend','2019-11-03 15:56:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(423,NULL,10,'Subject for Pledge Acknowledgment','2019-04-13 20:10:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(424,NULL,9,'Subject for Tell a Friend','2019-08-24 15:01:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(425,NULL,9,'Subject for Tell a Friend','2019-08-27 21:47:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(426,NULL,9,'Subject for Tell a Friend','2019-07-25 01:47:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(427,NULL,9,'Subject for Tell a Friend','2019-01-05 13:03:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(428,NULL,10,'Subject for Pledge Acknowledgment','2019-02-21 09:40:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(429,NULL,9,'Subject for Tell a Friend','2019-03-22 16:45:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(430,NULL,9,'Subject for Tell a Friend','2018-12-13 07:06:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(431,NULL,9,'Subject for Tell a Friend','2019-07-01 17:12:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(432,NULL,9,'Subject for Tell a Friend','2019-02-19 01:05:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(433,NULL,9,'Subject for Tell a Friend','2019-11-13 03:24:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(434,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 19:22:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(435,NULL,10,'Subject for Pledge Acknowledgment','2019-04-06 09:16:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(436,NULL,10,'Subject for Pledge Acknowledgment','2019-11-23 11:43:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(437,NULL,9,'Subject for Tell a Friend','2019-05-05 16:29:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(438,NULL,10,'Subject for Pledge Acknowledgment','2019-10-23 14:13:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(439,NULL,10,'Subject for Pledge Acknowledgment','2019-08-01 17:59:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(440,NULL,9,'Subject for Tell a Friend','2019-07-15 07:43:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(441,NULL,9,'Subject for Tell a Friend','2019-02-21 11:09:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(442,NULL,9,'Subject for Tell a Friend','2019-07-14 23:32:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(443,NULL,10,'Subject for Pledge Acknowledgment','2019-11-15 12:23:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(444,NULL,10,'Subject for Pledge Acknowledgment','2019-07-03 08:52:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(445,NULL,10,'Subject for Pledge Acknowledgment','2019-03-25 01:17:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(446,NULL,10,'Subject for Pledge Acknowledgment','2019-09-18 15:57:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(447,NULL,9,'Subject for Tell a Friend','2019-03-24 06:09:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(448,NULL,10,'Subject for Pledge Acknowledgment','2019-05-26 05:02:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(449,NULL,10,'Subject for Pledge Acknowledgment','2019-11-08 11:13:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(450,NULL,10,'Subject for Pledge Acknowledgment','2019-04-12 04:46:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(464,1,7,'General','2019-11-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(465,2,7,'Student','2019-11-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(466,3,7,'General','2019-11-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(467,4,7,'Student','2019-11-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(468,5,7,'General','2017-10-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(469,6,7,'Student','2019-11-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(470,7,7,'General','2019-11-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(471,8,7,'Student','2019-11-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(472,9,7,'General','2019-11-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(473,10,7,'General','2017-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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(474,11,7,'Lifetime','2019-11-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(475,12,7,'Student','2019-11-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(476,13,7,'General','2019-11-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(477,14,7,'Student','2019-11-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(478,15,7,'Student','2018-11-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(479,16,7,'Student','2019-11-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(480,17,7,'General','2019-11-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(481,18,7,'Student','2019-11-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(482,19,7,'General','2019-11-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(483,20,7,'General','2017-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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(484,21,7,'General','2019-11-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(485,22,7,'Lifetime','2019-11-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(486,23,7,'General','2019-11-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(487,24,7,'Student','2019-11-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(488,25,7,'General','2017-05-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(489,26,7,'Student','2019-11-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(490,27,7,'General','2019-11-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(491,28,7,'Student','2019-11-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(492,29,7,'General','2019-10-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(493,30,7,'General','2017-04-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(507,27,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(508,28,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(509,29,6,'$ 100.00 - General Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(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,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(575,45,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(576,46,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(577,47,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(578,48,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(579,49,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(580,50,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(581,51,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(583,53,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(585,55,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(588,58,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(589,59,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(591,61,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(592,62,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(593,63,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(594,64,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(596,66,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(599,69,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(600,70,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(602,72,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(603,73,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(604,74,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(607,77,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(608,78,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(610,80,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(611,81,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(613,83,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(618,88,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(619,89,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(621,91,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(622,92,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'),(624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-11-29 08:55:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-11-28 19:55:52','2019-11-28 19:55:52'); +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,10,'Subject for Pledge Acknowledgment','2019-05-01 03:33:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(2,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 08:40:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(3,NULL,9,'Subject for Tell a Friend','2019-08-18 23:49:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(4,NULL,9,'Subject for Tell a Friend','2019-01-31 15:22:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(5,NULL,10,'Subject for Pledge Acknowledgment','2019-06-06 18:04:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(6,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 04:00:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(7,NULL,10,'Subject for Pledge Acknowledgment','2019-05-28 16:16:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(8,NULL,9,'Subject for Tell a Friend','2019-07-06 08:03:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(9,NULL,10,'Subject for Pledge Acknowledgment','2019-09-11 16:12:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(10,NULL,9,'Subject for Tell a Friend','2019-11-07 12:40:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(11,NULL,10,'Subject for Pledge Acknowledgment','2019-11-17 15:47:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(12,NULL,9,'Subject for Tell a Friend','2019-03-08 14:40:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(13,NULL,9,'Subject for Tell a Friend','2019-09-27 17:26:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(14,NULL,9,'Subject for Tell a Friend','2019-09-07 22:16:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(15,NULL,9,'Subject for Tell a Friend','2019-04-12 08:19:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(16,NULL,10,'Subject for Pledge Acknowledgment','2019-06-29 12:16:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(17,NULL,10,'Subject for Pledge Acknowledgment','2019-04-28 08:58:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(18,NULL,10,'Subject for Pledge Acknowledgment','2019-06-19 05:05:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(19,NULL,9,'Subject for Tell a Friend','2019-03-25 06:42:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(20,NULL,10,'Subject for Pledge Acknowledgment','2019-02-23 02:17:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(21,NULL,10,'Subject for Pledge Acknowledgment','2019-07-22 11:00:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(22,NULL,10,'Subject for Pledge Acknowledgment','2019-08-24 15:54:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(23,NULL,9,'Subject for Tell a Friend','2019-07-30 20:51:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(24,NULL,10,'Subject for Pledge Acknowledgment','2019-09-04 09:20:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(25,NULL,9,'Subject for Tell a Friend','2019-11-13 17:25:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(26,NULL,9,'Subject for Tell a Friend','2019-03-11 06:52:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(27,NULL,10,'Subject for Pledge Acknowledgment','2019-03-25 20:31:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(28,NULL,9,'Subject for Tell a Friend','2019-02-09 13:58:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(29,NULL,10,'Subject for Pledge Acknowledgment','2020-01-10 03:20:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(30,NULL,9,'Subject for Tell a Friend','2019-05-14 15:45:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(31,NULL,10,'Subject for Pledge Acknowledgment','2019-05-16 07:58:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(32,NULL,9,'Subject for Tell a Friend','2019-03-09 09:39:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(33,NULL,9,'Subject for Tell a Friend','2019-02-25 12:01:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(34,NULL,9,'Subject for Tell a Friend','2019-05-16 19:34:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(35,NULL,9,'Subject for Tell a Friend','2019-11-21 11:59:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:50','2020-01-16 22:53:50'),(36,NULL,9,'Subject for Tell a Friend','2019-06-28 01:52:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(37,NULL,9,'Subject for Tell a Friend','2020-01-07 22:11:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(38,NULL,10,'Subject for Pledge Acknowledgment','2019-08-03 03:44:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(39,NULL,10,'Subject for Pledge Acknowledgment','2019-02-07 08:00:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(40,NULL,9,'Subject for Tell a Friend','2019-03-06 09:12:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(41,NULL,9,'Subject for Tell a Friend','2019-10-08 07:34:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(42,NULL,10,'Subject for Pledge Acknowledgment','2019-03-29 11:13:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(43,NULL,9,'Subject for Tell a Friend','2019-08-11 17:40:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(44,NULL,9,'Subject for Tell a Friend','2019-10-27 12:36:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(45,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 21:07:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(46,NULL,9,'Subject for Tell a Friend','2019-09-20 16:00:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(47,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 15:41:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(48,NULL,10,'Subject for Pledge Acknowledgment','2019-09-08 06:22:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(49,NULL,10,'Subject for Pledge Acknowledgment','2019-02-27 01:39:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(50,NULL,9,'Subject for Tell a Friend','2019-12-17 07:31:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(51,NULL,9,'Subject for Tell a Friend','2020-01-03 05:21:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(52,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 02:23:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(53,NULL,10,'Subject for Pledge Acknowledgment','2019-09-20 16:54:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(54,NULL,10,'Subject for Pledge Acknowledgment','2019-07-12 23:07:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(55,NULL,10,'Subject for Pledge Acknowledgment','2019-04-19 08:52:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(56,NULL,9,'Subject for Tell a Friend','2019-11-13 04:54:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(57,NULL,10,'Subject for Pledge Acknowledgment','2019-11-28 19:46:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(58,NULL,9,'Subject for Tell a Friend','2019-08-28 07:22:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(59,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 21:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(60,NULL,9,'Subject for Tell a Friend','2020-01-09 04:38:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(61,NULL,10,'Subject for Pledge Acknowledgment','2019-10-17 14:09:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(62,NULL,9,'Subject for Tell a Friend','2019-06-02 03:56:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(63,NULL,10,'Subject for Pledge Acknowledgment','2019-06-27 12:12:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(64,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 02:21:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(65,NULL,10,'Subject for Pledge Acknowledgment','2019-04-09 14:11:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(66,NULL,9,'Subject for Tell a Friend','2019-07-02 05:44:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(67,NULL,9,'Subject for Tell a Friend','2019-03-20 03:55:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(68,NULL,9,'Subject for Tell a Friend','2020-01-08 00:54:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(69,NULL,10,'Subject for Pledge Acknowledgment','2019-05-07 22:17:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(70,NULL,9,'Subject for Tell a Friend','2019-08-06 23:43:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(71,NULL,10,'Subject for Pledge Acknowledgment','2019-02-17 13:44:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(72,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 08:08:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(73,NULL,10,'Subject for Pledge Acknowledgment','2019-08-14 14:00:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(74,NULL,9,'Subject for Tell a Friend','2019-02-19 10:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(75,NULL,10,'Subject for Pledge Acknowledgment','2019-03-21 00:39:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(76,NULL,10,'Subject for Pledge Acknowledgment','2019-03-07 09:07:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(77,NULL,9,'Subject for Tell a Friend','2019-12-08 23:15:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(78,NULL,9,'Subject for Tell a Friend','2019-12-01 10:27:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(79,NULL,9,'Subject for Tell a Friend','2019-11-29 18:28:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(80,NULL,9,'Subject for Tell a Friend','2019-03-06 15:58:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(81,NULL,9,'Subject for Tell a Friend','2019-07-17 21:02:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(82,NULL,9,'Subject for Tell a Friend','2019-12-29 10:44:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(83,NULL,10,'Subject for Pledge Acknowledgment','2019-12-11 01:19:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(84,NULL,9,'Subject for Tell a Friend','2019-11-26 09:01:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(85,NULL,10,'Subject for Pledge Acknowledgment','2019-08-04 07:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(86,NULL,10,'Subject for Pledge Acknowledgment','2019-08-26 01:10:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(87,NULL,10,'Subject for Pledge Acknowledgment','2019-10-03 15:09:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(88,NULL,9,'Subject for Tell a Friend','2019-11-26 03:37:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(89,NULL,10,'Subject for Pledge Acknowledgment','2019-07-25 15:32:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(90,NULL,10,'Subject for Pledge Acknowledgment','2019-05-28 04:42:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(91,NULL,10,'Subject for Pledge Acknowledgment','2019-03-22 13:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(92,NULL,10,'Subject for Pledge Acknowledgment','2019-06-27 16:20:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(93,NULL,9,'Subject for Tell a Friend','2019-07-24 22:17:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(94,NULL,10,'Subject for Pledge Acknowledgment','2019-08-20 03:20:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(95,NULL,9,'Subject for Tell a Friend','2019-06-30 11:23:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(96,NULL,10,'Subject for Pledge Acknowledgment','2019-09-10 08:49:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(97,NULL,10,'Subject for Pledge Acknowledgment','2019-09-05 13:16:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(98,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 19:28:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(99,NULL,9,'Subject for Tell a Friend','2019-10-16 21:14:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(100,NULL,10,'Subject for Pledge Acknowledgment','2019-01-30 23:50:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(101,NULL,9,'Subject for Tell a Friend','2019-07-30 11:33:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(102,NULL,10,'Subject for Pledge Acknowledgment','2019-06-18 19:11:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(103,NULL,10,'Subject for Pledge Acknowledgment','2019-06-13 04:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(104,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 08:02:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(105,NULL,10,'Subject for Pledge Acknowledgment','2019-08-17 16:25:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(106,NULL,10,'Subject for Pledge Acknowledgment','2019-11-04 19:46:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(107,NULL,9,'Subject for Tell a Friend','2019-02-08 16:24:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(108,NULL,9,'Subject for Tell a Friend','2019-04-05 23:50:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(109,NULL,10,'Subject for Pledge Acknowledgment','2019-12-17 09:03:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(110,NULL,9,'Subject for Tell a Friend','2019-05-23 21:09:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(111,NULL,10,'Subject for Pledge Acknowledgment','2019-11-02 17:33:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(112,NULL,10,'Subject for Pledge Acknowledgment','2019-08-24 16:39:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(113,NULL,10,'Subject for Pledge Acknowledgment','2019-06-22 18:18:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(114,NULL,9,'Subject for Tell a Friend','2019-12-18 07:35:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(115,NULL,10,'Subject for Pledge Acknowledgment','2019-05-07 05:16:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(116,NULL,9,'Subject for Tell a Friend','2019-04-06 19:06:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(117,NULL,10,'Subject for Pledge Acknowledgment','2019-05-04 11:05:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(118,NULL,9,'Subject for Tell a Friend','2019-10-04 17:19:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(119,NULL,9,'Subject for Tell a Friend','2019-02-28 04:49:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(120,NULL,9,'Subject for Tell a Friend','2019-11-08 16:33:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(121,NULL,10,'Subject for Pledge Acknowledgment','2019-10-21 15:21:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(122,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 05:15:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(123,NULL,9,'Subject for Tell a Friend','2019-01-22 08:04:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(124,NULL,9,'Subject for Tell a Friend','2019-01-26 22:20:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(125,NULL,9,'Subject for Tell a Friend','2019-10-18 21:20:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(126,NULL,10,'Subject for Pledge Acknowledgment','2020-01-09 17:16:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(127,NULL,9,'Subject for Tell a Friend','2019-10-21 16:14:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(128,NULL,10,'Subject for Pledge Acknowledgment','2019-04-19 00:15:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(129,NULL,10,'Subject for Pledge Acknowledgment','2019-02-19 00:31:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(130,NULL,10,'Subject for Pledge Acknowledgment','2019-07-19 09:36:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(131,NULL,9,'Subject for Tell a Friend','2019-02-21 03:50:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(132,NULL,10,'Subject for Pledge Acknowledgment','2019-10-08 13:31:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(133,NULL,9,'Subject for Tell a Friend','2019-02-24 04:55:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(134,NULL,10,'Subject for Pledge Acknowledgment','2019-07-09 18:09:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(135,NULL,10,'Subject for Pledge Acknowledgment','2019-06-14 04:18:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(136,NULL,9,'Subject for Tell a Friend','2019-08-11 21:03:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(137,NULL,9,'Subject for Tell a Friend','2019-09-19 04:12:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(138,NULL,10,'Subject for Pledge Acknowledgment','2019-05-24 17:41:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(139,NULL,10,'Subject for Pledge Acknowledgment','2019-11-25 02:03:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(140,NULL,9,'Subject for Tell a Friend','2019-09-28 23:22:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(141,NULL,9,'Subject for Tell a Friend','2019-02-04 00:39:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(142,NULL,10,'Subject for Pledge Acknowledgment','2019-08-01 01:03:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(143,NULL,10,'Subject for Pledge Acknowledgment','2019-06-09 04:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(144,NULL,9,'Subject for Tell a Friend','2019-10-24 10:45:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(145,NULL,9,'Subject for Tell a Friend','2019-12-23 08:15:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(146,NULL,9,'Subject for Tell a Friend','2019-02-07 22:37:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(147,NULL,9,'Subject for Tell a Friend','2019-10-26 13:09:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(148,NULL,9,'Subject for Tell a Friend','2019-11-08 11:05:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(149,NULL,9,'Subject for Tell a Friend','2019-01-22 23:46:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(150,NULL,9,'Subject for Tell a Friend','2019-08-28 19:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(151,NULL,9,'Subject for Tell a Friend','2019-10-19 09:15:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(152,NULL,10,'Subject for Pledge Acknowledgment','2019-03-05 08:13:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(153,NULL,10,'Subject for Pledge Acknowledgment','2019-06-08 03:46:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(154,NULL,9,'Subject for Tell a Friend','2019-04-07 03:40:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(155,NULL,10,'Subject for Pledge Acknowledgment','2020-01-16 12:57:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(156,NULL,10,'Subject for Pledge Acknowledgment','2019-06-22 11:56:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(157,NULL,9,'Subject for Tell a Friend','2019-03-01 18:06:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(158,NULL,10,'Subject for Pledge Acknowledgment','2019-05-05 12:55:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(159,NULL,9,'Subject for Tell a Friend','2019-06-09 19:27:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(160,NULL,10,'Subject for Pledge Acknowledgment','2019-10-28 02:38:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(161,NULL,9,'Subject for Tell a Friend','2019-03-10 09:23:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(162,NULL,10,'Subject for Pledge Acknowledgment','2019-05-23 13:50:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(163,NULL,9,'Subject for Tell a Friend','2019-06-21 16:42:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(164,NULL,9,'Subject for Tell a Friend','2019-02-22 15:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(165,NULL,9,'Subject for Tell a Friend','2019-10-26 18:08:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(166,NULL,10,'Subject for Pledge Acknowledgment','2019-12-18 17:44:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(167,NULL,10,'Subject for Pledge Acknowledgment','2019-01-24 16:30:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(168,NULL,10,'Subject for Pledge Acknowledgment','2019-12-03 23:31:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(169,NULL,9,'Subject for Tell a Friend','2019-10-30 02:25:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(170,NULL,10,'Subject for Pledge Acknowledgment','2019-10-22 13:59:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(171,NULL,9,'Subject for Tell a Friend','2019-08-18 01:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(172,NULL,10,'Subject for Pledge Acknowledgment','2019-07-27 18:24:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(173,NULL,10,'Subject for Pledge Acknowledgment','2019-08-02 03:23:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(174,NULL,9,'Subject for Tell a Friend','2019-02-20 09:13:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(175,NULL,10,'Subject for Pledge Acknowledgment','2019-04-20 14:49:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(176,NULL,10,'Subject for Pledge Acknowledgment','2019-06-18 02:28:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(177,NULL,10,'Subject for Pledge Acknowledgment','2019-01-18 05:52:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(178,NULL,10,'Subject for Pledge Acknowledgment','2019-02-28 18:51:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(179,NULL,9,'Subject for Tell a Friend','2019-09-22 00:25:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(180,NULL,9,'Subject for Tell a Friend','2019-04-06 04:22:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(181,NULL,9,'Subject for Tell a Friend','2019-02-10 14:42:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(182,NULL,9,'Subject for Tell a Friend','2019-09-06 20:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(183,NULL,9,'Subject for Tell a Friend','2019-02-09 08:32:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(184,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 20:04:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(185,NULL,10,'Subject for Pledge Acknowledgment','2019-10-13 04:00:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(186,NULL,9,'Subject for Tell a Friend','2019-03-01 20:03:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(187,NULL,10,'Subject for Pledge Acknowledgment','2019-11-09 19:01:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(188,NULL,10,'Subject for Pledge Acknowledgment','2019-09-13 05:11:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(189,NULL,10,'Subject for Pledge Acknowledgment','2019-02-05 11:18:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(190,NULL,10,'Subject for Pledge Acknowledgment','2019-02-01 00:47:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(191,NULL,10,'Subject for Pledge Acknowledgment','2019-09-07 08:59:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(192,NULL,9,'Subject for Tell a Friend','2019-11-12 22:17:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(193,NULL,9,'Subject for Tell a Friend','2019-06-25 08:47:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(194,NULL,9,'Subject for Tell a Friend','2019-08-28 08:27:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(195,NULL,10,'Subject for Pledge Acknowledgment','2019-12-01 13:16:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(196,NULL,9,'Subject for Tell a Friend','2019-10-11 02:29:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(197,NULL,10,'Subject for Pledge Acknowledgment','2019-06-04 10:34:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(198,NULL,9,'Subject for Tell a Friend','2019-09-09 23:03:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(199,NULL,9,'Subject for Tell a Friend','2019-06-09 12:46:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(200,NULL,9,'Subject for Tell a Friend','2019-12-08 07:45:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(201,NULL,10,'Subject for Pledge Acknowledgment','2019-08-09 05:02:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(202,NULL,10,'Subject for Pledge Acknowledgment','2019-12-29 14:41:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(203,NULL,10,'Subject for Pledge Acknowledgment','2019-12-17 22:51:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(204,NULL,9,'Subject for Tell a Friend','2019-07-30 06:05:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(205,NULL,10,'Subject for Pledge Acknowledgment','2019-06-23 09:16:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(206,NULL,9,'Subject for Tell a Friend','2019-04-10 00:35:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(207,NULL,9,'Subject for Tell a Friend','2019-01-21 14:52:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(208,NULL,9,'Subject for Tell a Friend','2019-12-02 07:28:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(209,NULL,10,'Subject for Pledge Acknowledgment','2019-02-28 16:04:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(210,NULL,9,'Subject for Tell a Friend','2019-03-27 17:47:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(211,NULL,10,'Subject for Pledge Acknowledgment','2019-11-26 13:58:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(212,NULL,10,'Subject for Pledge Acknowledgment','2019-11-13 17:30:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(213,NULL,10,'Subject for Pledge Acknowledgment','2019-08-31 23:49:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(214,NULL,9,'Subject for Tell a Friend','2019-11-21 23:27:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(215,NULL,9,'Subject for Tell a Friend','2019-04-23 09:13:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(216,NULL,10,'Subject for Pledge Acknowledgment','2019-02-10 22:03:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(217,NULL,10,'Subject for Pledge Acknowledgment','2019-05-11 19:06:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(218,NULL,9,'Subject for Tell a Friend','2019-03-22 11:04:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(219,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 12:27:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(220,NULL,10,'Subject for Pledge Acknowledgment','2019-09-03 21:49:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(221,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 10:36:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(222,NULL,10,'Subject for Pledge Acknowledgment','2019-04-17 09:40:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(223,NULL,9,'Subject for Tell a Friend','2019-12-11 19:24:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(224,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 00:11:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(225,NULL,9,'Subject for Tell a Friend','2019-11-23 18:35:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(226,NULL,9,'Subject for Tell a Friend','2019-05-31 10:42:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(227,NULL,10,'Subject for Pledge Acknowledgment','2019-09-19 16:02:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(228,NULL,9,'Subject for Tell a Friend','2019-04-30 01:41:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(229,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 11:05:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(230,NULL,10,'Subject for Pledge Acknowledgment','2019-04-28 20:37:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(231,NULL,9,'Subject for Tell a Friend','2019-02-13 05:50:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(232,NULL,10,'Subject for Pledge Acknowledgment','2019-10-18 02:40:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(233,NULL,9,'Subject for Tell a Friend','2019-04-20 11:33:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(234,NULL,10,'Subject for Pledge Acknowledgment','2019-10-11 14:22:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(235,NULL,9,'Subject for Tell a Friend','2019-01-21 21:56:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(236,NULL,9,'Subject for Tell a Friend','2019-12-08 21:00:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(237,NULL,10,'Subject for Pledge Acknowledgment','2019-04-23 09:25:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(238,NULL,9,'Subject for Tell a Friend','2020-01-05 22:51:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(239,NULL,9,'Subject for Tell a Friend','2019-02-09 22:39:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(240,NULL,9,'Subject for Tell a Friend','2019-08-03 01:13:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(241,NULL,9,'Subject for Tell a Friend','2019-08-28 06:31:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(242,NULL,10,'Subject for Pledge Acknowledgment','2019-08-13 13:36:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(243,NULL,9,'Subject for Tell a Friend','2019-03-21 18:56:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(244,NULL,10,'Subject for Pledge Acknowledgment','2019-07-15 22:03:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(245,NULL,10,'Subject for Pledge Acknowledgment','2019-07-05 15:47:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(246,NULL,9,'Subject for Tell a Friend','2019-12-24 07:37:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(247,NULL,10,'Subject for Pledge Acknowledgment','2019-01-18 00:10:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(248,NULL,9,'Subject for Tell a Friend','2019-10-10 04:25:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(249,NULL,9,'Subject for Tell a Friend','2019-08-20 22:05:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(250,NULL,10,'Subject for Pledge Acknowledgment','2019-03-28 21:34:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(251,NULL,10,'Subject for Pledge Acknowledgment','2019-11-05 04:13:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(252,NULL,9,'Subject for Tell a Friend','2019-08-30 19:27:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(253,NULL,10,'Subject for Pledge Acknowledgment','2019-10-03 12:53:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(254,NULL,9,'Subject for Tell a Friend','2019-12-26 02:47:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(255,NULL,10,'Subject for Pledge Acknowledgment','2019-09-24 16:14:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(256,NULL,10,'Subject for Pledge Acknowledgment','2019-03-10 04:57:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(257,NULL,10,'Subject for Pledge Acknowledgment','2019-12-08 15:34:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(258,NULL,9,'Subject for Tell a Friend','2019-04-28 00:02:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(259,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 16:17:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(260,NULL,9,'Subject for Tell a Friend','2019-12-30 18:08:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(261,NULL,9,'Subject for Tell a Friend','2019-08-29 07:16:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(262,NULL,10,'Subject for Pledge Acknowledgment','2019-03-24 15:13:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(263,NULL,9,'Subject for Tell a Friend','2019-05-06 20:54:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(264,NULL,9,'Subject for Tell a Friend','2019-02-26 14:16:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(265,NULL,9,'Subject for Tell a Friend','2019-01-23 06:59:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(266,NULL,10,'Subject for Pledge Acknowledgment','2019-12-17 07:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(267,NULL,9,'Subject for Tell a Friend','2019-07-29 05:05:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(268,NULL,9,'Subject for Tell a Friend','2019-01-26 10:33:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(269,NULL,9,'Subject for Tell a Friend','2019-12-30 19:16:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(270,NULL,9,'Subject for Tell a Friend','2019-02-01 11:18:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(271,NULL,9,'Subject for Tell a Friend','2019-03-10 17:12:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(272,NULL,10,'Subject for Pledge Acknowledgment','2019-12-27 18:35:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(273,NULL,10,'Subject for Pledge Acknowledgment','2019-06-29 20:33:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(274,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 09:42:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(275,NULL,10,'Subject for Pledge Acknowledgment','2019-12-04 16:18:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(276,NULL,10,'Subject for Pledge Acknowledgment','2019-04-24 15:33:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(277,NULL,9,'Subject for Tell a Friend','2019-03-02 22:49:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(278,NULL,10,'Subject for Pledge Acknowledgment','2019-08-27 09:23:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(279,NULL,9,'Subject for Tell a Friend','2019-08-10 05:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(280,NULL,9,'Subject for Tell a Friend','2019-03-09 19:04:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(281,NULL,9,'Subject for Tell a Friend','2019-11-29 22:01:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(282,NULL,10,'Subject for Pledge Acknowledgment','2019-04-12 01:19:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(283,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 12:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(284,NULL,10,'Subject for Pledge Acknowledgment','2019-09-14 16:29:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(285,NULL,9,'Subject for Tell a Friend','2019-06-20 23:26:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(286,NULL,10,'Subject for Pledge Acknowledgment','2019-06-10 13:31:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(287,NULL,10,'Subject for Pledge Acknowledgment','2019-10-16 21:37:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(288,NULL,9,'Subject for Tell a Friend','2019-10-22 03:15:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(289,NULL,9,'Subject for Tell a Friend','2019-05-06 15:13:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(290,NULL,10,'Subject for Pledge Acknowledgment','2019-06-22 05:25:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(291,NULL,10,'Subject for Pledge Acknowledgment','2019-10-03 18:57:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(292,NULL,9,'Subject for Tell a Friend','2019-06-24 09:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(293,NULL,10,'Subject for Pledge Acknowledgment','2019-12-28 09:50:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(294,NULL,10,'Subject for Pledge Acknowledgment','2019-11-03 13:26:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(295,NULL,9,'Subject for Tell a Friend','2019-06-30 20:00:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(296,NULL,10,'Subject for Pledge Acknowledgment','2019-08-28 02:32:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(297,NULL,10,'Subject for Pledge Acknowledgment','2019-07-11 08:29:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(298,NULL,10,'Subject for Pledge Acknowledgment','2019-10-14 21:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(299,NULL,10,'Subject for Pledge Acknowledgment','2019-09-02 10:45:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(300,NULL,10,'Subject for Pledge Acknowledgment','2019-06-22 11:12:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(301,NULL,9,'Subject for Tell a Friend','2019-02-22 10:08:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(302,NULL,10,'Subject for Pledge Acknowledgment','2019-03-26 15:11:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(303,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 21:25:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(304,NULL,10,'Subject for Pledge Acknowledgment','2019-01-19 23:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(305,NULL,10,'Subject for Pledge Acknowledgment','2019-08-07 10:18:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(306,NULL,10,'Subject for Pledge Acknowledgment','2019-05-28 03:27:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(307,NULL,9,'Subject for Tell a Friend','2019-10-25 07:02:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(308,NULL,9,'Subject for Tell a Friend','2019-04-14 04:18:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(309,NULL,10,'Subject for Pledge Acknowledgment','2019-12-29 20:56:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(310,NULL,9,'Subject for Tell a Friend','2019-12-04 17:19:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(311,NULL,9,'Subject for Tell a Friend','2019-10-27 12:24:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(312,NULL,9,'Subject for Tell a Friend','2019-07-21 07:48:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(313,NULL,9,'Subject for Tell a Friend','2019-06-13 14:51:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(314,NULL,10,'Subject for Pledge Acknowledgment','2019-07-21 11:21:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(315,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 13:51:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(316,NULL,9,'Subject for Tell a Friend','2019-04-20 01:19:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(317,NULL,9,'Subject for Tell a Friend','2019-07-21 07:51:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(318,NULL,9,'Subject for Tell a Friend','2019-10-16 22:23:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(319,NULL,9,'Subject for Tell a Friend','2020-01-11 19:40:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(320,NULL,9,'Subject for Tell a Friend','2019-07-04 01:23:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(321,NULL,10,'Subject for Pledge Acknowledgment','2019-03-27 04:59:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(322,NULL,9,'Subject for Tell a Friend','2019-09-01 21:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(323,NULL,9,'Subject for Tell a Friend','2019-03-25 03:25:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(324,NULL,9,'Subject for Tell a Friend','2019-08-16 06:24:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(325,NULL,10,'Subject for Pledge Acknowledgment','2019-12-20 01:38:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(326,NULL,10,'Subject for Pledge Acknowledgment','2019-12-16 09:57:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(327,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 06:09:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(328,NULL,9,'Subject for Tell a Friend','2019-02-15 16:43:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(329,NULL,9,'Subject for Tell a Friend','2019-05-23 16:08:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(330,NULL,10,'Subject for Pledge Acknowledgment','2019-02-08 05:46:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(331,NULL,10,'Subject for Pledge Acknowledgment','2019-03-16 00:46:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(332,NULL,9,'Subject for Tell a Friend','2019-08-06 10:40:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(333,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 03:51:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(334,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 00:49:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(335,NULL,9,'Subject for Tell a Friend','2019-03-03 17:04:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(336,NULL,9,'Subject for Tell a Friend','2019-04-25 01:07:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(337,NULL,10,'Subject for Pledge Acknowledgment','2020-01-03 21:44:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(338,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 04:19:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(339,NULL,10,'Subject for Pledge Acknowledgment','2019-12-19 20:12:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(340,NULL,9,'Subject for Tell a Friend','2019-02-10 13:50:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(341,NULL,10,'Subject for Pledge Acknowledgment','2019-02-21 20:28:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(342,NULL,10,'Subject for Pledge Acknowledgment','2019-01-21 15:39:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(343,NULL,9,'Subject for Tell a Friend','2019-02-26 21:11:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(344,NULL,10,'Subject for Pledge Acknowledgment','2019-09-27 21:29:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(345,NULL,10,'Subject for Pledge Acknowledgment','2019-04-27 22:10:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(346,NULL,9,'Subject for Tell a Friend','2019-11-21 19:45:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(347,NULL,9,'Subject for Tell a Friend','2019-08-09 10:02:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(348,NULL,10,'Subject for Pledge Acknowledgment','2019-05-24 18:07:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(349,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 09:08:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(350,NULL,9,'Subject for Tell a Friend','2019-03-31 03:09:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(351,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 17:08:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(352,NULL,9,'Subject for Tell a Friend','2019-03-07 22:09:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(353,NULL,9,'Subject for Tell a Friend','2019-05-03 17:07:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(354,NULL,10,'Subject for Pledge Acknowledgment','2019-12-01 02:43:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(355,NULL,9,'Subject for Tell a Friend','2019-05-09 12:21:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(356,NULL,9,'Subject for Tell a Friend','2019-11-08 01:17:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(357,NULL,10,'Subject for Pledge Acknowledgment','2019-05-12 07:52:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(358,NULL,9,'Subject for Tell a Friend','2019-09-13 15:12:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(359,NULL,9,'Subject for Tell a Friend','2019-06-23 03:20:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(360,NULL,10,'Subject for Pledge Acknowledgment','2019-03-28 15:46:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(361,NULL,9,'Subject for Tell a Friend','2019-02-10 14:08:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(362,NULL,10,'Subject for Pledge Acknowledgment','2019-06-12 01:26:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(363,NULL,9,'Subject for Tell a Friend','2019-01-18 11:00:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(364,NULL,9,'Subject for Tell a Friend','2019-04-26 19:30:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(365,NULL,9,'Subject for Tell a Friend','2019-02-06 23:12:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(366,NULL,9,'Subject for Tell a Friend','2019-09-20 15:30:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(367,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 13:44:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(368,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 21:00:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(369,NULL,9,'Subject for Tell a Friend','2020-01-02 22:51:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(370,NULL,9,'Subject for Tell a Friend','2019-12-21 08:57:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(371,NULL,10,'Subject for Pledge Acknowledgment','2019-07-06 21:06:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(372,NULL,10,'Subject for Pledge Acknowledgment','2019-11-10 21:55:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(373,NULL,9,'Subject for Tell a Friend','2019-05-19 10:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(374,NULL,9,'Subject for Tell a Friend','2019-06-05 00:07:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(375,NULL,9,'Subject for Tell a Friend','2019-12-10 15:13:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(376,NULL,9,'Subject for Tell a Friend','2019-11-05 14:48:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(377,NULL,9,'Subject for Tell a Friend','2019-12-02 21:35:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(378,NULL,9,'Subject for Tell a Friend','2020-01-03 06:22:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(379,NULL,9,'Subject for Tell a Friend','2019-06-21 23:17:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(380,NULL,9,'Subject for Tell a Friend','2019-01-22 16:01:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(381,NULL,9,'Subject for Tell a Friend','2019-09-02 09:33:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(382,NULL,9,'Subject for Tell a Friend','2019-05-10 01:43:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(383,NULL,10,'Subject for Pledge Acknowledgment','2019-11-12 11:01:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(384,NULL,9,'Subject for Tell a Friend','2020-01-06 14:39:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(385,NULL,10,'Subject for Pledge Acknowledgment','2019-12-23 22:34:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(386,NULL,9,'Subject for Tell a Friend','2020-01-04 01:19:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(387,NULL,9,'Subject for Tell a Friend','2019-08-20 10:17:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(388,NULL,10,'Subject for Pledge Acknowledgment','2019-11-16 07:22:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(389,NULL,9,'Subject for Tell a Friend','2019-04-02 16:09:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(390,NULL,10,'Subject for Pledge Acknowledgment','2019-12-01 02:52:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(391,NULL,10,'Subject for Pledge Acknowledgment','2019-11-06 15:01:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(392,NULL,10,'Subject for Pledge Acknowledgment','2019-12-09 08:06:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(393,NULL,10,'Subject for Pledge Acknowledgment','2019-08-19 08:16:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(394,NULL,9,'Subject for Tell a Friend','2019-06-05 19:03:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(395,NULL,9,'Subject for Tell a Friend','2019-11-02 13:38:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(396,NULL,9,'Subject for Tell a Friend','2019-11-05 00:36:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(397,NULL,10,'Subject for Pledge Acknowledgment','2019-10-12 11:10:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(398,NULL,9,'Subject for Tell a Friend','2019-06-19 09:02:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(399,NULL,9,'Subject for Tell a Friend','2019-07-17 03:06:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(400,NULL,10,'Subject for Pledge Acknowledgment','2019-03-02 09:12:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(401,NULL,10,'Subject for Pledge Acknowledgment','2019-03-13 03:35:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(402,NULL,9,'Subject for Tell a Friend','2019-10-07 21:32:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(403,NULL,10,'Subject for Pledge Acknowledgment','2019-08-25 02:58:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(404,NULL,9,'Subject for Tell a Friend','2019-10-11 17:00:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(405,NULL,10,'Subject for Pledge Acknowledgment','2019-03-03 18:09:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(406,NULL,10,'Subject for Pledge Acknowledgment','2019-10-12 01:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(407,NULL,9,'Subject for Tell a Friend','2019-08-22 13:03:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(408,NULL,9,'Subject for Tell a Friend','2019-05-27 14:01:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(409,NULL,9,'Subject for Tell a Friend','2019-12-15 14:53:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(410,NULL,9,'Subject for Tell a Friend','2019-11-27 21:23:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(411,NULL,9,'Subject for Tell a Friend','2019-05-31 19:37:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(412,NULL,9,'Subject for Tell a Friend','2019-09-11 04:42:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(413,NULL,9,'Subject for Tell a Friend','2019-08-11 21:42:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(414,NULL,10,'Subject for Pledge Acknowledgment','2019-09-15 11:43:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(415,NULL,9,'Subject for Tell a Friend','2019-01-18 20:34:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(416,NULL,9,'Subject for Tell a Friend','2019-08-22 01:51:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(417,NULL,9,'Subject for Tell a Friend','2019-05-06 16:18:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(418,NULL,10,'Subject for Pledge Acknowledgment','2019-07-22 09:16:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(419,NULL,9,'Subject for Tell a Friend','2019-11-11 10:39:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(420,NULL,10,'Subject for Pledge Acknowledgment','2019-02-07 00:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(421,NULL,10,'Subject for Pledge Acknowledgment','2019-07-26 08:52:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(422,NULL,9,'Subject for Tell a Friend','2019-09-09 20:04:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(423,NULL,10,'Subject for Pledge Acknowledgment','2019-11-17 03:53:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(424,NULL,9,'Subject for Tell a Friend','2019-02-18 09:13:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(425,NULL,10,'Subject for Pledge Acknowledgment','2019-05-09 15:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(426,NULL,10,'Subject for Pledge Acknowledgment','2019-10-22 06:14:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(427,NULL,9,'Subject for Tell a Friend','2019-11-22 20:10:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(428,NULL,9,'Subject for Tell a Friend','2019-09-17 13:45:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(429,NULL,10,'Subject for Pledge Acknowledgment','2019-07-25 03:48:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(430,NULL,9,'Subject for Tell a Friend','2019-06-03 16:15:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(431,NULL,9,'Subject for Tell a Friend','2019-12-03 18:14:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(432,NULL,9,'Subject for Tell a Friend','2019-09-15 07:55:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(433,NULL,9,'Subject for Tell a Friend','2019-11-23 09:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(434,NULL,9,'Subject for Tell a Friend','2019-12-29 17:44:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(435,NULL,10,'Subject for Pledge Acknowledgment','2019-04-25 18:04:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(436,NULL,9,'Subject for Tell a Friend','2019-05-30 00:50:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(437,NULL,10,'Subject for Pledge Acknowledgment','2019-11-12 09:38:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(438,NULL,9,'Subject for Tell a Friend','2019-12-23 11:46:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(439,NULL,10,'Subject for Pledge Acknowledgment','2019-12-13 10:08:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(440,NULL,9,'Subject for Tell a Friend','2020-01-09 08:45:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(441,NULL,10,'Subject for Pledge Acknowledgment','2019-02-23 02:43:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(442,NULL,9,'Subject for Tell a Friend','2019-01-28 17:30:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(443,NULL,10,'Subject for Pledge Acknowledgment','2019-02-13 01:18:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(444,NULL,10,'Subject for Pledge Acknowledgment','2020-01-16 05:18:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(445,NULL,10,'Subject for Pledge Acknowledgment','2019-06-18 18:22:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(446,NULL,9,'Subject for Tell a Friend','2019-07-03 22:19:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(447,NULL,10,'Subject for Pledge Acknowledgment','2019-07-12 18:53:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(448,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 19:32:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(449,NULL,9,'Subject for Tell a Friend','2019-11-14 10:07:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(450,NULL,10,'Subject for Pledge Acknowledgment','2019-12-30 22:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(464,1,7,'General','2020-01-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(465,2,7,'Student','2020-01-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(466,3,7,'General','2020-01-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(467,4,7,'Student','2020-01-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(468,5,7,'Student','2019-01-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(469,6,7,'Student','2020-01-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(470,7,7,'General','2020-01-11 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(471,8,7,'Student','2020-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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(472,9,7,'General','2020-01-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(473,10,7,'Student','2019-01-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(474,11,7,'Lifetime','2020-01-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(475,12,7,'Student','2020-01-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(476,13,7,'General','2020-01-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(477,14,7,'Student','2020-01-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(478,15,7,'General','2017-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,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(479,16,7,'Student','2020-01-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(480,17,7,'General','2020-01-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(481,18,7,'Student','2019-12-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(482,19,7,'General','2019-12-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(483,20,7,'Student','2018-12-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(484,21,7,'General','2019-12-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(485,22,7,'Lifetime','2019-12-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(486,23,7,'General','2019-12-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(487,24,7,'Student','2019-12-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(488,25,7,'Student','2018-12-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(489,26,7,'Student','2019-12-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(490,27,7,'General','2019-12-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(491,28,7,'Student','2019-12-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(492,29,7,'General','2019-12-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(493,30,7,'Student','2018-12-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(506,26,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(507,27,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(508,28,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2020-01-17 09:53:51',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:51','2020-01-16 22:53:51'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(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,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(575,45,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(576,46,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(578,48,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(579,49,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(580,50,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(581,51,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(582,52,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(583,53,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(585,55,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(586,56,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(587,57,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(588,58,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(589,59,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(591,61,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(593,63,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(597,67,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(602,72,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(603,73,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(605,75,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(607,77,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(608,78,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(610,80,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(612,82,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(615,85,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(618,88,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(620,90,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(621,91,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(622,92,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'),(624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2020-01-17 09:53:52',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2020-01-16 22:53:52','2020-01-16 22:53:52'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -97,7 +97,7 @@ 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 (490,320,1,3),(658,433,1,3),(210,132,2,3),(601,397,2,3),(681,451,2,2),(714,484,2,2),(734,504,2,2),(795,565,2,2),(172,110,3,3),(308,197,3,3),(340,221,3,3),(419,273,3,3),(611,403,3,3),(620,410,3,3),(107,68,4,3),(269,172,4,3),(682,452,4,2),(44,30,5,3),(377,244,5,3),(777,547,5,2),(503,330,6,3),(683,453,6,2),(771,541,6,2),(97,62,7,3),(348,227,7,3),(650,429,7,3),(5,3,8,3),(323,208,8,3),(352,230,8,3),(462,302,8,3),(464,303,8,3),(684,454,8,2),(518,341,9,3),(567,372,9,3),(9,5,10,3),(254,163,10,3),(542,357,10,3),(157,101,11,3),(286,183,11,3),(396,258,11,3),(425,276,11,3),(483,315,11,3),(161,104,12,3),(203,128,12,3),(358,233,12,3),(455,296,12,3),(557,367,12,3),(2,1,13,3),(1,1,14,2),(3,2,14,2),(4,3,14,2),(6,4,14,2),(8,5,14,2),(10,6,14,2),(11,7,14,2),(13,8,14,2),(15,9,14,2),(16,10,14,2),(18,11,14,2),(19,12,14,2),(20,13,14,2),(21,14,14,2),(22,15,14,2),(23,16,14,2),(24,17,14,2),(25,18,14,2),(27,19,14,2),(28,20,14,2),(29,21,14,2),(30,22,14,2),(32,23,14,2),(34,24,14,2),(36,25,14,2),(37,26,14,2),(39,27,14,2),(40,28,14,2),(41,29,14,2),(43,30,14,2),(45,31,14,2),(47,32,14,2),(49,33,14,2),(50,34,14,2),(51,35,14,2),(52,36,14,2),(53,37,14,2),(55,38,14,2),(57,39,14,2),(59,40,14,2),(60,41,14,2),(62,42,14,2),(64,43,14,2),(65,44,14,2),(66,45,14,2),(68,46,14,2),(70,47,14,2),(72,48,14,2),(74,49,14,2),(76,50,14,2),(77,51,14,2),(79,52,14,2),(81,53,14,2),(83,54,14,2),(84,55,14,2),(86,56,14,2),(88,57,14,2),(89,58,14,2),(91,59,14,2),(92,60,14,2),(94,61,14,2),(96,62,14,2),(98,63,14,2),(100,64,14,2),(102,65,14,2),(103,66,14,2),(104,67,14,2),(106,68,14,2),(108,69,14,2),(109,70,14,2),(111,71,14,2),(112,72,14,2),(113,73,14,2),(114,73,14,3),(115,74,14,2),(117,75,14,2),(119,76,14,2),(120,77,14,2),(122,78,14,2),(124,79,14,2),(126,80,14,2),(128,81,14,2),(130,82,14,2),(131,83,14,2),(132,84,14,2),(134,85,14,2),(135,86,14,2),(137,87,14,2),(138,88,14,2),(139,89,14,2),(141,90,14,2),(142,91,14,2),(143,92,14,2),(144,93,14,2),(146,94,14,2),(147,95,14,2),(149,96,14,2),(151,97,14,2),(152,98,14,2),(153,99,14,2),(154,100,14,2),(156,101,14,2),(158,102,14,2),(159,103,14,2),(160,104,14,2),(162,105,14,2),(164,106,14,2),(165,107,14,2),(167,108,14,2),(169,109,14,2),(171,110,14,2),(173,111,14,2),(175,112,14,2),(176,113,14,2),(178,114,14,2),(180,115,14,2),(182,116,14,2),(184,117,14,2),(186,118,14,2),(188,119,14,2),(189,120,14,2),(190,121,14,2),(192,122,14,2),(194,123,14,2),(196,124,14,2),(198,125,14,2),(199,126,14,2),(200,127,14,2),(202,128,14,2),(204,129,14,2),(206,130,14,2),(207,131,14,2),(209,132,14,2),(211,133,14,2),(212,134,14,2),(214,135,14,2),(215,136,14,2),(216,137,14,2),(218,138,14,2),(219,139,14,2),(220,140,14,2),(222,141,14,2),(223,142,14,2),(224,143,14,2),(226,144,14,2),(228,145,14,2),(230,146,14,2),(232,147,14,2),(234,148,14,2),(235,149,14,2),(237,150,14,2),(297,190,14,3),(527,347,14,3),(559,368,14,3),(561,369,14,3),(656,432,14,3),(785,555,14,2),(38,26,15,3),(121,77,16,3),(148,95,16,3),(479,312,16,3),(685,455,16,2),(801,571,16,2),(545,359,17,3),(786,556,18,2),(82,53,19,3),(264,169,19,3),(466,304,19,3),(686,456,19,2),(315,202,20,3),(512,337,21,3),(540,356,21,3),(547,360,21,3),(591,389,21,3),(624,412,21,3),(634,419,21,3),(645,426,22,3),(769,539,22,2),(61,41,24,3),(231,146,24,3),(54,37,25,3),(67,45,25,3),(430,279,25,3),(663,437,25,3),(715,485,25,2),(753,523,25,2),(787,557,25,2),(213,134,26,3),(243,155,26,3),(390,254,26,3),(719,489,26,2),(750,520,26,2),(105,67,27,3),(294,188,27,3),(789,559,27,2),(170,109,28,3),(48,32,29,3),(90,58,29,3),(125,79,29,3),(319,205,30,3),(446,290,30,3),(565,371,30,3),(802,572,30,2),(174,111,31,3),(356,232,32,3),(388,253,32,3),(581,381,32,3),(692,462,32,2),(693,463,32,2),(406,264,33,3),(702,472,33,2),(728,498,33,2),(803,573,33,2),(689,459,34,2),(123,78,35,3),(145,93,35,3),(233,147,35,3),(326,210,35,3),(246,157,36,3),(596,393,36,3),(35,24,37,3),(373,242,37,3),(695,465,37,2),(740,510,37,2),(155,100,38,3),(282,181,38,3),(140,89,39,3),(150,96,40,3),(354,231,40,3),(17,10,41,3),(332,215,41,3),(337,219,41,3),(393,256,41,3),(272,174,43,3),(398,259,43,3),(400,260,43,3),(486,317,43,3),(691,461,43,2),(101,64,44,3),(236,149,44,3),(14,8,45,3),(58,39,45,3),(698,468,45,2),(726,496,45,2),(110,70,46,3),(46,31,47,3),(704,474,47,2),(752,522,47,2),(765,535,47,2),(95,61,49,3),(267,171,49,3),(439,284,49,3),(449,292,49,3),(507,333,49,3),(80,52,50,3),(193,122,50,3),(259,166,50,3),(423,275,50,3),(470,306,50,3),(669,441,50,3),(572,375,51,3),(129,81,52,3),(360,234,52,3),(417,272,52,3),(700,470,52,2),(727,497,52,2),(783,553,52,2),(133,84,53,3),(205,129,53,3),(118,75,55,3),(410,267,55,3),(708,478,55,2),(746,516,55,2),(7,4,56,3),(177,113,57,3),(181,115,57,3),(703,473,58,2),(729,499,58,2),(762,532,58,2),(191,121,60,3),(288,184,60,3),(368,239,60,3),(563,370,61,3),(768,538,61,2),(42,29,62,3),(284,182,62,3),(434,281,62,3),(472,307,62,3),(626,413,62,3),(75,49,63,3),(797,567,63,2),(71,47,64,3),(127,80,64,3),(299,191,64,3),(780,550,64,2),(500,328,65,3),(589,388,65,3),(197,124,66,3),(712,482,66,2),(732,502,66,2),(638,422,67,3),(185,117,68,3),(468,305,68,3),(607,401,68,3),(756,526,68,2),(166,107,70,3),(195,123,71,3),(304,195,71,3),(313,201,71,3),(574,376,71,3),(618,409,71,3),(690,460,71,2),(208,131,72,3),(577,378,72,3),(427,277,73,3),(432,280,73,3),(515,339,73,3),(647,427,73,3),(794,564,73,2),(179,114,74,3),(251,161,74,3),(474,308,74,3),(229,145,76,3),(365,237,76,3),(384,250,76,3),(654,431,76,3),(436,282,77,3),(555,366,77,3),(569,373,77,3),(776,546,77,2),(772,542,78,2),(93,60,79,3),(403,262,79,3),(530,349,79,3),(116,74,80,3),(696,466,80,2),(725,495,80,2),(85,55,81,3),(201,127,81,3),(421,274,81,3),(603,398,81,3),(631,417,81,3),(791,561,81,2),(12,7,82,3),(163,105,82,3),(671,442,82,3),(687,457,82,2),(56,38,83,3),(78,51,84,3),(183,116,84,3),(721,491,84,2),(751,521,84,2),(168,108,85,3),(498,327,85,3),(524,345,85,3),(677,447,85,3),(773,543,85,2),(73,48,87,3),(225,143,87,3),(278,178,87,3),(362,235,87,3),(274,175,88,3),(775,545,88,2),(187,118,89,3),(717,487,89,2),(749,519,89,2),(796,566,89,2),(87,56,90,3),(550,362,90,3),(63,42,91,3),(371,241,91,3),(521,343,91,3),(217,137,92,3),(538,355,92,3),(622,411,92,3),(688,458,92,2),(804,574,92,2),(643,425,93,3),(31,22,94,3),(99,63,94,3),(256,164,94,3),(375,243,94,3),(227,144,95,3),(290,185,95,3),(710,480,95,2),(731,501,95,2),(136,86,96,3),(221,140,96,3),(342,222,96,3),(453,295,96,3),(306,196,97,3),(415,271,97,3),(641,424,97,3),(652,430,97,3),(534,352,98,3),(33,23,99,3),(69,46,99,3),(667,440,99,3),(261,167,100,3),(609,402,100,3),(26,18,101,3),(782,552,102,2),(707,477,103,2),(745,515,103,2),(755,525,103,2),(697,467,105,2),(741,511,105,2),(774,544,105,2),(706,476,107,2),(730,500,107,2),(799,569,107,2),(800,570,109,2),(792,562,113,2),(718,488,115,2),(736,506,115,2),(767,537,115,2),(781,551,118,2),(770,540,121,2),(460,301,130,2),(461,302,130,2),(463,303,130,2),(465,304,130,2),(467,305,130,2),(469,306,130,2),(471,307,130,2),(473,308,130,2),(475,309,130,2),(476,310,130,2),(477,311,130,2),(478,312,130,2),(480,313,130,2),(481,314,130,2),(482,315,130,2),(484,316,130,2),(485,317,130,2),(487,318,130,2),(488,319,130,2),(489,320,130,2),(491,321,130,2),(492,322,130,2),(493,323,130,2),(494,324,130,2),(495,325,130,2),(496,326,130,2),(497,327,130,2),(499,328,130,2),(501,329,130,2),(502,330,130,2),(504,331,130,2),(505,332,130,2),(506,333,130,2),(508,334,130,2),(509,335,130,2),(510,336,130,2),(511,337,130,2),(513,338,130,2),(514,339,130,2),(516,340,130,2),(517,341,130,2),(519,342,130,2),(520,343,130,2),(522,344,130,2),(523,345,130,2),(525,346,130,2),(526,347,130,2),(528,348,130,2),(529,349,130,2),(531,350,130,2),(532,351,130,2),(533,352,130,2),(535,353,130,2),(536,354,130,2),(537,355,130,2),(539,356,130,2),(541,357,130,2),(543,358,130,2),(544,359,130,2),(546,360,130,2),(548,361,130,2),(549,362,130,2),(551,363,130,2),(552,364,130,2),(553,365,130,2),(554,366,130,2),(556,367,130,2),(558,368,130,2),(560,369,130,2),(562,370,130,2),(564,371,130,2),(566,372,130,2),(568,373,130,2),(570,374,130,2),(571,375,130,2),(573,376,130,2),(575,377,130,2),(576,378,130,2),(578,379,130,2),(579,380,130,2),(580,381,130,2),(582,382,130,2),(583,383,130,2),(584,384,130,2),(585,385,130,2),(586,386,130,2),(587,387,130,2),(588,388,130,2),(590,389,130,2),(592,390,130,2),(593,391,130,2),(594,392,130,2),(595,393,130,2),(597,394,130,2),(598,395,130,2),(599,396,130,2),(600,397,130,2),(602,398,130,2),(604,399,130,2),(605,400,130,2),(606,401,130,2),(608,402,130,2),(610,403,130,2),(612,404,130,2),(613,405,130,2),(614,406,130,2),(615,407,130,2),(616,408,130,2),(617,409,130,2),(619,410,130,2),(621,411,130,2),(623,412,130,2),(625,413,130,2),(627,414,130,2),(628,415,130,2),(629,416,130,2),(630,417,130,2),(632,418,130,2),(633,419,130,2),(635,420,130,2),(636,421,130,2),(637,422,130,2),(639,423,130,2),(640,424,130,2),(642,425,130,2),(644,426,130,2),(646,427,130,2),(648,428,130,2),(649,429,130,2),(651,430,130,2),(653,431,130,2),(655,432,130,2),(657,433,130,2),(659,434,130,2),(660,435,130,2),(661,436,130,2),(662,437,130,2),(664,438,130,2),(665,439,130,2),(666,440,130,2),(668,441,130,2),(670,442,130,2),(672,443,130,2),(673,444,130,2),(674,445,130,2),(675,446,130,2),(676,447,130,2),(678,448,130,2),(679,449,130,2),(680,450,130,2),(761,531,131,2),(784,554,133,2),(716,486,134,2),(735,505,134,2),(238,151,135,2),(239,152,135,2),(240,153,135,2),(241,154,135,2),(242,155,135,2),(244,156,135,2),(245,157,135,2),(247,158,135,2),(248,159,135,2),(249,160,135,2),(250,161,135,2),(252,162,135,2),(253,163,135,2),(255,164,135,2),(257,165,135,2),(258,166,135,2),(260,167,135,2),(262,168,135,2),(263,169,135,2),(265,170,135,2),(266,171,135,2),(268,172,135,2),(270,173,135,2),(271,174,135,2),(273,175,135,2),(275,176,135,2),(276,177,135,2),(277,178,135,2),(279,179,135,2),(280,180,135,2),(281,181,135,2),(283,182,135,2),(285,183,135,2),(287,184,135,2),(289,185,135,2),(291,186,135,2),(292,187,135,2),(293,188,135,2),(295,189,135,2),(296,190,135,2),(298,191,135,2),(300,192,135,2),(301,193,135,2),(302,194,135,2),(303,195,135,2),(305,196,135,2),(307,197,135,2),(309,198,135,2),(310,199,135,2),(311,200,135,2),(312,201,135,2),(314,202,135,2),(316,203,135,2),(317,204,135,2),(318,205,135,2),(320,206,135,2),(321,207,135,2),(322,208,135,2),(324,209,135,2),(325,210,135,2),(327,211,135,2),(328,212,135,2),(329,213,135,2),(330,214,135,2),(331,215,135,2),(333,216,135,2),(334,217,135,2),(335,218,135,2),(336,219,135,2),(338,220,135,2),(339,221,135,2),(341,222,135,2),(343,223,135,2),(344,224,135,2),(345,225,135,2),(346,226,135,2),(347,227,135,2),(349,228,135,2),(350,229,135,2),(351,230,135,2),(353,231,135,2),(355,232,135,2),(357,233,135,2),(359,234,135,2),(361,235,135,2),(363,236,135,2),(364,237,135,2),(366,238,135,2),(367,239,135,2),(369,240,135,2),(370,241,135,2),(372,242,135,2),(374,243,135,2),(376,244,135,2),(378,245,135,2),(379,246,135,2),(380,247,135,2),(381,248,135,2),(382,249,135,2),(383,250,135,2),(385,251,135,2),(386,252,135,2),(387,253,135,2),(389,254,135,2),(391,255,135,2),(392,256,135,2),(394,257,135,2),(395,258,135,2),(397,259,135,2),(399,260,135,2),(401,261,135,2),(402,262,135,2),(404,263,135,2),(405,264,135,2),(407,265,135,2),(408,266,135,2),(409,267,135,2),(411,268,135,2),(412,269,135,2),(413,270,135,2),(414,271,135,2),(416,272,135,2),(418,273,135,2),(420,274,135,2),(422,275,135,2),(424,276,135,2),(426,277,135,2),(428,278,135,2),(429,279,135,2),(431,280,135,2),(433,281,135,2),(435,282,135,2),(437,283,135,2),(438,284,135,2),(440,285,135,2),(441,286,135,2),(442,287,135,2),(443,288,135,2),(444,289,135,2),(445,290,135,2),(447,291,135,2),(448,292,135,2),(450,293,135,2),(451,294,135,2),(452,295,135,2),(454,296,135,2),(456,297,135,2),(457,298,135,2),(458,299,135,2),(459,300,135,2),(758,528,135,2),(720,490,139,2),(737,507,139,2),(798,568,142,2),(705,475,144,2),(744,514,144,2),(723,493,145,2),(739,509,145,2),(722,492,147,2),(738,508,147,2),(701,471,148,2),(743,513,148,2),(760,530,149,2),(793,563,159,2),(699,469,160,2),(742,512,160,2),(763,533,162,2),(766,536,165,2),(713,483,166,2),(733,503,166,2),(788,558,171,2),(694,464,175,2),(724,494,175,2),(779,549,179,2),(711,481,184,2),(748,518,184,2),(764,534,184,2),(759,529,188,2),(778,548,189,2),(790,560,191,2),(757,527,195,2),(709,479,200,2),(747,517,200,2); +INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES (760,532,1,2),(473,319,2,3),(679,451,2,2),(33,23,3,3),(68,44,3,3),(659,436,3,3),(415,279,4,3),(680,452,4,2),(242,163,5,3),(467,316,5,3),(545,366,5,3),(711,483,5,2),(744,516,5,2),(573,382,6,3),(681,453,6,2),(774,546,6,2),(122,81,7,3),(213,145,7,3),(341,231,7,3),(482,324,7,3),(592,395,7,3),(319,215,8,3),(682,454,8,2),(266,180,9,3),(412,277,9,3),(180,123,10,3),(224,151,10,2),(226,152,10,2),(227,153,10,2),(228,154,10,2),(230,155,10,2),(231,156,10,2),(232,157,10,2),(234,158,10,2),(235,159,10,2),(237,160,10,2),(238,161,10,2),(240,162,10,2),(241,163,10,2),(243,164,10,2),(245,165,10,2),(247,166,10,2),(248,167,10,2),(249,168,10,2),(250,169,10,2),(252,170,10,2),(253,171,10,2),(255,172,10,2),(256,173,10,2),(257,174,10,2),(259,175,10,2),(260,176,10,2),(261,177,10,2),(262,178,10,2),(263,179,10,2),(265,180,10,2),(267,181,10,2),(269,182,10,2),(271,183,10,2),(273,184,10,2),(274,185,10,2),(275,186,10,2),(277,187,10,2),(278,188,10,2),(279,189,10,2),(280,190,10,2),(281,191,10,2),(282,192,10,2),(284,193,10,2),(286,194,10,2),(288,195,10,2),(289,196,10,2),(291,197,10,2),(292,198,10,2),(294,199,10,2),(296,200,10,2),(298,201,10,2),(299,202,10,2),(300,203,10,2),(301,204,10,2),(303,205,10,2),(304,206,10,2),(306,207,10,2),(308,208,10,2),(310,209,10,2),(311,210,10,2),(313,211,10,2),(314,212,10,2),(315,213,10,2),(316,214,10,2),(318,215,10,2),(320,216,10,2),(321,217,10,2),(322,218,10,2),(324,219,10,2),(325,220,10,2),(326,221,10,2),(327,222,10,2),(328,223,10,2),(330,224,10,2),(331,225,10,2),(333,226,10,2),(335,227,10,2),(336,228,10,2),(338,229,10,2),(339,230,10,2),(340,231,10,2),(342,232,10,2),(343,233,10,2),(345,234,10,2),(346,235,10,2),(348,236,10,2),(350,237,10,2),(351,238,10,2),(353,239,10,2),(355,240,10,2),(357,241,10,2),(359,242,10,2),(360,243,10,2),(362,244,10,2),(363,245,10,2),(364,246,10,2),(366,247,10,2),(367,248,10,2),(369,249,10,2),(371,250,10,2),(372,251,10,2),(373,252,10,2),(375,253,10,2),(376,254,10,2),(378,255,10,2),(379,256,10,2),(380,257,10,2),(381,258,10,2),(383,259,10,2),(384,260,10,2),(386,261,10,2),(388,262,10,2),(389,263,10,2),(391,264,10,2),(393,265,10,2),(395,266,10,2),(396,267,10,2),(398,268,10,2),(399,268,10,3),(400,269,10,2),(402,270,10,2),(404,271,10,2),(406,272,10,2),(407,273,10,2),(408,274,10,2),(409,275,10,2),(410,276,10,2),(411,277,10,2),(413,278,10,2),(414,279,10,2),(416,280,10,2),(418,281,10,2),(420,282,10,2),(421,283,10,2),(422,284,10,2),(423,285,10,2),(425,286,10,2),(426,287,10,2),(427,288,10,2),(429,289,10,2),(431,290,10,2),(432,291,10,2),(433,292,10,2),(435,293,10,2),(436,294,10,2),(437,295,10,2),(439,296,10,2),(440,297,10,2),(441,298,10,2),(442,299,10,2),(443,300,10,2),(41,28,11,3),(258,174,11,3),(374,252,11,3),(650,431,12,3),(49,33,13,3),(127,84,13,3),(358,241,13,3),(499,336,13,3),(656,434,13,3),(354,239,14,3),(698,470,14,2),(724,496,14,2),(120,80,15,3),(557,374,15,3),(665,440,16,3),(683,455,16,2),(773,545,16,2),(174,119,17,3),(184,125,17,3),(625,415,17,3),(44,30,18,3),(428,288,19,3),(684,456,19,2),(317,214,20,3),(457,310,20,3),(543,365,20,3),(706,478,20,2),(727,499,20,2),(323,218,21,3),(599,399,21,3),(254,171,22,3),(377,254,22,3),(569,380,22,3),(576,384,22,3),(329,223,23,3),(430,289,23,3),(541,364,23,3),(63,41,24,3),(276,186,24,3),(539,363,24,3),(612,408,24,3),(239,161,25,3),(264,179,25,3),(385,260,25,3),(403,270,25,3),(469,317,25,3),(559,375,25,3),(788,560,25,2),(161,110,26,3),(645,428,26,3),(758,530,26,2),(221,149,27,3),(579,386,27,3),(606,404,27,3),(195,133,28,3),(236,159,28,3),(478,322,28,3),(480,323,28,3),(489,329,28,3),(211,144,29,3),(307,207,29,3),(397,267,29,3),(717,489,29,2),(747,519,29,2),(302,204,30,3),(471,318,30,3),(697,469,30,2),(737,509,30,2),(762,534,30,2),(98,66,32,3),(138,93,32,3),(182,124,32,3),(390,263,32,3),(521,352,32,3),(690,462,32,2),(691,463,32,2),(17,12,33,3),(55,36,33,3),(217,147,33,3),(461,312,33,3),(677,449,34,3),(687,459,34,2),(718,490,34,2),(732,504,34,2),(219,148,35,3),(392,264,35,3),(652,432,35,3),(782,554,35,2),(405,271,36,3),(90,60,37,3),(662,438,37,3),(759,531,39,2),(87,58,40,3),(233,157,40,3),(337,228,40,3),(454,308,40,3),(581,387,40,3),(705,477,40,2),(741,513,40,2),(51,34,41,3),(445,301,41,3),(618,411,41,3),(565,378,42,3),(709,481,42,2),(743,515,42,2),(783,555,42,2),(365,246,43,3),(689,461,43,2),(309,208,44,3),(636,422,44,3),(283,192,45,3),(290,196,45,3),(382,258,45,3),(567,379,45,3),(603,402,45,3),(785,557,45,2),(21,14,46,3),(801,573,46,2),(36,25,47,3),(401,269,47,3),(38,26,49,3),(497,335,49,3),(622,413,49,3),(116,78,50,3),(693,465,50,2),(734,506,50,2),(118,79,51,3),(285,193,51,3),(699,471,51,2),(738,510,51,2),(361,243,52,3),(463,313,52,3),(616,410,52,3),(781,553,52,2),(215,146,53,3),(246,165,53,3),(452,307,54,3),(207,141,55,3),(368,248,55,3),(531,358,55,3),(668,442,55,3),(771,543,55,2),(78,51,56,3),(141,95,56,3),(66,43,57,3),(434,292,57,3),(533,359,58,3),(287,194,59,3),(508,343,59,3),(590,394,59,3),(632,419,59,3),(53,35,60,3),(620,412,60,3),(654,433,60,3),(332,225,62,3),(424,285,62,3),(778,550,62,2),(334,226,64,3),(504,340,64,3),(614,409,64,3),(721,493,64,2),(749,521,64,2),(71,46,65,3),(244,164,65,3),(528,356,65,3),(639,424,65,3),(166,114,66,3),(268,181,66,3),(394,265,66,3),(584,389,66,3),(512,346,67,3),(563,377,67,3),(102,68,68,3),(549,369,68,3),(124,82,69,3),(555,373,69,3),(11,8,70,3),(23,15,70,3),(187,127,70,3),(356,240,70,3),(643,427,70,3),(100,67,71,3),(229,154,71,3),(293,198,71,3),(597,398,71,3),(627,416,71,3),(688,460,71,2),(419,281,72,3),(571,381,72,3),(158,108,73,3),(4,3,74,3),(199,136,74,3),(526,355,74,3),(251,169,75,3),(523,353,75,3),(673,446,75,3),(14,10,76,3),(149,101,76,3),(312,210,76,3),(84,56,77,3),(493,332,77,3),(710,482,77,2),(729,501,77,2),(192,131,78,3),(205,140,78,3),(417,280,78,3),(459,311,79,3),(561,376,79,3),(790,562,79,2),(475,320,80,3),(344,233,81,3),(349,236,81,3),(370,249,81,3),(780,552,81,2),(305,206,82,3),(438,295,82,3),(685,457,82,2),(694,466,82,2),(723,495,82,2),(28,19,85,3),(76,50,85,3),(594,396,85,3),(695,467,85,2),(735,507,85,2),(754,526,85,2),(223,150,86,3),(295,199,86,3),(551,370,86,3),(798,570,86,2),(105,70,87,3),(176,120,87,3),(225,151,87,3),(347,235,89,3),(518,350,89,3),(692,464,89,2),(722,494,89,2),(775,547,89,2),(19,13,90,3),(57,37,90,3),(201,137,90,3),(387,261,90,3),(794,566,90,2),(146,99,91,3),(487,328,91,3),(629,417,91,3),(47,32,92,3),(686,458,92,2),(172,118,93,3),(6,4,94,3),(696,468,94,2),(736,508,94,2),(114,77,95,3),(514,347,95,3),(156,107,96,3),(352,238,96,3),(536,361,96,3),(110,74,97,3),(297,200,97,3),(270,182,98,3),(132,88,99,3),(610,407,99,3),(648,430,99,3),(756,528,100,2),(61,40,101,3),(93,62,101,3),(169,116,101,3),(272,183,101,3),(793,565,102,2),(701,473,103,2),(739,511,103,2),(789,561,103,2),(707,479,105,2),(742,514,105,2),(786,558,105,2),(761,533,106,2),(800,572,110,2),(770,542,115,2),(715,487,120,2),(745,517,120,2),(768,540,120,2),(713,485,122,2),(751,523,122,2),(755,527,124,2),(720,492,128,2),(733,505,128,2),(795,567,128,2),(708,480,132,2),(728,500,132,2),(704,476,133,2),(726,498,133,2),(777,549,136,2),(712,484,138,2),(730,502,138,2),(753,525,138,2),(784,556,140,2),(763,535,143,2),(799,571,144,2),(787,559,149,2),(765,537,150,2),(796,568,157,2),(779,551,159,2),(802,574,160,2),(792,564,163,2),(714,486,164,2),(731,503,164,2),(702,474,165,2),(750,522,165,2),(772,544,166,2),(764,536,167,2),(769,541,171,2),(797,569,176,2),(703,475,181,2),(740,512,181,2),(700,472,183,2),(725,497,183,2),(716,488,184,2),(746,518,184,2),(791,563,187,2),(757,529,188,2),(776,548,191,2),(1,1,192,2),(2,2,192,2),(3,3,192,2),(5,4,192,2),(7,5,192,2),(8,6,192,2),(9,7,192,2),(10,8,192,2),(12,9,192,2),(13,10,192,2),(15,11,192,2),(16,12,192,2),(18,13,192,2),(20,14,192,2),(22,15,192,2),(24,16,192,2),(25,17,192,2),(26,18,192,2),(27,19,192,2),(29,20,192,2),(30,21,192,2),(31,22,192,2),(32,23,192,2),(34,24,192,2),(35,25,192,2),(37,26,192,2),(39,27,192,2),(40,28,192,2),(42,29,192,2),(43,30,192,2),(45,31,192,2),(46,32,192,2),(48,33,192,2),(50,34,192,2),(52,35,192,2),(54,36,192,2),(56,37,192,2),(58,38,192,2),(59,39,192,2),(60,40,192,2),(62,41,192,2),(64,42,192,2),(65,43,192,2),(67,44,192,2),(69,45,192,2),(70,46,192,2),(72,47,192,2),(73,48,192,2),(74,49,192,2),(75,50,192,2),(77,51,192,2),(79,52,192,2),(80,53,192,2),(81,54,192,2),(82,55,192,2),(83,56,192,2),(85,57,192,2),(86,58,192,2),(88,59,192,2),(89,60,192,2),(91,61,192,2),(92,62,192,2),(94,63,192,2),(95,64,192,2),(96,65,192,2),(97,66,192,2),(99,67,192,2),(101,68,192,2),(103,69,192,2),(104,70,192,2),(106,71,192,2),(107,72,192,2),(108,73,192,2),(109,74,192,2),(111,75,192,2),(112,76,192,2),(113,77,192,2),(115,78,192,2),(117,79,192,2),(119,80,192,2),(121,81,192,2),(123,82,192,2),(125,83,192,2),(126,84,192,2),(128,85,192,2),(129,86,192,2),(130,87,192,2),(131,88,192,2),(133,89,192,2),(134,90,192,2),(135,91,192,2),(136,92,192,2),(137,93,192,2),(139,94,192,2),(140,95,192,2),(142,96,192,2),(143,97,192,2),(144,98,192,2),(145,99,192,2),(147,100,192,2),(148,101,192,2),(150,102,192,2),(151,103,192,2),(152,104,192,2),(153,105,192,2),(154,106,192,2),(155,107,192,2),(157,108,192,2),(159,109,192,2),(160,110,192,2),(162,111,192,2),(163,112,192,2),(164,113,192,2),(165,114,192,2),(167,115,192,2),(168,116,192,2),(170,117,192,2),(171,118,192,2),(173,119,192,2),(175,120,192,2),(177,121,192,2),(178,122,192,2),(179,123,192,2),(181,124,192,2),(183,125,192,2),(185,126,192,2),(186,127,192,2),(188,128,192,2),(189,129,192,2),(190,130,192,2),(191,131,192,2),(193,132,192,2),(194,133,192,2),(196,134,192,2),(197,135,192,2),(198,136,192,2),(200,137,192,2),(202,138,192,2),(203,139,192,2),(204,140,192,2),(206,141,192,2),(208,142,192,2),(209,143,192,2),(210,144,192,2),(212,145,192,2),(214,146,192,2),(216,147,192,2),(218,148,192,2),(220,149,192,2),(222,150,192,2),(766,538,194,2),(444,301,196,2),(446,302,196,2),(447,303,196,2),(448,304,196,2),(449,305,196,2),(450,306,196,2),(451,307,196,2),(453,308,196,2),(455,309,196,2),(456,310,196,2),(458,311,196,2),(460,312,196,2),(462,313,196,2),(464,314,196,2),(465,315,196,2),(466,316,196,2),(468,317,196,2),(470,318,196,2),(472,319,196,2),(474,320,196,2),(476,321,196,2),(477,322,196,2),(479,323,196,2),(481,324,196,2),(483,325,196,2),(484,326,196,2),(485,327,196,2),(486,328,196,2),(488,329,196,2),(490,330,196,2),(491,331,196,2),(492,332,196,2),(494,333,196,2),(495,334,196,2),(496,335,196,2),(498,336,196,2),(500,337,196,2),(501,338,196,2),(502,339,196,2),(503,340,196,2),(505,341,196,2),(506,342,196,2),(507,343,196,2),(509,344,196,2),(510,345,196,2),(511,346,196,2),(513,347,196,2),(515,348,196,2),(516,349,196,2),(517,350,196,2),(519,351,196,2),(520,352,196,2),(522,353,196,2),(524,354,196,2),(525,355,196,2),(527,356,196,2),(529,357,196,2),(530,358,196,2),(532,359,196,2),(534,360,196,2),(535,361,196,2),(537,362,196,2),(538,363,196,2),(540,364,196,2),(542,365,196,2),(544,366,196,2),(546,367,196,2),(547,368,196,2),(548,369,196,2),(550,370,196,2),(552,371,196,2),(553,372,196,2),(554,373,196,2),(556,374,196,2),(558,375,196,2),(560,376,196,2),(562,377,196,2),(564,378,196,2),(566,379,196,2),(568,380,196,2),(570,381,196,2),(572,382,196,2),(574,383,196,2),(575,384,196,2),(577,385,196,2),(578,386,196,2),(580,387,196,2),(582,388,196,2),(583,389,196,2),(585,390,196,2),(586,391,196,2),(587,392,196,2),(588,393,196,2),(589,394,196,2),(591,395,196,2),(593,396,196,2),(595,397,196,2),(596,398,196,2),(598,399,196,2),(600,400,196,2),(601,401,196,2),(602,402,196,2),(604,403,196,2),(605,404,196,2),(607,405,196,2),(608,406,196,2),(609,407,196,2),(611,408,196,2),(613,409,196,2),(615,410,196,2),(617,411,196,2),(619,412,196,2),(621,413,196,2),(623,414,196,2),(624,415,196,2),(626,416,196,2),(628,417,196,2),(630,418,196,2),(631,419,196,2),(633,420,196,2),(634,421,196,2),(635,422,196,2),(637,423,196,2),(638,424,196,2),(640,425,196,2),(641,426,196,2),(642,427,196,2),(644,428,196,2),(646,429,196,2),(647,430,196,2),(649,431,196,2),(651,432,196,2),(653,433,196,2),(655,434,196,2),(657,435,196,2),(658,436,196,2),(660,437,196,2),(661,438,196,2),(663,439,196,2),(664,440,196,2),(666,441,196,2),(667,442,196,2),(669,443,196,2),(670,444,196,2),(671,445,196,2),(672,446,196,2),(674,447,196,2),(675,448,196,2),(676,449,196,2),(678,450,196,2),(767,539,196,2),(719,491,197,2),(748,520,197,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -107,7 +107,7 @@ 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,164,1,1,0,'390X Martin Luther King Dr NW',390,'X',NULL,'Martin Luther King','Dr','NW',NULL,NULL,NULL,NULL,'Kealia',1,1010,NULL,'96751',NULL,1228,22.111837,-159.31283,0,NULL,NULL,NULL),(2,54,1,1,0,'551G Van Ness Ln SW',551,'G',NULL,'Van Ness','Ln','SW',NULL,NULL,NULL,NULL,'West Covina',1,1004,NULL,'91793',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(3,159,1,1,0,'785M Woodbridge Path NW',785,'M',NULL,'Woodbridge','Path','NW',NULL,NULL,NULL,NULL,'Warfordsburg',1,1037,NULL,'17267',NULL,1228,39.798516,-78.23675,0,NULL,NULL,NULL),(4,127,1,1,0,'399Y Beech Blvd NE',399,'Y',NULL,'Beech','Blvd','NE',NULL,NULL,NULL,NULL,'Corn',1,1035,NULL,'73024',NULL,1228,35.370775,-98.80897,0,NULL,NULL,NULL),(5,200,1,1,0,'419U Martin Luther King St S',419,'U',NULL,'Martin Luther King','St','S',NULL,NULL,NULL,NULL,'Roseland',1,1026,NULL,'68973',NULL,1228,40.459642,-98.55892,0,NULL,NULL,NULL),(6,14,1,1,0,'151J Van Ness Ave SW',151,'J',NULL,'Van Ness','Ave','SW',NULL,NULL,NULL,NULL,'Ijamsville',1,1019,NULL,'21754',NULL,1228,39.342096,-77.29984,0,NULL,NULL,NULL),(7,22,1,1,0,'882P Maple Rd E',882,'P',NULL,'Maple','Rd','E',NULL,NULL,NULL,NULL,'McBee',1,1039,NULL,'29101',NULL,1228,34.461353,-80.2506,0,NULL,NULL,NULL),(8,30,1,1,0,'964T Dowlen Pl N',964,'T',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Marshallville',1,1009,NULL,'31057',NULL,1228,32.446656,-83.93413,0,NULL,NULL,NULL),(9,144,1,1,0,'930T Beech Blvd N',930,'T',NULL,'Beech','Blvd','N',NULL,NULL,NULL,NULL,'Rocklin',1,1004,NULL,'95765',NULL,1228,38.817993,-121.2631,0,NULL,NULL,NULL),(10,74,1,1,0,'399O Cadell Pl SW',399,'O',NULL,'Cadell','Pl','SW',NULL,NULL,NULL,NULL,'Ruso',1,1033,NULL,'58778',NULL,1228,47.783028,-100.93423,0,NULL,NULL,NULL),(11,194,1,1,0,'503T Pine St E',503,'T',NULL,'Pine','St','E',NULL,NULL,NULL,NULL,'Rainsville',1,1030,NULL,'87736',NULL,1228,35.974115,-105.17633,0,NULL,NULL,NULL),(12,87,1,1,0,'113V Main Way W',113,'V',NULL,'Main','Way','W',NULL,NULL,NULL,NULL,'New Albany',1,1023,NULL,'38652',NULL,1228,34.489085,-88.99973,0,NULL,NULL,NULL),(13,167,1,1,0,'720C Beech Way N',720,'C',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Marion Center',1,1037,NULL,'15759',NULL,1228,40.771687,-79.04221,0,NULL,NULL,NULL),(14,8,1,1,0,'564Z Bay Rd NE',564,'Z',NULL,'Bay','Rd','NE',NULL,NULL,NULL,NULL,'Houston',1,1042,NULL,'77238',NULL,1228,29.83399,-95.434241,0,NULL,NULL,NULL),(15,70,1,1,0,'350V Jackson Blvd NE',350,'V',NULL,'Jackson','Blvd','NE',NULL,NULL,NULL,NULL,'Manson',1,1014,NULL,'50563',NULL,1228,42.52503,-94.53628,0,NULL,NULL,NULL),(16,124,1,1,0,'281H Dowlen Ln SE',281,'H',NULL,'Dowlen','Ln','SE',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75247',NULL,1228,32.817978,-96.87928,0,NULL,NULL,NULL),(17,72,1,1,0,'813K Second Pl SW',813,'K',NULL,'Second','Pl','SW',NULL,NULL,NULL,NULL,'Erieville',1,1031,NULL,'13061',NULL,1228,42.859332,-75.74261,0,NULL,NULL,NULL),(18,197,1,1,0,'358N Northpoint Pl W',358,'N',NULL,'Northpoint','Pl','W',NULL,NULL,NULL,NULL,'Durants Neck',1,1032,NULL,'27930',NULL,1228,36.198539,-76.373908,0,NULL,NULL,NULL),(19,50,1,1,0,'367V Dowlen Ave S',367,'V',NULL,'Dowlen','Ave','S',NULL,NULL,NULL,NULL,'Simi Valley',1,1004,NULL,'93093',NULL,1228,34.032383,-119.1343,0,NULL,NULL,NULL),(20,4,1,1,0,'579Q Pine Pl S',579,'Q',NULL,'Pine','Pl','S',NULL,NULL,NULL,NULL,'Encino',1,1004,NULL,'91316',NULL,1228,34.168753,-118.51636,0,NULL,NULL,NULL),(21,166,1,1,0,'229U Cadell Ave SE',229,'U',NULL,'Cadell','Ave','SE',NULL,NULL,NULL,NULL,'Greenwood',1,1031,NULL,'14839',NULL,1228,42.129806,-77.63705,0,NULL,NULL,NULL),(22,191,1,1,0,'505D Van Ness Ave N',505,'D',NULL,'Van Ness','Ave','N',NULL,NULL,NULL,NULL,'Peetz',1,1005,NULL,'80747',NULL,1228,40.964518,-103.11162,0,NULL,NULL,NULL),(23,173,1,1,0,'296O Maple Path S',296,'O',NULL,'Maple','Path','S',NULL,NULL,NULL,NULL,'Atwood',1,1035,NULL,'74827',NULL,1228,34.949547,-96.33356,0,NULL,NULL,NULL),(24,53,1,1,0,'242L States Rd E',242,'L',NULL,'States','Rd','E',NULL,NULL,NULL,NULL,'Osceola',1,1026,NULL,'68651',NULL,1228,41.21361,-97.56993,0,NULL,NULL,NULL),(25,116,1,1,0,'64P States Ln S',64,'P',NULL,'States','Ln','S',NULL,NULL,NULL,NULL,'Arco',1,1022,NULL,'56113',NULL,1228,44.398668,-96.17095,0,NULL,NULL,NULL),(26,186,1,1,0,'283T Bay Ln N',283,'T',NULL,'Bay','Ln','N',NULL,NULL,NULL,NULL,'Madison',1,1013,NULL,'47250',NULL,1228,38.787175,-85.38031,0,NULL,NULL,NULL),(27,23,1,1,0,'190X Northpoint Blvd SE',190,'X',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Howe',1,1011,NULL,'83244',NULL,1228,43.854175,-113.04362,0,NULL,NULL,NULL),(28,40,1,1,0,'84A Jackson Ave N',84,'A',NULL,'Jackson','Ave','N',NULL,NULL,NULL,NULL,'Durham',1,1032,NULL,'27712',NULL,1228,36.087738,-78.92313,0,NULL,NULL,NULL),(29,171,1,1,0,'444X College Dr NW',444,'X',NULL,'College','Dr','NW',NULL,NULL,NULL,NULL,'Wake',1,1045,NULL,'23176',NULL,1228,37.571789,-76.41631,0,NULL,NULL,NULL),(30,149,1,1,0,'485X College Rd E',485,'X',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Plato Center',1,1012,NULL,'60170',NULL,1228,42.025776,-88.425931,0,NULL,NULL,NULL),(31,39,1,1,0,'99N Maple Path SE',99,'N',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Lake Placid',1,1008,NULL,'33862',NULL,1228,27.244668,-81.288424,0,NULL,NULL,NULL),(32,113,1,1,0,'966I Dowlen St NW',966,'I',NULL,'Dowlen','St','NW',NULL,NULL,NULL,NULL,'Collyer',1,1015,NULL,'67631',NULL,1228,39.028141,-100.08722,0,NULL,NULL,NULL),(33,55,1,1,0,'106O Green St E',106,'O',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'South Lyme',1,1006,NULL,'06376',NULL,1228,41.294797,-72.25602,0,NULL,NULL,NULL),(34,145,1,1,0,'534M El Camino Rd W',534,'M',NULL,'El Camino','Rd','W',NULL,NULL,NULL,NULL,'Corcoran',1,1004,NULL,'93212',NULL,1228,36.085342,-119.5548,0,NULL,NULL,NULL),(35,189,1,1,0,'334T College Ave S',334,'T',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Stollings',1,1047,NULL,'25646',NULL,1228,37.837136,-81.95921,0,NULL,NULL,NULL),(36,61,1,1,0,'852K El Camino St W',852,'K',NULL,'El Camino','St','W',NULL,NULL,NULL,NULL,'Metairie',1,1017,NULL,'70011',NULL,1228,29.677893,-90.0901,0,NULL,NULL,NULL),(37,18,1,1,0,'428C Second Pl NW',428,'C',NULL,'Second','Pl','NW',NULL,NULL,NULL,NULL,'Hopedale',1,1034,NULL,'43976',NULL,1228,40.352364,-80.90465,0,NULL,NULL,NULL),(38,3,1,1,0,'965X Northpoint Way SE',965,'X',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Kent City',1,1021,NULL,'49330',NULL,1228,43.231933,-85.73768,0,NULL,NULL,NULL),(39,180,1,1,0,'659S Cadell Ave S',659,'S',NULL,'Cadell','Ave','S',NULL,NULL,NULL,NULL,'Saint Louis',1,1024,NULL,'63178',NULL,1228,38.6531,-90.243462,0,NULL,NULL,NULL),(40,119,1,1,0,'816C States Rd W',816,'C',NULL,'States','Rd','W',NULL,NULL,NULL,NULL,'Virginia Beach',1,1045,NULL,'23459',NULL,1228,36.926647,-76.02058,0,NULL,NULL,NULL),(41,137,1,1,0,'608X Northpoint Path S',608,'X',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Laredo',1,1042,NULL,'78093',NULL,1228,27.492996,-99.463668,0,NULL,NULL,NULL),(42,51,1,1,0,'256Z Beech St NW',256,'Z',NULL,'Beech','St','NW',NULL,NULL,NULL,NULL,'Oxford',1,1006,NULL,'06748',NULL,1228,41.586368,-73.43657,0,NULL,NULL,NULL),(43,7,1,1,0,'565C College Dr N',565,'C',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Auburn',1,1018,NULL,'04210',NULL,1228,44.089173,-70.24143,0,NULL,NULL,NULL),(44,98,1,1,0,'531G Martin Luther King Pl W',531,'G',NULL,'Martin Luther King','Pl','W',NULL,NULL,NULL,NULL,'Metaline Falls',1,1046,NULL,'99153',NULL,1228,48.858518,-117.29833,0,NULL,NULL,NULL),(45,118,1,1,0,'58M Caulder Ave W',58,'M',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Tullahoma',1,1041,NULL,'37388',NULL,1228,35.357522,-86.21484,0,NULL,NULL,NULL),(46,20,1,1,0,'795I Beech Ave NE',795,'I',NULL,'Beech','Ave','NE',NULL,NULL,NULL,NULL,'Quinebaug',1,1006,NULL,'06262',NULL,1228,42.022904,-71.94671,0,NULL,NULL,NULL),(47,5,1,1,0,'868O Van Ness Ave SE',868,'O',NULL,'Van Ness','Ave','SE',NULL,NULL,NULL,NULL,'Selma',1,1014,NULL,'52588',NULL,1228,40.873769,-92.13113,0,NULL,NULL,NULL),(48,21,1,1,0,'3P Caulder Pl SW',3,'P',NULL,'Caulder','Pl','SW',NULL,NULL,NULL,NULL,'Winchester',1,1016,NULL,'40392',NULL,1228,37.968496,-84.157766,0,NULL,NULL,NULL),(49,100,1,1,0,'351P Caulder Ln E',351,'P',NULL,'Caulder','Ln','E',NULL,NULL,NULL,NULL,'Junction City',1,1048,NULL,'54443',NULL,1228,44.612879,-89.74163,0,NULL,NULL,NULL),(50,99,1,1,0,'809T States Rd SW',809,'T',NULL,'States','Rd','SW',NULL,NULL,NULL,NULL,'Winnett',1,1025,NULL,'59087',NULL,1228,47.000478,-108.29005,0,NULL,NULL,NULL),(51,44,1,1,0,'209I Green Dr S',209,'I',NULL,'Green','Dr','S',NULL,NULL,NULL,NULL,'Ohiopyle',1,1037,NULL,'15470',NULL,1228,39.854144,-79.52989,0,NULL,NULL,NULL),(52,168,1,1,0,'88G Pine Blvd S',88,'G',NULL,'Pine','Blvd','S',NULL,NULL,NULL,NULL,'South Bend',1,1026,NULL,'68058',NULL,1228,41.003188,-96.24529,0,NULL,NULL,NULL),(53,163,1,1,0,'325I States Way N',325,'I',NULL,'States','Way','N',NULL,NULL,NULL,NULL,'Tumacacori',1,1002,NULL,'85640',NULL,1228,31.586392,-111.0416,0,NULL,NULL,NULL),(54,117,1,1,0,'128F Maple Ln N',128,'F',NULL,'Maple','Ln','N',NULL,NULL,NULL,NULL,'Alexandria',1,1017,NULL,'71303',NULL,1228,31.302432,-92.50515,0,NULL,NULL,NULL),(55,126,1,1,0,'941A El Camino Ave SW',941,'A',NULL,'El Camino','Ave','SW',NULL,NULL,NULL,NULL,'Montgomery',1,1000,NULL,'36111',NULL,1228,32.338989,-86.27316,0,NULL,NULL,NULL),(56,34,1,1,0,'21C States Blvd NW',21,'C',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Collison',1,1012,NULL,'61831',NULL,1228,40.2159,-87.78418,0,NULL,NULL,NULL),(57,90,1,1,0,'718E Van Ness Way SW',718,'E',NULL,'Van Ness','Way','SW',NULL,NULL,NULL,NULL,'Woodruff',1,1002,NULL,'85942',NULL,1228,34.778649,-109.96697,0,NULL,NULL,NULL),(58,108,1,1,0,'126H Green Dr NW',126,'H',NULL,'Green','Dr','NW',NULL,NULL,NULL,NULL,'South Bound Brook',1,1029,NULL,'08880',NULL,1228,40.553803,-74.52976,0,NULL,NULL,NULL),(59,96,1,1,0,'558C Dowlen Pl SW',558,'C',NULL,'Dowlen','Pl','SW',NULL,NULL,NULL,NULL,'Sun City Center',1,1008,NULL,'33571',NULL,1228,27.720111,-82.453041,0,NULL,NULL,NULL),(60,150,1,1,0,'778X El Camino Ln SW',778,'X',NULL,'El Camino','Ln','SW',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93761',NULL,1228,36.746375,-119.639658,0,NULL,NULL,NULL),(61,83,3,1,0,'174M Jackson Way N',174,'M',NULL,'Jackson','Way','N',NULL,'Mailstop 101',NULL,NULL,'Alma',1,1021,NULL,'48802',NULL,1228,43.389262,-84.666661,0,NULL,NULL,NULL),(62,3,2,0,0,'174M Jackson Way N',174,'M',NULL,'Jackson','Way','N',NULL,'Mailstop 101',NULL,NULL,'Alma',1,1021,NULL,'48802',NULL,1228,43.389262,-84.666661,0,NULL,NULL,61),(63,86,3,1,0,'398E Lincoln Rd SW',398,'E',NULL,'Lincoln','Rd','SW',NULL,'Cuffe Parade',NULL,NULL,'Parowan',1,1043,NULL,'84761',NULL,1228,37.886163,-112.83945,0,NULL,NULL,NULL),(64,10,3,1,0,'559M Pine Ln E',559,'M',NULL,'Pine','Ln','E',NULL,'Payables Dept.',NULL,NULL,'Redmon',1,1012,NULL,'61949',NULL,1228,39.646359,-87.86014,0,NULL,NULL,NULL),(65,179,2,1,0,'559M Pine Ln E',559,'M',NULL,'Pine','Ln','E',NULL,'Payables Dept.',NULL,NULL,'Redmon',1,1012,NULL,'61949',NULL,1228,39.646359,-87.86014,0,NULL,NULL,64),(66,181,3,1,0,'247Q Cadell Dr NE',247,'Q',NULL,'Cadell','Dr','NE',NULL,'Community Relations',NULL,NULL,'Prairie Du Sac',1,1048,NULL,'53578',NULL,1228,43.318318,-89.74928,0,NULL,NULL,NULL),(67,71,2,1,0,'247Q Cadell Dr NE',247,'Q',NULL,'Cadell','Dr','NE',NULL,'Community Relations',NULL,NULL,'Prairie Du Sac',1,1048,NULL,'53578',NULL,1228,43.318318,-89.74928,0,NULL,NULL,66),(68,29,3,1,0,'638T Dowlen Ln W',638,'T',NULL,'Dowlen','Ln','W',NULL,'Mailstop 101',NULL,NULL,'Sisseton',1,1040,NULL,'57262',NULL,1228,45.667565,-97.04528,0,NULL,NULL,NULL),(69,63,2,1,0,'638T Dowlen Ln W',638,'T',NULL,'Dowlen','Ln','W',NULL,'Mailstop 101',NULL,NULL,'Sisseton',1,1040,NULL,'57262',NULL,1228,45.667565,-97.04528,0,NULL,NULL,68),(70,187,3,1,0,'998G Dowlen Blvd NW',998,'G',NULL,'Dowlen','Blvd','NW',NULL,'Donor Relations',NULL,NULL,'Biwabik',1,1022,NULL,'55708',NULL,1228,47.533314,-92.34084,0,NULL,NULL,NULL),(71,189,2,0,0,'998G Dowlen Blvd NW',998,'G',NULL,'Dowlen','Blvd','NW',NULL,'Donor Relations',NULL,NULL,'Biwabik',1,1022,NULL,'55708',NULL,1228,47.533314,-92.34084,0,NULL,NULL,70),(72,155,3,1,0,'303Y Martin Luther King Dr NW',303,'Y',NULL,'Martin Luther King','Dr','NW',NULL,'Donor Relations',NULL,NULL,'Jamestown',1,1045,NULL,'23081',NULL,1228,37.223482,-76.783317,0,NULL,NULL,NULL),(73,16,3,1,0,'459U Main Way N',459,'U',NULL,'Main','Way','N',NULL,'Payables Dept.',NULL,NULL,'Bertrand',1,1024,NULL,'63823',NULL,1228,36.905584,-89.44945,0,NULL,NULL,NULL),(74,161,3,1,0,'801B Cadell Way NW',801,'B',NULL,'Cadell','Way','NW',NULL,'Churchgate',NULL,NULL,'Washington',1,1050,NULL,'20070',NULL,1228,38.893311,-77.014647,0,NULL,NULL,NULL),(75,138,3,1,0,'356F Dowlen Dr NW',356,'F',NULL,'Dowlen','Dr','NW',NULL,'Attn: Accounting',NULL,NULL,'Imboden',1,1003,NULL,'72434',NULL,1228,36.21601,-91.15872,0,NULL,NULL,NULL),(76,38,3,1,0,'540J Bay Blvd SW',540,'J',NULL,'Bay','Blvd','SW',NULL,'Disbursements',NULL,NULL,'Moorpark',1,1004,NULL,'93020',NULL,1228,34.032383,-119.1343,0,NULL,NULL,NULL),(77,6,3,1,0,'629S Maple Path SE',629,'S',NULL,'Maple','Path','SE',NULL,'Donor Relations',NULL,NULL,'York Haven',1,1037,NULL,'17370',NULL,1228,40.120806,-76.76352,0,NULL,NULL,NULL),(78,27,3,1,0,'35S Cadell Path S',35,'S',NULL,'Cadell','Path','S',NULL,'Payables Dept.',NULL,NULL,'Fredericksburg',1,1045,NULL,'22408',NULL,1228,38.236023,-77.46111,0,NULL,NULL,NULL),(79,58,2,1,0,'35S Cadell Path S',35,'S',NULL,'Cadell','Path','S',NULL,'Payables Dept.',NULL,NULL,'Fredericksburg',1,1045,NULL,'22408',NULL,1228,38.236023,-77.46111,0,NULL,NULL,78),(80,128,3,1,0,'446K El Camino Blvd S',446,'K',NULL,'El Camino','Blvd','S',NULL,'c/o OPDC',NULL,NULL,'Salford',1,1037,NULL,'18957',NULL,1228,40.302945,-75.448579,0,NULL,NULL,NULL),(81,69,3,1,0,'570G States Path NW',570,'G',NULL,'States','Path','NW',NULL,'Cuffe Parade',NULL,NULL,'Round O',1,1039,NULL,'29474',NULL,1228,32.939642,-80.54405,0,NULL,NULL,NULL),(82,142,3,1,0,'447Q Lincoln Dr NW',447,'Q',NULL,'Lincoln','Dr','NW',NULL,'Disbursements',NULL,NULL,'Ephraim',1,1048,NULL,'54211',NULL,1228,45.158078,-87.16796,0,NULL,NULL,NULL),(83,93,2,1,0,'447Q Lincoln Dr NW',447,'Q',NULL,'Lincoln','Dr','NW',NULL,'Disbursements',NULL,NULL,'Ephraim',1,1048,NULL,'54211',NULL,1228,45.158078,-87.16796,0,NULL,NULL,82),(84,11,3,1,0,'486H Green Ln NW',486,'H',NULL,'Green','Ln','NW',NULL,'c/o PO Plus',NULL,NULL,'Sanders',1,1025,NULL,'59076',NULL,1228,46.2644,-107.07438,0,NULL,NULL,NULL),(85,120,3,1,0,'218C Woodbridge Path SW',218,'C',NULL,'Woodbridge','Path','SW',NULL,'Receiving',NULL,NULL,'Woodworth',1,1048,NULL,'53194',NULL,1228,42.58098,-87.662878,0,NULL,NULL,NULL),(86,75,2,1,0,'218C Woodbridge Path SW',218,'C',NULL,'Woodbridge','Path','SW',NULL,'Receiving',NULL,NULL,'Woodworth',1,1048,NULL,'53194',NULL,1228,42.58098,-87.662878,0,NULL,NULL,85),(87,56,3,1,0,'683L Jackson St S',683,'L',NULL,'Jackson','St','S',NULL,'Editorial Dept',NULL,NULL,'Overpeck',1,1034,NULL,'45055',NULL,1228,39.451806,-84.515245,0,NULL,NULL,NULL),(88,24,2,1,0,'683L Jackson St S',683,'L',NULL,'Jackson','St','S',NULL,'Editorial Dept',NULL,NULL,'Overpeck',1,1034,NULL,'45055',NULL,1228,39.451806,-84.515245,0,NULL,NULL,87),(89,76,3,1,0,'620T College Ave E',620,'T',NULL,'College','Ave','E',NULL,'Community Relations',NULL,NULL,'Newark',1,1034,NULL,'43093',NULL,1228,40.095148,-82.482659,0,NULL,NULL,NULL),(90,84,1,1,0,'608X Northpoint Path S',608,'X',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Laredo',1,1042,NULL,'78093',NULL,1228,27.492996,-99.463668,0,NULL,NULL,41),(91,192,1,1,0,'608X Northpoint Path S',608,'X',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Laredo',1,1042,NULL,'78093',NULL,1228,27.492996,-99.463668,0,NULL,NULL,41),(92,48,1,1,0,'608X Northpoint Path S',608,'X',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Laredo',1,1042,NULL,'78093',NULL,1228,27.492996,-99.463668,0,NULL,NULL,41),(93,119,1,0,0,'608X Northpoint Path S',608,'X',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Laredo',1,1042,NULL,'78093',NULL,1228,27.492996,-99.463668,0,NULL,NULL,41),(94,105,1,1,0,'256Z Beech St NW',256,'Z',NULL,'Beech','St','NW',NULL,NULL,NULL,NULL,'Oxford',1,1006,NULL,'06748',NULL,1228,41.586368,-73.43657,0,NULL,NULL,42),(95,2,1,1,0,'256Z Beech St NW',256,'Z',NULL,'Beech','St','NW',NULL,NULL,NULL,NULL,'Oxford',1,1006,NULL,'06748',NULL,1228,41.586368,-73.43657,0,NULL,NULL,42),(96,112,1,1,0,'256Z Beech St NW',256,'Z',NULL,'Beech','St','NW',NULL,NULL,NULL,NULL,'Oxford',1,1006,NULL,'06748',NULL,1228,41.586368,-73.43657,0,NULL,NULL,42),(97,147,1,1,0,'400D Northpoint Dr W',400,'D',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Minneapolis',1,1022,NULL,'55483',NULL,1228,45.015914,-93.47188,0,NULL,NULL,NULL),(98,123,1,1,0,'565C College Dr N',565,'C',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Auburn',1,1018,NULL,'04210',NULL,1228,44.089173,-70.24143,0,NULL,NULL,43),(99,95,1,1,0,'565C College Dr N',565,'C',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Auburn',1,1018,NULL,'04210',NULL,1228,44.089173,-70.24143,0,NULL,NULL,43),(100,36,1,1,0,'565C College Dr N',565,'C',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Auburn',1,1018,NULL,'04210',NULL,1228,44.089173,-70.24143,0,NULL,NULL,43),(101,129,1,1,0,'565C College Dr N',565,'C',NULL,'College','Dr','N',NULL,NULL,NULL,NULL,'Auburn',1,1018,NULL,'04210',NULL,1228,44.089173,-70.24143,0,NULL,NULL,43),(102,25,1,1,0,'531G Martin Luther King Pl W',531,'G',NULL,'Martin Luther King','Pl','W',NULL,NULL,NULL,NULL,'Metaline Falls',1,1046,NULL,'99153',NULL,1228,48.858518,-117.29833,0,NULL,NULL,44),(103,131,1,1,0,'531G Martin Luther King Pl W',531,'G',NULL,'Martin Luther King','Pl','W',NULL,NULL,NULL,NULL,'Metaline Falls',1,1046,NULL,'99153',NULL,1228,48.858518,-117.29833,0,NULL,NULL,44),(104,132,1,1,0,'531G Martin Luther King Pl W',531,'G',NULL,'Martin Luther King','Pl','W',NULL,NULL,NULL,NULL,'Metaline Falls',1,1046,NULL,'99153',NULL,1228,48.858518,-117.29833,0,NULL,NULL,44),(105,134,1,1,0,'874P Bay Ave SW',874,'P',NULL,'Bay','Ave','SW',NULL,NULL,NULL,NULL,'Miami',1,1008,NULL,'33165',NULL,1228,25.734828,-80.3583,0,NULL,NULL,NULL),(106,121,1,1,0,'58M Caulder Ave W',58,'M',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Tullahoma',1,1041,NULL,'37388',NULL,1228,35.357522,-86.21484,0,NULL,NULL,45),(107,125,1,1,0,'58M Caulder Ave W',58,'M',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Tullahoma',1,1041,NULL,'37388',NULL,1228,35.357522,-86.21484,0,NULL,NULL,45),(108,64,1,1,0,'58M Caulder Ave W',58,'M',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Tullahoma',1,1041,NULL,'37388',NULL,1228,35.357522,-86.21484,0,NULL,NULL,45),(109,43,1,1,0,'58M Caulder Ave W',58,'M',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Tullahoma',1,1041,NULL,'37388',NULL,1228,35.357522,-86.21484,0,NULL,NULL,45),(110,9,1,1,0,'795I Beech Ave NE',795,'I',NULL,'Beech','Ave','NE',NULL,NULL,NULL,NULL,'Quinebaug',1,1006,NULL,'06262',NULL,1228,42.022904,-71.94671,0,NULL,NULL,46),(111,115,1,1,0,'795I Beech Ave NE',795,'I',NULL,'Beech','Ave','NE',NULL,NULL,NULL,NULL,'Quinebaug',1,1006,NULL,'06262',NULL,1228,42.022904,-71.94671,0,NULL,NULL,46),(112,141,1,1,0,'795I Beech Ave NE',795,'I',NULL,'Beech','Ave','NE',NULL,NULL,NULL,NULL,'Quinebaug',1,1006,NULL,'06262',NULL,1228,42.022904,-71.94671,0,NULL,NULL,46),(113,152,1,1,0,'159Z El Camino Dr W',159,'Z',NULL,'El Camino','Dr','W',NULL,NULL,NULL,NULL,'Hood',1,1045,NULL,'22723',NULL,1228,38.331957,-78.3774,0,NULL,NULL,NULL),(114,158,1,1,0,'868O Van Ness Ave SE',868,'O',NULL,'Van Ness','Ave','SE',NULL,NULL,NULL,NULL,'Selma',1,1014,NULL,'52588',NULL,1228,40.873769,-92.13113,0,NULL,NULL,47),(115,41,1,1,0,'868O Van Ness Ave SE',868,'O',NULL,'Van Ness','Ave','SE',NULL,NULL,NULL,NULL,'Selma',1,1014,NULL,'52588',NULL,1228,40.873769,-92.13113,0,NULL,NULL,47),(116,94,1,1,0,'868O Van Ness Ave SE',868,'O',NULL,'Van Ness','Ave','SE',NULL,NULL,NULL,NULL,'Selma',1,1014,NULL,'52588',NULL,1228,40.873769,-92.13113,0,NULL,NULL,47),(117,65,1,1,0,'868O Van Ness Ave SE',868,'O',NULL,'Van Ness','Ave','SE',NULL,NULL,NULL,NULL,'Selma',1,1014,NULL,'52588',NULL,1228,40.873769,-92.13113,0,NULL,NULL,47),(118,183,1,1,0,'3P Caulder Pl SW',3,'P',NULL,'Caulder','Pl','SW',NULL,NULL,NULL,NULL,'Winchester',1,1016,NULL,'40392',NULL,1228,37.968496,-84.157766,0,NULL,NULL,48),(119,71,1,0,0,'3P Caulder Pl SW',3,'P',NULL,'Caulder','Pl','SW',NULL,NULL,NULL,NULL,'Winchester',1,1016,NULL,'40392',NULL,1228,37.968496,-84.157766,0,NULL,NULL,48),(120,151,1,1,0,'3P Caulder Pl SW',3,'P',NULL,'Caulder','Pl','SW',NULL,NULL,NULL,NULL,'Winchester',1,1016,NULL,'40392',NULL,1228,37.968496,-84.157766,0,NULL,NULL,48),(121,101,1,1,0,'19W Jackson St E',19,'W',NULL,'Jackson','St','E',NULL,NULL,NULL,NULL,'Holbrook',1,1020,NULL,'02343',NULL,1228,42.148351,-71.01037,0,NULL,NULL,NULL),(122,67,1,1,0,'351P Caulder Ln E',351,'P',NULL,'Caulder','Ln','E',NULL,NULL,NULL,NULL,'Junction City',1,1048,NULL,'54443',NULL,1228,44.612879,-89.74163,0,NULL,NULL,49),(123,93,1,0,0,'351P Caulder Ln E',351,'P',NULL,'Caulder','Ln','E',NULL,NULL,NULL,NULL,'Junction City',1,1048,NULL,'54443',NULL,1228,44.612879,-89.74163,0,NULL,NULL,49),(124,199,1,1,0,'351P Caulder Ln E',351,'P',NULL,'Caulder','Ln','E',NULL,NULL,NULL,NULL,'Junction City',1,1048,NULL,'54443',NULL,1228,44.612879,-89.74163,0,NULL,NULL,49),(125,104,1,1,0,'351P Caulder Ln E',351,'P',NULL,'Caulder','Ln','E',NULL,NULL,NULL,NULL,'Junction City',1,1048,NULL,'54443',NULL,1228,44.612879,-89.74163,0,NULL,NULL,49),(126,92,1,1,0,'809T States Rd SW',809,'T',NULL,'States','Rd','SW',NULL,NULL,NULL,NULL,'Winnett',1,1025,NULL,'59087',NULL,1228,47.000478,-108.29005,0,NULL,NULL,50),(127,73,1,1,0,'809T States Rd SW',809,'T',NULL,'States','Rd','SW',NULL,NULL,NULL,NULL,'Winnett',1,1025,NULL,'59087',NULL,1228,47.000478,-108.29005,0,NULL,NULL,50),(128,68,1,1,0,'809T States Rd SW',809,'T',NULL,'States','Rd','SW',NULL,NULL,NULL,NULL,'Winnett',1,1025,NULL,'59087',NULL,1228,47.000478,-108.29005,0,NULL,NULL,50),(129,179,1,0,0,'809T States Rd SW',809,'T',NULL,'States','Rd','SW',NULL,NULL,NULL,NULL,'Winnett',1,1025,NULL,'59087',NULL,1228,47.000478,-108.29005,0,NULL,NULL,50),(130,140,1,1,0,'209I Green Dr S',209,'I',NULL,'Green','Dr','S',NULL,NULL,NULL,NULL,'Ohiopyle',1,1037,NULL,'15470',NULL,1228,39.854144,-79.52989,0,NULL,NULL,51),(131,201,1,1,0,'209I Green Dr S',209,'I',NULL,'Green','Dr','S',NULL,NULL,NULL,NULL,'Ohiopyle',1,1037,NULL,'15470',NULL,1228,39.854144,-79.52989,0,NULL,NULL,51),(132,58,1,0,0,'209I Green Dr S',209,'I',NULL,'Green','Dr','S',NULL,NULL,NULL,NULL,'Ohiopyle',1,1037,NULL,'15470',NULL,1228,39.854144,-79.52989,0,NULL,NULL,51),(133,188,1,1,0,'83T Martin Luther King St S',83,'T',NULL,'Martin Luther King','St','S',NULL,NULL,NULL,NULL,'Summerville',1,1036,NULL,'97876',NULL,1228,45.52535,-118.01193,0,NULL,NULL,NULL),(134,109,1,1,0,'88G Pine Blvd S',88,'G',NULL,'Pine','Blvd','S',NULL,NULL,NULL,NULL,'South Bend',1,1026,NULL,'68058',NULL,1228,41.003188,-96.24529,0,NULL,NULL,52),(135,35,1,1,0,'88G Pine Blvd S',88,'G',NULL,'Pine','Blvd','S',NULL,NULL,NULL,NULL,'South Bend',1,1026,NULL,'68058',NULL,1228,41.003188,-96.24529,0,NULL,NULL,52),(136,195,1,1,0,'88G Pine Blvd S',88,'G',NULL,'Pine','Blvd','S',NULL,NULL,NULL,NULL,'South Bend',1,1026,NULL,'68058',NULL,1228,41.003188,-96.24529,0,NULL,NULL,52),(137,114,1,1,0,'88G Pine Blvd S',88,'G',NULL,'Pine','Blvd','S',NULL,NULL,NULL,NULL,'South Bend',1,1026,NULL,'68058',NULL,1228,41.003188,-96.24529,0,NULL,NULL,52),(138,190,1,1,0,'325I States Way N',325,'I',NULL,'States','Way','N',NULL,NULL,NULL,NULL,'Tumacacori',1,1002,NULL,'85640',NULL,1228,31.586392,-111.0416,0,NULL,NULL,53),(139,146,1,1,0,'325I States Way N',325,'I',NULL,'States','Way','N',NULL,NULL,NULL,NULL,'Tumacacori',1,1002,NULL,'85640',NULL,1228,31.586392,-111.0416,0,NULL,NULL,53),(140,160,1,1,0,'325I States Way N',325,'I',NULL,'States','Way','N',NULL,NULL,NULL,NULL,'Tumacacori',1,1002,NULL,'85640',NULL,1228,31.586392,-111.0416,0,NULL,NULL,53),(141,175,1,1,0,'329U Cadell Way N',329,'U',NULL,'Cadell','Way','N',NULL,NULL,NULL,NULL,'Nashville',1,1041,NULL,'37248',NULL,1228,36.186605,-86.785248,0,NULL,NULL,NULL),(142,81,1,1,0,'128F Maple Ln N',128,'F',NULL,'Maple','Ln','N',NULL,NULL,NULL,NULL,'Alexandria',1,1017,NULL,'71303',NULL,1228,31.302432,-92.50515,0,NULL,NULL,54),(143,85,1,1,0,'128F Maple Ln N',128,'F',NULL,'Maple','Ln','N',NULL,NULL,NULL,NULL,'Alexandria',1,1017,NULL,'71303',NULL,1228,31.302432,-92.50515,0,NULL,NULL,54),(144,79,1,1,0,'128F Maple Ln N',128,'F',NULL,'Maple','Ln','N',NULL,NULL,NULL,NULL,'Alexandria',1,1017,NULL,'71303',NULL,1228,31.302432,-92.50515,0,NULL,NULL,54),(145,52,1,1,0,'163U Maple Ave S',163,'U',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Pickwick Dam',1,1041,NULL,'38365',NULL,1228,35.038284,-88.225601,0,NULL,NULL,NULL),(146,47,1,1,0,'941A El Camino Ave SW',941,'A',NULL,'El Camino','Ave','SW',NULL,NULL,NULL,NULL,'Montgomery',1,1000,NULL,'36111',NULL,1228,32.338989,-86.27316,0,NULL,NULL,55),(147,32,1,1,0,'941A El Camino Ave SW',941,'A',NULL,'El Camino','Ave','SW',NULL,NULL,NULL,NULL,'Montgomery',1,1000,NULL,'36111',NULL,1228,32.338989,-86.27316,0,NULL,NULL,55),(148,143,1,1,0,'941A El Camino Ave SW',941,'A',NULL,'El Camino','Ave','SW',NULL,NULL,NULL,NULL,'Montgomery',1,1000,NULL,'36111',NULL,1228,32.338989,-86.27316,0,NULL,NULL,55),(149,24,1,0,0,'864P Woodbridge Ave NW',864,'P',NULL,'Woodbridge','Ave','NW',NULL,NULL,NULL,NULL,'Archer',1,1026,NULL,'68816',NULL,1228,41.172932,-98.12755,0,NULL,NULL,NULL),(150,185,1,1,0,'21C States Blvd NW',21,'C',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Collison',1,1012,NULL,'61831',NULL,1228,40.2159,-87.78418,0,NULL,NULL,56),(151,135,1,1,0,'21C States Blvd NW',21,'C',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Collison',1,1012,NULL,'61831',NULL,1228,40.2159,-87.78418,0,NULL,NULL,56),(152,130,1,1,0,'21C States Blvd NW',21,'C',NULL,'States','Blvd','NW',NULL,NULL,NULL,NULL,'Collison',1,1012,NULL,'61831',NULL,1228,40.2159,-87.78418,0,NULL,NULL,56),(153,139,1,1,0,'50E Green Way NE',50,'E',NULL,'Green','Way','NE',NULL,NULL,NULL,NULL,'Athens',1,1009,NULL,'30601',NULL,1228,33.979016,-83.36423,0,NULL,NULL,NULL),(154,198,1,1,0,'718E Van Ness Way SW',718,'E',NULL,'Van Ness','Way','SW',NULL,NULL,NULL,NULL,'Woodruff',1,1002,NULL,'85942',NULL,1228,34.778649,-109.96697,0,NULL,NULL,57),(155,106,1,1,0,'718E Van Ness Way SW',718,'E',NULL,'Van Ness','Way','SW',NULL,NULL,NULL,NULL,'Woodruff',1,1002,NULL,'85942',NULL,1228,34.778649,-109.96697,0,NULL,NULL,57),(156,62,1,1,0,'718E Van Ness Way SW',718,'E',NULL,'Van Ness','Way','SW',NULL,NULL,NULL,NULL,'Woodruff',1,1002,NULL,'85942',NULL,1228,34.778649,-109.96697,0,NULL,NULL,57),(157,63,1,0,0,'161O College Blvd N',161,'O',NULL,'College','Blvd','N',NULL,NULL,NULL,NULL,'Nortonville',1,1015,NULL,'66060',NULL,1228,39.415907,-95.32966,0,NULL,NULL,NULL),(158,136,1,1,0,'126H Green Dr NW',126,'H',NULL,'Green','Dr','NW',NULL,NULL,NULL,NULL,'South Bound Brook',1,1029,NULL,'08880',NULL,1228,40.553803,-74.52976,0,NULL,NULL,58),(159,31,1,1,0,'126H Green Dr NW',126,'H',NULL,'Green','Dr','NW',NULL,NULL,NULL,NULL,'South Bound Brook',1,1029,NULL,'08880',NULL,1228,40.553803,-74.52976,0,NULL,NULL,58),(160,153,1,1,0,'126H Green Dr NW',126,'H',NULL,'Green','Dr','NW',NULL,NULL,NULL,NULL,'South Bound Brook',1,1029,NULL,'08880',NULL,1228,40.553803,-74.52976,0,NULL,NULL,58),(161,182,1,1,0,'126H Green Dr NW',126,'H',NULL,'Green','Dr','NW',NULL,NULL,NULL,NULL,'South Bound Brook',1,1029,NULL,'08880',NULL,1228,40.553803,-74.52976,0,NULL,NULL,58),(162,178,1,1,0,'558C Dowlen Pl SW',558,'C',NULL,'Dowlen','Pl','SW',NULL,NULL,NULL,NULL,'Sun City Center',1,1008,NULL,'33571',NULL,1228,27.720111,-82.453041,0,NULL,NULL,59),(163,165,1,1,0,'558C Dowlen Pl SW',558,'C',NULL,'Dowlen','Pl','SW',NULL,NULL,NULL,NULL,'Sun City Center',1,1008,NULL,'33571',NULL,1228,27.720111,-82.453041,0,NULL,NULL,59),(164,15,1,1,0,'558C Dowlen Pl SW',558,'C',NULL,'Dowlen','Pl','SW',NULL,NULL,NULL,NULL,'Sun City Center',1,1008,NULL,'33571',NULL,1228,27.720111,-82.453041,0,NULL,NULL,59),(165,12,1,1,0,'369H College Blvd SE',369,'H',NULL,'College','Blvd','SE',NULL,NULL,NULL,NULL,'Ellsworth',1,1014,NULL,'50075',NULL,1228,42.325266,-93.56507,0,NULL,NULL,NULL),(166,45,1,1,0,'778X El Camino Ln SW',778,'X',NULL,'El Camino','Ln','SW',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93761',NULL,1228,36.746375,-119.639658,0,NULL,NULL,60),(167,154,1,1,0,'778X El Camino Ln SW',778,'X',NULL,'El Camino','Ln','SW',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93761',NULL,1228,36.746375,-119.639658,0,NULL,NULL,60),(168,91,1,1,0,'778X El Camino Ln SW',778,'X',NULL,'El Camino','Ln','SW',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93761',NULL,1228,36.746375,-119.639658,0,NULL,NULL,60),(169,77,1,1,0,'205P Caulder Ln SW',205,'P',NULL,'Caulder','Ln','SW',NULL,NULL,NULL,NULL,'Gordon',1,1042,NULL,'76453',NULL,1228,32.572618,-98.36399,0,NULL,NULL,NULL),(170,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),(171,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),(172,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); +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,43,1,1,0,'190Q Martin Luther King Rd NW',190,'Q',NULL,'Martin Luther King','Rd','NW',NULL,NULL,NULL,NULL,'Sun Valley',1,1011,NULL,'83354',NULL,1228,43.681156,-114.33214,0,NULL,NULL,NULL),(2,140,1,1,0,'599H Bay Ln NE',599,'H',NULL,'Bay','Ln','NE',NULL,NULL,NULL,NULL,'Medina',1,1031,NULL,'14103',NULL,1228,43.217155,-78.38746,0,NULL,NULL,NULL),(3,95,1,1,0,'493V States Rd NW',493,'V',NULL,'States','Rd','NW',NULL,NULL,NULL,NULL,'Minidoka',1,1011,NULL,'83343',NULL,1228,42.772955,-113.509762,0,NULL,NULL,NULL),(4,106,1,1,0,'345R Maple Pl SW',345,'R',NULL,'Maple','Pl','SW',NULL,NULL,NULL,NULL,'Goshen',1,1013,NULL,'46528',NULL,1228,41.600649,-85.81902,0,NULL,NULL,NULL),(5,127,1,1,0,'531L Main Path S',531,'L',NULL,'Main','Path','S',NULL,NULL,NULL,NULL,'Denton',1,1015,NULL,'66017',NULL,1228,39.720911,-95.27417,0,NULL,NULL,NULL),(6,137,1,1,0,'25W College Blvd E',25,'W',NULL,'College','Blvd','E',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99252',NULL,1228,47.653568,-117.431742,0,NULL,NULL,NULL),(7,105,1,1,0,'45R Dowlen Way N',45,'R',NULL,'Dowlen','Way','N',NULL,NULL,NULL,NULL,'Prattsburgh',1,1031,NULL,'14873',NULL,1228,42.525335,-77.29673,0,NULL,NULL,NULL),(8,9,1,1,0,'176U Woodbridge Ln NE',176,'U',NULL,'Woodbridge','Ln','NE',NULL,NULL,NULL,NULL,'Steelville',1,1037,NULL,'19370',NULL,1228,39.983153,-75.748055,0,NULL,NULL,NULL),(9,158,1,1,0,'247Y Martin Luther King Way NW',247,'Y',NULL,'Martin Luther King','Way','NW',NULL,NULL,NULL,NULL,'Shaw A F B',1,1039,NULL,'29152',NULL,1228,33.972863,-80.46534,0,NULL,NULL,NULL),(10,117,1,1,0,'62A Green Ave SW',62,'A',NULL,'Green','Ave','SW',NULL,NULL,NULL,NULL,'Middletown',1,1019,NULL,'21769',NULL,1228,39.446452,-77.55169,0,NULL,NULL,NULL),(11,165,1,1,0,'681W Beech Ave S',681,'W',NULL,'Beech','Ave','S',NULL,NULL,NULL,NULL,'Houma',1,1017,NULL,'70360',NULL,1228,29.593377,-90.7475,0,NULL,NULL,NULL),(12,72,1,1,0,'201J Second Rd E',201,'J',NULL,'Second','Rd','E',NULL,NULL,NULL,NULL,'Chester',1,1045,NULL,'23831',NULL,1228,37.350999,-77.43959,0,NULL,NULL,NULL),(13,186,1,1,0,'639R Beech Dr SE',639,'R',NULL,'Beech','Dr','SE',NULL,NULL,NULL,NULL,'East Middlebury',1,1044,NULL,'05740',NULL,1228,43.97153,-73.091416,0,NULL,NULL,NULL),(14,40,1,1,0,'243X Beech St S',243,'X',NULL,'Beech','St','S',NULL,NULL,NULL,NULL,'Queensbury',1,1031,NULL,'12825',NULL,1228,42.973468,-74.406393,0,NULL,NULL,NULL),(15,143,1,1,0,'191M States Ln S',191,'M',NULL,'States','Ln','S',NULL,NULL,NULL,NULL,'Mooseheart',1,1012,NULL,'60539',NULL,1228,41.823478,-88.3332,0,NULL,NULL,NULL),(16,37,1,1,0,'969O Green Blvd N',969,'O',NULL,'Green','Blvd','N',NULL,NULL,NULL,NULL,'Fort Madison',1,1014,NULL,'52627',NULL,1228,40.637694,-91.33866,0,NULL,NULL,NULL),(17,164,1,1,0,'996C Lincoln Dr NW',996,'C',NULL,'Lincoln','Dr','NW',NULL,NULL,NULL,NULL,'Lemoore',1,1004,NULL,'93245',NULL,1228,36.312075,-119.80349,0,NULL,NULL,NULL),(18,63,1,1,0,'547E Pine Blvd SE',547,'E',NULL,'Pine','Blvd','SE',NULL,NULL,NULL,NULL,'Melvin',1,1000,NULL,'36913',NULL,1228,32.004227,-88.200738,0,NULL,NULL,NULL),(19,130,1,1,0,'149P Maple Way E',149,'P',NULL,'Maple','Way','E',NULL,NULL,NULL,NULL,'Greeley',1,1037,NULL,'18425',NULL,1228,41.419116,-75.00683,0,NULL,NULL,NULL),(20,100,1,1,0,'547P Van Ness Ln SW',547,'P',NULL,'Van Ness','Ln','SW',NULL,NULL,NULL,NULL,'Pathfork',1,1016,NULL,'40863',NULL,1228,36.753043,-83.44991,0,NULL,NULL,NULL),(21,16,1,1,0,'166Q Caulder Pl N',166,'Q',NULL,'Caulder','Pl','N',NULL,NULL,NULL,NULL,'Destin',1,1008,NULL,'32541',NULL,1228,30.391795,-86.4338,0,NULL,NULL,NULL),(22,162,1,1,0,'481Y Lincoln Pl SE',481,'Y',NULL,'Lincoln','Pl','SE',NULL,NULL,NULL,NULL,'Weskan',1,1015,NULL,'67762',NULL,1228,38.930464,-101.99084,0,NULL,NULL,NULL),(23,59,1,1,0,'940I Maple Ln S',940,'I',NULL,'Maple','Ln','S',NULL,NULL,NULL,NULL,'Wichita Falls',1,1042,NULL,'76308',NULL,1228,33.859798,-98.54064,0,NULL,NULL,NULL),(24,144,1,1,0,'652A Dowlen Dr NE',652,'A',NULL,'Dowlen','Dr','NE',NULL,NULL,NULL,NULL,'Swiftwater',1,1037,NULL,'18370',NULL,1228,41.095437,-75.3191,0,NULL,NULL,NULL),(25,122,1,1,0,'500I Caulder Pl W',500,'I',NULL,'Caulder','Pl','W',NULL,NULL,NULL,NULL,'Draper',1,1045,NULL,'24324',NULL,1228,36.973028,-80.79309,0,NULL,NULL,NULL),(26,111,1,1,0,'606F Green St W',606,'F',NULL,'Green','St','W',NULL,NULL,NULL,NULL,'Rockville',1,1019,NULL,'20847',NULL,1228,39.143979,-77.207617,0,NULL,NULL,NULL),(27,181,1,1,0,'861W Bay Ave NE',861,'W',NULL,'Bay','Ave','NE',NULL,NULL,NULL,NULL,'New Waverly',1,1013,NULL,'46961',NULL,1228,40.765286,-86.1918,0,NULL,NULL,NULL),(28,176,1,1,0,'173K College St W',173,'K',NULL,'College','St','W',NULL,NULL,NULL,NULL,'Plainfield',1,1034,NULL,'43836',NULL,1228,40.200382,-81.720675,0,NULL,NULL,NULL),(29,178,1,1,0,'990Y El Camino Ave W',990,'Y',NULL,'El Camino','Ave','W',NULL,NULL,NULL,NULL,'Sweet Home',1,1042,NULL,'77987',NULL,1228,29.347975,-96.900331,0,NULL,NULL,NULL),(30,131,1,1,0,'920N Caulder Ln NE',920,'N',NULL,'Caulder','Ln','NE',NULL,NULL,NULL,NULL,'Carson City',1,1027,NULL,'89706',NULL,1228,39.200035,-119.72732,0,NULL,NULL,NULL),(31,103,1,1,0,'194Y Jackson Dr W',194,'Y',NULL,'Jackson','Dr','W',NULL,NULL,NULL,NULL,'Anniston',1,1000,NULL,'36204',NULL,1228,33.762195,-85.837828,0,NULL,NULL,NULL),(32,65,1,1,0,'95Q Jackson St E',95,'Q',NULL,'Jackson','St','E',NULL,NULL,NULL,NULL,'Ahwahnee',1,1004,NULL,'93601',NULL,1228,37.388698,-119.72439,0,NULL,NULL,NULL),(33,109,1,1,0,'215T Martin Luther King Way S',215,'T',NULL,'Martin Luther King','Way','S',NULL,NULL,NULL,NULL,'Athens',1,1018,NULL,'04912',NULL,1228,44.949136,-69.64968,0,NULL,NULL,NULL),(34,68,1,1,0,'997R Cadell Pl NE',997,'R',NULL,'Cadell','Pl','NE',NULL,NULL,NULL,NULL,'Ash Fork',1,1002,NULL,'86320',NULL,1228,35.178163,-112.56465,0,NULL,NULL,NULL),(35,55,1,1,0,'158D Maple Ln NW',158,'D',NULL,'Maple','Ln','NW',NULL,NULL,NULL,NULL,'Freeport',1,1034,NULL,'43973',NULL,1228,40.189812,-81.27506,0,NULL,NULL,NULL),(36,150,1,1,0,'166W Woodbridge Dr S',166,'W',NULL,'Woodbridge','Dr','S',NULL,NULL,NULL,NULL,'Boston',1,1031,NULL,'14025',NULL,1228,42.627312,-78.73768,0,NULL,NULL,NULL),(37,196,1,1,0,'60K States Pl N',60,'K',NULL,'States','Pl','N',NULL,NULL,NULL,NULL,'Prospect',1,1031,NULL,'13435',NULL,1228,43.305156,-75.150183,0,NULL,NULL,NULL),(38,32,1,1,0,'992U Lincoln Way W',992,'U',NULL,'Lincoln','Way','W',NULL,NULL,NULL,NULL,'Indianapolis',1,1013,NULL,'46222',NULL,1228,39.786793,-86.21093,0,NULL,NULL,NULL),(39,58,1,1,0,'356A Cadell Way NW',356,'A',NULL,'Cadell','Way','NW',NULL,NULL,NULL,NULL,'Martinsburg',1,1047,NULL,'25401',NULL,1228,39.463781,-77.95767,0,NULL,NULL,NULL),(40,173,1,1,0,'41F Cadell Dr N',41,'F',NULL,'Cadell','Dr','N',NULL,NULL,NULL,NULL,'Saint Louis',1,1024,NULL,'63117',NULL,1228,38.628402,-90.32636,0,NULL,NULL,NULL),(41,91,1,1,0,'570V Beech Pl NW',570,'V',NULL,'Beech','Pl','NW',NULL,NULL,NULL,NULL,'Eustace',1,1042,NULL,'75124',NULL,1228,32.310343,-96.00312,0,NULL,NULL,NULL),(42,57,1,1,0,'144F Bay Ln NE',144,'F',NULL,'Bay','Ln','NE',NULL,NULL,NULL,NULL,'Kansas City',1,1024,NULL,'64124',NULL,1228,39.107304,-94.53985,0,NULL,NULL,NULL),(43,112,1,1,0,'857N Northpoint Way W',857,'N',NULL,'Northpoint','Way','W',NULL,NULL,NULL,NULL,'Cutchogue',1,1031,NULL,'11935',NULL,1228,41.012868,-72.4723,0,NULL,NULL,NULL),(44,48,1,1,0,'755W Jackson Path NW',755,'W',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Odenville',1,1000,NULL,'35120',NULL,1228,33.668341,-86.43641,0,NULL,NULL,NULL),(45,188,1,1,0,'634L Dowlen Dr NW',634,'L',NULL,'Dowlen','Dr','NW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76120',NULL,1228,32.762631,-97.17527,0,NULL,NULL,NULL),(46,90,1,1,0,'122H Northpoint Ln S',122,'H',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Pinon',1,1030,NULL,'88344',NULL,1228,32.663082,-105.36135,0,NULL,NULL,NULL),(47,139,1,1,0,'81N Lincoln Ln SE',81,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Medley',1,1047,NULL,'26734',NULL,1228,39.070601,-79.233536,0,NULL,NULL,NULL),(48,171,1,1,0,'795M Jackson St SW',795,'M',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Fountaintown',1,1013,NULL,'46130',NULL,1228,39.680058,-85.83363,0,NULL,NULL,NULL),(49,12,1,1,0,'234Q Beech Ln SE',234,'Q',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Williamson',1,1014,NULL,'50272',NULL,1228,41.08869,-93.25821,0,NULL,NULL,NULL),(50,134,1,1,0,'977M Beech Way W',977,'M',NULL,'Beech','Way','W',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,NULL),(51,8,1,1,0,'467Y Second Pl S',467,'Y',NULL,'Second','Pl','S',NULL,NULL,NULL,NULL,'Greenup',1,1016,NULL,'41144',NULL,1228,38.552472,-82.86514,0,NULL,NULL,NULL),(52,155,1,1,0,'793B Green Rd S',793,'B',NULL,'Green','Rd','S',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85750',NULL,1228,32.292078,-110.84384,0,NULL,NULL,NULL),(53,198,1,1,0,'51Y Main Ave SW',51,'Y',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stella',1,1026,NULL,'68442',NULL,1228,40.229899,-95.77517,0,NULL,NULL,NULL),(54,148,1,1,0,'805G Green Pl E',805,'G',NULL,'Green','Pl','E',NULL,NULL,NULL,NULL,'Holland',1,1024,NULL,'63853',NULL,1228,36.058612,-89.87038,0,NULL,NULL,NULL),(55,61,1,1,0,'345U Pine Pl SE',345,'U',NULL,'Pine','Pl','SE',NULL,NULL,NULL,NULL,'Glen Aubrey',1,1031,NULL,'13777',NULL,1228,42.254154,-76.01194,0,NULL,NULL,NULL),(56,179,1,1,0,'379V El Camino Way S',379,'V',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Montpelier',1,1023,NULL,'39754',NULL,1228,33.659271,-88.753976,0,NULL,NULL,NULL),(57,78,1,1,0,'651H Dowlen Path E',651,'H',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Natchitoches',1,1017,NULL,'71457',NULL,1228,31.751287,-93.09021,0,NULL,NULL,NULL),(58,172,1,1,0,'437R College Pl NW',437,'R',NULL,'College','Pl','NW',NULL,NULL,NULL,NULL,'Pinnacle',1,1032,NULL,'27043',NULL,1228,36.331502,-80.4417,0,NULL,NULL,NULL),(59,93,1,1,0,'154Z El Camino Way E',154,'Z',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Force',1,1037,NULL,'15841',NULL,1228,41.254727,-78.50411,0,NULL,NULL,NULL),(60,33,1,1,0,'439H Maple Ave S',439,'H',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Mount Prospect',1,1012,NULL,'60056',NULL,1228,42.065427,-87.93621,0,NULL,NULL,NULL),(61,36,1,1,0,'841G Beech Rd NE',841,'G',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Pahokee',1,1008,NULL,'33476',NULL,1228,26.817786,-80.65425,0,NULL,NULL,NULL),(62,180,1,1,0,'642U Northpoint St NE',642,'U',NULL,'Northpoint','St','NE',NULL,NULL,NULL,NULL,'Cordesville',1,1039,NULL,'29434',NULL,1228,33.119898,-79.85797,0,NULL,NULL,NULL),(63,170,1,1,0,'88I Cadell Dr SW',88,'I',NULL,'Cadell','Dr','SW',NULL,NULL,NULL,NULL,'Chase',1,1019,NULL,'21027',NULL,1228,39.438964,-76.592139,0,NULL,NULL,NULL),(64,46,3,1,0,'841U Caulder Pl NE',841,'U',NULL,'Caulder','Pl','NE',NULL,'Urgent',NULL,NULL,'Kanarraville',1,1043,NULL,'84742',NULL,1228,37.522753,-113.203633,0,NULL,NULL,NULL),(65,149,3,1,0,'100M Pine Pl W',100,'M',NULL,'Pine','Pl','W',NULL,'Attn: Accounting',NULL,NULL,'Douglasville',1,1009,NULL,'30133',NULL,1228,33.68966,-84.744595,0,NULL,NULL,NULL),(66,121,3,1,0,'871H Jackson Pl W',871,'H',NULL,'Jackson','Pl','W',NULL,'Payables Dept.',NULL,NULL,'East Chicago',1,1013,NULL,'46312',NULL,1228,41.639735,-87.46084,0,NULL,NULL,NULL),(67,55,2,0,0,'871H Jackson Pl W',871,'H',NULL,'Jackson','Pl','W',NULL,'Payables Dept.',NULL,NULL,'East Chicago',1,1013,NULL,'46312',NULL,1228,41.639735,-87.46084,0,NULL,NULL,66),(68,110,3,1,0,'496P Lincoln Pl SE',496,'P',NULL,'Lincoln','Pl','SE',NULL,'Donor Relations',NULL,NULL,'Big Spring',1,1016,NULL,'40106',NULL,1228,37.788538,-86.231194,0,NULL,NULL,NULL),(69,21,2,1,0,'496P Lincoln Pl SE',496,'P',NULL,'Lincoln','Pl','SE',NULL,'Donor Relations',NULL,NULL,'Big Spring',1,1016,NULL,'40106',NULL,1228,37.788538,-86.231194,0,NULL,NULL,68),(70,7,3,1,0,'270U Lincoln Dr SE',270,'U',NULL,'Lincoln','Dr','SE',NULL,'Attn: Development',NULL,NULL,'Dysart',1,1037,NULL,'16636',NULL,1228,40.612642,-78.51947,0,NULL,NULL,NULL),(71,57,2,0,0,'270U Lincoln Dr SE',270,'U',NULL,'Lincoln','Dr','SE',NULL,'Attn: Development',NULL,NULL,'Dysart',1,1037,NULL,'16636',NULL,1228,40.612642,-78.51947,0,NULL,NULL,70),(72,153,3,1,0,'771T Beech Ave S',771,'T',NULL,'Beech','Ave','S',NULL,'Attn: Development',NULL,NULL,'Mount Vernon',1,1031,NULL,'10552',NULL,1228,40.924195,-73.82614,0,NULL,NULL,NULL),(73,135,2,1,0,'771T Beech Ave S',771,'T',NULL,'Beech','Ave','S',NULL,'Attn: Development',NULL,NULL,'Mount Vernon',1,1031,NULL,'10552',NULL,1228,40.924195,-73.82614,0,NULL,NULL,72),(74,113,3,1,0,'7F Maple Dr W',7,'F',NULL,'Maple','Dr','W',NULL,'Community Relations',NULL,NULL,'City Of Industry',1,1004,NULL,'91714',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(75,182,2,1,0,'7F Maple Dr W',7,'F',NULL,'Maple','Dr','W',NULL,'Community Relations',NULL,NULL,'City Of Industry',1,1004,NULL,'91714',NULL,1228,33.786594,-118.298662,0,NULL,NULL,74),(76,28,3,1,0,'169C El Camino St NW',169,'C',NULL,'El Camino','St','NW',NULL,'Donor Relations',NULL,NULL,'Colon',1,1021,NULL,'49040',NULL,1228,41.960856,-85.33059,0,NULL,NULL,NULL),(77,142,3,1,0,'908I States Way NW',908,'I',NULL,'States','Way','NW',NULL,'Subscriptions Dept',NULL,NULL,'Eau Claire',1,1048,NULL,'54703',NULL,1228,44.82961,-91.50521,0,NULL,NULL,NULL),(78,193,3,1,0,'647R College Rd NE',647,'R',NULL,'College','Rd','NE',NULL,'Mailstop 101',NULL,NULL,'Bridgeport',1,1021,NULL,'48722',NULL,1228,43.346632,-83.84636,0,NULL,NULL,NULL),(79,40,2,0,0,'647R College Rd NE',647,'R',NULL,'College','Rd','NE',NULL,'Mailstop 101',NULL,NULL,'Bridgeport',1,1021,NULL,'48722',NULL,1228,43.346632,-83.84636,0,NULL,NULL,78),(80,191,3,1,0,'135I Second Way N',135,'I',NULL,'Second','Way','N',NULL,'Cuffe Parade',NULL,NULL,'Annandale',1,1045,NULL,'22003',NULL,1228,38.830345,-77.21387,0,NULL,NULL,NULL),(81,66,2,1,0,'135I Second Way N',135,'I',NULL,'Second','Way','N',NULL,'Cuffe Parade',NULL,NULL,'Annandale',1,1045,NULL,'22003',NULL,1228,38.830345,-77.21387,0,NULL,NULL,80),(82,104,3,1,0,'868G Pine Dr NE',868,'G',NULL,'Pine','Dr','NE',NULL,'Churchgate',NULL,NULL,'Indio',1,1004,NULL,'92201',NULL,1228,33.715271,-116.235,0,NULL,NULL,NULL),(83,82,2,1,0,'868G Pine Dr NE',868,'G',NULL,'Pine','Dr','NE',NULL,'Churchgate',NULL,NULL,'Indio',1,1004,NULL,'92201',NULL,1228,33.715271,-116.235,0,NULL,NULL,82),(84,190,3,1,0,'759F Beech Dr SW',759,'F',NULL,'Beech','Dr','SW',NULL,'Payables Dept.',NULL,NULL,'Yukon',1,1035,NULL,'73085',NULL,1228,35.489527,-97.750009,0,NULL,NULL,NULL),(85,122,2,0,0,'759F Beech Dr SW',759,'F',NULL,'Beech','Dr','SW',NULL,'Payables Dept.',NULL,NULL,'Yukon',1,1035,NULL,'73085',NULL,1228,35.489527,-97.750009,0,NULL,NULL,84),(86,53,3,1,0,'20H States Way NW',20,'H',NULL,'States','Way','NW',NULL,'Community Relations',NULL,NULL,'Del Rey',1,1004,NULL,'93616',NULL,1228,36.657266,-119.59309,0,NULL,NULL,NULL),(87,22,3,1,0,'6Z Jackson Path SW',6,'Z',NULL,'Jackson','Path','SW',NULL,'Cuffe Parade',NULL,NULL,'Warba',1,1022,NULL,'55793',NULL,1228,47.116453,-93.26881,0,NULL,NULL,NULL),(88,97,3,1,0,'537H Woodbridge Path E',537,'H',NULL,'Woodbridge','Path','E',NULL,'Urgent',NULL,NULL,'Bethesda',1,1034,NULL,'43719',NULL,1228,40.009383,-81.0763,0,NULL,NULL,NULL),(89,150,2,0,0,'537H Woodbridge Path E',537,'H',NULL,'Woodbridge','Path','E',NULL,'Urgent',NULL,NULL,'Bethesda',1,1034,NULL,'43719',NULL,1228,40.009383,-81.0763,0,NULL,NULL,88),(90,71,3,1,0,'711W Beech Ave NW',711,'W',NULL,'Beech','Ave','NW',NULL,'Disbursements',NULL,NULL,'Chriesman',1,1042,NULL,'77838',NULL,1228,30.513118,-96.618047,0,NULL,NULL,NULL),(91,185,2,1,0,'711W Beech Ave NW',711,'W',NULL,'Beech','Ave','NW',NULL,'Disbursements',NULL,NULL,'Chriesman',1,1042,NULL,'77838',NULL,1228,30.513118,-96.618047,0,NULL,NULL,90),(92,118,3,1,0,'975S Martin Luther King Dr S',975,'S',NULL,'Martin Luther King','Dr','S',NULL,'Subscriptions Dept',NULL,NULL,'Merced',1,1004,NULL,'95340',NULL,1228,37.294648,-120.47474,0,NULL,NULL,NULL),(93,159,3,1,0,'978P Lincoln Ave SW',978,'P',NULL,'Lincoln','Ave','SW',NULL,'Subscriptions Dept',NULL,NULL,'Saint John',1,1046,NULL,'99171',NULL,1228,47.11653,-117.63938,0,NULL,NULL,NULL),(94,80,2,1,0,'978P Lincoln Ave SW',978,'P',NULL,'Lincoln','Ave','SW',NULL,'Subscriptions Dept',NULL,NULL,'Saint John',1,1046,NULL,'99171',NULL,1228,47.11653,-117.63938,0,NULL,NULL,93),(95,31,3,1,0,'548V College Way NW',548,'V',NULL,'College','Way','NW',NULL,'c/o PO Plus',NULL,NULL,'Los Osos',1,1004,NULL,'93412',NULL,1228,35.347065,-120.455345,0,NULL,NULL,NULL),(96,59,2,0,0,'548V College Way NW',548,'V',NULL,'College','Way','NW',NULL,'c/o PO Plus',NULL,NULL,'Los Osos',1,1004,NULL,'93412',NULL,1228,35.347065,-120.455345,0,NULL,NULL,95),(97,168,1,1,0,'755W Jackson Path NW',755,'W',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Odenville',1,1000,NULL,'35120',NULL,1228,33.668341,-86.43641,0,NULL,NULL,44),(98,146,1,1,0,'755W Jackson Path NW',755,'W',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Odenville',1,1000,NULL,'35120',NULL,1228,33.668341,-86.43641,0,NULL,NULL,44),(99,132,1,1,0,'755W Jackson Path NW',755,'W',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Odenville',1,1000,NULL,'35120',NULL,1228,33.668341,-86.43641,0,NULL,NULL,44),(100,24,1,1,0,'755W Jackson Path NW',755,'W',NULL,'Jackson','Path','NW',NULL,NULL,NULL,NULL,'Odenville',1,1000,NULL,'35120',NULL,1228,33.668341,-86.43641,0,NULL,NULL,44),(101,6,1,1,0,'634L Dowlen Dr NW',634,'L',NULL,'Dowlen','Dr','NW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76120',NULL,1228,32.762631,-97.17527,0,NULL,NULL,45),(102,76,1,1,0,'634L Dowlen Dr NW',634,'L',NULL,'Dowlen','Dr','NW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76120',NULL,1228,32.762631,-97.17527,0,NULL,NULL,45),(103,42,1,1,0,'634L Dowlen Dr NW',634,'L',NULL,'Dowlen','Dr','NW',NULL,NULL,NULL,NULL,'Fort Worth',1,1042,NULL,'76120',NULL,1228,32.762631,-97.17527,0,NULL,NULL,45),(104,200,1,1,0,'204I Woodbridge St W',204,'I',NULL,'Woodbridge','St','W',NULL,NULL,NULL,NULL,'Vero Beach',1,1008,NULL,'32966',NULL,1228,27.645377,-80.51468,0,NULL,NULL,NULL),(105,41,1,1,0,'122H Northpoint Ln S',122,'H',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Pinon',1,1030,NULL,'88344',NULL,1228,32.663082,-105.36135,0,NULL,NULL,46),(106,89,1,1,0,'122H Northpoint Ln S',122,'H',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Pinon',1,1030,NULL,'88344',NULL,1228,32.663082,-105.36135,0,NULL,NULL,46),(107,161,1,1,0,'122H Northpoint Ln S',122,'H',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Pinon',1,1030,NULL,'88344',NULL,1228,32.663082,-105.36135,0,NULL,NULL,46),(108,64,1,1,0,'122H Northpoint Ln S',122,'H',NULL,'Northpoint','Ln','S',NULL,NULL,NULL,NULL,'Pinon',1,1030,NULL,'88344',NULL,1228,32.663082,-105.36135,0,NULL,NULL,46),(109,30,1,1,0,'81N Lincoln Ln SE',81,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Medley',1,1047,NULL,'26734',NULL,1228,39.070601,-79.233536,0,NULL,NULL,47),(110,3,1,1,0,'81N Lincoln Ln SE',81,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Medley',1,1047,NULL,'26734',NULL,1228,39.070601,-79.233536,0,NULL,NULL,47),(111,34,1,1,0,'81N Lincoln Ln SE',81,'N',NULL,'Lincoln','Ln','SE',NULL,NULL,NULL,NULL,'Medley',1,1047,NULL,'26734',NULL,1228,39.070601,-79.233536,0,NULL,NULL,47),(112,138,1,1,0,'191L Jackson Dr E',191,'L',NULL,'Jackson','Dr','E',NULL,NULL,NULL,NULL,'Port Huron',1,1021,NULL,'48060',NULL,1228,42.978974,-82.44402,0,NULL,NULL,NULL),(113,152,1,1,0,'795M Jackson St SW',795,'M',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Fountaintown',1,1013,NULL,'46130',NULL,1228,39.680058,-85.83363,0,NULL,NULL,48),(114,94,1,1,0,'795M Jackson St SW',795,'M',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Fountaintown',1,1013,NULL,'46130',NULL,1228,39.680058,-85.83363,0,NULL,NULL,48),(115,194,1,1,0,'795M Jackson St SW',795,'M',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Fountaintown',1,1013,NULL,'46130',NULL,1228,39.680058,-85.83363,0,NULL,NULL,48),(116,56,1,1,0,'795M Jackson St SW',795,'M',NULL,'Jackson','St','SW',NULL,NULL,NULL,NULL,'Fountaintown',1,1013,NULL,'46130',NULL,1228,39.680058,-85.83363,0,NULL,NULL,48),(117,167,1,1,0,'234Q Beech Ln SE',234,'Q',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Williamson',1,1014,NULL,'50272',NULL,1228,41.08869,-93.25821,0,NULL,NULL,49),(118,187,1,1,0,'234Q Beech Ln SE',234,'Q',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Williamson',1,1014,NULL,'50272',NULL,1228,41.08869,-93.25821,0,NULL,NULL,49),(119,45,1,1,0,'234Q Beech Ln SE',234,'Q',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Williamson',1,1014,NULL,'50272',NULL,1228,41.08869,-93.25821,0,NULL,NULL,49),(120,156,1,1,0,'234Q Beech Ln SE',234,'Q',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Williamson',1,1014,NULL,'50272',NULL,1228,41.08869,-93.25821,0,NULL,NULL,49),(121,124,1,1,0,'977M Beech Way W',977,'M',NULL,'Beech','Way','W',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,50),(122,67,1,1,0,'977M Beech Way W',977,'M',NULL,'Beech','Way','W',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,50),(123,160,1,1,0,'977M Beech Way W',977,'M',NULL,'Beech','Way','W',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,50),(124,20,1,1,0,'977M Beech Way W',977,'M',NULL,'Beech','Way','W',NULL,NULL,NULL,NULL,'Easton',1,1020,NULL,'02735',NULL,1228,41.999346,-71.113582,0,NULL,NULL,50),(125,119,1,1,0,'467Y Second Pl S',467,'Y',NULL,'Second','Pl','S',NULL,NULL,NULL,NULL,'Greenup',1,1016,NULL,'41144',NULL,1228,38.552472,-82.86514,0,NULL,NULL,51),(126,44,1,1,0,'467Y Second Pl S',467,'Y',NULL,'Second','Pl','S',NULL,NULL,NULL,NULL,'Greenup',1,1016,NULL,'41144',NULL,1228,38.552472,-82.86514,0,NULL,NULL,51),(127,2,1,1,0,'467Y Second Pl S',467,'Y',NULL,'Second','Pl','S',NULL,NULL,NULL,NULL,'Greenup',1,1016,NULL,'41144',NULL,1228,38.552472,-82.86514,0,NULL,NULL,51),(128,126,1,1,0,'467Y Second Pl S',467,'Y',NULL,'Second','Pl','S',NULL,NULL,NULL,NULL,'Greenup',1,1016,NULL,'41144',NULL,1228,38.552472,-82.86514,0,NULL,NULL,51),(129,26,1,1,0,'793B Green Rd S',793,'B',NULL,'Green','Rd','S',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85750',NULL,1228,32.292078,-110.84384,0,NULL,NULL,52),(130,133,1,1,0,'793B Green Rd S',793,'B',NULL,'Green','Rd','S',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85750',NULL,1228,32.292078,-110.84384,0,NULL,NULL,52),(131,195,1,1,0,'793B Green Rd S',793,'B',NULL,'Green','Rd','S',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85750',NULL,1228,32.292078,-110.84384,0,NULL,NULL,52),(132,85,1,1,0,'29G El Camino Path SE',29,'G',NULL,'El Camino','Path','SE',NULL,NULL,NULL,NULL,'Hagerstown',1,1019,NULL,'21746',NULL,1228,39.563787,-77.720642,0,NULL,NULL,NULL),(133,145,1,1,0,'51Y Main Ave SW',51,'Y',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stella',1,1026,NULL,'68442',NULL,1228,40.229899,-95.77517,0,NULL,NULL,53),(134,114,1,1,0,'51Y Main Ave SW',51,'Y',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stella',1,1026,NULL,'68442',NULL,1228,40.229899,-95.77517,0,NULL,NULL,53),(135,147,1,1,0,'51Y Main Ave SW',51,'Y',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stella',1,1026,NULL,'68442',NULL,1228,40.229899,-95.77517,0,NULL,NULL,53),(136,92,1,1,0,'51Y Main Ave SW',51,'Y',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stella',1,1026,NULL,'68442',NULL,1228,40.229899,-95.77517,0,NULL,NULL,53),(137,66,1,0,0,'805G Green Pl E',805,'G',NULL,'Green','Pl','E',NULL,NULL,NULL,NULL,'Holland',1,1024,NULL,'63853',NULL,1228,36.058612,-89.87038,0,NULL,NULL,54),(138,107,1,1,0,'805G Green Pl E',805,'G',NULL,'Green','Pl','E',NULL,NULL,NULL,NULL,'Holland',1,1024,NULL,'63853',NULL,1228,36.058612,-89.87038,0,NULL,NULL,54),(139,81,1,1,0,'805G Green Pl E',805,'G',NULL,'Green','Pl','E',NULL,NULL,NULL,NULL,'Holland',1,1024,NULL,'63853',NULL,1228,36.058612,-89.87038,0,NULL,NULL,54),(140,82,1,0,0,'805G Green Pl E',805,'G',NULL,'Green','Pl','E',NULL,NULL,NULL,NULL,'Holland',1,1024,NULL,'63853',NULL,1228,36.058612,-89.87038,0,NULL,NULL,54),(141,79,1,1,0,'345U Pine Pl SE',345,'U',NULL,'Pine','Pl','SE',NULL,NULL,NULL,NULL,'Glen Aubrey',1,1031,NULL,'13777',NULL,1228,42.254154,-76.01194,0,NULL,NULL,55),(142,123,1,1,0,'345U Pine Pl SE',345,'U',NULL,'Pine','Pl','SE',NULL,NULL,NULL,NULL,'Glen Aubrey',1,1031,NULL,'13777',NULL,1228,42.254154,-76.01194,0,NULL,NULL,55),(143,77,1,1,0,'345U Pine Pl SE',345,'U',NULL,'Pine','Pl','SE',NULL,NULL,NULL,NULL,'Glen Aubrey',1,1031,NULL,'13777',NULL,1228,42.254154,-76.01194,0,NULL,NULL,55),(144,88,1,1,0,'345U Pine Pl SE',345,'U',NULL,'Pine','Pl','SE',NULL,NULL,NULL,NULL,'Glen Aubrey',1,1031,NULL,'13777',NULL,1228,42.254154,-76.01194,0,NULL,NULL,55),(145,157,1,1,0,'379V El Camino Way S',379,'V',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Montpelier',1,1023,NULL,'39754',NULL,1228,33.659271,-88.753976,0,NULL,NULL,56),(146,125,1,1,0,'379V El Camino Way S',379,'V',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Montpelier',1,1023,NULL,'39754',NULL,1228,33.659271,-88.753976,0,NULL,NULL,56),(147,163,1,1,0,'379V El Camino Way S',379,'V',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Montpelier',1,1023,NULL,'39754',NULL,1228,33.659271,-88.753976,0,NULL,NULL,56),(148,199,1,1,0,'379V El Camino Way S',379,'V',NULL,'El Camino','Way','S',NULL,NULL,NULL,NULL,'Montpelier',1,1023,NULL,'39754',NULL,1228,33.659271,-88.753976,0,NULL,NULL,56),(149,197,1,1,0,'651H Dowlen Path E',651,'H',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Natchitoches',1,1017,NULL,'71457',NULL,1228,31.751287,-93.09021,0,NULL,NULL,57),(150,35,1,1,0,'651H Dowlen Path E',651,'H',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Natchitoches',1,1017,NULL,'71457',NULL,1228,31.751287,-93.09021,0,NULL,NULL,57),(151,69,1,1,0,'651H Dowlen Path E',651,'H',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Natchitoches',1,1017,NULL,'71457',NULL,1228,31.751287,-93.09021,0,NULL,NULL,57),(152,60,1,1,0,'651H Dowlen Path E',651,'H',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Natchitoches',1,1017,NULL,'71457',NULL,1228,31.751287,-93.09021,0,NULL,NULL,57),(153,62,1,1,0,'437R College Pl NW',437,'R',NULL,'College','Pl','NW',NULL,NULL,NULL,NULL,'Pinnacle',1,1032,NULL,'27043',NULL,1228,36.331502,-80.4417,0,NULL,NULL,58),(154,84,1,1,0,'437R College Pl NW',437,'R',NULL,'College','Pl','NW',NULL,NULL,NULL,NULL,'Pinnacle',1,1032,NULL,'27043',NULL,1228,36.331502,-80.4417,0,NULL,NULL,58),(155,70,1,1,0,'437R College Pl NW',437,'R',NULL,'College','Pl','NW',NULL,NULL,NULL,NULL,'Pinnacle',1,1032,NULL,'27043',NULL,1228,36.331502,-80.4417,0,NULL,NULL,58),(156,87,1,1,0,'485M States Way NE',485,'M',NULL,'States','Way','NE',NULL,NULL,NULL,NULL,'Pender',1,1026,NULL,'68047',NULL,1228,42.112028,-96.73093,0,NULL,NULL,NULL),(157,175,1,1,0,'154Z El Camino Way E',154,'Z',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Force',1,1037,NULL,'15841',NULL,1228,41.254727,-78.50411,0,NULL,NULL,59),(158,47,1,1,0,'154Z El Camino Way E',154,'Z',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Force',1,1037,NULL,'15841',NULL,1228,41.254727,-78.50411,0,NULL,NULL,59),(159,183,1,1,0,'154Z El Camino Way E',154,'Z',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Force',1,1037,NULL,'15841',NULL,1228,41.254727,-78.50411,0,NULL,NULL,59),(160,86,1,1,0,'791W Northpoint Blvd N',791,'W',NULL,'Northpoint','Blvd','N',NULL,NULL,NULL,NULL,'Elk Creek',1,1024,NULL,'65464',NULL,1228,37.191845,-91.91627,0,NULL,NULL,NULL),(161,14,1,1,0,'439H Maple Ave S',439,'H',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Mount Prospect',1,1012,NULL,'60056',NULL,1228,42.065427,-87.93621,0,NULL,NULL,60),(162,50,1,1,0,'439H Maple Ave S',439,'H',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Mount Prospect',1,1012,NULL,'60056',NULL,1228,42.065427,-87.93621,0,NULL,NULL,60),(163,177,1,1,0,'439H Maple Ave S',439,'H',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Mount Prospect',1,1012,NULL,'60056',NULL,1228,42.065427,-87.93621,0,NULL,NULL,60),(164,38,1,1,0,'439H Maple Ave S',439,'H',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Mount Prospect',1,1012,NULL,'60056',NULL,1228,42.065427,-87.93621,0,NULL,NULL,60),(165,115,1,1,0,'841G Beech Rd NE',841,'G',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Pahokee',1,1008,NULL,'33476',NULL,1228,26.817786,-80.65425,0,NULL,NULL,61),(166,15,1,1,0,'841G Beech Rd NE',841,'G',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Pahokee',1,1008,NULL,'33476',NULL,1228,26.817786,-80.65425,0,NULL,NULL,61),(167,154,1,1,0,'841G Beech Rd NE',841,'G',NULL,'Beech','Rd','NE',NULL,NULL,NULL,NULL,'Pahokee',1,1008,NULL,'33476',NULL,1228,26.817786,-80.65425,0,NULL,NULL,61),(168,174,1,1,0,'594P Jackson Blvd NW',594,'P',NULL,'Jackson','Blvd','NW',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32836',NULL,1228,28.401151,-81.52488,0,NULL,NULL,NULL),(169,116,1,1,0,'642U Northpoint St NE',642,'U',NULL,'Northpoint','St','NE',NULL,NULL,NULL,NULL,'Cordesville',1,1039,NULL,'29434',NULL,1228,33.119898,-79.85797,0,NULL,NULL,62),(170,135,1,0,0,'642U Northpoint St NE',642,'U',NULL,'Northpoint','St','NE',NULL,NULL,NULL,NULL,'Cordesville',1,1039,NULL,'29434',NULL,1228,33.119898,-79.85797,0,NULL,NULL,62),(171,54,1,1,0,'642U Northpoint St NE',642,'U',NULL,'Northpoint','St','NE',NULL,NULL,NULL,NULL,'Cordesville',1,1039,NULL,'29434',NULL,1228,33.119898,-79.85797,0,NULL,NULL,62),(172,18,1,1,0,'25I States St S',25,'I',NULL,'States','St','S',NULL,NULL,NULL,NULL,'Jacumba',1,1004,NULL,'91934',NULL,1228,32.624424,-116.17025,0,NULL,NULL,NULL),(173,5,1,1,0,'88I Cadell Dr SW',88,'I',NULL,'Cadell','Dr','SW',NULL,NULL,NULL,NULL,'Chase',1,1019,NULL,'21027',NULL,1228,39.438964,-76.592139,0,NULL,NULL,63),(174,39,1,1,0,'88I Cadell Dr SW',88,'I',NULL,'Cadell','Dr','SW',NULL,NULL,NULL,NULL,'Chase',1,1019,NULL,'21027',NULL,1228,39.438964,-76.592139,0,NULL,NULL,63),(175,17,1,1,0,'88I Cadell Dr SW',88,'I',NULL,'Cadell','Dr','SW',NULL,NULL,NULL,NULL,'Chase',1,1019,NULL,'21027',NULL,1228,39.438964,-76.592139,0,NULL,NULL,63),(176,136,1,1,0,'88I Cadell Dr SW',88,'I',NULL,'Cadell','Dr','SW',NULL,NULL,NULL,NULL,'Chase',1,1019,NULL,'21027',NULL,1228,39.438964,-76.592139,0,NULL,NULL,63),(177,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),(178,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),(179,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; @@ -208,7 +208,7 @@ 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,'2019-11-28 19:55:25'),(2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'barkleym@spamalot.org','barkleym@spamalot.org',NULL,NULL,NULL,'5',NULL,'Both','2674686280',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear barkleym@spamalot.org',1,NULL,'Dear barkleym@spamalot.org',1,NULL,'barkleym@spamalot.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Daren','Daren Smith',NULL,NULL,NULL,NULL,NULL,'Both','3966682227',NULL,'Sample Data','Daren','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Smith',NULL,2,NULL,0,NULL,NULL,NULL,'Alma Poetry Center',NULL,NULL,83,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(4,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Russell','Russell Wagner II',NULL,NULL,NULL,NULL,NULL,'Both','3304810540',NULL,'Sample Data','Russell','','Wagner',NULL,3,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Wagner II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(5,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Smith family','Smith family',NULL,NULL,NULL,NULL,NULL,'Both','4082772645',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith family',5,NULL,'Dear Smith family',2,NULL,'Smith family',NULL,NULL,NULL,0,NULL,'Smith family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(6,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'York Haven Peace Academy','York Haven Peace Academy',NULL,NULL,NULL,NULL,NULL,'Both','2723172013',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'York Haven Peace Academy',NULL,NULL,NULL,0,NULL,NULL,188,'York Haven Peace Academy',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(7,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson-Roberts family','Jameson-Roberts family',NULL,NULL,NULL,NULL,NULL,'Both','2464959924',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson-Roberts family',5,NULL,'Dear Jameson-Roberts family',2,NULL,'Jameson-Roberts family',NULL,NULL,NULL,0,NULL,'Jameson-Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(8,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Carlos','Carlos Ivanov',NULL,NULL,NULL,'3',NULL,'Both','3509440467',NULL,'Sample Data','Carlos','G','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Ivanov',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(9,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Samson, Beula','Ms. Beula Samson',NULL,NULL,NULL,NULL,NULL,'Both','1224450330',NULL,'Sample Data','Beula','R','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Ms. Beula Samson',NULL,NULL,'1996-07-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(10,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Redmon Health Trust','Redmon Health Trust',NULL,NULL,NULL,'2',NULL,'Both','674976725',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Redmon Health Trust',NULL,NULL,NULL,0,NULL,NULL,179,'Redmon Health Trust',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(11,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Montana Advocacy Alliance','Montana Advocacy Alliance',NULL,NULL,NULL,'2',NULL,'Both','368613395',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Montana Advocacy Alliance',NULL,NULL,NULL,0,NULL,NULL,NULL,'Montana Advocacy Alliance',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Russell','Russell Müller Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1078913970',NULL,'Sample Data','Russell','X','Müller',NULL,1,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Müller Jr.',NULL,NULL,'1976-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(13,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Angelika','Angelika Samuels',NULL,NULL,NULL,'5',NULL,'Both','3920942088',NULL,'Sample Data','Angelika','B','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Samuels',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(14,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Adams, Rebekah','Rebekah Adams',NULL,NULL,NULL,'3',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,1,'1960-12-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Shauna','Shauna Müller',NULL,NULL,NULL,NULL,NULL,'Both','2927518438',NULL,'Sample Data','Shauna','S','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Müller',NULL,1,'2004-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(16,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Main Empowerment Alliance','Main Empowerment Alliance',NULL,NULL,NULL,NULL,NULL,'Both','3950181096',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Main Empowerment Alliance',NULL,NULL,NULL,0,NULL,NULL,78,'Main Empowerment Alliance',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Bryon','Bryon Bachman',NULL,NULL,NULL,NULL,NULL,'Both','1112110435',NULL,'Sample Data','Bryon','E','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Bachman',NULL,2,'1997-02-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(18,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Nicole','Nicole Prentice',NULL,NULL,NULL,NULL,NULL,'Both','138339105',NULL,'Sample Data','Nicole','I','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Prentice',NULL,NULL,'1975-12-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Troy','Troy Parker Sr.',NULL,NULL,NULL,'4',NULL,'Both','1888190696',NULL,'Sample Data','Troy','L','Parker',NULL,2,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Parker Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(20,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,'1',NULL,'Both','333421926',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson family',5,NULL,'Dear Samson family',2,NULL,'Samson family',NULL,NULL,NULL,0,NULL,'Samson family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(21,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,NULL,NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(22,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Juliann','Juliann Prentice',NULL,NULL,NULL,'4',NULL,'Both','4163234057',NULL,'Sample Data','Juliann','D','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Prentice',NULL,NULL,'1978-03-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jina','Jina Lee',NULL,NULL,NULL,'2',NULL,'Both','1558289528',NULL,'Sample Data','Jina','Q','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Lee',NULL,1,'1982-05-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(24,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Robertson, Juliann','Ms. Juliann Robertson',NULL,NULL,NULL,NULL,NULL,'Both','2263807778',NULL,'Sample Data','Juliann','V','Robertson',2,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Ms. Juliann Robertson',NULL,1,'1982-04-28',0,NULL,NULL,NULL,'Ohio Advocacy Initiative',NULL,NULL,56,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Ivey','Ivey Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3529937009',NULL,'Sample Data','Ivey','X','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Cruz',NULL,1,'1962-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(26,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Smith, Shad','Shad Smith III',NULL,NULL,NULL,NULL,NULL,'Both','3601530916',NULL,'Sample Data','Shad','K','Smith',NULL,4,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Smith III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(27,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Fredericksburg Food Fund','Fredericksburg Food Fund',NULL,NULL,NULL,NULL,NULL,'Both','130909820',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Fredericksburg Food Fund',NULL,NULL,NULL,0,NULL,NULL,58,'Fredericksburg Food Fund',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Roland','Roland Wagner',NULL,NULL,NULL,NULL,NULL,'Both','1173293758',NULL,'Sample Data','Roland','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Wagner',NULL,2,'2005-05-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(29,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Sisseton Literacy Initiative','Sisseton Literacy Initiative',NULL,NULL,NULL,'5',NULL,'Both','2841707761',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Sisseton Literacy Initiative',NULL,NULL,NULL,0,NULL,NULL,63,'Sisseton Literacy Initiative',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Delana','Delana Smith',NULL,NULL,NULL,NULL,NULL,'Both','1662574257',NULL,'Sample Data','Delana','Q','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Smith',NULL,NULL,'1988-02-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(31,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Smith-Zope, Andrew','Andrew Smith-Zope III',NULL,NULL,NULL,'5',NULL,'Both','406922462',NULL,'Sample Data','Andrew','V','Smith-Zope',NULL,4,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Smith-Zope III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(32,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson, Junko','Junko Robertson',NULL,NULL,NULL,NULL,NULL,'Both','1317703823',NULL,'Sample Data','Junko','Q','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Robertson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(33,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Brent','Brent DÃaz Sr.',NULL,NULL,NULL,'3',NULL,'Both','1416320616',NULL,'Sample Data','Brent','J','DÃaz',NULL,2,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent DÃaz Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(34,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Smith family','Bachman-Smith family',NULL,NULL,NULL,NULL,NULL,'Both','610277100',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman-Smith family',5,NULL,'Dear Bachman-Smith family',2,NULL,'Bachman-Smith family',NULL,NULL,NULL,0,NULL,'Bachman-Smith family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Magan','Magan Ivanov',NULL,NULL,NULL,'5',NULL,'Both','4273390544',NULL,'Sample Data','Magan','','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Ivanov',NULL,1,'1988-09-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson-Roberts, Ashley','Ashley Jameson-Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3246849580',NULL,'Sample Data','Ashley','','Jameson-Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Jameson-Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(37,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Junko','Junko Jones',NULL,NULL,NULL,NULL,NULL,'Both','3254186828',NULL,'Sample Data','Junko','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bay Sustainability Partners',NULL,NULL,38,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(38,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bay Sustainability Partners','Bay Sustainability Partners',NULL,NULL,NULL,NULL,NULL,'Both','3082386049',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bay Sustainability Partners',NULL,NULL,NULL,0,NULL,NULL,37,'Bay Sustainability Partners',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(39,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González, Angelika','Ms. Angelika González',NULL,NULL,NULL,'5',NULL,'Both','2364901887',NULL,'Sample Data','Angelika','','González',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika González',NULL,1,'1960-10-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(40,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Merrie','Merrie Müller',NULL,NULL,NULL,NULL,NULL,'Both','1627224470',NULL,'Sample Data','Merrie','S','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Müller',NULL,1,'2004-07-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Brent','Brent Smith',NULL,NULL,NULL,NULL,NULL,'Both','645749990',NULL,'Sample Data','Brent','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Smith',NULL,NULL,'2006-10-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(42,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Sherman','Dr. Sherman Terrell III',NULL,NULL,NULL,'4',NULL,'Both','470401788',NULL,'Sample Data','Sherman','Z','Terrell',4,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Terrell III',NULL,2,'1940-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(43,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Shad','Dr. Shad Parker II',NULL,NULL,NULL,NULL,NULL,'Both','23650208',NULL,'Sample Data','Shad','E','Parker',4,3,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Dr. Shad Parker II',NULL,2,'1955-05-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(44,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'Samson family','Samson family',NULL,NULL,NULL,NULL,NULL,'Both','333421926',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson family',5,NULL,'Dear Samson family',2,NULL,'Samson family',NULL,NULL,NULL,0,NULL,'Samson family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(45,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Yadav-Olsen, Brigette','Dr. Brigette Yadav-Olsen',NULL,NULL,NULL,NULL,NULL,'Both','1044978853',NULL,'Sample Data','Brigette','','Yadav-Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Dr. Brigette Yadav-Olsen',NULL,1,'1986-09-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(46,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Grant, Sanford','Sanford Grant',NULL,NULL,NULL,'3',NULL,'Both','27540077',NULL,'Sample Data','Sanford','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Grant',NULL,NULL,'1998-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(47,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Allan','Allan Robertson',NULL,NULL,NULL,'5',NULL,'Both','2586293753',NULL,'Sample Data','Allan','','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Robertson',NULL,2,'1956-03-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(48,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Rolando','Rolando Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3419064809',NULL,'Sample Data','Rolando','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Barkley',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(49,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'mllera71@notmail.net','mllera71@notmail.net',NULL,NULL,NULL,'3',NULL,'Both','830069502',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mllera71@notmail.net',1,NULL,'Dear mllera71@notmail.net',1,NULL,'mllera71@notmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(50,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Lou','Lou Roberts II',NULL,NULL,NULL,'5',NULL,'Both','3476194906',NULL,'Sample Data','Lou','X','Roberts',NULL,3,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Roberts II',NULL,2,'1998-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(51,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'4',NULL,'Both','2888062109',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley family',5,NULL,'Dear Barkley family',2,NULL,'Barkley family',NULL,NULL,NULL,0,NULL,'Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(52,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Yadav, Billy','Dr. Billy Yadav III',NULL,NULL,NULL,'5',NULL,'Both','2022079737',NULL,'Sample Data','Billy','B','Yadav',4,4,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Yadav III',NULL,2,'1996-11-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Princess','Princess Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1309472467',NULL,'Sample Data','Princess','E','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Wilson',NULL,NULL,'1953-01-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Sonny','Mr. Sonny Terry Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2037695520',NULL,'Sample Data','Sonny','T','Terry',3,2,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Mr. Sonny Terry Sr.',NULL,2,'1987-05-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(55,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Josefa','Josefa Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2303939746',NULL,'Sample Data','Josefa','X','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Deforest',NULL,1,'2003-01-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(56,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Ohio Advocacy Initiative','Ohio Advocacy Initiative',NULL,NULL,NULL,NULL,NULL,'Both','961789765',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Ohio Advocacy Initiative',NULL,NULL,NULL,0,NULL,NULL,24,'Ohio Advocacy Initiative',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(57,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Brittney','Brittney Jones',NULL,NULL,NULL,'2',NULL,'Both','4034608446',NULL,'Sample Data','Brittney','O','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Jones',NULL,NULL,'1931-08-15',1,'2019-03-28',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(58,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Miguel','Miguel Samson III',NULL,NULL,NULL,'5',NULL,'Both','3523304734',NULL,'Sample Data','Miguel','','Samson',NULL,4,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Samson III',NULL,NULL,'1992-03-16',0,NULL,NULL,NULL,'Fredericksburg Food Fund',NULL,NULL,27,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(59,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jameson, Carylon','Carylon Jameson',NULL,NULL,NULL,'3',NULL,'Both','232914878',NULL,'Sample Data','Carylon','J','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Jameson',NULL,1,'2008-01-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Felisha','Felisha Cruz',NULL,NULL,NULL,'3',NULL,'Both','2429011594',NULL,'Sample Data','Felisha','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Cruz',NULL,1,'2005-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(61,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Junko','Junko ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','213828340',NULL,'Sample Data','Junko','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko ÅÄ…chowski',NULL,NULL,'2008-01-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(62,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Toby','Toby Deforest III',NULL,NULL,NULL,'2',NULL,'Both','2295860847',NULL,'Sample Data','Toby','T','Deforest',NULL,4,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Deforest III',NULL,2,'2007-12-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(63,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Russell','Mr. Russell Deforest',NULL,NULL,NULL,'3',NULL,'Both','2595317869',NULL,'Sample Data','Russell','Y','Deforest',3,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Mr. Russell Deforest',NULL,NULL,'1975-01-14',0,NULL,NULL,NULL,'Sisseton Literacy Initiative',NULL,NULL,29,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(64,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Valene','Mrs. Valene Parker',NULL,NULL,NULL,'3',NULL,'Both','2439115501',NULL,'Sample Data','Valene','Y','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Mrs. Valene Parker',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Sonny','Mr. Sonny Smith III',NULL,NULL,NULL,'1',NULL,'Both','2875915978',NULL,'Sample Data','Sonny','','Smith',3,4,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Mr. Sonny Smith III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(66,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Grant, Rosario','Rosario Grant III',NULL,NULL,NULL,'2',NULL,'Both','2992904466',NULL,'Sample Data','Rosario','','Grant',NULL,4,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Grant III',NULL,NULL,'1939-06-16',1,'2019-10-25',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(67,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Elina','Elina ÅÄ…chowski',NULL,NULL,NULL,'3',NULL,'Both','1014989559',NULL,'Sample Data','Elina','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina ÅÄ…chowski',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Kandace','Kandace Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','662729753',NULL,'Sample Data','Kandace','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(69,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'South Carolina Literacy Services','South Carolina Literacy Services',NULL,NULL,NULL,'5',NULL,'Both','1633471049',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'South Carolina Literacy Services',NULL,NULL,NULL,0,NULL,NULL,NULL,'South Carolina Literacy Services',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Mei','Mrs. Mei ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','16480830',NULL,'Sample Data','Mei','','ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mrs. Mei ÅÄ…chowski',NULL,1,'1945-11-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(71,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Errol','Dr. Errol Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1627252863',NULL,'Sample Data','Errol','','Wilson',4,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Dr. Errol Wilson',NULL,2,'1997-09-16',0,NULL,NULL,NULL,'Cadell Development Services',NULL,NULL,181,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(72,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Allan','Mr. Allan Jensen III',NULL,NULL,NULL,NULL,NULL,'Both','2028803249',NULL,'Sample Data','Allan','E','Jensen',3,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Jensen III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Josefa','Josefa Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','4224564328',NULL,'Sample Data','Josefa','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(74,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Beula','Beula Yadav',NULL,NULL,NULL,'3',NULL,'Both','852214760',NULL,'Sample Data','Beula','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Yadav',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Allen','Allen Jacobs II',NULL,NULL,NULL,'1',NULL,'Both','1784582040',NULL,'Sample Data','Allen','F','Jacobs',NULL,3,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Allen Jacobs II',NULL,NULL,NULL,0,NULL,NULL,NULL,'Wisconsin Sports Trust',NULL,NULL,120,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(76,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Community Peace Fellowship','Community Peace Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','1299963232',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Peace Fellowship',NULL,NULL,NULL,0,NULL,NULL,112,'Community Peace Fellowship',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(77,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Rolando','Rolando Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2121296962',NULL,'Sample Data','Rolando','P','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Olsen',NULL,2,'1993-04-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(78,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Lashawnda','Ms. Lashawnda Nielsen',NULL,NULL,NULL,'3',NULL,'Both','591811788',NULL,'Sample Data','Lashawnda','','Nielsen',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Nielsen',NULL,1,'1979-05-18',0,NULL,NULL,NULL,'Main Empowerment Alliance',NULL,NULL,16,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Rosario','Rosario Yadav II',NULL,NULL,NULL,NULL,NULL,'Both','422504705',NULL,'Sample Data','Rosario','L','Yadav',NULL,3,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Yadav II',NULL,2,'1994-07-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(80,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jensen, Sharyn','Dr. Sharyn Jensen',NULL,NULL,NULL,'3',NULL,'Both','2516683246',NULL,'Sample Data','Sharyn','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Dr. Sharyn Jensen',NULL,1,'1979-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(81,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper-Yadav, Ashley','Ashley Cooper-Yadav',NULL,NULL,NULL,'5',NULL,'Both','2863427603',NULL,'Sample Data','Ashley','S','Cooper-Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Cooper-Yadav',NULL,1,'1951-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Herminia','Mrs. Herminia Wilson',NULL,NULL,NULL,'3',NULL,'Both','1306948243',NULL,'Sample Data','Herminia','','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Wilson',NULL,1,'1993-02-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(83,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Alma Poetry Center','Alma Poetry Center',NULL,NULL,NULL,NULL,NULL,'Both','194499531',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Alma Poetry Center',NULL,NULL,NULL,0,NULL,NULL,3,'Alma Poetry Center',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Felisha','Ms. Felisha Barkley',NULL,NULL,NULL,NULL,NULL,'Both','1669802133',NULL,'Sample Data','Felisha','','Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Ms. Felisha Barkley',NULL,1,'1963-01-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Jay','Jay Yadav Jr.',NULL,NULL,NULL,'2',NULL,'Both','3317277068',NULL,'Sample Data','Jay','','Yadav',NULL,1,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Yadav Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(86,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Lincoln Music Systems','Lincoln Music Systems',NULL,NULL,NULL,NULL,NULL,'Both','1297736450',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Music Systems',NULL,NULL,NULL,0,NULL,NULL,125,'Lincoln Music Systems',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Jay','Dr. Jay Parker Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1839033827',NULL,'Sample Data','Jay','','Parker',4,2,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Dr. Jay Parker Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Andrew','Andrew ÅÄ…chowski',NULL,NULL,NULL,'1',NULL,'Both','1575830932',NULL,'Sample Data','Andrew','B','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(89,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'blackwell.jerome@sample.com','blackwell.jerome@sample.com',NULL,NULL,NULL,NULL,NULL,'Both','3165043511',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear blackwell.jerome@sample.com',1,NULL,'Dear blackwell.jerome@sample.com',1,NULL,'blackwell.jerome@sample.com',NULL,NULL,NULL,0,NULL,NULL,NULL,'Jamestown Wellness Partners',NULL,NULL,155,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(90,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,'5',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,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(91,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav-Olsen, Lou','Lou Yadav-Olsen III',NULL,NULL,NULL,'4',NULL,'Both','3254233099',NULL,'Sample Data','Lou','','Yadav-Olsen',NULL,4,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Yadav-Olsen III',NULL,2,'1982-08-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Teresa','Teresa Jacobs',NULL,NULL,NULL,'5',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,1,'1956-08-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(93,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Bernadette','Bernadette ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','2108681272',NULL,'Sample Data','Bernadette','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette ÅÄ…chowski',NULL,1,'2009-10-03',0,NULL,NULL,NULL,'Wisconsin Technology Services',NULL,NULL,142,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Justina','Justina Smith',NULL,NULL,NULL,'1',NULL,'Both','16511477',NULL,'Sample Data','Justina','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(95,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson-Roberts, Ashlie','Dr. Ashlie Jameson-Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2033380719',NULL,'Sample Data','Ashlie','','Jameson-Roberts',4,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Dr. Ashlie Jameson-Roberts',NULL,NULL,'1983-03-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(96,'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,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(97,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Errol','Errol Lee',NULL,NULL,NULL,NULL,NULL,'Both','1182001849',NULL,'Sample Data','Errol','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Lee',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(98,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Cruz family','Wattson-Cruz family',NULL,NULL,NULL,NULL,NULL,'Both','2227626634',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson-Cruz family',5,NULL,'Dear Wattson-Cruz family',2,NULL,'Wattson-Cruz family',NULL,NULL,NULL,0,NULL,'Wattson-Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(99,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs family','Jacobs family',NULL,NULL,NULL,NULL,NULL,'Both','1498986649',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs family',5,NULL,'Dear Jacobs family',2,NULL,'Jacobs family',NULL,NULL,NULL,0,NULL,'Jacobs family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(100,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,'Both','2407077255',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski family',5,NULL,'Dear ÅÄ…chowski family',2,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(101,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'wilson.scarlet@notmail.info','wilson.scarlet@notmail.info',NULL,NULL,NULL,NULL,NULL,'Both','3871035212',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear wilson.scarlet@notmail.info',1,NULL,'Dear wilson.scarlet@notmail.info',1,NULL,'wilson.scarlet@notmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(102,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Carylon','Carylon Müller',NULL,NULL,NULL,'4',NULL,'Both','2173697265',NULL,'Sample Data','Carylon','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Müller',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Princess','Princess DÃaz',NULL,NULL,NULL,'3',NULL,'Both','2291440559',NULL,'Sample Data','Princess','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess DÃaz',NULL,NULL,'1949-01-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Lincoln','Lincoln ÅÄ…chowski III',NULL,NULL,NULL,'4',NULL,'Both','4115738277',NULL,'Sample Data','Lincoln','T','ÅÄ…chowski',NULL,4,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln ÅÄ…chowski III',NULL,2,'1949-05-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(105,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts-Barkley, Scott','Scott Roberts-Barkley II',NULL,NULL,NULL,'5',NULL,'Both','2205323300',NULL,'Sample Data','Scott','','Roberts-Barkley',NULL,3,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Roberts-Barkley II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(106,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Rodrigo','Rodrigo Deforest',NULL,NULL,NULL,NULL,NULL,'Both','560403570',NULL,'Sample Data','Rodrigo','C','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Deforest',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(107,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav, Claudio','Claudio Yadav',NULL,NULL,NULL,'2',NULL,'Both','2212747069',NULL,'Sample Data','Claudio','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Yadav',NULL,NULL,'2000-01-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(108,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Smith-Zope family','Smith-Zope family',NULL,NULL,NULL,NULL,NULL,'Both','4232325802',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith-Zope family',5,NULL,'Dear Smith-Zope family',2,NULL,'Smith-Zope family',NULL,NULL,NULL,0,NULL,'Smith-Zope family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(109,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov, Elizabeth','Dr. Elizabeth Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','818500223',NULL,'Sample Data','Elizabeth','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Dr. Elizabeth Ivanov',NULL,NULL,'1984-05-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Erik','Erik Wilson',NULL,NULL,NULL,'5',NULL,'Both','3965179222',NULL,'Sample Data','Erik','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Wilson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(111,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mller.u.heidi@testmail.co.nz','mller.u.heidi@testmail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','1185221714',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear mller.u.heidi@testmail.co.nz',1,NULL,'Dear mller.u.heidi@testmail.co.nz',1,NULL,'mller.u.heidi@testmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Norris','Norris Barkley',NULL,NULL,NULL,'5',NULL,'Both','2989554076',NULL,'Sample Data','Norris','L','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Barkley',NULL,2,'2000-05-02',0,NULL,NULL,NULL,'Community Peace Fellowship',NULL,NULL,76,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(113,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Ashley','Ashley Ivanov',NULL,NULL,NULL,'5',NULL,'Both','2740657237',NULL,'Sample Data','Ashley','O','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Ivanov',NULL,1,'1944-01-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(114,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Maxwell','Dr. Maxwell Ivanov II',NULL,NULL,NULL,'5',NULL,'Both','3562493045',NULL,'Sample Data','Maxwell','T','Ivanov',4,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Dr. Maxwell Ivanov II',NULL,2,'1977-09-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(115,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samson, Carlos','Carlos Samson',NULL,NULL,NULL,NULL,NULL,'Both','3685526914',NULL,'Sample Data','Carlos','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Samson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Brent','Brent McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1642363983',NULL,'Sample Data','Brent','W','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent McReynolds',NULL,2,'2005-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(117,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav family','Yadav family',NULL,NULL,NULL,'1',NULL,'Both','1777336212',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav family',5,NULL,'Dear Yadav family',2,NULL,'Yadav family',NULL,NULL,NULL,0,NULL,'Yadav family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(118,'Household',NULL,0,1,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,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Lou','Mr. Lou Cruz',NULL,NULL,NULL,'5',NULL,'Both','3825436654',NULL,'Sample Data','Lou','','Cruz',3,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Mr. Lou Cruz',NULL,2,'1970-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(120,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Wisconsin Sports Trust','Wisconsin Sports Trust',NULL,NULL,NULL,NULL,NULL,'Both','2130379751',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Wisconsin Sports Trust',NULL,NULL,NULL,0,NULL,NULL,75,'Wisconsin Sports Trust',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(121,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Roland','Roland Parker',NULL,NULL,NULL,'2',NULL,'Both','3318650576',NULL,'Sample Data','Roland','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Parker',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Laree','Laree Cooper',NULL,NULL,NULL,NULL,NULL,'Both','4213061637',NULL,'Sample Data','Laree','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Cooper',NULL,1,'1974-02-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(123,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'roberts.angelika@fakemail.net','roberts.angelika@fakemail.net',NULL,NULL,NULL,'5',NULL,'Both','699969520',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear roberts.angelika@fakemail.net',1,NULL,'Dear roberts.angelika@fakemail.net',1,NULL,'roberts.angelika@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(124,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Sherman','Dr. Sherman Terrell',NULL,NULL,NULL,NULL,NULL,'Both','470401788',NULL,'Sample Data','Sherman','W','Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Terrell',NULL,2,'1963-08-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(125,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Beula','Beula Parker',NULL,NULL,NULL,NULL,NULL,'Both','1115460159',NULL,'Sample Data','Beula','X','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Parker',NULL,1,NULL,0,NULL,NULL,NULL,'Lincoln Music Systems',NULL,NULL,86,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(126,'Household',NULL,0,0,0,0,1,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,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(127,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Brigette','Mrs. Brigette McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','393115724',NULL,'Sample Data','Brigette','S','McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Mrs. Brigette McReynolds',NULL,1,'1988-03-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(128,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Rural Environmental Partners','Rural Environmental Partners',NULL,NULL,NULL,'1',NULL,'Both','3766287659',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Rural Environmental Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'Rural Environmental Partners',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(129,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson, Lawerence','Dr. Lawerence Jameson Sr.',NULL,NULL,NULL,NULL,NULL,'Both','745354503',NULL,'Sample Data','Lawerence','','Jameson',4,2,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Dr. Lawerence Jameson Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Smith, Russell','Russell Bachman-Smith',NULL,NULL,NULL,'5',NULL,'Both','2186584911',NULL,'Sample Data','Russell','I','Bachman-Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Bachman-Smith',NULL,2,'2013-08-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(131,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson-Cruz, Shauna','Shauna Wattson-Cruz',NULL,NULL,NULL,'3',NULL,'Both','3350747843',NULL,'Sample Data','Shauna','','Wattson-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Wattson-Cruz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(132,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wattson-Cruz, Magan','Magan Wattson-Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3898854066',NULL,'Sample Data','Magan','','Wattson-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Wattson-Cruz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Barry','Mr. Barry Zope',NULL,NULL,NULL,'4',NULL,'Both','1953474040',NULL,'Sample Data','Barry','','Zope',3,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Zope',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(134,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Rosario','Rosario Wattson',NULL,NULL,NULL,NULL,NULL,'Both','661817002',NULL,'Sample Data','Rosario','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Wattson',NULL,NULL,'1980-07-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Smith, Rebekah','Dr. Rebekah Bachman-Smith',NULL,NULL,NULL,NULL,NULL,'Both','288194811',NULL,'Sample Data','Rebekah','N','Bachman-Smith',4,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Dr. Rebekah Bachman-Smith',NULL,1,'1995-01-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(136,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Tanya','Tanya Zope',NULL,NULL,NULL,'1',NULL,'Both','2120997971',NULL,'Sample Data','Tanya','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Zope',NULL,1,'1952-11-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(137,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'5',NULL,'Both','2888062109',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley family',5,NULL,'Dear Barkley family',2,NULL,'Barkley family',NULL,NULL,NULL,0,NULL,'Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(138,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Imboden Advocacy Alliance','Imboden Advocacy Alliance',NULL,NULL,NULL,'4',NULL,'Both','3801724864',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Imboden Advocacy Alliance',NULL,NULL,NULL,0,NULL,NULL,NULL,'Imboden Advocacy Alliance',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Ashley','Dr. Ashley Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2646692852',NULL,'Sample Data','Ashley','Q','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Bachman',NULL,2,'1962-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(140,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Princess','Princess Samson',NULL,NULL,NULL,'3',NULL,'Both','3367737253',NULL,'Sample Data','Princess','K','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Samson',NULL,1,'1974-05-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(141,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Ivey','Ms. Ivey Samson',NULL,NULL,NULL,NULL,NULL,'Both','2827177330',NULL,'Sample Data','Ivey','','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ms. Ivey Samson',NULL,1,'1976-03-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(142,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Wisconsin Technology Services','Wisconsin Technology Services',NULL,NULL,NULL,'2',NULL,'Both','176691767',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Wisconsin Technology Services',NULL,NULL,NULL,0,NULL,NULL,93,'Wisconsin Technology Services',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(143,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Elina','Elina Robertson',NULL,NULL,NULL,'4',NULL,'Both','2118897804',NULL,'Sample Data','Elina','','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Robertson',NULL,1,'1985-11-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(144,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wilson, Russell','Russell Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1575033929',NULL,'Sample Data','Russell','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Wilson',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(145,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Felisha','Ms. Felisha Jones',NULL,NULL,NULL,'3',NULL,'Both','2947770839',NULL,'Sample Data','Felisha','E','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Ms. Felisha Jones',NULL,NULL,'1990-11-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrov-smithi@fakemail.biz','dimitrov-smithi@fakemail.biz',NULL,NULL,NULL,NULL,NULL,'Both','1081673834',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear dimitrov-smithi@fakemail.biz',1,NULL,'Dear dimitrov-smithi@fakemail.biz',1,NULL,'dimitrov-smithi@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Landon','Mr. Landon Barkley III',NULL,NULL,NULL,'2',NULL,'Both','2012224076',NULL,'Sample Data','Landon','W','Barkley',3,4,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Mr. Landon Barkley III',NULL,2,'1963-01-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(148,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Dimitrov, Scarlet','Ms. Scarlet Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','2143443543',NULL,'Sample Data','Scarlet','W','Dimitrov',2,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Ms. Scarlet Dimitrov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(149,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Brittney','Mrs. Brittney Smith',NULL,NULL,NULL,'3',NULL,'Both','1142724087',NULL,'Sample Data','Brittney','','Smith',1,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Mrs. Brittney Smith',NULL,1,'1946-11-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(150,'Household',NULL,1,0,0,0,1,0,NULL,NULL,'Yadav-Olsen family','Yadav-Olsen family',NULL,NULL,NULL,NULL,NULL,'Both','41170437',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav-Olsen family',5,NULL,'Dear Yadav-Olsen family',2,NULL,'Yadav-Olsen family',NULL,NULL,NULL,0,NULL,'Yadav-Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(151,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'wilson.errol@example.co.uk','wilson.errol@example.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','3794837389',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear wilson.errol@example.co.uk',1,NULL,'Dear wilson.errol@example.co.uk',1,NULL,'wilson.errol@example.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(152,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Samson, Elbert','Mr. Elbert Samson',NULL,NULL,NULL,'5',NULL,'Both','3416596353',NULL,'Sample Data','Elbert','','Samson',3,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Samson',NULL,2,'1962-06-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(153,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Smith-Zope, Rolando','Dr. Rolando Smith-Zope',NULL,NULL,NULL,NULL,NULL,'Both','3966788998',NULL,'Sample Data','Rolando','','Smith-Zope',4,NULL,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Smith-Zope',NULL,2,'1992-06-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'yadav-olsen.jerome@spamalot.org','yadav-olsen.jerome@spamalot.org',NULL,NULL,NULL,NULL,NULL,'Both','2062066477',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear yadav-olsen.jerome@spamalot.org',1,NULL,'Dear yadav-olsen.jerome@spamalot.org',1,NULL,'yadav-olsen.jerome@spamalot.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(155,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Jamestown Wellness Partners','Jamestown Wellness Partners',NULL,NULL,NULL,NULL,NULL,'Both','1629383910',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Jamestown Wellness Partners',NULL,NULL,NULL,0,NULL,NULL,89,'Jamestown Wellness Partners',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(156,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González, Lincoln','Lincoln González',NULL,NULL,NULL,NULL,NULL,'Both','1919790687',NULL,'Sample Data','Lincoln','','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln González',NULL,NULL,'1989-01-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Sherman','Sherman Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3073547479',NULL,'Sample Data','Sherman','O','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Reynolds',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(158,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Beula','Ms. Beula Smith',NULL,NULL,NULL,'2',NULL,'Both','2826835673',NULL,'Sample Data','Beula','K','Smith',2,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Ms. Beula Smith',NULL,NULL,'1957-08-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(159,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Smith, Sherman','Sherman Smith Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2534452689',NULL,'Sample Data','Sherman','','Smith',NULL,2,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Smith Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(160,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Dimitrov-Smith, Ashley','Ashley Dimitrov-Smith II',NULL,NULL,NULL,'2',NULL,'Both','4104506646',NULL,'Sample Data','Ashley','','Dimitrov-Smith',NULL,3,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Dimitrov-Smith II',NULL,NULL,'2002-11-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(161,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Literacy Collective','Urban Literacy Collective',NULL,NULL,NULL,'1',NULL,'Both','3060307100',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Literacy Collective',NULL,NULL,NULL,0,NULL,NULL,NULL,'Urban Literacy Collective',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(162,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'dimitrovd53@example.org','dimitrovd53@example.org',NULL,NULL,NULL,NULL,NULL,'Both','1201326698',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear dimitrovd53@example.org',1,NULL,'Dear dimitrovd53@example.org',1,NULL,'dimitrovd53@example.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(163,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov-Smith family','Dimitrov-Smith family',NULL,NULL,NULL,NULL,NULL,'Both','74943900',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Dimitrov-Smith family',5,NULL,'Dear Dimitrov-Smith family',2,NULL,'Dimitrov-Smith family',NULL,NULL,NULL,0,NULL,'Dimitrov-Smith family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(164,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'jones.herminia35@sample.co.in','jones.herminia35@sample.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3006409793',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear jones.herminia35@sample.co.in',1,NULL,'Dear jones.herminia35@sample.co.in',1,NULL,'jones.herminia35@sample.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(165,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'mller.f.allen@fishmail.co.in','mller.f.allen@fishmail.co.in',NULL,NULL,NULL,'5',NULL,'Both','2187435047',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear mller.f.allen@fishmail.co.in',1,NULL,'Dear mller.f.allen@fishmail.co.in',1,NULL,'mller.f.allen@fishmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(166,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Shad','Shad Parker',NULL,NULL,NULL,'5',NULL,'Both','23650208',NULL,'Sample Data','Shad','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Parker',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(167,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Craig','Craig Grant II',NULL,NULL,NULL,NULL,NULL,'Both','3839246434',NULL,'Sample Data','Craig','','Grant',NULL,3,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Grant II',NULL,NULL,'1968-10-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(168,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,'2',NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Kathleen','Kathleen Terrell',NULL,NULL,NULL,'1',NULL,'Both','1212297989',NULL,'Sample Data','Kathleen','X','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Terrell',NULL,NULL,'1954-10-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(170,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'roberts.betty@airmail.biz','roberts.betty@airmail.biz',NULL,NULL,NULL,NULL,NULL,'Both','3456955083',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear roberts.betty@airmail.biz',1,NULL,'Dear roberts.betty@airmail.biz',1,NULL,'roberts.betty@airmail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Erik','Dr. Erik Müller',NULL,NULL,NULL,NULL,NULL,'Both','826359334',NULL,'Sample Data','Erik','N','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Müller',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(172,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Russell','Russell Samuels III',NULL,NULL,NULL,'3',NULL,'Both','3958135330',NULL,'Sample Data','Russell','','Samuels',NULL,4,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Samuels III',NULL,2,'2004-02-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Merrie','Dr. Merrie Ivanov',NULL,NULL,NULL,'4',NULL,'Both','2861667534',NULL,'Sample Data','Merrie','F','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Dr. Merrie Ivanov',NULL,NULL,'1931-03-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(174,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'González, Brent','Brent González',NULL,NULL,NULL,'1',NULL,'Both','397348525',NULL,'Sample Data','Brent','E','González',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent González',NULL,2,'2009-03-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Craig','Mr. Craig Dimitrov III',NULL,NULL,NULL,'4',NULL,'Both','3815881421',NULL,'Sample Data','Craig','','Dimitrov',3,4,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Dimitrov III',NULL,NULL,'1954-07-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ivanov.kandace@sample.co.nz','ivanov.kandace@sample.co.nz',NULL,NULL,NULL,'1',NULL,'Both','1367898449',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ivanov.kandace@sample.co.nz',1,NULL,'Dear ivanov.kandace@sample.co.nz',1,NULL,'ivanov.kandace@sample.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Kandace','Kandace Samuels',NULL,NULL,NULL,NULL,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,NULL,'1976-07-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson-Müller, Eleonor','Eleonor Jameson-Müller',NULL,NULL,NULL,'1',NULL,'Both','3299392273',NULL,'Sample Data','Eleonor','O','Jameson-Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Jameson-Müller',NULL,NULL,'1977-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(179,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Lincoln','Lincoln Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2306283534',NULL,'Sample Data','Lincoln','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Jacobs',NULL,NULL,'1997-05-24',0,NULL,NULL,NULL,'Redmon Health Trust',NULL,NULL,10,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(180,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Rodrigo','Rodrigo Jones III',NULL,NULL,NULL,NULL,NULL,'Both','1530953309',NULL,'Sample Data','Rodrigo','M','Jones',NULL,4,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Jones III',NULL,NULL,'1976-07-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(181,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Cadell Development Services','Cadell Development Services',NULL,NULL,NULL,NULL,NULL,'Both','901140523',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cadell Development Services',NULL,NULL,NULL,0,NULL,NULL,71,'Cadell Development Services',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(182,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Jay','Jay Smith',NULL,NULL,NULL,'4',NULL,'Both','2744125186',NULL,'Sample Data','Jay','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Smith',NULL,2,'1957-05-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-Wilson, Margaret','Margaret Prentice-Wilson',NULL,NULL,NULL,'5',NULL,'Both','1024721887',NULL,'Sample Data','Margaret','C','Prentice-Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Prentice-Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Tanya','Tanya Deforest',NULL,NULL,NULL,NULL,NULL,'Both','3707213011',NULL,'Sample Data','Tanya','Y','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Deforest',NULL,1,'1961-03-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(185,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Betty','Dr. Betty Smith',NULL,NULL,NULL,'4',NULL,'Both','952859873',NULL,'Sample Data','Betty','D','Smith',4,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Dr. Betty Smith',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(186,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Ashley','Dr. Ashley Jameson II',NULL,NULL,NULL,NULL,NULL,'Both','3561508179',NULL,'Sample Data','Ashley','','Jameson',4,3,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Jameson II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(187,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Education Academy','Creative Education Academy',NULL,NULL,NULL,NULL,NULL,'Both','61414175',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Education Academy',NULL,NULL,NULL,0,NULL,NULL,189,'Creative Education Academy',NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(188,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Jerome','Jerome Samson',NULL,NULL,NULL,'5',NULL,'Both','3448189696',NULL,'Sample Data','Jerome','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Jerome Samson',NULL,2,NULL,0,NULL,NULL,NULL,'York Haven Peace Academy',NULL,NULL,6,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Elbert','Mr. Elbert Wilson III',NULL,NULL,NULL,NULL,NULL,'Both','330239896',NULL,'Sample Data','Elbert','G','Wilson',3,4,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Wilson III',NULL,2,NULL,0,NULL,NULL,NULL,'Creative Education Academy',NULL,NULL,187,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(190,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'smith.heidi@airmail.co.pl','smith.heidi@airmail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','496973477',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear smith.heidi@airmail.co.pl',1,NULL,'Dear smith.heidi@airmail.co.pl',1,NULL,'smith.heidi@airmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(191,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Jina','Jina Prentice',NULL,NULL,NULL,NULL,NULL,'Both','3574120172',NULL,'Sample Data','Jina','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Prentice',NULL,1,'1971-07-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(192,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Shauna','Shauna Barkley',NULL,NULL,NULL,'4',NULL,'Both','1145257394',NULL,'Sample Data','Shauna','K','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Barkley',NULL,1,'1978-05-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Elbert','Elbert ÅÄ…chowski III',NULL,NULL,NULL,'3',NULL,'Both','473197543',NULL,'Sample Data','Elbert','','ÅÄ…chowski',NULL,4,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert ÅÄ…chowski III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(194,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Olsen, Erik','Dr. Erik Olsen',NULL,NULL,NULL,NULL,NULL,'Both','1259292682',NULL,'Sample Data','Erik','','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Olsen',NULL,NULL,'1989-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ivanov.winford@lol.co.in','ivanov.winford@lol.co.in',NULL,NULL,NULL,NULL,NULL,'Both','1671398020',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear ivanov.winford@lol.co.in',1,NULL,'Dear ivanov.winford@lol.co.in',1,NULL,'ivanov.winford@lol.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Juliann','Juliann Deforest',NULL,NULL,NULL,'4',NULL,'Both','3366299166',NULL,'Sample Data','Juliann','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Deforest',NULL,NULL,'2007-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(197,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Lawerence','Mr. Lawerence Dimitrov II',NULL,NULL,NULL,'4',NULL,'Both','2843061688',NULL,'Sample Data','Lawerence','N','Dimitrov',3,3,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Mr. Lawerence Dimitrov II',NULL,NULL,'1958-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts-Deforest, Princess','Princess Roberts-Deforest',NULL,NULL,NULL,'1',NULL,'Both','991089738',NULL,'Sample Data','Princess','','Roberts-Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Princess Roberts-Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(199,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Beula','Beula ÅÄ…chowski',NULL,NULL,NULL,'5',NULL,'Both','3562875387',NULL,'Sample Data','Beula','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula ÅÄ…chowski',NULL,1,'1999-12-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'),(200,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Sanford','Mr. Sanford Terry III',NULL,NULL,NULL,'4',NULL,'Both','4170670568',NULL,'Sample Data','Sanford','','Terry',3,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Terry III',NULL,2,'1996-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:50'),(201,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Arlyne','Arlyne Samson',NULL,NULL,NULL,'3',NULL,'Both','4139787516',NULL,'Sample Data','Arlyne','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Samson',NULL,1,'2018-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-11-28 19:55:50','2019-11-28 19:55:51'); +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,'2020-01-16 22:53:12'),(2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'roberts.sanford@lol.co.nz','roberts.sanford@lol.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','3254791246',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear roberts.sanford@lol.co.nz',1,NULL,'Dear roberts.sanford@lol.co.nz',1,NULL,'roberts.sanford@lol.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(3,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker-Grant, Arlyne','Arlyne Parker-Grant',NULL,NULL,NULL,NULL,NULL,'Both','3401223721',NULL,'Sample Data','Arlyne','','Parker-Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Parker-Grant',NULL,1,'1979-11-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(4,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Maxwell','Maxwell Terry II',NULL,NULL,NULL,NULL,NULL,'Both','528410264',NULL,'Sample Data','Maxwell','','Terry',NULL,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Terry II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Betty','Betty Grant',NULL,NULL,NULL,'2',NULL,'Both','200685072',NULL,'Sample Data','Betty','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Grant',NULL,1,'1962-08-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(6,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'cruzh@mymail.co.pl','cruzh@mymail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','436435613',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear cruzh@mymail.co.pl',1,NULL,'Dear cruzh@mymail.co.pl',1,NULL,'cruzh@mymail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(7,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Dysart Literacy Services','Dysart Literacy Services',NULL,NULL,NULL,'4',NULL,'Both','4183140735',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dysart Literacy Services',NULL,NULL,NULL,0,NULL,NULL,57,'Dysart Literacy Services',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(8,'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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Elbert','Mr. Elbert Terrell Jr.',NULL,NULL,NULL,'3',NULL,'Both','1862258278',NULL,'Sample Data','Elbert','O','Terrell',3,1,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Mr. Elbert Terrell Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(10,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Bachman, Lincoln','Lincoln Bachman',NULL,NULL,NULL,'4',NULL,'Both','3974009485',NULL,'Sample Data','Lincoln','I','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Bachman',NULL,NULL,'2009-04-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Valene','Valene Grant',NULL,NULL,NULL,NULL,NULL,'Both','309020900',NULL,'Sample Data','Valene','D','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Grant',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(12,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell family','Blackwell family',NULL,NULL,NULL,'1',NULL,'Both','3218641510',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Blackwell family',5,NULL,'Dear Blackwell family',2,NULL,'Blackwell family',NULL,NULL,NULL,0,NULL,'Blackwell family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(13,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'DÃaz, Tanya','Tanya DÃaz',NULL,NULL,NULL,'4',NULL,'Both','2641118119',NULL,'Sample Data','Tanya','Z','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya DÃaz',NULL,1,'1968-12-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(14,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Josefa','Ms. Josefa Nielsen',NULL,NULL,NULL,'5',NULL,'Both','3267028471',NULL,'Sample Data','Josefa','','Nielsen',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Nielsen',NULL,1,'1987-03-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(15,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Ashlie','Ashlie Parker',NULL,NULL,NULL,NULL,NULL,'Both','1516256819',NULL,'Sample Data','Ashlie','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Parker',NULL,1,'1993-10-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Jacob','Jacob Müller',NULL,NULL,NULL,NULL,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,'1992-10-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav-Grant, Maxwell','Maxwell Yadav-Grant',NULL,NULL,NULL,'2',NULL,'Both','1238611584',NULL,'Sample Data','Maxwell','','Yadav-Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Yadav-Grant',NULL,2,'1988-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(18,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Sanford','Mr. Sanford Lee',NULL,NULL,NULL,'5',NULL,'Both','952477375',NULL,'Sample Data','Sanford','M','Lee',3,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Lee',NULL,2,'1992-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Teresa','Teresa Lee',NULL,NULL,NULL,NULL,NULL,'Both','2160842597',NULL,'Sample Data','Teresa','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Lee',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Allan','Allan Grant',NULL,NULL,NULL,'3',NULL,'Both','2534249041',NULL,'Sample Data','Allan','R','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Grant',NULL,NULL,'1987-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsenb67@testmail.co.pl','olsenb67@testmail.co.pl',NULL,NULL,NULL,'3',NULL,'Both','2127155960',NULL,'Sample Data',NULL,NULL,NULL,4,3,NULL,NULL,1,NULL,'Dear olsenb67@testmail.co.pl',1,NULL,'Dear olsenb67@testmail.co.pl',1,NULL,'olsenb67@testmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,'Lincoln Music Partnership',NULL,NULL,110,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(22,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Jackson Action Association','Jackson Action Association',NULL,NULL,NULL,'2',NULL,'Both','4125625078',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Jackson Action Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Jackson Action Association',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Troy','Mr. Troy Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2532022550',NULL,'Sample Data','Troy','','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Mr. Troy Terrell',NULL,2,'1940-04-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Errol','Errol Roberts III',NULL,NULL,NULL,NULL,NULL,'Both','152825771',NULL,'Sample Data','Errol','B','Roberts',NULL,4,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Roberts III',NULL,2,'2001-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(25,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Ivanov, Jacob','Jacob Ivanov Jr.',NULL,NULL,NULL,'5',NULL,'Both','3702183609',NULL,'Sample Data','Jacob','','Ivanov',NULL,1,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Ivanov Jr.',NULL,2,'1990-07-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(26,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsen.s.elina@lol.biz','olsen.s.elina@lol.biz',NULL,NULL,NULL,'4',NULL,'Both','9491452',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear olsen.s.elina@lol.biz',1,NULL,'Dear olsen.s.elina@lol.biz',1,NULL,'olsen.s.elina@lol.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Arlyne','Arlyne Smith',NULL,NULL,NULL,'3',NULL,'Both','4098699841',NULL,'Sample Data','Arlyne','K','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Smith',NULL,NULL,'1968-08-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(28,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Michigan Sports Partners','Michigan Sports Partners',NULL,NULL,NULL,NULL,NULL,'Both','4084976836',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Michigan Sports Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'Michigan Sports Partners',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(29,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Andrew','Dr. Andrew Deforest Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3584733584',NULL,'Sample Data','Andrew','K','Deforest',4,1,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Dr. Andrew Deforest Jr.',NULL,2,'1974-11-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Errol','Errol Grant',NULL,NULL,NULL,NULL,NULL,'Both','3028211429',NULL,'Sample Data','Errol','K','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Grant',NULL,NULL,'1975-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(31,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'College Culture Fund','College Culture Fund',NULL,NULL,NULL,'4',NULL,'Both','1949829312',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'College Culture Fund',NULL,NULL,NULL,0,NULL,NULL,59,'College Culture Fund',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Bob','Bob Grant',NULL,NULL,NULL,NULL,NULL,'Both','2147877951',NULL,'Sample Data','Bob','H','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Grant',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(33,'Household',NULL,0,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'mparker-grant51@testmail.co.nz','mparker-grant51@testmail.co.nz',NULL,NULL,NULL,'4',NULL,'Both','2669952951',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear mparker-grant51@testmail.co.nz',1,NULL,'Dear mparker-grant51@testmail.co.nz',1,NULL,'mparker-grant51@testmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Laree','Laree DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','970611892',NULL,'Sample Data','Laree','P','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(36,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Parker family','Parker family',NULL,NULL,NULL,NULL,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(37,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'patel.rosario@example.co.in','patel.rosario@example.co.in',NULL,NULL,NULL,NULL,NULL,'Both','3812102404',NULL,'Sample Data',NULL,NULL,NULL,4,3,NULL,NULL,1,NULL,'Dear patel.rosario@example.co.in',1,NULL,'Dear patel.rosario@example.co.in',1,NULL,'patel.rosario@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Toby','Toby Nielsen II',NULL,NULL,NULL,NULL,NULL,'Both','1430850543',NULL,'Sample Data','Toby','','Nielsen',NULL,3,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Nielsen II',NULL,2,'1947-10-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(39,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav-Grant, Arlyne','Arlyne Yadav-Grant',NULL,NULL,NULL,NULL,NULL,'Both','2866027560',NULL,'Sample Data','Arlyne','','Yadav-Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Yadav-Grant',NULL,NULL,'1986-01-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(40,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wattson, Clint','Clint Wattson',NULL,NULL,NULL,'4',NULL,'Both','4167597443',NULL,'Sample Data','Clint','O','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Wattson',NULL,2,'1968-08-12',0,NULL,NULL,NULL,'College Arts Alliance',NULL,NULL,193,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Truman','Mr. Truman Prentice Jr.',NULL,NULL,NULL,'4',NULL,'Both','3922272167',NULL,'Sample Data','Truman','X','Prentice',3,1,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Mr. Truman Prentice Jr.',NULL,2,'1964-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(42,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Margaret','Mrs. Margaret Cruz',NULL,NULL,NULL,'2',NULL,'Both','680750633',NULL,'Sample Data','Margaret','','Cruz',1,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Mrs. Margaret Cruz',NULL,NULL,'1974-07-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(43,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'sbarkley@fakemail.co.in','sbarkley@fakemail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2107586211',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear sbarkley@fakemail.co.in',1,NULL,'Dear sbarkley@fakemail.co.in',1,NULL,'sbarkley@fakemail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(44,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Alida','Ms. Alida Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3245047840',NULL,'Sample Data','Alida','I','Roberts',2,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Ms. Alida Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(45,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Kiara','Kiara Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','1817462688',NULL,'Sample Data','Kiara','T','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Blackwell',NULL,NULL,'2003-05-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(46,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Creative Music Services','Creative Music Services',NULL,NULL,NULL,'1',NULL,'Both','2553392068',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Creative Music Services',NULL,NULL,NULL,0,NULL,NULL,NULL,'Creative Music Services',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(47,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Prentice, Nicole','Nicole Prentice',NULL,NULL,NULL,NULL,NULL,'Both','138339105',NULL,'Sample Data','Nicole','B','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Prentice',NULL,1,'2004-11-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(48,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel family','Patel family',NULL,NULL,NULL,NULL,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Alexia','Mrs. Alexia Robertson',NULL,NULL,NULL,'1',NULL,'Both','234001148',NULL,'Sample Data','Alexia','J','Robertson',1,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Mrs. Alexia Robertson',NULL,1,'1965-06-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(50,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Lou','Lou Nielsen',NULL,NULL,NULL,'3',NULL,'Both','3533817831',NULL,'Sample Data','Lou','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Nielsen',NULL,2,'1993-02-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Valene','Dr. Valene Wattson',NULL,NULL,NULL,'3',NULL,'Both','3149820460',NULL,'Sample Data','Valene','','Wattson',4,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Dr. Valene Wattson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(52,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'samuels.k.rolando68@mymail.info','samuels.k.rolando68@mymail.info',NULL,NULL,NULL,'4',NULL,'Both','4157533738',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear samuels.k.rolando68@mymail.info',1,NULL,'Dear samuels.k.rolando68@mymail.info',1,NULL,'samuels.k.rolando68@mymail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(53,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Del Rey Wellness Partners','Del Rey Wellness Partners',NULL,NULL,NULL,'4',NULL,'Both','4123866218',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Del Rey Wellness Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'Del Rey Wellness Partners',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(54,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee, Kathleen','Kathleen Lee',NULL,NULL,NULL,NULL,NULL,'Both','2198492721',NULL,'Sample Data','Kathleen','V','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Lee',NULL,NULL,'2008-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(55,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Deforest, Magan','Magan Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2893209447',NULL,'Sample Data','Magan','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Deforest',NULL,1,'1977-10-26',0,NULL,NULL,NULL,'Community Legal Collective',NULL,NULL,121,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Norris','Norris Jameson',NULL,NULL,NULL,'3',NULL,'Both','3849460374',NULL,'Sample Data','Norris','Q','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Jameson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Carylon','Dr. Carylon González',NULL,NULL,NULL,'1',NULL,'Both','3685317689',NULL,'Sample Data','Carylon','I','González',4,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Dr. Carylon González',NULL,NULL,'1944-07-28',0,NULL,NULL,NULL,'Dysart Literacy Services',NULL,NULL,7,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(58,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Errol','Mr. Errol Blackwell',NULL,NULL,NULL,'2',NULL,'Both','3418432727',NULL,'Sample Data','Errol','C','Blackwell',3,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Blackwell',NULL,2,'1965-11-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(59,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Yadav, Heidi','Heidi Yadav',NULL,NULL,NULL,'5',NULL,'Both','2873459559',NULL,'Sample Data','Heidi','K','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Yadav',NULL,1,'2003-03-31',0,NULL,NULL,NULL,'College Culture Fund',NULL,NULL,31,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Errol','Errol DÃaz',NULL,NULL,NULL,'4',NULL,'Both','4116027034',NULL,'Sample Data','Errol','K','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol DÃaz',NULL,2,'1980-07-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(61,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,NULL,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(62,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Reynolds, Brittney','Brittney Wattson-Reynolds',NULL,NULL,NULL,'1',NULL,'Both','1866226259',NULL,'Sample Data','Brittney','','Wattson-Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Wattson-Reynolds',NULL,NULL,'1981-12-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Jay','Jay Cruz',NULL,NULL,NULL,'5',NULL,'Both','2008783609',NULL,'Sample Data','Jay','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Cruz',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Barry','Mr. Barry Prentice',NULL,NULL,NULL,'5',NULL,'Both','3550869584',NULL,'Sample Data','Barry','N','Prentice',3,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Prentice',NULL,NULL,'1988-06-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(65,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Shauna','Shauna Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','564809255',NULL,'Sample Data','Shauna','G','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Reynolds',NULL,1,'1995-12-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Elina','Mrs. Elina Wagner',NULL,NULL,NULL,NULL,NULL,'Both','4003830950',NULL,'Sample Data','Elina','','Wagner',1,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Mrs. Elina Wagner',NULL,1,'1978-12-11',0,NULL,NULL,NULL,'Friends Food Network',NULL,NULL,191,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Miguel','Miguel Grant Jr.',NULL,NULL,NULL,'2',NULL,'Both','436581475',NULL,'Sample Data','Miguel','A','Grant',NULL,1,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Grant Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Jackson','Mr. Jackson Roberts II',NULL,NULL,NULL,'1',NULL,'Both','3261233132',NULL,'Sample Data','Jackson','P','Roberts',3,3,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Mr. Jackson Roberts II',NULL,NULL,'1932-04-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(69,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'sb.daz5@sample.co.uk','sb.daz5@sample.co.uk',NULL,NULL,NULL,'3',NULL,'Both','586586956',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear sb.daz5@sample.co.uk',1,NULL,'Dear sb.daz5@sample.co.uk',1,NULL,'sb.daz5@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(70,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Reynolds, Damaris','Damaris Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','4231913075',NULL,'Sample Data','Damaris','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Reynolds',NULL,NULL,'2003-09-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(71,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Beech Arts Fund','Beech Arts Fund',NULL,NULL,NULL,NULL,NULL,'Both','2057494687',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Beech Arts Fund',NULL,NULL,NULL,0,NULL,NULL,185,'Beech Arts Fund',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(72,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Wagner, Heidi','Dr. Heidi Wagner',NULL,NULL,NULL,'5',NULL,'Both','2668197669',NULL,'Sample Data','Heidi','H','Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Wagner',NULL,1,'1998-08-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(73,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Blackwell, Omar','Omar Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','3587375768',NULL,'Sample Data','Omar','L','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(74,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cruz, Herminia','Mrs. Herminia Cruz',NULL,NULL,NULL,NULL,NULL,'Both','3479995875',NULL,'Sample Data','Herminia','Y','Cruz',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Cruz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(75,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Eleonor','Eleonor Smith',NULL,NULL,NULL,'5',NULL,'Both','574097129',NULL,'Sample Data','Eleonor','J','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Smith',NULL,NULL,'2009-05-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(76,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'cruzm@infomail.co.in','cruzm@infomail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2415993561',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear cruzm@infomail.co.in',1,NULL,'Dear cruzm@infomail.co.in',1,NULL,'cruzm@infomail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(77,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'my.jones24@notmail.com','my.jones24@notmail.com',NULL,NULL,NULL,'3',NULL,'Both','336636319',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear my.jones24@notmail.com',1,NULL,'Dear my.jones24@notmail.com',1,NULL,'my.jones24@notmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(78,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz family','DÃaz family',NULL,NULL,NULL,'2',NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear DÃaz family',5,NULL,'Dear DÃaz family',2,NULL,'DÃaz family',NULL,NULL,NULL,0,NULL,'DÃaz family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(79,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Norris','Mr. Norris Jones Sr.',NULL,NULL,NULL,'4',NULL,'Both','2315660840',NULL,'Sample Data','Norris','','Jones',3,2,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Mr. Norris Jones Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(80,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Lawerence','Lawerence Jameson',NULL,NULL,NULL,NULL,NULL,'Both','745354503',NULL,'Sample Data','Lawerence','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Jameson',NULL,2,NULL,0,NULL,NULL,NULL,'United Health Trust',NULL,NULL,159,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(81,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker-Wagner, Kenny','Mr. Kenny Parker-Wagner Jr.',NULL,NULL,NULL,'1',NULL,'Both','3468730422',NULL,'Sample Data','Kenny','I','Parker-Wagner',3,1,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Parker-Wagner Jr.',NULL,2,'1983-11-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Elbert','Dr. Elbert Parker',NULL,NULL,NULL,'1',NULL,'Both','2158710005',NULL,'Sample Data','Elbert','C','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Dr. Elbert Parker',NULL,NULL,'1970-12-06',0,NULL,NULL,NULL,'Local Health Network',NULL,NULL,104,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(83,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'robertss94@fakemail.net','robertss94@fakemail.net',NULL,NULL,NULL,NULL,NULL,'Both','265127693',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear robertss94@fakemail.net',1,NULL,'Dear robertss94@fakemail.net',1,NULL,'robertss94@fakemail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'reynolds.v.merrie86@lol.com','reynolds.v.merrie86@lol.com',NULL,NULL,NULL,NULL,NULL,'Both','2233787668',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear reynolds.v.merrie86@lol.com',1,NULL,'Dear reynolds.v.merrie86@lol.com',1,NULL,'reynolds.v.merrie86@lol.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(85,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Omar','Dr. Omar Samuels II',NULL,NULL,NULL,'5',NULL,'Both','1072276407',NULL,'Sample Data','Omar','C','Samuels',4,3,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Dr. Omar Samuels II',NULL,2,'1969-06-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(86,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Roland','Roland Prentice III',NULL,NULL,NULL,NULL,NULL,'Both','3836132137',NULL,'Sample Data','Roland','F','Prentice',NULL,4,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Prentice III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Brent','Brent Reynolds Sr.',NULL,NULL,NULL,NULL,NULL,'Both','547975558',NULL,'Sample Data','Brent','','Reynolds',NULL,2,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Reynolds Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(88,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Roland','Mr. Roland Jones',NULL,NULL,NULL,'4',NULL,'Both','2619785805',NULL,'Sample Data','Roland','','Jones',3,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Mr. Roland Jones',NULL,NULL,'1956-07-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Jacob','Jacob Prentice Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2335760166',NULL,'Sample Data','Jacob','','Prentice',NULL,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Prentice Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(90,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice family','Prentice family',NULL,NULL,NULL,'2',NULL,'Both','3313623671',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Prentice family',5,NULL,'Dear Prentice family',2,NULL,'Prentice family',NULL,NULL,NULL,0,NULL,'Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(91,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Jacob','Dr. Jacob Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','1661720619',NULL,'Sample Data','Jacob','','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Dr. Jacob Nielsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Irvin','Mr. Irvin Jameson',NULL,NULL,NULL,'1',NULL,'Both','2294697519',NULL,'Sample Data','Irvin','','Jameson',3,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Mr. Irvin Jameson',NULL,2,'1981-01-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(93,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice family','Prentice family',NULL,NULL,NULL,NULL,NULL,'Both','3313623671',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Prentice family',5,NULL,'Dear Prentice family',2,NULL,'Prentice family',NULL,NULL,NULL,0,NULL,'Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(94,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Herminia','Herminia Jameson',NULL,NULL,NULL,'5',NULL,'Both','2172372210',NULL,'Sample Data','Herminia','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Jameson',NULL,NULL,'2011-10-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Eleonor','Eleonor Cruz',NULL,NULL,NULL,'2',NULL,'Both','1901745992',NULL,'Sample Data','Eleonor','Y','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Cruz',NULL,1,'2004-03-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(96,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav, Nicole','Nicole Yadav',NULL,NULL,NULL,'4',NULL,'Both','831602430',NULL,'Sample Data','Nicole','A','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Yadav',NULL,1,'1998-11-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(97,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Progressive Poetry Partnership','Progressive Poetry Partnership',NULL,NULL,NULL,NULL,NULL,'Both','2210484958',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Progressive Poetry Partnership',NULL,NULL,NULL,0,NULL,NULL,150,'Progressive Poetry Partnership',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Jay','Dr. Jay González',NULL,NULL,NULL,NULL,NULL,'Both','431469491',NULL,'Sample Data','Jay','','González',4,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Dr. Jay González',NULL,2,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Esta','Esta Jones',NULL,NULL,NULL,'5',NULL,'Both','2492655702',NULL,'Sample Data','Esta','F','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(100,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Angelika','Ms. Angelika Terry',NULL,NULL,NULL,'1',NULL,'Both','1807339903',NULL,'Sample Data','Angelika','K','Terry',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika Terry',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'daz.shad56@testmail.info','daz.shad56@testmail.info',NULL,NULL,NULL,'5',NULL,'Both','2393076872',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear daz.shad56@testmail.info',1,NULL,'Dear daz.shad56@testmail.info',1,NULL,'daz.shad56@testmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(102,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Rodrigo','Dr. Rodrigo Wagner',NULL,NULL,NULL,NULL,NULL,'Both','2133660723',NULL,'Sample Data','Rodrigo','V','Wagner',4,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo Wagner',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Carlos','Dr. Carlos Robertson III',NULL,NULL,NULL,NULL,NULL,'Both','3416802562',NULL,'Sample Data','Carlos','I','Robertson',4,4,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Dr. Carlos Robertson III',NULL,NULL,'1955-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(104,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Local Health Network','Local Health Network',NULL,NULL,NULL,'2',NULL,'Both','1973371496',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Health Network',NULL,NULL,NULL,0,NULL,NULL,82,'Local Health Network',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Truman','Mr. Truman Roberts II',NULL,NULL,NULL,'4',NULL,'Both','3664937465',NULL,'Sample Data','Truman','','Roberts',3,3,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Mr. Truman Roberts II',NULL,NULL,'1970-02-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(106,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Shauna','Shauna Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3723668425',NULL,'Sample Data','Shauna','S','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Samuels',NULL,1,NULL,1,'2019-11-18',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker-Wagner, Jacob','Jacob Parker-Wagner',NULL,NULL,NULL,NULL,NULL,'Both','3882120495',NULL,'Sample Data','Jacob','','Parker-Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Parker-Wagner',NULL,2,'2009-09-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Lashawnda','Lashawnda Reynolds',NULL,NULL,NULL,'3',NULL,'Both','935996887',NULL,'Sample Data','Lashawnda','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsen.kathlyn@infomail.co.uk','olsen.kathlyn@infomail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','2298197723',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear olsen.kathlyn@infomail.co.uk',1,NULL,'Dear olsen.kathlyn@infomail.co.uk',1,NULL,'olsen.kathlyn@infomail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,'California Legal School',NULL,NULL,118,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(110,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Lincoln Music Partnership','Lincoln Music Partnership',NULL,NULL,NULL,'4',NULL,'Both','4049459743',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lincoln Music Partnership',NULL,NULL,NULL,0,NULL,NULL,21,'Lincoln Music Partnership',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(111,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav, Santina','Santina Yadav',NULL,NULL,NULL,'4',NULL,'Both','3262021642',NULL,'Sample Data','Santina','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Yadav',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(112,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Grant, Kacey','Kacey Grant',NULL,NULL,NULL,'3',NULL,'Both','3274986963',NULL,'Sample Data','Kacey','D','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Grant',NULL,1,'1971-05-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(113,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Friends Music Services','Friends Music Services',NULL,NULL,NULL,'2',NULL,'Both','2698246175',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Music Services',NULL,NULL,NULL,0,NULL,NULL,182,'Friends Music Services',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(114,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Herminia','Herminia Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2172372210',NULL,'Sample Data','Herminia','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Jameson',NULL,NULL,'2000-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope-Parker, Eleonor','Eleonor Zope-Parker',NULL,NULL,NULL,'3',NULL,'Both','3802257091',NULL,'Sample Data','Eleonor','L','Zope-Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Zope-Parker',NULL,1,'1974-09-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(116,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Lee, Shauna','Ms. Shauna Lee',NULL,NULL,NULL,NULL,NULL,'Both','3300398193',NULL,'Sample Data','Shauna','','Lee',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Lee',NULL,NULL,'1952-07-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(117,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Daren','Daren Jensen Sr.',NULL,NULL,NULL,'1',NULL,'Both','817039458',NULL,'Sample Data','Daren','Z','Jensen',NULL,2,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Jensen Sr.',NULL,NULL,'1986-02-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(118,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'California Legal School','California Legal School',NULL,NULL,NULL,NULL,NULL,'Both','1684258442',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Legal School',NULL,NULL,NULL,0,NULL,NULL,109,'California Legal School',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Roberts, Laree','Laree Wattson-Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2912769833',NULL,'Sample Data','Laree','','Wattson-Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Wattson-Roberts',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(120,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Kandace','Ms. Kandace Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','2771100224',NULL,'Sample Data','Kandace','','Dimitrov',2,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Ms. Kandace Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(121,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Community Legal Collective','Community Legal Collective',NULL,NULL,NULL,'2',NULL,'Both','1915166559',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Legal Collective',NULL,NULL,NULL,0,NULL,NULL,55,'Community Legal Collective',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(122,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Sonny','Sonny Terry',NULL,NULL,NULL,'1',NULL,'Both','2037695520',NULL,'Sample Data','Sonny','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Terry',NULL,2,NULL,0,NULL,NULL,NULL,'Yukon Music Fellowship',NULL,NULL,190,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Alexia','Alexia Jones',NULL,NULL,NULL,NULL,NULL,'Both','252738965',NULL,'Sample Data','Alexia','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(124,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Grant, Jina','Jina Wagner-Grant',NULL,NULL,NULL,'3',NULL,'Both','2176815138',NULL,'Sample Data','Jina','E','Wagner-Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Wagner-Grant',NULL,1,'1980-05-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(125,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Delana','Delana Müller',NULL,NULL,NULL,'4',NULL,'Both','2709014277',NULL,'Sample Data','Delana','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Sherman','Sherman Roberts',NULL,NULL,NULL,'3',NULL,'Both','1027715448',NULL,'Sample Data','Sherman','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Roberts',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(127,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Josefa','Ms. Josefa Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','3593065423',NULL,'Sample Data','Josefa','','Blackwell',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Blackwell',NULL,1,'1935-03-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(128,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Teddy','Dr. Teddy Jacobs II',NULL,NULL,NULL,NULL,NULL,'Both','730676702',NULL,'Sample Data','Teddy','M','Jacobs',4,3,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Jacobs II',NULL,2,'1993-10-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Valene','Valene Müller',NULL,NULL,NULL,NULL,NULL,'Both','444739216',NULL,'Sample Data','Valene','I','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Müller',NULL,1,'2009-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'be.terrell@testmail.co.in','be.terrell@testmail.co.in',NULL,NULL,NULL,'3',NULL,'Both','4054735089',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear be.terrell@testmail.co.in',1,NULL,'Dear be.terrell@testmail.co.in',1,NULL,'be.terrell@testmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(131,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Delana','Mrs. Delana Yadav',NULL,NULL,NULL,'5',NULL,'Both','844917598',NULL,'Sample Data','Delana','D','Yadav',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Yadav',NULL,1,'1962-10-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(132,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Troy','Troy Patel',NULL,NULL,NULL,'1',NULL,'Both','1028090211',NULL,'Sample Data','Troy','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Patel',NULL,2,'2016-07-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels-Olsen, Jackson','Jackson Samuels-Olsen II',NULL,NULL,NULL,NULL,NULL,'Both','447975851',NULL,'Sample Data','Jackson','','Samuels-Olsen',NULL,3,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Samuels-Olsen II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(134,'Household',NULL,1,1,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Carlos','Carlos Lee Jr.',NULL,NULL,NULL,'4',NULL,'Both','1904694300',NULL,'Sample Data','Carlos','','Lee',NULL,1,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Lee Jr.',NULL,2,'1972-09-24',0,NULL,NULL,NULL,'Beech Sustainability Trust',NULL,NULL,153,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(136,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper-Yadav, Ashley','Ashley Cooper-Yadav',NULL,NULL,NULL,'2',NULL,'Both','2863427603',NULL,'Sample Data','Ashley','B','Cooper-Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Cooper-Yadav',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(137,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Felisha','Felisha Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3470675762',NULL,'Sample Data','Felisha','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Nielsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(138,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Norris','Mr. Norris Parker',NULL,NULL,NULL,'3',NULL,'Both','3555621557',NULL,'Sample Data','Norris','','Parker',3,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Mr. Norris Parker',NULL,NULL,'1970-11-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(139,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Parker-Grant family','Parker-Grant family',NULL,NULL,NULL,'4',NULL,'Both','1787926850',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker-Grant family',5,NULL,'Dear Parker-Grant family',2,NULL,'Parker-Grant family',NULL,NULL,NULL,0,NULL,'Parker-Grant family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jeromez@example.org','jeromez@example.org',NULL,NULL,NULL,'2',NULL,'Both','98282835',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear jeromez@example.org',1,NULL,'Dear jeromez@example.org',1,NULL,'jeromez@example.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(141,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'DÃaz, Errol','Errol DÃaz Sr.',NULL,NULL,NULL,NULL,NULL,'Both','4116027034',NULL,'Sample Data','Errol','','DÃaz',NULL,2,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol DÃaz Sr.',NULL,2,'1988-07-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(142,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'States Technology Initiative','States Technology Initiative',NULL,NULL,NULL,NULL,NULL,'Both','3517127573',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'States Technology Initiative',NULL,NULL,NULL,0,NULL,NULL,176,'States Technology Initiative',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(143,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Elina','Elina McReynolds',NULL,NULL,NULL,'3',NULL,'Both','130391420',NULL,'Sample Data','Elina','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina McReynolds',NULL,1,'1984-09-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(144,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'sreynolds@fakemail.co.nz','sreynolds@fakemail.co.nz',NULL,NULL,NULL,'5',NULL,'Both','1059810794',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear sreynolds@fakemail.co.nz',1,NULL,'Dear sreynolds@fakemail.co.nz',1,NULL,'sreynolds@fakemail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(145,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson, Kandace','Kandace Jameson',NULL,NULL,NULL,'5',NULL,'Both','181551567',NULL,'Sample Data','Kandace','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Jameson',NULL,1,'1966-09-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Maria','Maria Patel Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1297212984',NULL,'Sample Data','Maria','N','Patel',NULL,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Patel Jr.',NULL,NULL,'2005-02-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Clint','Clint Jameson III',NULL,NULL,NULL,'4',NULL,'Both','3622436306',NULL,'Sample Data','Clint','A','Jameson',NULL,4,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Jameson III',NULL,2,'2002-01-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(148,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Parker-Wagner family','Parker-Wagner family',NULL,NULL,NULL,'2',NULL,'Both','2849851518',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker-Wagner family',5,NULL,'Dear Parker-Wagner family',2,NULL,'Parker-Wagner family',NULL,NULL,NULL,0,NULL,'Parker-Wagner family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(149,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'United Poetry Fellowship','United Poetry Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','1218226956',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Poetry Fellowship',NULL,NULL,NULL,0,NULL,NULL,NULL,'United Poetry Fellowship',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(150,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Jay','Jay Dimitrov',NULL,NULL,NULL,'3',NULL,'Both','512179988',NULL,'Sample Data','Jay','O','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Dimitrov',NULL,2,'1937-09-18',0,NULL,NULL,NULL,'Progressive Poetry Partnership',NULL,NULL,97,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(151,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Betty','Betty Wilson',NULL,NULL,NULL,NULL,NULL,'Both','3748989066',NULL,'Sample Data','Betty','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Wilson',NULL,1,'1964-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Santina','Santina Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2989109013',NULL,'Sample Data','Santina','K','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Jameson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(153,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Beech Sustainability Trust','Beech Sustainability Trust',NULL,NULL,NULL,'5',NULL,'Both','3061781347',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Beech Sustainability Trust',NULL,NULL,NULL,0,NULL,NULL,135,'Beech Sustainability Trust',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Teddy','Teddy Parker Jr.',NULL,NULL,NULL,'5',NULL,'Both','1804413700',NULL,'Sample Data','Teddy','N','Parker',NULL,1,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Parker Jr.',NULL,2,'2016-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(155,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Samuels-Olsen family','Samuels-Olsen family',NULL,NULL,NULL,'1',NULL,'Both','1720860212',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels-Olsen family',5,NULL,'Dear Samuels-Olsen family',2,NULL,'Samuels-Olsen family',NULL,NULL,NULL,0,NULL,'Samuels-Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(156,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Teddy','Dr. Teddy Blackwell',NULL,NULL,NULL,'1',NULL,'Both','3440187169',NULL,'Sample Data','Teddy','T','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Blackwell',NULL,2,'1960-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner-Müller, Lashawnda','Lashawnda Wagner-Müller',NULL,NULL,NULL,NULL,NULL,'Both','3890554952',NULL,'Sample Data','Lashawnda','B','Wagner-Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Wagner-Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(158,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Alida','Alida Patel',NULL,NULL,NULL,'3',NULL,'Both','3742818616',NULL,'Sample Data','Alida','L','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Alida Patel',NULL,NULL,'1936-11-11',1,'2019-03-13',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(159,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'United Health Trust','United Health Trust',NULL,NULL,NULL,'2',NULL,'Both','50896687',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Health Trust',NULL,NULL,NULL,0,NULL,NULL,80,'United Health Trust',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(160,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Lou','Lou Grant',NULL,NULL,NULL,NULL,NULL,'Both','155954418',NULL,'Sample Data','Lou','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Grant',NULL,2,'2008-08-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(161,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Sherman','Sherman Prentice III',NULL,NULL,NULL,'3',NULL,'Both','2980148757',NULL,'Sample Data','Sherman','F','Prentice',NULL,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Prentice III',NULL,2,'2010-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(162,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Patel, Jackson','Dr. Jackson Patel Sr.',NULL,NULL,NULL,'1',NULL,'Both','2060230662',NULL,'Sample Data','Jackson','I','Patel',4,2,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Patel Sr.',NULL,2,'1998-11-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'omarm@fishmail.net','omarm@fishmail.net',NULL,NULL,NULL,NULL,NULL,'Both','3872264428',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear omarm@fishmail.net',1,NULL,'Dear omarm@fishmail.net',1,NULL,'omarm@fishmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Jed','Jed Smith',NULL,NULL,NULL,'4',NULL,'Both','2767892191',NULL,'Sample Data','Jed','Y','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Smith',NULL,2,'1950-12-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Kathleen','Kathleen DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','3901103420',NULL,'Sample Data','Kathleen','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen DÃaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kiara','Ms. Kiara Jensen',NULL,NULL,NULL,'4',NULL,'Both','4228592498',NULL,'Sample Data','Kiara','M','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Ms. Kiara Jensen',NULL,1,'1971-04-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(167,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Magan','Magan Blackwell',NULL,NULL,NULL,'3',NULL,'Both','3548232286',NULL,'Sample Data','Magan','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Blackwell',NULL,1,'1989-03-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(168,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Teresa','Mrs. Teresa Patel',NULL,NULL,NULL,NULL,NULL,'Both','1615801119',NULL,'Sample Data','Teresa','','Patel',1,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Mrs. Teresa Patel',NULL,1,'1987-05-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(169,'Individual',NULL,0,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,'1963-11-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(170,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav-Grant family','Yadav-Grant family',NULL,NULL,NULL,'4',NULL,'Both','3029159389',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav-Grant family',5,NULL,'Dear Yadav-Grant family',2,NULL,'Yadav-Grant family',NULL,NULL,NULL,0,NULL,'Yadav-Grant family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(171,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson family','Jameson family',NULL,NULL,NULL,'2',NULL,'Both','2255649769',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson family',5,NULL,'Dear Jameson family',2,NULL,'Jameson family',NULL,NULL,NULL,0,NULL,'Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(172,'Household',NULL,0,0,0,0,1,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Bernadette','Ms. Bernadette Grant',NULL,NULL,NULL,'2',NULL,'Both','2386715823',NULL,'Sample Data','Bernadette','O','Grant',2,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Ms. Bernadette Grant',NULL,1,'1940-05-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(174,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Winford','Winford Parker',NULL,NULL,NULL,'5',NULL,'Both','1625763341',NULL,'Sample Data','Winford','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford Parker',NULL,NULL,'1960-02-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Prentice, Elizabeth','Dr. Elizabeth Wattson-Prentice',NULL,NULL,NULL,NULL,NULL,'Both','3126293613',NULL,'Sample Data','Elizabeth','','Wattson-Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Dr. Elizabeth Wattson-Prentice',NULL,1,'1980-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(176,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samuels, Omar','Mr. Omar Samuels III',NULL,NULL,NULL,'5',NULL,'Both','1072276407',NULL,'Sample Data','Omar','','Samuels',3,4,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Samuels III',NULL,2,NULL,0,NULL,NULL,NULL,'States Technology Initiative',NULL,NULL,142,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(177,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Herminia','Herminia Nielsen',NULL,NULL,NULL,'5',NULL,'Both','176728020',NULL,'Sample Data','Herminia','O','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Nielsen',NULL,1,'2003-11-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Alida','Alida Yadav',NULL,NULL,NULL,'3',NULL,'Both','3582338734',NULL,'Sample Data','Alida','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Alida Yadav',NULL,1,'2001-06-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(179,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,'4',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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(180,'Household',NULL,0,0,0,0,1,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,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Lincoln','Lincoln Grant',NULL,NULL,NULL,'1',NULL,'Both','2133553876',NULL,'Sample Data','Lincoln','K','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Grant',NULL,2,'1992-06-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(182,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Sanford','Mr. Sanford Olsen III',NULL,NULL,NULL,NULL,NULL,'Both','2408737591',NULL,'Sample Data','Sanford','','Olsen',3,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Olsen III',NULL,NULL,NULL,0,NULL,NULL,NULL,'Friends Music Services',NULL,NULL,113,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Landon','Landon Prentice III',NULL,NULL,NULL,'5',NULL,'Both','927380636',NULL,'Sample Data','Landon','I','Prentice',NULL,4,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Prentice III',NULL,NULL,'2003-04-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(184,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Ashlie','Ashlie Grant',NULL,NULL,NULL,'1',NULL,'Both','3647636538',NULL,'Sample Data','Ashlie','Y','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Grant',NULL,1,'1960-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(185,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Craig','Craig Dimitrov Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3815881421',NULL,'Sample Data','Craig','S','Dimitrov',NULL,1,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Dimitrov Jr.',NULL,2,NULL,0,NULL,NULL,NULL,'Beech Arts Fund',NULL,NULL,71,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(186,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Prentice, Maxwell','Dr. Maxwell Prentice II',NULL,NULL,NULL,'3',NULL,'Both','1532112278',NULL,'Sample Data','Maxwell','','Prentice',4,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Dr. Maxwell Prentice II',NULL,2,'1997-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(187,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Blackwell, Magan','Magan Blackwell',NULL,NULL,NULL,'4',NULL,'Both','3548232286',NULL,'Sample Data','Magan','X','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(188,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz family','Cruz family',NULL,NULL,NULL,NULL,NULL,'Both','2326538497',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz family',5,NULL,'Dear Cruz family',2,NULL,'Cruz family',NULL,NULL,NULL,0,NULL,'Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(189,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Mei','Mei Müller',NULL,NULL,NULL,NULL,NULL,'Both','726297805',NULL,'Sample Data','Mei','H','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Müller',NULL,1,'1940-09-15',1,'2019-10-12',NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:47'),(190,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Yukon Music Fellowship','Yukon Music Fellowship',NULL,NULL,NULL,'3',NULL,'Both','3603225200',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Yukon Music Fellowship',NULL,NULL,NULL,0,NULL,NULL,122,'Yukon Music Fellowship',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(191,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Friends Food Network','Friends Food Network',NULL,NULL,NULL,NULL,NULL,'Both','674500802',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Food Network',NULL,NULL,NULL,0,NULL,NULL,66,'Friends Food Network',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(192,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Nicole','Nicole Adams',NULL,NULL,NULL,NULL,NULL,'Both','1724528090',NULL,'Sample Data','Nicole','O','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Adams',NULL,1,'1946-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(193,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'College Arts Alliance','College Arts Alliance',NULL,NULL,NULL,NULL,NULL,'Both','2613695336',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'College Arts Alliance',NULL,NULL,NULL,0,NULL,NULL,40,'College Arts Alliance',NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(194,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Jameson, Alexia','Alexia Jameson',NULL,NULL,NULL,'5',NULL,'Both','1617185067',NULL,'Sample Data','Alexia','Y','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Jameson',NULL,1,'2000-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels-Olsen, Clint','Clint Samuels-Olsen II',NULL,NULL,NULL,'1',NULL,'Both','923383823',NULL,'Sample Data','Clint','','Samuels-Olsen',NULL,3,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Samuels-Olsen II',NULL,2,'1982-03-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Shauna','Shauna Bachman',NULL,NULL,NULL,'4',NULL,'Both','1518911519',NULL,'Sample Data','Shauna','G','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Bachman',NULL,1,'1955-06-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'),(197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith-DÃaz, Santina','Ms. Santina Smith-DÃaz',NULL,NULL,NULL,'1',NULL,'Both','2045566064',NULL,'Sample Data','Santina','','Smith-DÃaz',2,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Ms. Santina Smith-DÃaz',NULL,1,'1972-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(198,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson family','Jameson family',NULL,NULL,NULL,'4',NULL,'Both','2255649769',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jameson family',5,NULL,'Dear Jameson family',2,NULL,'Jameson family',NULL,NULL,NULL,0,NULL,'Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:49'),(199,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Herminia','Herminia Müller',NULL,NULL,NULL,NULL,NULL,'Both','1737815792',NULL,'Sample Data','Herminia','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Santina','Ms. Santina Cruz',NULL,NULL,NULL,NULL,NULL,'Both','2716363511',NULL,'Sample Data','Santina','','Cruz',2,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Ms. Santina Cruz',NULL,NULL,'1969-05-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:50'),(201,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Grant, Barry','Mr. Barry Grant II',NULL,NULL,NULL,NULL,NULL,'Both','3594746483',NULL,'Sample Data','Barry','','Grant',3,3,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Grant II',NULL,NULL,'1998-07-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2020-01-16 22:53:47','2020-01-16 22:53:48'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -228,7 +228,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution` WRITE; /*!40000 ALTER TABLE `civicrm_contribution` DISABLE KEYS */; -INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0),(2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0),(4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0),(5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0),(6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0),(7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(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,175,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,80,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,45,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,52,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,33,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,58,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,107,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,95,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,66,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,166,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,2,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,134,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,115,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,139,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,147,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,145,2,NULL,1,'2019-11-29 08:55:52',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,37,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,105,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,160,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,148,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,144,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,103,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,55,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,200,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(38,184,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(39,89,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(40,26,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(41,84,2,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(42,47,2,NULL,1,'2019-11-29 08:55:52',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(43,25,2,NULL,1,'2019-11-29 08:55:52',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(45,2,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(46,5,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(47,6,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(48,14,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(49,16,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(50,18,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(51,22,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(52,25,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(53,27,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(54,30,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(55,33,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(56,47,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(57,52,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(58,58,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(59,61,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(60,63,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(61,64,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(62,68,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(63,73,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(64,77,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(65,78,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(66,81,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(67,85,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(68,88,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(69,89,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(70,92,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(71,102,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(72,103,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(73,105,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(74,107,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(75,109,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(76,113,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(77,115,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(78,118,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(79,121,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(80,131,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(81,133,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(82,135,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(83,142,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(84,149,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(85,159,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(86,162,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(87,165,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(88,171,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(89,179,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(90,184,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(91,188,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(92,189,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(93,191,4,NULL,1,'2019-11-29 08:55:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(94,195,4,NULL,1,'2019-11-29 08:55:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-11-29 08:55:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES (1,2,1,NULL,4,'2010-04-11 00:00:00',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0),(2,4,1,NULL,1,'2010-03-21 00:00:00',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(3,6,1,NULL,4,'2010-04-29 00:00:00',0.00,25.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0),(4,8,1,NULL,4,'2010-04-11 00:00:00',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0),(5,16,1,NULL,4,'2010-04-15 00:00:00',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0),(6,19,1,NULL,4,'2010-04-11 00:00:00',0.00,175.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Apr 2007 Mailer 1',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0),(7,82,1,NULL,1,'2010-03-27 00:00:00',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(8,92,1,NULL,1,'2010-03-08 00:00:00',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(9,34,1,NULL,1,'2010-04-22 00:00:00',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(10,71,1,NULL,1,'2009-07-01 11:53:50',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(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,89,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(15,82,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(16,14,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(17,183,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(18,133,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(19,20,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(20,132,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(21,77,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(22,138,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(23,164,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(24,34,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(25,128,2,NULL,1,'2020-01-17 09:53:51',0.00,100.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(26,50,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(27,85,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(28,94,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(29,30,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(30,51,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(31,103,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(32,181,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(33,40,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(34,105,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(35,42,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(36,5,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(37,120,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(38,184,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(39,29,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(40,197,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(41,64,2,NULL,1,'2020-01-17 09:53:51',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(42,165,2,NULL,1,'2020-01-17 09:53:51',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(43,122,2,NULL,1,'2020-01-17 09:53:51',0.00,1200.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(45,1,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(46,6,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(47,16,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(48,25,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(49,26,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(50,30,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(51,35,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(52,39,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(53,42,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(54,45,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(55,46,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(56,52,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(57,55,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(58,62,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(59,79,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(60,81,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(61,85,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(62,86,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(63,89,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(64,90,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(65,100,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(66,102,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(67,103,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(68,105,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(69,106,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',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,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(71,115,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(72,120,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(73,124,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(74,128,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(75,136,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(76,138,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(77,140,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(78,143,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',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,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(80,149,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(81,150,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(82,157,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(83,159,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(84,160,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(85,163,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',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,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(87,167,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(88,171,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(89,176,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(90,187,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(91,188,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(92,191,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(93,194,4,NULL,1,'2020-01-17 09:53:52',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0),(94,196,4,NULL,1,'2020-01-17 09:53:52',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2020-01-17 09:53:52',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; @@ -266,7 +266,7 @@ 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,54,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,54,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); +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,140,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,140,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -399,7 +399,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.22.1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.23.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -409,7 +409,7 @@ UNLOCK TABLES; 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',0,0,0,0,NULL,NULL,NULL,NULL),(2,164,1,'herminiajones@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(3,164,1,'jones.herminia35@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(4,172,1,'russells@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(5,54,1,'terry.t.sonny42@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL),(6,49,1,'mllera@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(7,49,1,'mllera71@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(8,13,1,'samuels.angelika39@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(9,13,1,'samuelsa@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(10,176,1,'ivanov.kandace@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(11,28,1,'wagnerr@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(12,28,1,'wagnerr80@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(13,157,1,'shermanr@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(14,157,1,'shermanreynolds@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(15,66,1,'grant.rosario38@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(16,14,1,'rebekahadams@example.org',1,0,0,0,NULL,NULL,NULL,NULL),(17,102,1,'carylonmller36@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(18,22,1,'prentice.d.juliann@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(19,22,1,'prenticej24@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(20,37,1,'junkoj78@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(21,30,1,'smith.delana@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(22,17,1,'bachman.bryon73@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(23,17,1,'bachman.e.bryon@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL),(24,80,1,'sjensen@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(25,80,1,'jensen.sharyn10@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(26,60,1,'cruz.felisha@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(27,60,1,'cruz.felisha@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(28,82,1,'wilson.herminia4@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(29,57,1,'bo.jones@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(30,8,1,'ivanov.g.carlos70@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(31,8,1,'ivanov.g.carlos@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(32,170,1,'robertsb@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(33,170,1,'roberts.betty@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(34,111,1,'heidimller@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(35,111,1,'mller.u.heidi@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(36,70,1,'meichowski52@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(37,70,1,'mchowski@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(38,169,1,'kx.terrell@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(39,124,1,'terrell.sherman@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(40,124,1,'terrells75@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(41,103,1,'princessdaz@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(42,103,1,'pdaz@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(43,72,1,'allanjensen@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(44,72,1,'jensen.allan@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(45,50,1,'lour@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(46,4,1,'wagner.russell@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(47,166,1,'sparker@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(48,191,1,'prenticej@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(49,59,1,'jameson.j.carylon50@lol.org',1,0,0,0,NULL,NULL,NULL,NULL),(50,59,1,'jamesonc5@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(51,173,1,'ivanov.merrie57@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(52,173,1,'mf.ivanov@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL),(53,53,1,'princessw@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(54,53,1,'princesswilson@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(55,116,1,'brentmcreynolds@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(56,116,1,'bw.mcreynolds95@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(57,186,1,'ashleyj@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(58,133,1,'bzope@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(59,171,1,'mllere29@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(60,171,1,'erikmller@lol.net',0,0,0,0,NULL,NULL,NULL,NULL),(61,78,1,'lashawndan@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(62,149,1,'smith.brittney@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(63,149,1,'smithb@example.info',0,0,0,0,NULL,NULL,NULL,NULL),(64,39,1,'angelikag@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(65,39,1,'gonzleza@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(66,113,1,'ashleyi12@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(67,184,1,'deforestt@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(68,184,1,'deforest.y.tanya@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(69,55,1,'jx.deforest@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(70,145,1,'felishaj40@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(71,145,1,'fe.jones@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(72,162,1,'dimitrovd@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(73,162,1,'dimitrovd53@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(74,189,1,'elbertw33@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(75,193,1,'chowskie51@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(76,26,1,'shads@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(77,18,1,'ni.prentice@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(78,3,1,'dsmith17@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(79,3,1,'smithd40@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(80,89,1,'blackwell.jerome@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(81,89,1,'blackwell.jerome@sample.com',0,0,0,0,NULL,NULL,NULL,NULL),(82,180,1,'rodrigojones97@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(83,177,1,'ksamuels67@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(84,177,1,'samuels.kandace27@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(85,119,1,'loucruz96@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(86,119,1,'cruzl@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(87,84,1,'barkley.felisha53@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL),(88,84,1,'fbarkley@notmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(89,192,1,'shaunabarkley@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(90,192,1,'barkley.k.shauna@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL),(91,48,1,'barkley.rolando@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(92,105,1,'roberts-barkley.scott@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(93,2,1,'maxwellbarkley@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(94,2,1,'barkleym@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(95,112,1,'nl.barkley@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(96,123,1,'aroberts23@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(97,123,1,'roberts.angelika@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(98,95,1,'ashliej@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(99,95,1,'ajameson-roberts@fishmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(100,36,1,'ajameson-roberts@infomail.com',1,0,0,0,NULL,NULL,NULL,NULL),(101,36,1,'ashleyj82@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(102,132,1,'maganw@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(103,64,1,'parker.valene@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(104,64,1,'parkerv@testmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(105,152,1,'samsone17@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(106,115,1,'samson.carlos@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(107,115,1,'samson.carlos59@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(108,65,1,'smith.sonny78@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(109,65,1,'sonnysmith@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(110,158,1,'smith.beula@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(111,158,1,'beulas41@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(112,41,1,'smith.brent@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(113,41,1,'smith.brent@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(114,94,1,'jsmith@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(115,101,1,'wilson.scarlet@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(116,101,1,'wilson.scarlet@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(117,151,1,'ewilson25@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(118,151,1,'wilson.errol@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(119,104,1,'lincolnchowski49@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(120,104,1,'chowskil@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(121,67,1,'echowski18@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(122,93,1,'chowski.bernadette25@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL),(123,93,1,'chowski.bernadette23@lol.net',0,0,0,0,NULL,NULL,NULL,NULL),(124,199,1,'chowski.beula@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(125,199,1,'beulachowski77@testing.info',0,0,0,0,NULL,NULL,NULL,NULL),(126,92,1,'jacobs.teresa@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(127,92,1,'jacobs.teresa@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL),(128,68,1,'jacobs.kandace67@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(129,68,1,'jacobs.kandace@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(130,140,1,'pk.samson@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(131,58,1,'msamson@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(132,58,1,'miguelsamson@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(133,114,1,'ivanov.maxwell@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(134,114,1,'maxwellivanov@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL),(135,35,1,'ivanovm@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(136,35,1,'maganivanov@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(137,195,1,'ivanovw@lol.org',1,0,0,0,NULL,NULL,NULL,NULL),(138,195,1,'ivanov.winford@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(139,175,1,'cdimitrov58@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(140,190,1,'smith.heidi@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(141,146,1,'dimitrov-smithi@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(142,146,1,'dimitrov-smithi@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(143,160,1,'ashleydimitrov-smith@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(144,160,1,'ashleyd69@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(145,81,1,'cooper-yadava46@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(146,81,1,'as.cooper-yadav@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(147,85,1,'jayyadav@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(148,85,1,'yadavj@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(149,24,1,'robertson.v.juliann67@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL),(150,143,1,'erobertson45@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(151,185,1,'bd.smith@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(152,135,1,'rebekahb@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(153,135,1,'rn.bachman-smith@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL),(154,130,1,'russellbachman-smith@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(155,130,1,'bachman-smithr@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(156,63,1,'deforest.russell@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(157,198,1,'roberts-deforest.princess36@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(158,198,1,'proberts-deforest33@testmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(159,106,1,'rodrigodeforest36@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(160,106,1,'rodrigod@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(161,62,1,'deforestt23@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(162,182,1,'jsmith92@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(163,182,1,'smith.jay43@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(164,136,1,'zopet67@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(165,136,1,'zope.tanya@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(166,12,1,'mller.x.russell35@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(167,12,1,'rx.mller17@infomail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(168,178,1,'jameson-mller.o.eleonor@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(169,178,1,'eleonorj63@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL),(170,165,1,'allenmller@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(171,165,1,'mller.f.allen@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(172,45,1,'yadav-olsen.brigette@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(173,154,1,'yadav-olsen.jerome79@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(174,154,1,'yadav-olsen.jerome@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(175,83,3,'sales@almacenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(176,3,2,'darens@almacenter.org',0,0,0,0,NULL,NULL,NULL,NULL),(177,86,3,'sales@lincolnmusic.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,125,2,'beulaparker@lincolnmusic.org',1,0,0,0,NULL,NULL,NULL,NULL),(179,10,3,'info@redmonhealth.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,179,2,'jacobsl@redmonhealth.org',1,0,0,0,NULL,NULL,NULL,NULL),(181,181,3,'service@cadelldevelopmentservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,71,2,'wilson.errol95@cadelldevelopmentservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(183,29,3,'info@sissetoninitiative.org',1,0,0,0,NULL,NULL,NULL,NULL),(184,63,2,'ry.deforest@sissetoninitiative.org',0,0,0,0,NULL,NULL,NULL,NULL),(185,187,3,'service@creativeeducation.org',1,0,0,0,NULL,NULL,NULL,NULL),(186,189,2,'wilson.g.elbert@creativeeducation.org',0,0,0,0,NULL,NULL,NULL,NULL),(187,155,3,'contact@jamestownwellnesspartners.org',1,0,0,0,NULL,NULL,NULL,NULL),(188,89,2,'.@jamestownwellnesspartners.org',0,0,0,0,NULL,NULL,NULL,NULL),(189,161,3,'info@urbanliteracycollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(190,138,3,'service@imbodenalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(191,38,3,'sales@baypartners.org',1,0,0,0,NULL,NULL,NULL,NULL),(192,37,2,'jones.junko44@baypartners.org',0,0,0,0,NULL,NULL,NULL,NULL),(193,6,3,'sales@yhpeaceacademy.org',1,0,0,0,NULL,NULL,NULL,NULL),(194,188,2,'samson.jerome24@yhpeaceacademy.org',1,0,0,0,NULL,NULL,NULL,NULL),(195,27,3,'info@fredericksburgfoodfund.org',1,0,0,0,NULL,NULL,NULL,NULL),(196,58,2,'miguelsamson@fredericksburgfoodfund.org',0,0,0,0,NULL,NULL,NULL,NULL),(197,69,3,'sales@scliteracyservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(198,142,3,'feedback@wisconsintechnology.org',1,0,0,0,NULL,NULL,NULL,NULL),(199,93,2,'chowskib@wisconsintechnology.org',0,0,0,0,NULL,NULL,NULL,NULL),(200,11,3,'service@montanaadvocacyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(201,120,3,'sales@wisconsintrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(202,75,2,'af.jacobs@wisconsintrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(203,56,3,'service@ohioadvocacy.org',1,0,0,0,NULL,NULL,NULL,NULL),(204,24,2,'juliannr@ohioadvocacy.org',0,0,0,0,NULL,NULL,NULL,NULL),(205,76,3,'feedback@communityfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(206,112,2,'barkleyn@communityfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(207,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(208,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(209,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); +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',0,0,0,0,NULL,NULL,NULL,NULL),(2,96,1,'na.yadav14@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(3,96,1,'yadavn@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL),(4,43,1,'shaunab@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(5,43,1,'sbarkley@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(6,140,1,'jeromez@example.org',1,0,0,0,NULL,NULL,NULL,NULL),(7,95,1,'cruz.y.eleonor@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(8,95,1,'ey.cruz28@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(9,106,1,'ss.samuels79@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(10,98,1,'jaygonzlez@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(11,127,1,'blackwellj76@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(12,102,1,'wagnerr@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(13,141,1,'edaz@sample.org',1,0,0,0,NULL,NULL,NULL,NULL),(14,105,1,'trumanroberts@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(15,105,1,'robertst@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(16,23,1,'tterrell86@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(17,23,1,'terrell.troy89@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(18,9,1,'eo.terrell6@example.biz',1,0,0,0,NULL,NULL,NULL,NULL),(19,9,1,'terrell.o.elbert68@sample.biz',0,0,0,0,NULL,NULL,NULL,NULL),(20,117,1,'dz.jensen12@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(21,117,1,'darenj@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(22,10,1,'bachmanl@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(23,40,1,'wattsonc@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(24,40,1,'co.wattson@testing.net',0,0,0,0,NULL,NULL,NULL,NULL),(25,185,1,'craigd@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(26,37,1,'patel.rosario@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(27,37,1,'patel.rosario@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(28,27,1,'arlynes99@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(29,27,1,'ak.smith25@sample.info',0,0,0,0,NULL,NULL,NULL,NULL),(30,164,1,'smith.jed@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(31,164,1,'smith.y.jed@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL),(32,49,1,'robertson.j.alexia@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(33,49,1,'robertson.alexia@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(34,130,1,'be.terrell@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(35,4,1,'mterry52@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(36,100,1,'terrya@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(37,100,1,'angelikat5@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(38,16,1,'jmller30@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(39,16,1,'mller.jacob@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(40,29,1,'andrewdeforest55@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(41,162,1,'jacksonp@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(42,162,1,'patelj@example.net',0,0,0,0,NULL,NULL,NULL,NULL),(43,59,1,'heidiy@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(44,144,1,'reynolds.sharyn@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(45,144,1,'sreynolds@fakemail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(46,21,1,'olsenb67@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(47,122,1,'sonnyt@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(48,122,1,'sonnyterry@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(49,74,1,'hy.cruz@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(50,74,1,'cruz.herminia@lol.net',0,0,0,0,NULL,NULL,NULL,NULL),(51,111,1,'yadavs@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(52,111,1,'santinay@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(53,181,1,'lincolng@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL),(54,201,1,'grantb@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(55,184,1,'ashlieg87@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(56,184,1,'ashliegrant@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(57,176,1,'samuels.omar54@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(58,176,1,'samuels.omar@sample.org',0,0,0,0,NULL,NULL,NULL,NULL),(59,178,1,'ayadav@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(60,51,1,'wattson.valene@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(61,52,1,'samuels.k.rolando68@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL),(62,11,1,'grant.d.valene@testmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(63,11,1,'valenegrant@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(64,103,1,'carlosrobertson@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(65,109,1,'olsen.l.kathlyn@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(66,109,1,'olsen.kathlyn@infomail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(67,73,1,'blackwell.l.omar@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(68,73,1,'blackwell.omar@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(69,55,1,'magandeforest@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(70,151,1,'wilson.betty83@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(71,151,1,'bwilson@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(72,108,1,'lashawndareynolds14@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(73,108,1,'reynoldsl61@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(74,19,1,'teresalee@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(75,19,1,'lee.teresa@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(76,196,1,'bachmans8@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(77,196,1,'bachmans@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(78,83,1,'robertss@sample.org',1,0,0,0,NULL,NULL,NULL,NULL),(79,83,1,'robertss94@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(80,80,1,'lawerencej@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(81,25,1,'ivanov.jacob32@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL),(82,25,1,'jivanov@example.info',0,0,0,0,NULL,NULL,NULL,NULL),(83,13,1,'daz.z.tanya66@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(84,13,1,'dazt@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(85,173,1,'bo.grant89@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(86,91,1,'jnielsen@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(87,91,1,'jacobn89@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(88,57,1,'ci.gonzlez@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(89,57,1,'gonzlezc@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(90,101,1,'daz.shad56@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(91,24,1,'eb.roberts71@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(92,24,1,'roberts.b.errol@testing.info',0,0,0,0,NULL,NULL,NULL,NULL),(93,168,1,'patel.teresa@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(94,146,1,'mn.patel@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(95,200,1,'cruzs@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(96,6,1,'cruz.herminia@sample.com',1,0,0,0,NULL,NULL,NULL,NULL),(97,6,1,'cruzh@mymail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(98,76,1,'cruzm@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(99,64,1,'prenticeb2@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(100,64,1,'prentice.n.barry@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(101,41,1,'tx.prentice@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(102,89,1,'jprentice@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(103,161,1,'shermanprentice26@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(104,138,1,'norrisp83@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(105,34,1,'parker-grant.maxwell@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(106,34,1,'mparker-grant51@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(107,56,1,'jamesonn@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(108,56,1,'jamesonn@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(109,156,1,'blackwell.teddy@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(110,167,1,'maganblackwell@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(111,45,1,'kt.blackwell79@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(112,20,1,'grant.allan@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(113,20,1,'grant.allan@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(114,124,1,'jinawagner-grant33@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(115,160,1,'lougrant16@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(116,160,1,'lgrant@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(117,126,1,'roberts.sherman@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(118,126,1,'sroberts@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(119,119,1,'lwattson-roberts12@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(120,119,1,'lareewattson-roberts22@lol.com',0,0,0,0,NULL,NULL,NULL,NULL),(121,44,1,'roberts.alida@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(122,2,1,'sanfordroberts@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(123,2,1,'roberts.sanford@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(124,26,1,'olsen.elina@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(125,26,1,'olsen.s.elina@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL),(126,133,1,'jsamuels-olsen34@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(127,195,1,'samuels-olsen.clint15@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(128,195,1,'samuels-olsen.clint67@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(129,145,1,'jamesonk46@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(130,114,1,'hjameson22@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(131,147,1,'jamesonc83@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(132,147,1,'jameson.a.clint19@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(133,81,1,'parker-wagner.i.kenny64@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(134,88,1,'jonesr@sample.net',1,0,0,0,NULL,NULL,NULL,NULL),(135,79,1,'norrisj25@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(136,123,1,'jonesa@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(137,77,1,'my.jones24@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(138,199,1,'herminiam4@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(139,125,1,'delanamller33@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(140,125,1,'mller.delana19@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(141,163,1,'omarm@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(142,60,1,'daz.errol66@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(143,60,1,'errold@lol.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(144,197,1,'smith-daz.santina81@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(145,69,1,'dazs@sample.com',1,0,0,0,NULL,NULL,NULL,NULL),(146,69,1,'sb.daz5@sample.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(147,87,1,'brentr@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(148,84,1,'reynolds.v.merrie86@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(149,86,1,'rf.prentice79@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(150,86,1,'prenticer@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(151,47,1,'nicolep@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(152,47,1,'nb.prentice@testing.net',0,0,0,0,NULL,NULL,NULL,NULL),(153,183,1,'landonprentice@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(154,14,1,'nielsenj@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(155,14,1,'josefan@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(156,50,1,'nielsenl@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(157,50,1,'lounielsen@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(158,177,1,'ho.nielsen9@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(159,177,1,'herminian3@fishmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(160,174,1,'winfordparker68@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(161,115,1,'zope-parker.eleonor@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(162,18,1,'sm.lee54@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(163,135,1,'carloslee@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(164,135,1,'clee59@lol.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(165,5,1,'bettyg@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(166,39,1,'arlyney@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(167,39,1,'arlyneyadav-grant@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(168,17,1,'yadav-grant.maxwell72@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(169,17,1,'yadav-grantm98@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL),(170,149,3,'sales@unitedpoetryfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(171,121,3,'service@communitylegal.org',1,0,0,0,NULL,NULL,NULL,NULL),(172,55,2,'deforest.magan41@communitylegal.org',0,0,0,0,NULL,NULL,NULL,NULL),(173,153,3,'service@beechsustainability.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,135,2,'leec27@beechsustainability.org',0,0,0,0,NULL,NULL,NULL,NULL),(175,113,3,'sales@friendsservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(176,182,2,'olsen.sanford38@friendsservices.org',1,0,0,0,NULL,NULL,NULL,NULL),(177,28,3,'info@michigansports.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,142,3,'info@statesinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL),(179,176,2,'samuels.omar18@statesinitiative.org',0,0,0,0,NULL,NULL,NULL,NULL),(180,191,3,'feedback@friendsfood.org',1,0,0,0,NULL,NULL,NULL,NULL),(181,66,2,'wagnere@friendsfood.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,104,3,'service@localnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL),(183,82,2,'parkere14@localnetwork.org',1,0,0,0,NULL,NULL,NULL,NULL),(184,190,3,'info@yukonfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(185,122,2,'sterry@yukonfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(186,22,3,'contact@jacksonassociation.org',1,0,0,0,NULL,NULL,NULL,NULL),(187,97,3,'sales@progressivepoetrypartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(188,150,2,'dimitrov.jay45@progressivepoetrypartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(189,71,3,'sales@beechartsfund.org',1,0,0,0,NULL,NULL,NULL,NULL),(190,185,2,'dimitrov.s.craig@beechartsfund.org',0,0,0,0,NULL,NULL,NULL,NULL),(191,159,3,'feedback@unitedhealth.org',1,0,0,0,NULL,NULL,NULL,NULL),(192,80,2,'jameson.lawerence40@unitedhealth.org',0,0,0,0,NULL,NULL,NULL,NULL),(193,31,3,'service@collegefund.org',1,0,0,0,NULL,NULL,NULL,NULL),(194,59,2,'yadavh42@collegefund.org',0,0,0,0,NULL,NULL,NULL,NULL),(195,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(196,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(197,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -447,7 +447,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_entity_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES (1,'civicrm_contribution',1,1,125.00),(2,'civicrm_financial_item',1,1,125.00),(3,'civicrm_contribution',2,2,50.00),(4,'civicrm_financial_item',2,2,50.00),(5,'civicrm_contribution',3,3,25.00),(6,'civicrm_financial_item',3,3,25.00),(7,'civicrm_contribution',4,4,50.00),(8,'civicrm_financial_item',4,4,50.00),(9,'civicrm_contribution',5,5,500.00),(10,'civicrm_financial_item',5,5,500.00),(11,'civicrm_contribution',6,6,175.00),(12,'civicrm_financial_item',6,6,175.00),(13,'civicrm_contribution',7,7,50.00),(14,'civicrm_financial_item',7,7,50.00),(15,'civicrm_contribution',8,8,10.00),(16,'civicrm_financial_item',8,8,10.00),(17,'civicrm_contribution',9,9,250.00),(18,'civicrm_financial_item',9,9,250.00),(19,'civicrm_contribution',10,10,500.00),(20,'civicrm_financial_item',10,10,500.00),(21,'civicrm_contribution',11,11,200.00),(22,'civicrm_financial_item',11,11,200.00),(23,'civicrm_contribution',12,12,200.00),(24,'civicrm_financial_item',12,12,200.00),(25,'civicrm_contribution',13,13,200.00),(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',15,15,100.00),(30,'civicrm_financial_item',15,15,100.00),(31,'civicrm_contribution',16,16,100.00),(32,'civicrm_financial_item',16,16,100.00),(33,'civicrm_contribution',17,17,100.00),(34,'civicrm_financial_item',17,17,100.00),(35,'civicrm_contribution',18,18,100.00),(36,'civicrm_financial_item',18,18,100.00),(37,'civicrm_contribution',19,19,100.00),(38,'civicrm_financial_item',19,19,100.00),(39,'civicrm_contribution',20,20,100.00),(40,'civicrm_financial_item',20,20,100.00),(41,'civicrm_contribution',21,21,100.00),(42,'civicrm_financial_item',21,21,100.00),(43,'civicrm_contribution',22,22,100.00),(44,'civicrm_financial_item',22,22,100.00),(45,'civicrm_contribution',23,23,100.00),(46,'civicrm_financial_item',23,23,100.00),(47,'civicrm_contribution',24,24,100.00),(48,'civicrm_financial_item',24,24,100.00),(49,'civicrm_contribution',25,25,100.00),(50,'civicrm_financial_item',25,25,100.00),(51,'civicrm_contribution',26,26,100.00),(52,'civicrm_financial_item',26,26,100.00),(53,'civicrm_contribution',27,27,100.00),(54,'civicrm_financial_item',27,27,100.00),(55,'civicrm_contribution',28,28,100.00),(56,'civicrm_financial_item',28,28,100.00),(57,'civicrm_contribution',29,29,100.00),(58,'civicrm_financial_item',29,29,100.00),(59,'civicrm_contribution',30,30,50.00),(60,'civicrm_financial_item',30,30,50.00),(61,'civicrm_contribution',31,31,50.00),(62,'civicrm_financial_item',31,31,50.00),(63,'civicrm_contribution',32,32,50.00),(64,'civicrm_financial_item',32,32,50.00),(65,'civicrm_contribution',33,33,50.00),(66,'civicrm_financial_item',33,33,50.00),(67,'civicrm_contribution',34,34,50.00),(68,'civicrm_financial_item',34,34,50.00),(69,'civicrm_contribution',35,35,50.00),(70,'civicrm_financial_item',35,35,50.00),(71,'civicrm_contribution',36,36,50.00),(72,'civicrm_financial_item',36,36,50.00),(73,'civicrm_contribution',37,37,50.00),(74,'civicrm_financial_item',37,37,50.00),(75,'civicrm_contribution',38,38,50.00),(76,'civicrm_financial_item',38,38,50.00),(77,'civicrm_contribution',39,39,50.00),(78,'civicrm_financial_item',39,39,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',42,42,1200.00),(84,'civicrm_financial_item',42,42,1200.00),(85,'civicrm_contribution',43,43,1200.00),(86,'civicrm_financial_item',43,43,1200.00),(87,'civicrm_contribution',62,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',91,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',58,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',56,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',59,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',47,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',73,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',46,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',78,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',81,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',52,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',93,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',85,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',69,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',74,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',54,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',94,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',84,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',86,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',87,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',51,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',65,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',68,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',92,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',89,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',71,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',48,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',88,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',66,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',63,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',60,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',75,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',55,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',70,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',72,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',82,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',80,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',90,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',77,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',79,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',67,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',64,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',61,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',57,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',50,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',53,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',76,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',45,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',83,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',49,93,50.00),(186,'civicrm_financial_item',93,93,50.00); +INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, `financial_trxn_id`, `amount`) VALUES (1,'civicrm_contribution',1,1,125.00),(2,'civicrm_financial_item',1,1,125.00),(3,'civicrm_contribution',2,2,50.00),(4,'civicrm_financial_item',2,2,50.00),(5,'civicrm_contribution',3,3,25.00),(6,'civicrm_financial_item',3,3,25.00),(7,'civicrm_contribution',4,4,50.00),(8,'civicrm_financial_item',4,4,50.00),(9,'civicrm_contribution',5,5,500.00),(10,'civicrm_financial_item',5,5,500.00),(11,'civicrm_contribution',6,6,175.00),(12,'civicrm_financial_item',6,6,175.00),(13,'civicrm_contribution',7,7,50.00),(14,'civicrm_financial_item',7,7,50.00),(15,'civicrm_contribution',8,8,10.00),(16,'civicrm_financial_item',8,8,10.00),(17,'civicrm_contribution',9,9,250.00),(18,'civicrm_financial_item',9,9,250.00),(19,'civicrm_contribution',10,10,500.00),(20,'civicrm_financial_item',10,10,500.00),(21,'civicrm_contribution',11,11,200.00),(22,'civicrm_financial_item',11,11,200.00),(23,'civicrm_contribution',12,12,200.00),(24,'civicrm_financial_item',12,12,200.00),(25,'civicrm_contribution',13,13,200.00),(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',15,15,100.00),(30,'civicrm_financial_item',15,15,100.00),(31,'civicrm_contribution',16,16,100.00),(32,'civicrm_financial_item',16,16,100.00),(33,'civicrm_contribution',17,17,100.00),(34,'civicrm_financial_item',17,17,100.00),(35,'civicrm_contribution',18,18,100.00),(36,'civicrm_financial_item',18,18,100.00),(37,'civicrm_contribution',19,19,100.00),(38,'civicrm_financial_item',19,19,100.00),(39,'civicrm_contribution',20,20,100.00),(40,'civicrm_financial_item',20,20,100.00),(41,'civicrm_contribution',21,21,100.00),(42,'civicrm_financial_item',21,21,100.00),(43,'civicrm_contribution',22,22,100.00),(44,'civicrm_financial_item',22,22,100.00),(45,'civicrm_contribution',23,23,100.00),(46,'civicrm_financial_item',23,23,100.00),(47,'civicrm_contribution',24,24,100.00),(48,'civicrm_financial_item',24,24,100.00),(49,'civicrm_contribution',25,25,100.00),(50,'civicrm_financial_item',25,25,100.00),(51,'civicrm_contribution',26,26,50.00),(52,'civicrm_financial_item',26,26,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',30,30,50.00),(60,'civicrm_financial_item',30,30,50.00),(61,'civicrm_contribution',31,31,50.00),(62,'civicrm_financial_item',31,31,50.00),(63,'civicrm_contribution',32,32,50.00),(64,'civicrm_financial_item',32,32,50.00),(65,'civicrm_contribution',33,33,50.00),(66,'civicrm_financial_item',33,33,50.00),(67,'civicrm_contribution',34,34,50.00),(68,'civicrm_financial_item',34,34,50.00),(69,'civicrm_contribution',35,35,50.00),(70,'civicrm_financial_item',35,35,50.00),(71,'civicrm_contribution',36,36,50.00),(72,'civicrm_financial_item',36,36,50.00),(73,'civicrm_contribution',37,37,50.00),(74,'civicrm_financial_item',37,37,50.00),(75,'civicrm_contribution',38,38,50.00),(76,'civicrm_financial_item',38,38,50.00),(77,'civicrm_contribution',39,39,50.00),(78,'civicrm_financial_item',39,39,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',42,42,1200.00),(84,'civicrm_financial_item',42,42,1200.00),(85,'civicrm_contribution',43,43,1200.00),(86,'civicrm_financial_item',43,43,1200.00),(87,'civicrm_contribution',61,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',91,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',45,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',78,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',93,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',88,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',86,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',63,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',83,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',51,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',54,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',48,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',90,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',64,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',89,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',70,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',73,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',49,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',69,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',87,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',94,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',71,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',47,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',92,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',75,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',60,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',53,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',68,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',67,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',85,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',74,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',62,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',55,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',84,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',76,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',65,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',52,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',50,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',81,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',72,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',57,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',46,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',58,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',56,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',77,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',80,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',59,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',66,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',82,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',79,93,50.00),(186,'civicrm_financial_item',93,93,50.00); /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -457,7 +457,7 @@ 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 (70,'civicrm_contact',2,4),(61,'civicrm_contact',3,4),(62,'civicrm_contact',3,5),(41,'civicrm_contact',4,5),(34,'civicrm_contact',8,5),(2,'civicrm_contact',10,1),(9,'civicrm_contact',11,2),(110,'civicrm_contact',12,4),(111,'civicrm_contact',12,5),(16,'civicrm_contact',13,4),(51,'civicrm_contact',19,4),(99,'civicrm_contact',24,4),(100,'civicrm_contact',24,5),(7,'civicrm_contact',27,2),(20,'civicrm_contact',28,5),(3,'civicrm_contact',29,3),(109,'civicrm_contact',31,5),(101,'civicrm_contact',32,5),(94,'civicrm_contact',35,4),(25,'civicrm_contact',37,4),(6,'civicrm_contact',38,2),(52,'civicrm_contact',39,4),(53,'civicrm_contact',39,5),(48,'civicrm_contact',40,4),(81,'civicrm_contact',41,4),(76,'civicrm_contact',43,4),(13,'civicrm_contact',49,4),(97,'civicrm_contact',52,4),(44,'civicrm_contact',53,4),(10,'civicrm_contact',56,3),(60,'civicrm_contact',61,5),(105,'civicrm_contact',63,4),(106,'civicrm_contact',63,5),(80,'civicrm_contact',65,5),(21,'civicrm_contact',66,4),(22,'civicrm_contact',66,5),(8,'civicrm_contact',69,2),(37,'civicrm_contact',70,4),(83,'civicrm_contact',71,5),(88,'civicrm_contact',73,4),(30,'civicrm_contact',74,4),(14,'civicrm_contact',75,4),(15,'civicrm_contact',75,5),(114,'civicrm_contact',77,4),(49,'civicrm_contact',78,4),(50,'civicrm_contact',78,5),(27,'civicrm_contact',80,4),(1,'civicrm_contact',83,2),(98,'civicrm_contact',85,4),(32,'civicrm_contact',87,4),(33,'civicrm_contact',87,5),(85,'civicrm_contact',93,4),(86,'civicrm_contact',93,5),(73,'civicrm_contact',95,4),(82,'civicrm_contact',101,4),(23,'civicrm_contact',102,4),(24,'civicrm_contact',102,5),(39,'civicrm_contact',103,5),(84,'civicrm_contact',104,5),(107,'civicrm_contact',106,4),(11,'civicrm_contact',107,5),(35,'civicrm_contact',111,4),(36,'civicrm_contact',111,5),(92,'civicrm_contact',114,4),(93,'civicrm_contact',114,5),(79,'civicrm_contact',115,4),(65,'civicrm_contact',119,5),(43,'civicrm_contact',122,5),(77,'civicrm_contact',125,4),(71,'civicrm_contact',129,4),(72,'civicrm_contact',129,5),(75,'civicrm_contact',131,5),(47,'civicrm_contact',133,5),(74,'civicrm_contact',134,5),(103,'civicrm_contact',135,4),(104,'civicrm_contact',135,5),(102,'civicrm_contact',139,4),(28,'civicrm_contact',144,4),(29,'civicrm_contact',144,5),(55,'civicrm_contact',145,5),(96,'civicrm_contact',146,5),(68,'civicrm_contact',147,4),(69,'civicrm_contact',147,5),(78,'civicrm_contact',152,5),(115,'civicrm_contact',154,5),(4,'civicrm_contact',155,2),(58,'civicrm_contact',156,4),(59,'civicrm_contact',156,5),(5,'civicrm_contact',161,3),(112,'civicrm_contact',165,4),(113,'civicrm_contact',165,5),(38,'civicrm_contact',169,4),(12,'civicrm_contact',172,5),(18,'civicrm_contact',174,4),(19,'civicrm_contact',174,5),(95,'civicrm_contact',175,4),(17,'civicrm_contact',176,5),(87,'civicrm_contact',179,4),(63,'civicrm_contact',180,4),(64,'civicrm_contact',180,5),(108,'civicrm_contact',182,5),(54,'civicrm_contact',184,5),(45,'civicrm_contact',186,4),(46,'civicrm_contact',186,5),(89,'civicrm_contact',188,4),(56,'civicrm_contact',189,4),(57,'civicrm_contact',189,5),(42,'civicrm_contact',191,4),(66,'civicrm_contact',192,4),(67,'civicrm_contact',192,5),(31,'civicrm_contact',194,5),(26,'civicrm_contact',196,4),(40,'civicrm_contact',197,4),(90,'civicrm_contact',201,4),(91,'civicrm_contact',201,5); +INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES (72,'civicrm_contact',3,4),(73,'civicrm_contact',3,5),(3,'civicrm_contact',7,2),(22,'civicrm_contact',9,4),(23,'civicrm_contact',9,5),(28,'civicrm_contact',10,4),(109,'civicrm_contact',15,4),(110,'civicrm_contact',15,5),(37,'civicrm_contact',16,4),(111,'civicrm_contact',18,4),(112,'civicrm_contact',18,5),(79,'civicrm_contact',20,5),(8,'civicrm_contact',22,2),(63,'civicrm_contact',24,4),(64,'civicrm_contact',24,5),(59,'civicrm_contact',25,5),(57,'civicrm_contact',32,4),(98,'civicrm_contact',35,5),(31,'civicrm_contact',37,4),(105,'civicrm_contact',38,4),(116,'civicrm_contact',39,4),(117,'civicrm_contact',39,5),(29,'civicrm_contact',40,5),(83,'civicrm_contact',44,5),(1,'civicrm_contact',46,1),(104,'civicrm_contact',47,5),(33,'civicrm_contact',49,5),(106,'civicrm_contact',50,5),(48,'civicrm_contact',52,5),(52,'civicrm_contact',55,4),(74,'civicrm_contact',56,5),(60,'civicrm_contact',58,4),(96,'civicrm_contact',60,4),(97,'civicrm_contact',60,5),(68,'civicrm_contact',64,4),(50,'civicrm_contact',65,5),(80,'civicrm_contact',67,4),(51,'civicrm_contact',68,5),(9,'civicrm_contact',71,3),(26,'civicrm_contact',72,4),(27,'civicrm_contact',72,5),(35,'civicrm_contact',75,4),(36,'civicrm_contact',75,5),(67,'civicrm_contact',76,4),(58,'civicrm_contact',80,4),(89,'civicrm_contact',82,5),(101,'civicrm_contact',84,4),(102,'civicrm_contact',84,5),(84,'civicrm_contact',85,5),(103,'civicrm_contact',86,4),(99,'civicrm_contact',87,4),(100,'civicrm_contact',87,5),(91,'civicrm_contact',88,4),(69,'civicrm_contact',89,5),(61,'civicrm_contact',91,5),(86,'civicrm_contact',92,4),(75,'civicrm_contact',94,5),(11,'civicrm_contact',96,4),(12,'civicrm_contact',96,5),(18,'civicrm_contact',102,4),(19,'civicrm_contact',102,5),(20,'civicrm_contact',105,4),(21,'civicrm_contact',105,5),(16,'civicrm_contact',106,4),(90,'civicrm_contact',107,4),(43,'civicrm_contact',111,4),(44,'civicrm_contact',111,5),(62,'civicrm_contact',112,4),(4,'civicrm_contact',113,2),(87,'civicrm_contact',114,4),(88,'civicrm_contact',114,5),(24,'civicrm_contact',117,4),(25,'civicrm_contact',117,5),(2,'civicrm_contact',121,3),(42,'civicrm_contact',122,4),(92,'civicrm_contact',123,4),(93,'civicrm_contact',123,5),(95,'civicrm_contact',125,5),(81,'civicrm_contact',126,4),(82,'civicrm_contact',126,5),(17,'civicrm_contact',127,5),(45,'civicrm_contact',128,4),(34,'civicrm_contact',130,4),(49,'civicrm_contact',131,4),(85,'civicrm_contact',133,4),(113,'civicrm_contact',135,4),(114,'civicrm_contact',135,5),(115,'civicrm_contact',136,5),(70,'civicrm_contact',138,4),(71,'civicrm_contact',138,5),(5,'civicrm_contact',142,2),(30,'civicrm_contact',143,5),(40,'civicrm_contact',144,4),(41,'civicrm_contact',144,5),(65,'civicrm_contact',146,5),(54,'civicrm_contact',150,4),(55,'civicrm_contact',150,5),(53,'civicrm_contact',151,5),(76,'civicrm_contact',156,4),(77,'civicrm_contact',156,5),(10,'civicrm_contact',159,2),(38,'civicrm_contact',162,4),(39,'civicrm_contact',162,5),(32,'civicrm_contact',164,5),(15,'civicrm_contact',166,4),(107,'civicrm_contact',174,4),(108,'civicrm_contact',174,5),(47,'civicrm_contact',178,5),(46,'civicrm_contact',184,5),(78,'civicrm_contact',187,4),(13,'civicrm_contact',189,4),(14,'civicrm_contact',189,5),(7,'civicrm_contact',190,1),(6,'civicrm_contact',191,3),(56,'civicrm_contact',196,4),(94,'civicrm_contact',199,5),(66,'civicrm_contact',200,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -467,7 +467,7 @@ 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,'2020-05-28 17:00:00','2020-05-30 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,'2019-11-27 12:00:00','2019-11-27 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,'2020-06-28 07:00:00','2020-07-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),(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); +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,'2020-07-17 17:00:00','2020-07-19 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,'2020-01-16 12:00:00','2020-01-16 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,'2020-08-17 07:00:00','2020-08-20 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); /*!40000 ALTER TABLE `civicrm_event` ENABLE KEYS */; UNLOCK TABLES; @@ -523,7 +523,7 @@ 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,'2019-11-28 19:55:52','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2019-11-28 19:55:52','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2019-11-28 19:55:52','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2019-11-28 19:55:52','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2019-11-28 19:55:52','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2019-11-28 19:55:52','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2019-11-28 19:55:52','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2019-11-28 19:55:52','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2019-11-28 19:55:52','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2019-11-28 19:55:52','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2019-11-28 19:55:52','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2019-11-28 19:55:52','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2019-11-28 19:55:52','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2019-11-28 19:55:52','2019-11-29 08:55:52',175,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2019-11-28 19:55:52','2019-11-29 08:55:52',80,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2019-11-28 19:55:52','2019-11-29 08:55:52',45,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2019-11-28 19:55:52','2019-11-29 08:55:52',52,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2019-11-28 19:55:52','2019-11-29 08:55:52',33,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2019-11-28 19:55:52','2019-11-29 08:55:52',58,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2019-11-28 19:55:52','2019-11-29 08:55:52',107,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2019-11-28 19:55:52','2019-11-29 08:55:52',95,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2019-11-28 19:55:52','2019-11-29 08:55:52',66,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2019-11-28 19:55:52','2019-11-29 08:55:52',166,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2019-11-28 19:55:52','2019-11-29 08:55:52',2,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2019-11-28 19:55:52','2019-11-29 08:55:52',134,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2019-11-28 19:55:52','2019-11-29 08:55:52',115,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2019-11-28 19:55:52','2019-11-29 08:55:52',139,'General',100.00,'USD',2,1,'civicrm_line_item',29),(28,'2019-11-28 19:55:52','2019-11-29 08:55:52',147,'General',100.00,'USD',2,1,'civicrm_line_item',30),(29,'2019-11-28 19:55:52','2019-11-29 08:55:52',145,'General',100.00,'USD',2,1,'civicrm_line_item',31),(30,'2019-11-28 19:55:52','2019-11-29 08:55:52',37,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2019-11-28 19:55:52','2019-11-29 08:55:52',105,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2019-11-28 19:55:52','2019-11-29 08:55:52',160,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2019-11-28 19:55:52','2019-11-29 08:55:52',148,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2019-11-28 19:55:52','2019-11-29 08:55:52',144,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2019-11-28 19:55:52','2019-11-29 08:55:52',103,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2019-11-28 19:55:52','2019-11-29 08:55:52',55,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2019-11-28 19:55:52','2019-11-29 08:55:52',200,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2019-11-28 19:55:52','2019-11-29 08:55:52',184,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2019-11-28 19:55:52','2019-11-29 08:55:52',89,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2019-11-28 19:55:52','2019-11-29 08:55:52',26,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2019-11-28 19:55:52','2019-11-29 08:55:52',84,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2019-11-28 19:55:52','2019-11-29 08:55:52',47,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2019-11-28 19:55:52','2019-11-29 08:55:52',25,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2019-11-28 19:55:52','2019-11-29 08:55:52',68,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2019-11-28 19:55:52','2019-11-29 08:55:52',188,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2019-11-28 19:55:52','2019-11-29 08:55:52',58,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2019-11-28 19:55:52','2019-11-29 08:55:52',47,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2019-11-28 19:55:52','2019-11-29 08:55:52',61,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2019-11-28 19:55:52','2019-11-29 08:55:52',6,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2019-11-28 19:55:52','2019-11-29 08:55:52',105,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2019-11-28 19:55:52','2019-11-29 08:55:52',5,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2019-11-28 19:55:52','2019-11-29 08:55:52',118,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2019-11-28 19:55:52','2019-11-29 08:55:52',133,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2019-11-28 19:55:52','2019-11-29 08:55:52',25,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2019-11-28 19:55:52','2019-11-29 08:55:52',191,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2019-11-28 19:55:52','2019-11-29 08:55:52',159,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2019-11-28 19:55:52','2019-11-29 08:55:52',89,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2019-11-28 19:55:52','2019-11-29 08:55:52',107,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2019-11-28 19:55:52','2019-11-29 08:55:52',30,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2019-11-28 19:55:52','2019-11-29 08:55:52',195,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2019-11-28 19:55:52','2019-11-29 08:55:52',149,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2019-11-28 19:55:52','2019-11-29 08:55:52',162,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2019-11-28 19:55:52','2019-11-29 08:55:52',165,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2019-11-28 19:55:52','2019-11-29 08:55:52',22,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2019-11-28 19:55:52','2019-11-29 08:55:52',78,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2019-11-28 19:55:52','2019-11-29 08:55:52',88,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2019-11-28 19:55:52','2019-11-29 08:55:52',189,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2019-11-28 19:55:52','2019-11-29 08:55:52',179,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2019-11-28 19:55:52','2019-11-29 08:55:52',102,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2019-11-28 19:55:52','2019-11-29 08:55:52',14,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2019-11-28 19:55:52','2019-11-29 08:55:52',171,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2019-11-28 19:55:52','2019-11-29 08:55:52',81,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2019-11-28 19:55:52','2019-11-29 08:55:52',73,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2019-11-28 19:55:52','2019-11-29 08:55:52',63,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2019-11-28 19:55:52','2019-11-29 08:55:52',109,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2019-11-28 19:55:52','2019-11-29 08:55:52',33,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2019-11-28 19:55:52','2019-11-29 08:55:52',92,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2019-11-28 19:55:52','2019-11-29 08:55:52',103,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2019-11-28 19:55:52','2019-11-29 08:55:52',135,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2019-11-28 19:55:52','2019-11-29 08:55:52',131,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2019-11-28 19:55:52','2019-11-29 08:55:52',184,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2019-11-28 19:55:52','2019-11-29 08:55:52',115,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2019-11-28 19:55:52','2019-11-29 08:55:52',121,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2019-11-28 19:55:52','2019-11-29 08:55:52',85,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2019-11-28 19:55:52','2019-11-29 08:55:52',77,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2019-11-28 19:55:52','2019-11-29 08:55:52',64,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2019-11-28 19:55:52','2019-11-29 08:55:52',52,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2019-11-28 19:55:52','2019-11-29 08:55:52',18,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2019-11-28 19:55:52','2019-11-29 08:55:52',27,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2019-11-28 19:55:52','2019-11-29 08:55:52',113,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2019-11-28 19:55:52','2019-11-29 08:55:52',2,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2019-11-28 19:55:52','2019-11-29 08:55:52',142,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2019-11-28 19:55:52','2019-11-29 08:55:52',16,'Single',50.00,'USD',4,1,'civicrm_line_item',80); +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,'2020-01-16 22:53:52','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2020-01-16 22:53:52','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2020-01-16 22:53:52','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2020-01-16 22:53:52','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2020-01-16 22:53:52','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2020-01-16 22:53:52','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2020-01-16 22:53:52','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2020-01-16 22:53:52','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2020-01-16 22:53:52','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2020-01-16 22:53:52','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2020-01-16 22:53:52','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2020-01-16 22:53:52','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2020-01-16 22:53:52','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2020-01-16 22:53:52','2020-01-17 09:53:51',89,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2020-01-16 22:53:52','2020-01-17 09:53:51',82,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2020-01-16 22:53:52','2020-01-17 09:53:51',14,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2020-01-16 22:53:52','2020-01-17 09:53:51',183,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2020-01-16 22:53:52','2020-01-17 09:53:51',133,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2020-01-16 22:53:52','2020-01-17 09:53:51',20,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2020-01-16 22:53:52','2020-01-17 09:53:51',132,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2020-01-16 22:53:52','2020-01-17 09:53:51',77,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2020-01-16 22:53:52','2020-01-17 09:53:51',138,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2020-01-16 22:53:52','2020-01-17 09:53:51',164,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2020-01-16 22:53:52','2020-01-17 09:53:51',34,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2020-01-16 22:53:52','2020-01-17 09:53:51',128,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2020-01-16 22:53:52','2020-01-17 09:53:51',50,'Student',50.00,'USD',2,1,'civicrm_line_item',28),(27,'2020-01-16 22:53:52','2020-01-17 09:53:51',85,'Student',50.00,'USD',2,1,'civicrm_line_item',29),(28,'2020-01-16 22:53:52','2020-01-17 09:53:51',94,'Student',50.00,'USD',2,1,'civicrm_line_item',30),(29,'2020-01-16 22:53:52','2020-01-17 09:53:51',30,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2020-01-16 22:53:52','2020-01-17 09:53:51',51,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2020-01-16 22:53:52','2020-01-17 09:53:51',103,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2020-01-16 22:53:52','2020-01-17 09:53:51',181,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2020-01-16 22:53:52','2020-01-17 09:53:51',40,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2020-01-16 22:53:52','2020-01-17 09:53:51',105,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2020-01-16 22:53:52','2020-01-17 09:53:51',42,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2020-01-16 22:53:52','2020-01-17 09:53:51',5,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2020-01-16 22:53:52','2020-01-17 09:53:51',120,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2020-01-16 22:53:52','2020-01-17 09:53:51',184,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2020-01-16 22:53:52','2020-01-17 09:53:51',29,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2020-01-16 22:53:52','2020-01-17 09:53:51',197,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2020-01-16 22:53:52','2020-01-17 09:53:51',64,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2020-01-16 22:53:52','2020-01-17 09:53:51',165,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2020-01-16 22:53:52','2020-01-17 09:53:51',122,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2020-01-16 22:53:52','2020-01-17 09:53:52',85,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2020-01-16 22:53:52','2020-01-17 09:53:52',188,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2020-01-16 22:53:52','2020-01-17 09:53:52',1,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2020-01-16 22:53:52','2020-01-17 09:53:52',143,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2020-01-16 22:53:52','2020-01-17 09:53:52',194,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2020-01-16 22:53:52','2020-01-17 09:53:52',171,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2020-01-16 22:53:52','2020-01-17 09:53:52',166,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2020-01-16 22:53:52','2020-01-17 09:53:52',89,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2020-01-16 22:53:52','2020-01-17 09:53:52',159,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2020-01-16 22:53:52','2020-01-17 09:53:52',35,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2020-01-16 22:53:52','2020-01-17 09:53:52',45,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2020-01-16 22:53:52','2020-01-17 09:53:52',25,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2020-01-16 22:53:52','2020-01-17 09:53:52',187,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2020-01-16 22:53:52','2020-01-17 09:53:52',90,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2020-01-16 22:53:52','2020-01-17 09:53:52',176,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2020-01-16 22:53:52','2020-01-17 09:53:52',110,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2020-01-16 22:53:52','2020-01-17 09:53:52',124,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2020-01-16 22:53:52','2020-01-17 09:53:52',26,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2020-01-16 22:53:52','2020-01-17 09:53:52',106,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2020-01-16 22:53:52','2020-01-17 09:53:52',167,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2020-01-16 22:53:52','2020-01-17 09:53:52',196,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2020-01-16 22:53:52','2020-01-17 09:53:52',115,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2020-01-16 22:53:52','2020-01-17 09:53:52',16,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2020-01-16 22:53:52','2020-01-17 09:53:52',191,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2020-01-16 22:53:52','2020-01-17 09:53:52',136,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2020-01-16 22:53:52','2020-01-17 09:53:52',81,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2020-01-16 22:53:52','2020-01-17 09:53:52',42,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2020-01-16 22:53:52','2020-01-17 09:53:52',105,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2020-01-16 22:53:52','2020-01-17 09:53:52',103,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2020-01-16 22:53:52','2020-01-17 09:53:52',163,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2020-01-16 22:53:52','2020-01-17 09:53:52',128,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2020-01-16 22:53:52','2020-01-17 09:53:52',86,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2020-01-16 22:53:52','2020-01-17 09:53:52',46,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2020-01-16 22:53:52','2020-01-17 09:53:52',160,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2020-01-16 22:53:52','2020-01-17 09:53:52',138,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2020-01-16 22:53:52','2020-01-17 09:53:52',100,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2020-01-16 22:53:52','2020-01-17 09:53:52',39,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2020-01-16 22:53:52','2020-01-17 09:53:52',30,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2020-01-16 22:53:52','2020-01-17 09:53:52',150,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2020-01-16 22:53:52','2020-01-17 09:53:52',120,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2020-01-16 22:53:52','2020-01-17 09:53:52',55,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2020-01-16 22:53:52','2020-01-17 09:53:52',6,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2020-01-16 22:53:52','2020-01-17 09:53:52',62,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2020-01-16 22:53:52','2020-01-17 09:53:52',52,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2020-01-16 22:53:52','2020-01-17 09:53:52',140,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2020-01-16 22:53:52','2020-01-17 09:53:52',149,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2020-01-16 22:53:52','2020-01-17 09:53:52',79,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2020-01-16 22:53:52','2020-01-17 09:53:52',102,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2020-01-16 22:53:52','2020-01-17 09:53:52',157,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2020-01-16 22:53:52','2020-01-17 09:53:52',144,'Single',50.00,'USD',4,1,'civicrm_line_item',80); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -533,7 +533,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_financial_trxn` DISABLE KEYS */; -INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(14,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(15,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(16,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(17,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(18,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(19,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(20,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(21,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(22,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(23,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(24,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(25,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(26,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(27,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(28,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(29,NULL,1,'2019-11-29 08:55:52',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(30,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(31,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(32,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(33,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(34,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(35,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(36,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(37,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(38,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(39,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(40,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(41,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(42,NULL,1,'2019-11-29 08:55:52',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(43,NULL,1,'2019-11-29 08:55:52',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(44,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(45,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(46,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(47,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(48,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(49,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(50,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(51,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(52,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(53,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(54,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(55,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(56,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(57,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(58,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(59,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(60,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(61,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(62,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(63,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(64,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(65,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(66,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(67,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(68,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(69,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(70,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(71,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(72,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(73,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(74,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(75,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(76,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(77,NULL,1,'2019-11-29 08:55:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(78,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(79,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(80,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(81,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(82,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(83,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(84,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(85,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(86,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(87,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(88,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(89,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(90,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(91,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(92,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(93,NULL,1,'2019-11-29 08:55:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL); +INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL,NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL,NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL),(14,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(15,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(16,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(17,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(18,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(19,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(20,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(21,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(22,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(23,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(24,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(25,NULL,1,'2020-01-17 09:53:51',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(26,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(27,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(28,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(29,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(30,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(31,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(32,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(33,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(34,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(35,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(36,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(37,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(38,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(39,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(40,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(41,NULL,1,'2020-01-17 09:53:51',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(42,NULL,1,'2020-01-17 09:53:51',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(43,NULL,1,'2020-01-17 09:53:51',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(44,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(45,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(46,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(47,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(48,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(49,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(50,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(51,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(52,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(53,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(54,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(55,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(56,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(57,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(58,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(59,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(60,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(61,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(62,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(63,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(64,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(65,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(66,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(67,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(68,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(69,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(70,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(71,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(72,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(73,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(74,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(75,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(76,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(77,NULL,1,'2020-01-17 09:53:52',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(78,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(79,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(80,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(81,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(82,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(83,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(84,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(85,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(86,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(87,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(88,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(89,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(90,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(91,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(92,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL),(93,NULL,1,'2020-01-17 09:53:52',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -572,7 +572,7 @@ 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,107,'Added',NULL,NULL),(2,2,164,'Added',NULL,NULL),(3,2,172,'Added',NULL,NULL),(4,2,54,'Added',NULL,NULL),(5,2,49,'Added',NULL,NULL),(6,2,159,'Added',NULL,NULL),(7,2,75,'Added',NULL,NULL),(8,2,110,'Added',NULL,NULL),(9,2,13,'Added',NULL,NULL),(10,2,127,'Added',NULL,NULL),(11,2,176,'Added',NULL,NULL),(12,2,200,'Added',NULL,NULL),(13,2,174,'Added',NULL,NULL),(14,2,46,'Added',NULL,NULL),(15,2,28,'Added',NULL,NULL),(16,2,157,'Added',NULL,NULL),(17,2,66,'Added',NULL,NULL),(18,2,14,'Added',NULL,NULL),(19,2,102,'Added',NULL,NULL),(20,2,22,'Added',NULL,NULL),(21,2,37,'Added',NULL,NULL),(22,2,30,'Added',NULL,NULL),(23,2,196,'Added',NULL,NULL),(24,2,17,'Added',NULL,NULL),(25,2,80,'Added',NULL,NULL),(26,2,60,'Added',NULL,NULL),(27,2,144,'Added',NULL,NULL),(28,2,82,'Added',NULL,NULL),(29,2,74,'Added',NULL,NULL),(30,2,88,'Added',NULL,NULL),(31,2,194,'Added',NULL,NULL),(32,2,57,'Added',NULL,NULL),(33,2,87,'Added',NULL,NULL),(34,2,167,'Added',NULL,NULL),(35,2,8,'Added',NULL,NULL),(36,2,170,'Added',NULL,NULL),(37,2,111,'Added',NULL,NULL),(38,2,97,'Added',NULL,NULL),(39,2,70,'Added',NULL,NULL),(40,2,33,'Added',NULL,NULL),(41,2,169,'Added',NULL,NULL),(42,2,124,'Added',NULL,NULL),(43,2,103,'Added',NULL,NULL),(44,2,72,'Added',NULL,NULL),(45,2,197,'Added',NULL,NULL),(46,2,50,'Added',NULL,NULL),(47,2,4,'Added',NULL,NULL),(48,2,166,'Added',NULL,NULL),(49,2,191,'Added',NULL,NULL),(50,2,59,'Added',NULL,NULL),(51,2,122,'Added',NULL,NULL),(52,2,173,'Added',NULL,NULL),(53,2,53,'Added',NULL,NULL),(54,2,116,'Added',NULL,NULL),(55,2,186,'Added',NULL,NULL),(56,2,23,'Added',NULL,NULL),(57,2,133,'Added',NULL,NULL),(58,2,42,'Added',NULL,NULL),(59,2,40,'Added',NULL,NULL),(60,2,171,'Added',NULL,NULL),(61,3,78,'Added',NULL,NULL),(62,3,149,'Added',NULL,NULL),(63,3,19,'Added',NULL,NULL),(64,3,148,'Added',NULL,NULL),(65,3,39,'Added',NULL,NULL),(66,3,113,'Added',NULL,NULL),(67,3,184,'Added',NULL,NULL),(68,3,55,'Added',NULL,NULL),(69,3,145,'Added',NULL,NULL),(70,3,162,'Added',NULL,NULL),(71,3,189,'Added',NULL,NULL),(72,3,193,'Added',NULL,NULL),(73,3,156,'Added',NULL,NULL),(74,3,26,'Added',NULL,NULL),(75,3,61,'Added',NULL,NULL),(76,4,107,'Added',NULL,NULL),(77,4,110,'Added',NULL,NULL),(78,4,28,'Added',NULL,NULL),(79,4,30,'Added',NULL,NULL),(80,4,74,'Added',NULL,NULL),(81,4,170,'Added',NULL,NULL),(82,4,103,'Added',NULL,NULL),(83,4,59,'Added',NULL,NULL); +INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES (1,2,96,'Added',NULL,NULL),(2,2,43,'Added',NULL,NULL),(3,2,189,'Added',NULL,NULL),(4,2,140,'Added',NULL,NULL),(5,2,166,'Added',NULL,NULL),(6,2,95,'Added',NULL,NULL),(7,2,106,'Added',NULL,NULL),(8,2,98,'Added',NULL,NULL),(9,2,127,'Added',NULL,NULL),(10,2,137,'Added',NULL,NULL),(11,2,102,'Added',NULL,NULL),(12,2,141,'Added',NULL,NULL),(13,2,105,'Added',NULL,NULL),(14,2,23,'Added',NULL,NULL),(15,2,9,'Added',NULL,NULL),(16,2,158,'Added',NULL,NULL),(17,2,117,'Added',NULL,NULL),(18,2,165,'Added',NULL,NULL),(19,2,72,'Added',NULL,NULL),(20,2,186,'Added',NULL,NULL),(21,2,10,'Added',NULL,NULL),(22,2,182,'Added',NULL,NULL),(23,2,40,'Added',NULL,NULL),(24,2,169,'Added',NULL,NULL),(25,2,143,'Added',NULL,NULL),(26,2,185,'Added',NULL,NULL),(27,2,37,'Added',NULL,NULL),(28,2,27,'Added',NULL,NULL),(29,2,164,'Added',NULL,NULL),(30,2,63,'Added',NULL,NULL),(31,2,49,'Added',NULL,NULL),(32,2,192,'Added',NULL,NULL),(33,2,130,'Added',NULL,NULL),(34,2,4,'Added',NULL,NULL),(35,2,75,'Added',NULL,NULL),(36,2,100,'Added',NULL,NULL),(37,2,16,'Added',NULL,NULL),(38,2,29,'Added',NULL,NULL),(39,2,162,'Added',NULL,NULL),(40,2,59,'Added',NULL,NULL),(41,2,144,'Added',NULL,NULL),(42,2,21,'Added',NULL,NULL),(43,2,122,'Added',NULL,NULL),(44,2,74,'Added',NULL,NULL),(45,2,111,'Added',NULL,NULL),(46,2,181,'Added',NULL,NULL),(47,2,128,'Added',NULL,NULL),(48,2,201,'Added',NULL,NULL),(49,2,184,'Added',NULL,NULL),(50,2,176,'Added',NULL,NULL),(51,2,178,'Added',NULL,NULL),(52,2,51,'Added',NULL,NULL),(53,2,52,'Added',NULL,NULL),(54,2,11,'Added',NULL,NULL),(55,2,131,'Added',NULL,NULL),(56,2,103,'Added',NULL,NULL),(57,2,65,'Added',NULL,NULL),(58,2,109,'Added',NULL,NULL),(59,2,68,'Added',NULL,NULL),(60,2,73,'Added',NULL,NULL),(61,3,55,'Added',NULL,NULL),(62,3,99,'Added',NULL,NULL),(63,3,151,'Added',NULL,NULL),(64,3,108,'Added',NULL,NULL),(65,3,150,'Added',NULL,NULL),(66,3,19,'Added',NULL,NULL),(67,3,196,'Added',NULL,NULL),(68,3,83,'Added',NULL,NULL),(69,3,32,'Added',NULL,NULL),(70,3,120,'Added',NULL,NULL),(71,3,80,'Added',NULL,NULL),(72,3,129,'Added',NULL,NULL),(73,3,25,'Added',NULL,NULL),(74,3,13,'Added',NULL,NULL),(75,3,58,'Added',NULL,NULL),(76,4,96,'Added',NULL,NULL),(77,4,98,'Added',NULL,NULL),(78,4,9,'Added',NULL,NULL),(79,4,182,'Added',NULL,NULL),(80,4,164,'Added',NULL,NULL),(81,4,100,'Added',NULL,NULL),(82,4,122,'Added',NULL,NULL),(83,4,176,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -637,7 +637,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_line_item` WRITE; /*!40000 ALTER TABLE `civicrm_line_item` DISABLE KEYS */; -INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL),(2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL),(4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL),(7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL),(9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL),(10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',5,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',7,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',9,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',10,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',13,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',17,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',19,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',20,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',21,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',23,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',25,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',27,27,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(30,'civicrm_membership',29,28,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(31,'civicrm_membership',30,29,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(32,'civicrm_membership',2,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',4,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',6,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(35,'civicrm_membership',8,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(36,'civicrm_membership',12,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(37,'civicrm_membership',14,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(38,'civicrm_membership',15,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(39,'civicrm_membership',16,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(40,'civicrm_membership',18,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(41,'civicrm_membership',24,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',26,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',28,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(47,'civicrm_participant',3,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,86,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,87,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,51,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,65,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,68,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,92,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,89,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,48,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,88,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,66,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,63,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,75,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,55,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,70,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,72,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,82,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,80,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,77,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,67,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,64,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,61,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,57,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,50,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,53,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,76,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,45,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,83,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,49,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,62,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,91,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,58,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,56,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,59,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,47,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,73,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,46,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,78,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,81,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,52,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,85,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,69,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,74,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); +INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contribution_id`, `price_field_id`, `label`, `qty`, `unit_price`, `line_total`, `participant_count`, `price_field_value_id`, `financial_type_id`, `non_deductible_amount`, `tax_amount`) VALUES (1,'civicrm_contribution',1,1,1,'Contribution Amount',1.00,125.00,125.00,0,1,1,0.00,NULL),(2,'civicrm_contribution',2,2,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(3,'civicrm_contribution',3,3,1,'Contribution Amount',1.00,25.00,25.00,0,1,1,0.00,NULL),(4,'civicrm_contribution',4,4,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(5,'civicrm_contribution',5,5,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(6,'civicrm_contribution',6,6,1,'Contribution Amount',1.00,175.00,175.00,0,1,1,0.00,NULL),(7,'civicrm_contribution',7,7,1,'Contribution Amount',1.00,50.00,50.00,0,1,1,0.00,NULL),(8,'civicrm_contribution',8,8,1,'Contribution Amount',1.00,10.00,10.00,0,1,1,0.00,NULL),(9,'civicrm_contribution',9,9,1,'Contribution Amount',1.00,250.00,250.00,0,1,1,0.00,NULL),(10,'civicrm_contribution',10,10,1,'Contribution Amount',1.00,500.00,500.00,0,1,1,0.00,NULL),(11,'civicrm_contribution',11,11,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(12,'civicrm_contribution',12,12,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(13,'civicrm_contribution',13,13,1,'Contribution Amount',1.00,200.00,200.00,0,1,1,0.00,NULL),(16,'civicrm_membership',1,14,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(17,'civicrm_membership',3,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',7,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',9,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',13,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',15,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',17,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',19,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',21,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',23,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',27,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',29,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',2,26,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(29,'civicrm_membership',4,27,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(30,'civicrm_membership',5,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(31,'civicrm_membership',6,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(32,'civicrm_membership',8,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',10,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',12,32,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(35,'civicrm_membership',14,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(36,'civicrm_membership',16,34,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(37,'civicrm_membership',18,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(38,'civicrm_membership',20,36,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(39,'civicrm_membership',24,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(40,'civicrm_membership',25,38,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(41,'civicrm_membership',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',28,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',30,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(44,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(45,'civicrm_membership',22,43,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL),(47,'civicrm_participant',3,73,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,49,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,87,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,92,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,75,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,53,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,68,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,67,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,85,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,74,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,62,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,55,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,84,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,76,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,52,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,50,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,72,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,57,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,46,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,58,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,56,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,77,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,80,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,59,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,66,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,82,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,61,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,91,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,45,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,78,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,88,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,86,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,63,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,51,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,48,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,90,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,64,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,89,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,70,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL); /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */; UNLOCK TABLES; @@ -647,7 +647,7 @@ 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,170,207,144,NULL,NULL,NULL,NULL,NULL),(2,171,208,145,NULL,NULL,NULL,NULL,NULL),(3,172,209,146,NULL,NULL,NULL,NULL,NULL); +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,177,195,178,NULL,NULL,NULL,NULL,NULL),(2,178,196,179,NULL,NULL,NULL,NULL,NULL),(3,179,197,180,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -896,7 +896,7 @@ 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,175,1,'2019-11-28','2019-11-28','2021-11-27','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,37,2,'2019-11-27','2019-11-27','2020-11-26','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,80,1,'2019-11-26','2019-11-26','2021-11-25','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,105,2,'2019-11-25','2019-11-25','2020-11-24','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,45,1,'2017-10-27','2017-10-27','2019-10-26','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,160,2,'2019-11-23','2019-11-23','2020-11-22','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,52,1,'2019-11-22','2019-11-22','2021-11-21','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,148,2,'2019-11-21','2019-11-21','2020-11-20','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,33,1,'2019-11-20','2019-11-20','2021-11-19','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,58,1,'2017-09-17','2017-09-17','2019-09-16','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,47,3,'2019-11-18','2019-11-18',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,144,2,'2019-11-17','2019-11-17','2020-11-16','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,107,1,'2019-11-16','2019-11-16','2021-11-15','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,103,2,'2019-11-15','2019-11-15','2020-11-14','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,55,2,'2018-11-14','2018-11-14','2019-11-13','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,200,2,'2019-11-13','2019-11-13','2020-11-12','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,95,1,'2019-11-12','2019-11-12','2021-11-11','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,184,2,'2019-11-11','2019-11-11','2020-11-10','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,66,1,'2019-11-10','2019-11-10','2021-11-09','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,166,1,'2017-06-29','2017-06-29','2019-06-28','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,2,1,'2019-11-08','2019-11-08','2021-11-07','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,25,3,'2019-11-07','2019-11-07',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,134,1,'2019-11-06','2019-11-06','2021-11-05','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,89,2,'2019-11-05','2019-11-05','2020-11-04','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,115,1,'2017-05-20','2017-05-20','2019-05-19','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,26,2,'2019-11-03','2019-11-03','2020-11-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,139,1,'2019-11-02','2019-11-02','2021-11-01','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,84,2,'2019-11-01','2019-11-01','2020-10-31','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,147,1,'2019-10-31','2019-10-31','2021-10-30','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,145,1,'2017-04-10','2017-04-10','2019-04-09','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL); +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,89,1,'2020-01-17','2020-01-17','2022-01-16','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,50,2,'2020-01-16','2020-01-16','2021-01-15','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,82,1,'2020-01-15','2020-01-15','2022-01-14','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,85,2,'2020-01-14','2020-01-14','2021-01-13','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,94,2,'2019-01-13','2019-01-13','2020-01-12','Check',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,30,2,'2020-01-12','2020-01-12','2021-01-11','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,14,1,'2020-01-11','2020-01-11','2022-01-10','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,51,2,'2020-01-10','2020-01-10','2021-01-09','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,183,1,'2020-01-09','2020-01-09','2022-01-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,103,2,'2019-01-08','2019-01-08','2020-01-07','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,165,3,'2020-01-07','2020-01-07',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,181,2,'2020-01-06','2020-01-06','2021-01-05','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,133,1,'2020-01-05','2020-01-05','2022-01-04','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,40,2,'2020-01-04','2020-01-04','2021-01-03','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,20,1,'2017-09-27','2017-09-27','2019-09-26','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,105,2,'2020-01-02','2020-01-02','2021-01-01','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,132,1,'2020-01-01','2020-01-01','2021-12-31','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,42,2,'2019-12-31','2019-12-31','2020-12-30','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,77,1,'2019-12-30','2019-12-30','2021-12-29','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,5,2,'2018-12-29','2018-12-29','2019-12-28','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,138,1,'2019-12-28','2019-12-28','2021-12-27','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,122,3,'2019-12-27','2019-12-27',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,164,1,'2019-12-26','2019-12-26','2021-12-25','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,120,2,'2019-12-25','2019-12-25','2020-12-24','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,184,2,'2018-12-24','2018-12-24','2019-12-23','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,29,2,'2019-12-23','2019-12-23','2020-12-22','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,34,1,'2019-12-22','2019-12-22','2021-12-21','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,197,2,'2019-12-21','2019-12-21','2020-12-20','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,128,1,'2019-12-20','2019-12-20','2021-12-19','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,64,2,'2018-12-19','2018-12-19','2019-12-18','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -916,7 +916,7 @@ 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,21,1,'2019-11-08','2021-11-07',2,'2019-11-28',1,NULL),(2,22,1,'2019-11-07',NULL,25,'2019-11-28',3,NULL),(3,26,1,'2019-11-03','2020-11-02',26,'2019-11-28',2,NULL),(4,9,1,'2019-11-20','2021-11-19',33,'2019-11-28',1,NULL),(5,2,1,'2019-11-27','2020-11-26',37,'2019-11-28',2,NULL),(6,5,3,'2017-10-27','2019-10-26',45,'2019-11-28',1,NULL),(7,11,1,'2019-11-18',NULL,47,'2019-11-28',3,NULL),(8,7,1,'2019-11-22','2021-11-21',52,'2019-11-28',1,NULL),(9,15,4,'2018-11-14','2019-11-13',55,'2019-11-28',2,NULL),(10,10,3,'2017-09-17','2019-09-16',58,'2019-11-28',1,NULL),(11,19,1,'2019-11-10','2021-11-09',66,'2019-11-28',1,NULL),(12,3,1,'2019-11-26','2021-11-25',80,'2019-11-28',1,NULL),(13,28,1,'2019-11-01','2020-10-31',84,'2019-11-28',2,NULL),(14,24,1,'2019-11-05','2020-11-04',89,'2019-11-28',2,NULL),(15,17,1,'2019-11-12','2021-11-11',95,'2019-11-28',1,NULL),(16,14,1,'2019-11-15','2020-11-14',103,'2019-11-28',2,NULL),(17,4,1,'2019-11-25','2020-11-24',105,'2019-11-28',2,NULL),(18,13,1,'2019-11-16','2021-11-15',107,'2019-11-28',1,NULL),(19,25,3,'2017-05-20','2019-05-19',115,'2019-11-28',1,NULL),(20,23,1,'2019-11-06','2021-11-05',134,'2019-11-28',1,NULL),(21,27,1,'2019-11-02','2021-11-01',139,'2019-11-28',1,NULL),(22,12,1,'2019-11-17','2020-11-16',144,'2019-11-28',2,NULL),(23,30,3,'2017-04-10','2019-04-09',145,'2019-11-28',1,NULL),(24,29,1,'2019-10-31','2021-10-30',147,'2019-11-28',1,NULL),(25,8,1,'2019-11-21','2020-11-20',148,'2019-11-28',2,NULL),(26,6,1,'2019-11-23','2020-11-22',160,'2019-11-28',2,NULL),(27,20,3,'2017-06-29','2019-06-28',166,'2019-11-28',1,NULL),(28,1,1,'2019-11-28','2021-11-27',175,'2019-11-28',1,NULL),(29,18,1,'2019-11-11','2020-11-10',184,'2019-11-28',2,NULL),(30,16,1,'2019-11-13','2020-11-12',200,'2019-11-28',2,NULL); +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,20,4,'2018-12-29','2019-12-28',5,'2020-01-17',2,NULL),(2,7,1,'2020-01-11','2022-01-10',14,'2020-01-17',1,NULL),(3,15,3,'2017-09-27','2019-09-26',20,'2020-01-17',1,NULL),(4,26,1,'2019-12-23','2020-12-22',29,'2020-01-17',2,NULL),(5,6,1,'2020-01-12','2021-01-11',30,'2020-01-17',2,NULL),(6,27,1,'2019-12-22','2021-12-21',34,'2020-01-17',1,NULL),(7,14,1,'2020-01-04','2021-01-03',40,'2020-01-17',2,NULL),(8,18,1,'2019-12-31','2020-12-30',42,'2020-01-17',2,NULL),(9,2,1,'2020-01-16','2021-01-15',50,'2020-01-17',2,NULL),(10,8,1,'2020-01-10','2021-01-09',51,'2020-01-17',2,NULL),(11,30,4,'2018-12-19','2019-12-18',64,'2020-01-17',2,NULL),(12,19,1,'2019-12-30','2021-12-29',77,'2020-01-17',1,NULL),(13,3,1,'2020-01-15','2022-01-14',82,'2020-01-17',1,NULL),(14,4,1,'2020-01-14','2021-01-13',85,'2020-01-17',2,NULL),(15,1,1,'2020-01-17','2022-01-16',89,'2020-01-17',1,NULL),(16,5,4,'2019-01-13','2020-01-12',94,'2020-01-17',2,NULL),(17,10,4,'2019-01-08','2020-01-07',103,'2020-01-17',2,NULL),(18,16,1,'2020-01-02','2021-01-01',105,'2020-01-17',2,NULL),(19,24,1,'2019-12-25','2020-12-24',120,'2020-01-17',2,NULL),(20,22,1,'2019-12-27',NULL,122,'2020-01-17',3,NULL),(21,29,1,'2019-12-20','2021-12-19',128,'2020-01-17',1,NULL),(22,17,1,'2020-01-01','2021-12-31',132,'2020-01-17',1,NULL),(23,13,1,'2020-01-05','2022-01-04',133,'2020-01-17',1,NULL),(24,21,1,'2019-12-28','2021-12-27',138,'2020-01-17',1,NULL),(25,23,1,'2019-12-26','2021-12-25',164,'2020-01-17',1,NULL),(26,11,1,'2020-01-07',NULL,165,'2020-01-17',3,NULL),(27,12,1,'2020-01-06','2021-01-05',181,'2020-01-17',2,NULL),(28,9,1,'2020-01-09','2022-01-08',183,'2020-01-17',1,NULL),(29,25,4,'2018-12-24','2019-12-23',184,'2020-01-17',2,NULL),(30,28,1,'2019-12-21','2020-12-20',197,'2020-01-17',2,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -926,7 +926,7 @@ 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 (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,20,23),(11,21,24),(12,23,25),(13,25,26),(14,27,27),(15,29,28),(16,30,29),(17,2,30),(18,4,31),(19,6,32),(20,8,33),(21,12,34),(22,14,35),(23,15,36),(24,16,37),(25,18,38),(26,24,39),(27,26,40),(28,28,41),(29,11,42),(30,22,43); +INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES (1,1,14),(2,3,15),(3,7,16),(4,9,17),(5,13,18),(6,15,19),(7,17,20),(8,19,21),(9,21,22),(10,23,23),(11,27,24),(12,29,25),(13,2,26),(14,4,27),(15,5,28),(16,6,29),(17,8,30),(18,10,31),(19,12,32),(20,14,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; @@ -956,7 +956,7 @@ 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/ajax/api4',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: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:{}'),(2,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:{}'),(3,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:{}'),(4,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:{}'),(5,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:{}'),(6,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:{}'),(7,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:{}'),(8,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:{}'),(9,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:{}'),(10,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:{}'),(11,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:{}'),(12,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:{}'),(13,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\";}'),(14,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:{}'),(15,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:{}'),(16,1,'civicrm/tag',NULL,'Tags (Categories)','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:3:{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\";s:4:\"icon\";s:18:\"admin/small/11.png\";}'),(17,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:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(18,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:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(19,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:{}'),(20,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:{}'),(21,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\";}'),(22,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:{}'),(23,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:{}'),(24,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','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_Contact_Page_Dashlet\";',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,1,NULL,'a:0:{}'),(25,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:{}'),(26,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:{}'),(27,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:{}'),(28,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:{}'),(29,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:{}'),(30,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:{}'),(31,1,'civicrm/contact/search/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:29:\"CRM_Contact_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,1,1,0,NULL,'a:0:{}'),(32,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:2:{i:0;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,16,1,1,NULL,'a:0:{}'),(33,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:{}'),(34,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:{}'),(35,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:{}'),(36,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:{}'),(37,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:{}'),(38,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:{}'),(39,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:{}'),(40,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:{}'),(41,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:{}'),(42,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:{}'),(43,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:{}'),(44,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:{}'),(45,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:{}'),(46,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:{}'),(47,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:{}'),(48,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:{}'),(49,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:{}'),(50,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:{}'),(51,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:{}'),(52,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:{}'),(53,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:{}'),(54,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:{}'),(55,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:{}'),(56,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:{}'),(57,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:{}'),(58,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:{}'),(59,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(60,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(61,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(62,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:{}'),(63,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:{}'),(64,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:{}'),(65,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:{}'),(66,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:{}'),(67,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:{}'),(68,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:{}'),(69,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:{}'),(70,1,'civicrm/ajax/dashboard',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:\"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,1,1,3,NULL,'a:0:{}'),(71,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:{}'),(72,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:{}'),(73,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:{}'),(74,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:{}'),(75,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(76,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(77,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(78,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:3:{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\";s:4:\"icon\";s:34:\"admin/small/duplicate_matching.png\";}'),(79,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:{}'),(80,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:{}'),(81,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:{}'),(82,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\";}'),(83,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:{}'),(84,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:{}'),(85,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:{}'),(86,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:{}'),(87,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:{}'),(88,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:{}'),(89,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:{}'),(90,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:{}'),(91,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:{}'),(92,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:{}'),(93,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(94,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:{}'),(95,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:{}'),(96,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:{}'),(97,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:{}'),(98,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:{}'),(99,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:{}'),(100,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:{}'),(101,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:{}'),(102,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:{}'),(103,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:{}'),(104,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:{}'),(105,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:{}'),(106,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:{}'),(107,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:{}'),(108,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:{}'),(109,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:3:{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\";s:4:\"icon\";s:26:\"admin/small/custm_data.png\";}'),(110,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(111,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(112,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(113,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(114,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(115,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','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:31:\"CRM_Custom_Form_ChangeFieldType\";',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:{}'),(116,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(117,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(118,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(119,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(120,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(121,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(122,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(123,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: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,30,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/05.png\";}'),(124,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:25:\"admin/small/rela_type.png\";}'),(125,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/09.png\";}'),(126,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: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,45,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(127,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(128,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: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,55,1,0,NULL,'a:3:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/10.png\";}'),(129,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(130,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: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,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\";}'),(131,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: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,70,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(132,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: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,75,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/08.png\";}'),(133,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: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,80,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:7:\"tel.gif\";}'),(134,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(135,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(136,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(137,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(138,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(139,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: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,110,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(140,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:22:\"admin/small/domain.png\";}'),(141,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: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,20,1,0,NULL,'a:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(142,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(143,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\";}'),(144,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";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:3:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(145,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(146,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:29:\"admin/small/communication.png\";}'),(147,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(148,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(149,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: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,75,1,0,NULL,'a:3:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(150,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: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,80,1,0,NULL,'a:3:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(151,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: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,90,1,0,NULL,'a:3:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(152,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(153,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(154,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(155,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(156,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: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,40,1,0,NULL,'a:3:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(157,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:18:\"admin/small/03.png\";}'),(158,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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.\";}'),(159,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:26:\"admin/small/Synch_user.png\";}'),(160,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:9:\"check.gif\";}'),(161,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(162,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(163,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:18:\"administer CiviCRM\";}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:{}'),(164,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(165,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:3:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(166,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(167,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','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: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:3:{s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(168,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(169,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(170,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/updatepath.png\";}'),(171,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(172,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(173,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: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:2:{i:0;a: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:3:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(174,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/import_export_map.png\";}'),(175,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(176,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(177,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(178,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\";}'),(179,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\";}'),(180,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\";}'),(181,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:18:\"administer CiviCRM\";}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.\";}'),(182,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(183,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(184,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: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,385,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:26:\"admin/small/grant_type.png\";}'),(185,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(186,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(187,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:{}'),(188,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:{}'),(189,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:{}'),(190,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(191,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.\";}'),(192,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:{}'),(193,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:{}'),(194,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:{}'),(195,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: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: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:{}'),(196,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:3:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(197,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:{}'),(198,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:{}'),(199,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(200,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:{}'),(201,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','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:29:\"CRM_Admin_Page_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:{}'),(202,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:{}'),(203,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:{}'),(204,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:{}'),(205,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:{}'),(206,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:{}'),(207,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:{}'),(208,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:{}'),(209,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:{}'),(210,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:{}'),(211,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:{}'),(212,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:{}'),(213,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:{}'),(214,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:{}'),(215,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:{}'),(216,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:{}'),(217,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:{}'),(218,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:{}'),(219,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:{}'),(220,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:{}'),(221,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:{}'),(222,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:{}'),(223,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:{}'),(224,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:{}'),(225,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:{}'),(226,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:{}'),(227,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:{}'),(228,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:{}'),(229,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:{}'),(230,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:{}'),(231,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:{}'),(232,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:{}'),(233,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:{}'),(234,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:{}'),(235,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:{}'),(236,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:{}'),(237,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:{}'),(238,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:{}'),(239,1,'civicrm/ajax/l10n-js',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:18:\"CRM_Core_Resources\";i:1;s:20:\"outputLocalizationJS\";}',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:{}'),(240,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:{}'),(241,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:{}'),(242,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:{}'),(243,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:{}'),(244,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:{}'),(245,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:{}'),(246,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:{}'),(247,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:{}'),(248,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:{}'),(249,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:{}'),(250,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:{}'),(251,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:{}'),(252,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\";}'),(253,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\";}'),(254,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:{}'),(255,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:{}'),(256,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:{}'),(257,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\";}','s:24:\"CRM_Event_Page_ICalendar\";',NULL,'a:2:{i:0;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:{}'),(258,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:{}'),(259,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/event_manage.png\";}'),(260,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(261,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/event_type.png\";}'),(262,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/parti_status.png\";}'),(263,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/parti_role.png\";}'),(264,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: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,398,1,0,NULL,'a:3:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(265,1,'civicrm/admin/conference_slots','group=conference_slot','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:2:{i:0;a: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,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(266,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:{}'),(267,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:{}'),(268,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:{}'),(269,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:{}'),(270,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:{}'),(271,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:{}'),(272,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:{}'),(273,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:{}'),(274,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:{}'),(275,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:{}'),(276,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:{}'),(277,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:{}'),(278,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:{}'),(279,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:{}'),(280,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:{}'),(281,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:{}'),(282,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:{}'),(283,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:{}'),(284,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:{}'),(285,1,'civicrm/ajax/event/add_participant_to_cart',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:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',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:{}'),(286,1,'civicrm/ajax/event/remove_participant_from_cart',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:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',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:{}'),(287,1,'civicrm/event/add_to_cart',NULL,'Add Event To 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:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;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:{}'),(288,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:{}'),(289,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:{}'),(290,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:{}'),(291,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:{}'),(292,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:{}'),(293,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:{}'),(294,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:{}'),(295,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\";}'),(296,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\";}'),(297,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\";}'),(298,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:{}'),(299,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(300,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(301,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(302,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(303,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(304,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(305,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(306,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(307,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(308,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(309,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(310,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/Premiums.png\";}'),(311,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(312,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\";}'),(313,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(314,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: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,380,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:35:\"admin/small/payment_instruments.png\";}'),(315,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: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,395,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:36:\"admin/small/accepted_creditcards.png\";}'),(316,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: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:3:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:32:\"admin/small/soft_credit_type.png\";}'),(317,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:{}'),(318,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:{}'),(319,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:{}'),(320,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:{}'),(321,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:{}'),(322,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:{}'),(323,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:{}'),(324,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:{}'),(325,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:{}'),(326,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:{}'),(327,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:{}'),(328,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:{}'),(329,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:{}'),(330,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:{}'),(331,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(332,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:{}'),(333,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:{}'),(334,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:{}'),(335,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:{}'),(336,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\";}'),(337,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\";}'),(338,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\";}'),(339,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\";}'),(340,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:{}'),(341,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:{}'),(342,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:{}'),(343,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(344,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:{}'),(345,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\";}'),(346,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\";}'),(347,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:31:\"admin/small/membership_type.png\";}'),(348,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/membership_status.png\";}'),(349,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:{}'),(350,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:{}'),(351,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:{}'),(352,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:{}'),(353,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:{}'),(354,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:{}'),(355,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\";}'),(356,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:3:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(357,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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(358,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: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: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:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(359,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:3:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(360,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:{}'),(361,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:{}'),(362,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:{}'),(363,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:{}'),(364,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:{}'),(365,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:{}'),(366,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:{}'),(367,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:{}'),(368,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:{}'),(369,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:{}'),(370,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:{}'),(371,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:{}'),(372,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:{}'),(373,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:{}'),(374,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:{}'),(375,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:{}'),(376,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:{}'),(377,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:{}'),(378,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:{}'),(379,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:{}'),(380,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\";}'),(381,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:{}'),(382,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:{}'),(383,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\";}'),(384,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:{}'),(385,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\";}'),(386,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:{}'),(387,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:{}'),(388,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\";}'),(389,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:{}'),(390,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:{}'),(391,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\";}'),(392,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\";}'),(393,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:{}'),(394,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:{}'),(395,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:{}'),(396,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:{}'),(397,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:{}'),(398,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:{}'),(399,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:{}'),(400,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:{}'),(401,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:{}'),(402,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(403,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:3:{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\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(404,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:3:{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\";s:4:\"icon\";s:30:\"admin/small/redaction_type.png\";}'),(405,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:3:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(406,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:3:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(407,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:{}'),(408,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:{}'),(409,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:{}'),(410,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:{}'),(411,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:{}'),(412,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:{}'),(413,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\";}'),(414,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:{}'),(415,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:{}'),(416,1,'civicrm/report/options/report_template',NULL,'Manage Templates','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:23:\"CRM_Report_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:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'),(417,1,'civicrm/admin/report/register',NULL,'Register Report','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:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a: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:30:\"Register the Report templates.\";}'),(418,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;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:{}'),(419,1,'civicrm/admin/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:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}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:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:3:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:31:\"admin/small/report_template.gif\";}'),(420,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','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 CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_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,1,1,0,NULL,'a:3:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(421,1,'civicrm/admin/report/list',NULL,'Reports Listing','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: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:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:3:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:27:\"admin/small/report_list.gif\";}'),(422,1,'civicrm/campaign',NULL,'Campaign Dashboard','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_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,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(423,1,'civicrm/campaign/add',NULL,'New Campaign','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(424,1,'civicrm/survey/add',NULL,'New Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_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:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(425,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(426,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','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 CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a: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:3:{s:4:\"icon\";s:18:\"admin/small/05.png\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,1,'civicrm/admin/options/campaign_type',NULL,'Campaign 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: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,2,1,0,NULL,'a:4:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,1,'civicrm/admin/options/campaign_status',NULL,'Campaign 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: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,3,1,0,NULL,'a:4:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','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,4,1,0,NULL,'a:4:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',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:12:\"CiviCampaign\";}'),(431,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(432,1,'civicrm/petition/add',NULL,'New Petition','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',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:{}'),(433,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',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:{}'),(434,1,'civicrm/petition/browse',NULL,'View Petition Signatures','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_Campaign_Page_Petition\";',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:{}'),(435,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',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:{}'),(436,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',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:{}'),(437,1,'civicrm/campaign/registerInterview',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:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(438,1,'civicrm/survey/configure/main',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_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:{}'),(439,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',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:{}'),(440,1,'civicrm/survey/configure/results',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',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:{}'),(441,1,'civicrm/survey/delete',NULL,'Delete Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_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:{}'),(442,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:3:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";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:15:\"Tags_Categories\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";s:18:\"admin/small/11.png\";s:5:\"extra\";N;}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\";s:26:\"admin/small/custm_data.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:18:\"admin/small/05.png\";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\";s:25:\"admin/small/rela_type.png\";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\";s:18:\"admin/small/09.png\";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\";s:18:\"admin/small/01.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/10.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/07.png\";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\";s:18:\"admin/small/08.png\";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\";s:7:\"tel.gif\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:10;}s:6:\"Manage\";a:3:{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\";s:34:\"admin/small/duplicate_matching.png\";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\";s:18:\"admin/small/13.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:14:\"CiviContribute\";a:3:{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\";s:34:\"admin/small/contribution_types.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:24:\"admin/small/Premiums.png\";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\";s:34:\"admin/small/contribution_types.png\";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\";s:35:\"admin/small/payment_instruments.png\";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\";s:36:\"admin/small/accepted_creditcards.png\";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\";s:32:\"admin/small/soft_credit_type.png\";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:9:\"perColumn\";d:5;}s:14:\"Communications\";a:3:{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\";s:22:\"admin/small/domain.png\";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\";s:21:\"admin/small/title.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:29:\"admin/small/communication.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:6;}s:12:\"Localization\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:21:\"Users and Permissions\";a:3:{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\";s:18:\"admin/small/03.png\";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\";s:26:\"admin/small/Synch_user.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:15:\"System Settings\";a:3:{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\";s:9:\"check.gif\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/price_sets.png\";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\";s:18:\"admin/small/07.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}s:62:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";a:6:{s:5:\"title\";s:53:\"Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:2:\"id\";s:46:\"Misc_Undelete_PDFs_Limits_Logging_Captcha_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/updatepath.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:33:\"admin/small/import_export_map.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:9;}s:12:\"CiviCampaign\";a:3:{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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:9:\"CiviEvent\";a:3:{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\";s:28:\"admin/small/event_manage.png\";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\";s:24:\"admin/small/template.png\";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\";s:26:\"admin/small/event_type.png\";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\";s:28:\"admin/small/parti_status.png\";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\";s:26:\"admin/small/parti_role.png\";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\";s:18:\"admin/small/01.png\";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:65:\"/civicrm/admin/conference_slots?group=conference_slot&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}s:9:\"perColumn\";d:5;}s:8:\"CiviMail\";a:3:{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\";s:18:\"admin/small/07.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/07.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviMember\";a:3:{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\";s:31:\"admin/small/membership_type.png\";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\";s:33:\"admin/small/membership_status.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:12:\"Option Lists\";a:3:{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\";s:26:\"admin/small/grant_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:9:\"Customize\";a:3:{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\";s:26:\"admin/small/price_sets.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:8:\"CiviCase\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:30:\"admin/small/redaction_type.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:25:\"admin/small/case_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviReport\";a:3:{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\";s:31:\"admin/small/report_template.gif\";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\";s:24:\"admin/small/template.png\";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\";s:27:\"admin/small/report_list.gif\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); +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/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:{}'),(2,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:{}'),(3,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:{}'),(4,1,'civicrm/ajax/api4',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: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:{}'),(5,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:{}'),(6,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:{}'),(7,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:{}'),(8,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:{}'),(9,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:{}'),(10,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:{}'),(11,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:{}'),(12,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:{}'),(13,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:{}'),(14,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:{}'),(15,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:{}'),(16,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:{}'),(17,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:{}'),(18,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(19,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:{}'),(20,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:{}'),(21,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:{}'),(22,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:{}'),(23,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:{}'),(24,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:{}'),(25,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:{}'),(26,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:{}'),(27,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:{}'),(28,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:{}'),(29,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:{}'),(30,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:{}'),(31,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:{}'),(32,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:{}'),(33,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:{}'),(34,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:{}'),(35,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:{}'),(36,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:{}'),(37,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:{}'),(38,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:{}'),(39,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:{}'),(40,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:{}'),(41,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:{}'),(42,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:{}'),(43,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:{}'),(44,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:{}'),(45,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:{}'),(46,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:{}'),(47,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:{}'),(48,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:{}'),(49,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:{}'),(50,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:{}'),(51,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:{}'),(52,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:{}'),(53,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:{}'),(54,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:{}'),(55,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:{}'),(56,1,'civicrm/ajax/l10n-js',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:18:\"CRM_Core_Resources\";i:1;s:20:\"outputLocalizationJS\";}',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:{}'),(57,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:{}'),(58,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:{}'),(59,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:{}'),(60,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:{}'),(61,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:{}'),(62,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:{}'),(63,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:{}'),(64,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:{}'),(65,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:{}'),(66,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:{}'),(67,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:{}'),(68,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:{}'),(69,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:{}'),(70,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\";}'),(71,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:{}'),(72,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:{}'),(73,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:{}'),(74,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:{}'),(75,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:{}'),(76,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:{}'),(77,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:{}'),(78,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:{}'),(79,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:{}'),(80,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:3:{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\";s:4:\"icon\";s:26:\"admin/small/custm_data.png\";}'),(81,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(82,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(83,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(84,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(85,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:{}'),(86,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','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:31:\"CRM_Custom_Form_ChangeFieldType\";',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:{}'),(87,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(88,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(89,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(90,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(91,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(92,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(93,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(94,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: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,30,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/05.png\";}'),(95,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:25:\"admin/small/rela_type.png\";}'),(96,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/09.png\";}'),(97,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: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,45,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(98,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(99,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: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,55,1,0,NULL,'a:3:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/10.png\";}'),(100,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(101,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: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,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\";}'),(102,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: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,70,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(103,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: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,75,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/08.png\";}'),(104,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: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,80,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:7:\"tel.gif\";}'),(105,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(106,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(107,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(108,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(109,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(110,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: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,110,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(111,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:22:\"admin/small/domain.png\";}'),(112,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: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,20,1,0,NULL,'a:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(113,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(114,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\";}'),(115,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";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:3:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(116,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(117,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:29:\"admin/small/communication.png\";}'),(118,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(119,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(120,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: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,75,1,0,NULL,'a:3:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(121,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: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,80,1,0,NULL,'a:3:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(122,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: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,90,1,0,NULL,'a:3:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(123,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(124,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(125,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(126,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(127,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: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,40,1,0,NULL,'a:3:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(128,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:18:\"admin/small/03.png\";}'),(129,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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.\";}'),(130,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:26:\"admin/small/Synch_user.png\";}'),(131,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:9:\"check.gif\";}'),(132,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(133,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(134,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:18:\"administer CiviCRM\";}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:{}'),(135,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(136,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:3:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(137,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(138,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','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: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:3:{s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(139,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(140,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(141,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/updatepath.png\";}'),(142,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(143,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(144,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: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:2:{i:0;a: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:3:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(145,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/import_export_map.png\";}'),(146,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(147,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(148,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(149,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\";}'),(150,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\";}'),(151,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\";}'),(152,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:18:\"administer CiviCRM\";}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.\";}'),(153,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(154,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(155,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: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,385,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:26:\"admin/small/grant_type.png\";}'),(156,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(157,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(158,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:{}'),(159,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:{}'),(160,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:{}'),(161,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(162,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.\";}'),(163,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:{}'),(164,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:{}'),(165,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:{}'),(166,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: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: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:{}'),(167,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:3:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(168,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:{}'),(169,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:{}'),(170,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(171,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:{}'),(172,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor','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:29:\"CRM_Admin_Page_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:{}'),(173,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:{}'),(174,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:{}'),(175,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','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_Contact_Page_Dashlet\";',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,1,NULL,'a:0:{}'),(176,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:{}'),(177,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:{}'),(178,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:{}'),(179,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:{}'),(180,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:{}'),(181,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:{}'),(182,1,'civicrm/contact/search/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:29:\"CRM_Contact_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,1,1,0,NULL,'a:0:{}'),(183,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:2:{i:0;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,16,1,1,NULL,'a:0:{}'),(184,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:{}'),(185,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:{}'),(186,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:{}'),(187,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:{}'),(188,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:{}'),(189,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:{}'),(190,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:{}'),(191,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:{}'),(192,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:{}'),(193,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:{}'),(194,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:{}'),(195,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:{}'),(196,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:{}'),(197,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:{}'),(198,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:{}'),(199,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:{}'),(200,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:{}'),(201,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:{}'),(202,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:{}'),(203,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:{}'),(204,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:{}'),(205,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:{}'),(206,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:{}'),(207,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:{}'),(208,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:{}'),(209,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:{}'),(210,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(211,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(212,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(213,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:{}'),(214,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:{}'),(215,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:{}'),(216,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:{}'),(217,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:{}'),(218,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:{}'),(219,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:{}'),(220,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:{}'),(221,1,'civicrm/ajax/dashboard',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:\"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,1,1,3,NULL,'a:0:{}'),(222,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:{}'),(223,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:{}'),(224,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:{}'),(225,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:{}'),(226,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(227,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(228,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(229,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:3:{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\";s:4:\"icon\";s:34:\"admin/small/duplicate_matching.png\";}'),(230,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:{}'),(231,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:{}'),(232,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:{}'),(233,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\";}'),(234,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:{}'),(235,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:{}'),(236,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:{}'),(237,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:{}'),(238,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:{}'),(239,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:{}'),(240,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:{}'),(241,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:{}'),(242,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:{}'),(243,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:{}'),(244,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\";}'),(245,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:{}'),(246,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:{}'),(247,1,'civicrm/tag',NULL,'Tags (Categories)','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:3:{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\";s:4:\"icon\";s:18:\"admin/small/11.png\";}'),(248,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:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(249,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:17:\"Tags (Categories)\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(250,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:{}'),(251,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:{}'),(252,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:{}'),(253,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:{}'),(254,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:{}'),(255,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\";}'),(256,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\";}'),(257,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:{}'),(258,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:{}'),(259,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:{}'),(260,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\";}','s:24:\"CRM_Event_Page_ICalendar\";',NULL,'a:2:{i:0;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:{}'),(261,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:{}'),(262,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/event_manage.png\";}'),(263,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(264,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/event_type.png\";}'),(265,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/parti_status.png\";}'),(266,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/parti_role.png\";}'),(267,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: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,398,1,0,NULL,'a:3:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(268,1,'civicrm/admin/conference_slots','group=conference_slot','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:2:{i:0;a: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,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(269,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:{}'),(270,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:{}'),(271,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:{}'),(272,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:{}'),(273,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:{}'),(274,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:{}'),(275,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:{}'),(276,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:{}'),(277,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:{}'),(278,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:{}'),(279,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:{}'),(280,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:{}'),(281,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:{}'),(282,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:{}'),(283,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:{}'),(284,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:{}'),(285,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:{}'),(286,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:{}'),(287,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:{}'),(288,1,'civicrm/ajax/event/add_participant_to_cart',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:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:23:\"add_participant_to_cart\";}',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:{}'),(289,1,'civicrm/ajax/event/remove_participant_from_cart',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:32:\"CRM_Event_Cart_Page_CheckoutAJAX\";i:1;s:28:\"remove_participant_from_cart\";}',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:{}'),(290,1,'civicrm/event/add_to_cart',NULL,'Add Event To 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:29:\"CRM_Event_Cart_Page_AddToCart\";',NULL,'a:2:{i:0;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:{}'),(291,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:{}'),(292,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:{}'),(293,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:{}'),(294,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:{}'),(295,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(296,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:{}'),(297,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\";}'),(298,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\";}'),(299,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\";}'),(300,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:{}'),(301,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(302,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(303,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(304,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(305,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(306,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(307,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(308,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(309,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(310,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(311,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(312,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/Premiums.png\";}'),(313,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(314,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\";}'),(315,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(316,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: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,380,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:35:\"admin/small/payment_instruments.png\";}'),(317,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: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,395,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:36:\"admin/small/accepted_creditcards.png\";}'),(318,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: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:3:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:32:\"admin/small/soft_credit_type.png\";}'),(319,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:{}'),(320,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:{}'),(321,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:{}'),(322,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:{}'),(323,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:{}'),(324,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:{}'),(325,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:{}'),(326,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:{}'),(327,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:{}'),(328,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:{}'),(329,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:{}'),(330,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:{}'),(331,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:{}'),(332,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:{}'),(333,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(334,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:{}'),(335,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:{}'),(336,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:{}'),(337,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:{}'),(338,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\";}'),(339,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\";}'),(340,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\";}'),(341,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\";}'),(342,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:{}'),(343,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:{}'),(344,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:{}'),(345,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\";}'),(346,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\";}'),(347,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:31:\"admin/small/membership_type.png\";}'),(348,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/membership_status.png\";}'),(349,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:{}'),(350,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:{}'),(351,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:{}'),(352,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:{}'),(353,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:{}'),(354,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:{}'),(355,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\";}'),(356,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:3:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(357,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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(358,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: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: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:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(359,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:3:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(360,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:{}'),(361,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:{}'),(362,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:{}'),(363,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:{}'),(364,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:{}'),(365,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:{}'),(366,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:{}'),(367,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:{}'),(368,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:{}'),(369,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:{}'),(370,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:{}'),(371,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:{}'),(372,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:{}'),(373,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:{}'),(374,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:{}'),(375,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:{}'),(376,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:{}'),(377,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:{}'),(378,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:{}'),(379,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:{}'),(380,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\";}'),(381,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:{}'),(382,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:{}'),(383,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\";}'),(384,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:{}'),(385,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\";}'),(386,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:{}'),(387,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:{}'),(388,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\";}'),(389,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:{}'),(390,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:{}'),(391,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\";}'),(392,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\";}'),(393,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:{}'),(394,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:{}'),(395,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:{}'),(396,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:{}'),(397,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:{}'),(398,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:{}'),(399,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:{}'),(400,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:{}'),(401,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:{}'),(402,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(403,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:3:{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\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(404,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:3:{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\";s:4:\"icon\";s:30:\"admin/small/redaction_type.png\";}'),(405,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:3:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(406,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:3:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(407,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:{}'),(408,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:{}'),(409,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:{}'),(410,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:{}'),(411,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:{}'),(412,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:{}'),(413,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\";}'),(414,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:{}'),(415,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:{}'),(416,1,'civicrm/report/options/report_template',NULL,'Manage Templates','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:23:\"CRM_Report_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:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,NULL,NULL,NULL,0,1241,1,1,NULL,'a:0:{}'),(417,1,'civicrm/admin/report/register',NULL,'Register Report','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:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a: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:30:\"Register the Report templates.\";}'),(418,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;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:{}'),(419,1,'civicrm/admin/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:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}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:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:3:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:31:\"admin/small/report_template.gif\";}'),(420,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','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 CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_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,1,1,0,NULL,'a:3:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(421,1,'civicrm/admin/report/list',NULL,'Reports Listing','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: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:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:3:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:27:\"admin/small/report_list.gif\";}'),(422,1,'civicrm/campaign',NULL,'Campaign Dashboard','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_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,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(423,1,'civicrm/campaign/add',NULL,'New Campaign','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(424,1,'civicrm/survey/add',NULL,'New Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_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:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(425,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(426,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','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 CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a: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:3:{s:4:\"icon\";s:18:\"admin/small/05.png\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,1,'civicrm/admin/options/campaign_type',NULL,'Campaign 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: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,2,1,0,NULL,'a:4:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,1,'civicrm/admin/options/campaign_status',NULL,'Campaign 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: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,3,1,0,NULL,'a:4:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','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,4,1,0,NULL,'a:4:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',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:12:\"CiviCampaign\";}'),(431,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'),(432,1,'civicrm/petition/add',NULL,'New Petition','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',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:{}'),(433,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',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:{}'),(434,1,'civicrm/petition/browse',NULL,'View Petition Signatures','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_Campaign_Page_Petition\";',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:{}'),(435,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',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:{}'),(436,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',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:{}'),(437,1,'civicrm/campaign/registerInterview',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:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(438,1,'civicrm/survey/configure/main',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_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:{}'),(439,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',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:{}'),(440,1,'civicrm/survey/configure/results',NULL,'Configure Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',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:{}'),(441,1,'civicrm/survey/delete',NULL,'Delete Survey','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 CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_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:{}'),(442,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:14:\"CiviContribute\";a:3:{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\";s:34:\"admin/small/contribution_types.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:24:\"admin/small/Premiums.png\";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\";s:34:\"admin/small/contribution_types.png\";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\";s:35:\"admin/small/payment_instruments.png\";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\";s:36:\"admin/small/accepted_creditcards.png\";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\";s:32:\"admin/small/soft_credit_type.png\";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:9:\"perColumn\";d:5;}s:26:\"Customize Data and Screens\";a:3:{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\";s:26:\"admin/small/custm_data.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:18:\"admin/small/05.png\";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\";s:25:\"admin/small/rela_type.png\";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\";s:18:\"admin/small/09.png\";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\";s:18:\"admin/small/01.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/10.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/07.png\";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\";s:18:\"admin/small/08.png\";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\";s:7:\"tel.gif\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";s:5:\"extra\";N;}s:26:\"{weight}.Tags (Categories)\";a:6:{s:5:\"title\";s:17:\"Tags (Categories)\";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:15:\"Tags_Categories\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";s:18:\"admin/small/11.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:10;}s:14:\"Communications\";a:3:{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\";s:22:\"admin/small/domain.png\";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\";s:21:\"admin/small/title.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:29:\"admin/small/communication.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:6;}s:12:\"Localization\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:21:\"Users and Permissions\";a:3:{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\";s:18:\"admin/small/03.png\";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\";s:26:\"admin/small/Synch_user.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:15:\"System Settings\";a:3:{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\";s:9:\"check.gif\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/price_sets.png\";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\";s:18:\"admin/small/07.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}s:62:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";a:6:{s:5:\"title\";s:53:\"Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)\";s:4:\"desc\";s:91:\"Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.\";s:2:\"id\";s:46:\"Misc_Undelete_PDFs_Limits_Logging_Captcha_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/updatepath.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:33:\"admin/small/import_export_map.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:9;}s:12:\"CiviCampaign\";a:3:{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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:9:\"CiviEvent\";a:3:{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\";s:28:\"admin/small/event_manage.png\";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\";s:24:\"admin/small/template.png\";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\";s:26:\"admin/small/event_type.png\";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\";s:28:\"admin/small/parti_status.png\";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\";s:26:\"admin/small/parti_role.png\";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\";s:18:\"admin/small/01.png\";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:65:\"/civicrm/admin/conference_slots?group=conference_slot&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}s:9:\"perColumn\";d:5;}s:8:\"CiviMail\";a:3:{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\";s:18:\"admin/small/07.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/07.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviMember\";a:3:{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\";s:31:\"admin/small/membership_type.png\";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\";s:33:\"admin/small/membership_status.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:6:\"Manage\";a:3:{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\";s:18:\"admin/small/13.png\";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\";s:34:\"admin/small/duplicate_matching.png\";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:9:\"perColumn\";d:2;}s:12:\"Option Lists\";a:3:{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\";s:26:\"admin/small/grant_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:9:\"Customize\";a:3:{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\";s:26:\"admin/small/price_sets.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:8:\"CiviCase\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:30:\"admin/small/redaction_type.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:25:\"admin/small/case_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviReport\";a:3:{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\";s:31:\"admin/small/report_template.gif\";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\";s:24:\"admin/small/template.png\";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\";s:27:\"admin/small/report_list.gif\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}'); /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -966,7 +966,7 @@ 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`, `is_default`, `is_reserved`, `is_sms`, `pdf_format_id`) VALUES (1,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $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 $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\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','<!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 $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $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 $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 $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 $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 {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 </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,1,0,0,NULL),(2,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $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 $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\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','<!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 $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $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 $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 $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 $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 {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 </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,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,820,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,820,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 $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}Financial Type{/ts}: {$formValues.contributionType_name}\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 $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 $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 $getTaxDetails}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $getTaxDetails && $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{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $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 $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 $softCreditTypes and $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 $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 $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 $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}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $getTaxDetails && $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $formValues.paidBy and !$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 $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 $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 $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 $softCreditTypes and $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 $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 $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 $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,821,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 $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}Financial Type{/ts}: {$formValues.contributionType_name}\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 $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 $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 $getTaxDetails}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $getTaxDetails && $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{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $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 $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 $softCreditTypes and $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 $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 $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 $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}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $getTaxDetails && $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $formValues.paidBy and !$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 $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 $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 $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 $softCreditTypes and $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 $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 $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 $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,821,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$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 $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 $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 $dataArray}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $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 $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $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 $softCreditTypes and $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $lineItem and $priceSetID and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $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 $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $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 $is_monetary and $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 $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 $softCreditTypes and $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,822,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$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 $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 $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 $dataArray}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $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 $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $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 $softCreditTypes and $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $lineItem and $priceSetID and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $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 $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $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 $is_monetary and $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 $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 $softCreditTypes and $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,822,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 <table style = \"margin-top:2px;padding-left:7px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/civi99.png\" height = \"34px\" width = \"99px\"></td>\n </tr>\n </table>\n <center>\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif;\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}INVOICE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><b><font size = \"1\" align = \"center\" >{ts}Invoice 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\" >{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:15px;\"><font size = \"1\" align = \"center\" >{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><font size = \"1\" align = \"right\">{$invoice_number}</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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n </table>\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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:34px;text-align:left;font-weight:bold;width:200px;\"><font size = \"1\">{ts}Description{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\" ><font size = \"1\">{ts}Quantity{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts}Unit Price{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;width:20px;\"><font size = \"1\">{$taxTerm} </font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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 <tr>\n <td colspan = \"5\" ><hr size=\"3\" style = \"color:#000;\"></hr></td>\n </tr>\n {else}\n <tr>\n <td colspan = \"5\" style = \"color:#F5F5F5;\"><hr></hr></td>\n </tr>\n {/if}\n <tr>\n <td style=\"text-align:left;\" ><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:34px;text-align:right;\"><font size = \"1\"> {$value.qty}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style = \"padding-left:34px;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:20px;text-align:right;\"><font size = \"1\">{ts}Sub Total{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from = $dataArray item = value key = priceset}\n <tr>\n <td colspan = \"3\"></td>\n {if $priceset}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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:20px;text-align:right;\"><b><font size = \"1\">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\">{$amount|crmMoney:$currency}</font></td>\n <td style = \"padding-left:34px;\"><font size = \"1\" align = \"right\"></font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan = \"3\"></td>\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}LESS Amount Credited{/ts}\n {else}\n {ts}LESS Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style = \"padding-left:34px;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 = \"padding-left:20px;text-align:right;\"><b><font size = \"1\">{ts}AMOUNT DUE:{/ts} </font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><b><font size = \"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style = \"padding-left:34px;\"><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 {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td><b><font size = \"1\" align = \"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan = \"3\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"480\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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 = \"right\"><b>{ts}To: {/ts}</b><div style=\"width:17em;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_phone} <br />\n {$domain_email}</div>\n </font><br/><br/><font size=\"1\" align=\"right\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding = \"-10\" cellspacing = \"22\" 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\">{$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}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></hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td colspan = \"2\"></td>\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 colspan = \"2\"></td>\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 colspan = \"2\"></td>\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></hr></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\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 <center>\n\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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\">{$taxTerm} </font></th>\n <th style = \"padding-left:28px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:28px;text-align:right\"><font size = \"1\" >{ts 1=$taxTerm}No %1{/ts}</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 {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\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</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\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:28px;text-align:right;\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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=$defaultCurrency}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 <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"507\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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\" >{$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 </body>\n</html>\n',1,823,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 <table style = \"margin-top:2px;padding-left:7px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/civi99.png\" height = \"34px\" width = \"99px\"></td>\n </tr>\n </table>\n <center>\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif;\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}INVOICE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><b><font size = \"1\" align = \"center\" >{ts}Invoice 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\" >{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:15px;\"><font size = \"1\" align = \"center\" >{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><font size = \"1\" align = \"right\">{$invoice_number}</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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n </table>\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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:34px;text-align:left;font-weight:bold;width:200px;\"><font size = \"1\">{ts}Description{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\" ><font size = \"1\">{ts}Quantity{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts}Unit Price{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;width:20px;\"><font size = \"1\">{$taxTerm} </font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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 <tr>\n <td colspan = \"5\" ><hr size=\"3\" style = \"color:#000;\"></hr></td>\n </tr>\n {else}\n <tr>\n <td colspan = \"5\" style = \"color:#F5F5F5;\"><hr></hr></td>\n </tr>\n {/if}\n <tr>\n <td style=\"text-align:left;\" ><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:34px;text-align:right;\"><font size = \"1\"> {$value.qty}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style = \"padding-left:34px;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:20px;text-align:right;\"><font size = \"1\">{ts}Sub Total{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from = $dataArray item = value key = priceset}\n <tr>\n <td colspan = \"3\"></td>\n {if $priceset}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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:20px;text-align:right;\"><b><font size = \"1\">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\">{$amount|crmMoney:$currency}</font></td>\n <td style = \"padding-left:34px;\"><font size = \"1\" align = \"right\"></font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan = \"3\"></td>\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}LESS Amount Credited{/ts}\n {else}\n {ts}LESS Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style = \"padding-left:34px;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 = \"padding-left:20px;text-align:right;\"><b><font size = \"1\">{ts}AMOUNT DUE:{/ts} </font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><b><font size = \"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style = \"padding-left:34px;\"><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 {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td><b><font size = \"1\" align = \"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan = \"3\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"480\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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 = \"right\"><b>{ts}To: {/ts}</b><div style=\"width:17em;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_phone} <br />\n {$domain_email}</div>\n </font><br/><br/><font size=\"1\" align=\"right\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding = \"-10\" cellspacing = \"22\" 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\">{$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}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></hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td colspan = \"2\"></td>\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 colspan = \"2\"></td>\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 colspan = \"2\"></td>\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></hr></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\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 <center>\n\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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\">{$taxTerm} </font></th>\n <th style = \"padding-left:28px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:28px;text-align:right\"><font size = \"1\" >{ts 1=$taxTerm}No %1{/ts}</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 {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\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</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\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:28px;text-align:right;\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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=$defaultCurrency}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 <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"507\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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\" >{$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 </body>\n</html>\n',1,823,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,824,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,824,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,825,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,825,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,826,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,826,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,827,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,827,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}{/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}{/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,828,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}{/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}{/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,828,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,829,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,829,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,830,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,830,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,831,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,831,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 $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $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 $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 <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\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 </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 $billingName || $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 {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $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 $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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,832,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 $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $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 $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 <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\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 </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 $billingName || $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 {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $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 $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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,832,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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $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 $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 $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 $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"} {$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $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 $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $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 $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $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 $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $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 $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\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 $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 $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 $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 $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 $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 $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 $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 $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,833,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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $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 $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 $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 $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"} {$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $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 $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $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 $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $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 $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $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 $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\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 $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 $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 $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 $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 $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 $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 $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 $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,833,0,1,0,NULL),(31,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $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 $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $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 $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 $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 $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"}{$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if $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 $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $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 $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $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{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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','<!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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $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 $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 $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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} {$part.$priceset.info}\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 $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 $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 $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $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 $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 $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 $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 $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 $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 {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 </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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 </table>\n</center>\n\n</body>\n</html>\n',1,834,1,0,0,NULL),(32,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $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 $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $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 $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 $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 $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"}{$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if $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 $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $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 $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $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{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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','<!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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $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 $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 $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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} {$part.$priceset.info}\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 $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 $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 $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $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 $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 $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 $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 $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 $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 {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 </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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 </table>\n</center>\n\n</body>\n</html>\n',1,834,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 $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 {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$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 $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 $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>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$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 $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,835,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 $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 {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$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 $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 $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>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$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 $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,835,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 $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 $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}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 $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 $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,836,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 $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 $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}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 $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 $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,836,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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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=`$participantID`&{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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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,837,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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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=`$participantID`&{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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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,837,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 $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 $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 $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 $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,838,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 $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 $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 $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 $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,838,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 $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 $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 $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 $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,839,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 $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 $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 $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 $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,839,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,840,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,840,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 $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$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 $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{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $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\" \"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 $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $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 !$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 ! $cancelled}\n {if !$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 $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $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 $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $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 $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 $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,841,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 $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$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 $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{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $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\" \"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 $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $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 !$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 ! $cancelled}\n {if !$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 $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $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 $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $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 $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 $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,841,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\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 && $membership_amount && $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 && $lineItem and $priceSetID & !$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 && !$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 $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $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 $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $membership_amount and $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 !$useForMember && $lineItem and $priceSetID and !$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 !$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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $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 $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 $is_monetary and $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 $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,842,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\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 && $membership_amount && $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 && $lineItem and $priceSetID & !$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 && !$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 $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $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 $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $membership_amount and $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 !$useForMember && $lineItem and $priceSetID and !$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 !$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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $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 $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 $is_monetary and $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 $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,842,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,843,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,843,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,844,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,844,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,845,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,845,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,846,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,846,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}{/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}{/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,847,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}{/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}{/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,847,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,848,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,848,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,849,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,849,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,850,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,850,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,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,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,1,0,0,NULL); +INSERT INTO `civicrm_msg_template` (`id`, `msg_title`, `msg_subject`, `msg_text`, `msg_html`, `is_active`, `workflow_id`, `is_default`, `is_reserved`, `is_sms`, `pdf_format_id`) VALUES (1,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $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 $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\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','<!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 $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $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 $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 $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 $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 {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 </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,1,0,0,NULL),(2,'Cases - Send Copy of an Activity','{if $idHash}[case #{$idHash}]{/if} {$activitySubject}\n','===========================================================\n{ts}Activity Summary{/ts} - {$activityTypeName}\n===========================================================\n{if $isCaseActivity}\n{ts}Your Case Role(s){/ts} : {$contact.role}\n{if $manageCaseURL}\n{ts}Manage Case{/ts} : {$manageCaseURL}\n{/if}\n{/if}\n\n{if $editActURL}\n{ts}Edit activity{/ts} : {$editActURL}\n{/if}\n{if $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 $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime}\n{else}\n{$field.label}{if $field.category}({$field.category}){/if} : {$field.value}\n{/if}\n{/foreach}\n\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','<!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 $isCaseActivity}\n <tr>\n <td {$labelStyle}>\n {ts}Your Case Role(s){/ts}\n </td>\n <td {$valueStyle}>\n {$contact.role}\n </td>\n </tr>\n {if $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 $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 $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 $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 {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 </table>\n </td>\n </tr>\n </table>\n</center>\n\n</body>\n</html>\n',1,819,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,820,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,820,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 $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}Financial Type{/ts}: {$formValues.contributionType_name}\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 $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 $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 $getTaxDetails}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $getTaxDetails && $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{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $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 $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 $softCreditTypes and $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 $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 $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 $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}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $getTaxDetails && $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $formValues.paidBy and !$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 $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 $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 $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 $softCreditTypes and $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 $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 $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 $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,821,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 $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}Financial Type{/ts}: {$formValues.contributionType_name}\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 $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 $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 $getTaxDetails}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $getTaxDetails && $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{$taxTerm} {$priceset|string_format:\"%.2f\"}% : {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm} : {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $receipt_date}\n{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy and !$formValues.hidden_CreditCard}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{if $formValues.trxn_id}\n{ts}Transaction ID{/ts}: {$formValues.trxn_id}\n{/if}\n\n{if $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 $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 $softCreditTypes and $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 $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 $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 $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}Financial Type{/ts}\n </td>\n <td {$valueStyle}>\n {$formValues.contributionType_name}\n </td>\n </tr>\n\n {if $lineItem and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $getTaxDetails && $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $formValues.paidBy and !$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 $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 $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 $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 $softCreditTypes and $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 $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 $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 $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,821,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$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 $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 $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 $dataArray}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $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 $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $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 $softCreditTypes and $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $lineItem and $priceSetID and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $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 $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $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 $is_monetary and $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 $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 $softCreditTypes and $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,822,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\n===========================================================\n{/if}\n\n{if $amount}\n===========================================================\n{ts}Contribution Information{/ts}\n\n===========================================================\n{if $lineItem and $priceSetID and !$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 $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 $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 $dataArray}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n\n{if $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 $amount_level } - {$amount_level} {/if}\n{/if}\n{/if}\n{if $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n\n{if $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 $softCreditTypes and $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or Email*}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $lineItem and $priceSetID and !$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 $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 $getTaxDetails}\n <td>\n {$line.unit_price*$line.qty|crmMoney:$currency}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n\n {/if}\n {if $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 $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n {/if}\n\n\n {if $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 $is_monetary and $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 $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 $softCreditTypes and $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,822,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 <table style = \"margin-top:2px;padding-left:7px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/civi99.png\" height = \"34px\" width = \"99px\"></td>\n </tr>\n </table>\n <center>\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif;\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}INVOICE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><b><font size = \"1\" align = \"center\" >{ts}Invoice 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\" >{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:15px;\"><font size = \"1\" align = \"center\" >{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><font size = \"1\" align = \"right\">{$invoice_number}</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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n </table>\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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:34px;text-align:left;font-weight:bold;width:200px;\"><font size = \"1\">{ts}Description{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\" ><font size = \"1\">{ts}Quantity{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts}Unit Price{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;width:20px;\"><font size = \"1\">{$taxTerm} </font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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 <tr>\n <td colspan = \"5\" ><hr size=\"3\" style = \"color:#000;\"></hr></td>\n </tr>\n {else}\n <tr>\n <td colspan = \"5\" style = \"color:#F5F5F5;\"><hr></hr></td>\n </tr>\n {/if}\n <tr>\n <td style=\"text-align:left;\" ><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:34px;text-align:right;\"><font size = \"1\"> {$value.qty}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style = \"padding-left:34px;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:20px;text-align:right;\"><font size = \"1\">{ts}Sub Total{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from = $dataArray item = value key = priceset}\n <tr>\n <td colspan = \"3\"></td>\n {if $priceset}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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:20px;text-align:right;\"><b><font size = \"1\">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\">{$amount|crmMoney:$currency}</font></td>\n <td style = \"padding-left:34px;\"><font size = \"1\" align = \"right\"></font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan = \"3\"></td>\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}LESS Amount Credited{/ts}\n {else}\n {ts}LESS Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style = \"padding-left:34px;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 = \"padding-left:20px;text-align:right;\"><b><font size = \"1\">{ts}AMOUNT DUE:{/ts} </font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><b><font size = \"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style = \"padding-left:34px;\"><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 {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td><b><font size = \"1\" align = \"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan = \"3\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"480\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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 = \"right\"><b>{ts}To: {/ts}</b><div style=\"width:17em;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_phone} <br />\n {$domain_email}</div>\n </font><br/><br/><font size=\"1\" align=\"right\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding = \"-10\" cellspacing = \"22\" 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\">{$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}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></hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td colspan = \"2\"></td>\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 colspan = \"2\"></td>\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 colspan = \"2\"></td>\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></hr></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\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 <center>\n\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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\">{$taxTerm} </font></th>\n <th style = \"padding-left:28px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:28px;text-align:right\"><font size = \"1\" >{ts 1=$taxTerm}No %1{/ts}</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 {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\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</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\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:28px;text-align:right;\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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=$defaultCurrency}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 <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"507\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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\" >{$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 </body>\n</html>\n',1,823,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 <table style = \"margin-top:2px;padding-left:7px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/civi99.png\" height = \"34px\" width = \"99px\"></td>\n </tr>\n </table>\n <center>\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif;\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}INVOICE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><b><font size = \"1\" align = \"center\" >{ts}Invoice 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\" >{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:15px;\"><font size = \"1\" align = \"center\" >{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td>\n <td colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><font size = \"1\" align = \"right\">{$invoice_number}</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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_phone}{$domain_phone}{/if}</font> </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td><font size = \"1\" align = \"right\"> {if $domain_email}{$domain_email}{/if}</font> </td>\n </tr>\n </table>\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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:34px;text-align:left;font-weight:bold;width:200px;\"><font size = \"1\">{ts}Description{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\" ><font size = \"1\">{ts}Quantity{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts}Unit Price{/ts}</font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;width:20px;\"><font size = \"1\">{$taxTerm} </font></th>\n <th style = \"padding-left:34px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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 <tr>\n <td colspan = \"5\" ><hr size=\"3\" style = \"color:#000;\"></hr></td>\n </tr>\n {else}\n <tr>\n <td colspan = \"5\" style = \"color:#F5F5F5;\"><hr></hr></td>\n </tr>\n {/if}\n <tr>\n <td style=\"text-align:left;\" ><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:34px;text-align:right;\"><font size = \"1\"> {$value.qty}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$value.unit_price|crmMoney:$currency}</font></td>\n {if $value.tax_amount != \'\'}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:34px;text-align:right;width:20px;\"><font size = \"1\">{ts 1=$taxTerm}No %1{/ts}</font></td>\n {/if}\n <td style = \"padding-left:34px;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:20px;text-align:right;\"><font size = \"1\">{ts}Sub Total{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\"> {$subTotal|crmMoney:$currency}</font></td>\n </tr>\n {foreach from = $dataArray item = value key = priceset}\n <tr>\n <td colspan = \"3\"></td>\n {if $priceset}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n {elseif $priceset == 0}\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:34px;text-align:right\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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:20px;text-align:right;\"><b><font size = \"1\">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><font size = \"1\">{$amount|crmMoney:$currency}</font></td>\n <td style = \"padding-left:34px;\"><font size = \"1\" align = \"right\"></font></td>\n </tr>\n {if $is_pay_later == 0}\n <tr>\n <td colspan = \"3\"></td>\n <td style = \"padding-left:20px;text-align:right;\"><font size = \"1\">\n {if $contribution_status_id == $refundedStatusId}\n {ts}LESS Amount Credited{/ts}\n {else}\n {ts}LESS Amount Paid{/ts}\n {/if}\n </font>\n </td>\n <td style = \"padding-left:34px;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 = \"padding-left:20px;text-align:right;\"><b><font size = \"1\">{ts}AMOUNT DUE:{/ts} </font></b></td>\n <td style = \"padding-left:34px;text-align:right;\"><b><font size = \"1\">{$amountDue|crmMoney:$currency}</font></b></td>\n <td style = \"padding-left:34px;\"><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 {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <tr>\n <td><b><font size = \"1\" align = \"center\">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td>\n <td colspan = \"3\"></td>\n </tr>\n {/if}\n </table>\n </td>\n </tr>\n </table>\n {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1}\n <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"480\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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 = \"right\"><b>{ts}To: {/ts}</b><div style=\"width:17em;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_phone} <br />\n {$domain_email}</div>\n </font><br/><br/><font size=\"1\" align=\"right\">{$notes}</font>\n </td>\n <td width=\"40%\">\n <table cellpadding = \"-10\" cellspacing = \"22\" 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\">{$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}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></hr></td></tr>\n {if $is_pay_later == 1}\n <tr>\n <td colspan = \"2\"></td>\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 colspan = \"2\"></td>\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 colspan = \"2\"></td>\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></hr></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n {/if}\n\n {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId}\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 <center>\n\n <table style = \"padding-right:19px;font-family: Arial, Verdana, sans-serif\" width = \"500\" height = \"100\" border = \"0\" cellpadding = \"2\" cellspacing = \"1\">\n <tr>\n <td style = \"padding-left:15px;\" ><b><font size = \"4\" align = \"center\">{ts}CREDIT NOTE{/ts}</font></b></td>\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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\">{$display_name} ({$organization_name})</font></td>\n {else}\n <td style = \"padding-left:17px;\"><font size = \"1\" align = \"center\">{$display_name}</font></td>\n {/if}\n <td colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan = \"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td style = \"padding-left:70px;\"><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 colspan=\"1\"></td>\n <td height = \"10\" style = \"padding-left:70px;\"><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></td>\n <td style = \"padding-left:70px;\"><font size = \"1\"align = \"right\">{$source}</font></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_phone}{$domain_phone}{/if}\n </font>\n </td>\n </tr>\n <tr>\n <td></td>\n <td></td>\n <td></td>\n <td>\n <font size = \"1\" align = \"right\">\n {if $domain_email}{$domain_email}{/if}\n </font>\n </td>\n </tr>\n </table>\n\n <table style = \"margin-top:75px;font-family: Arial, Verdana, sans-serif\" width = \"590\" border = \"0\"cellpadding = \"-5\" cellspacing = \"19\" 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\">{$taxTerm} </font></th>\n <th style = \"padding-left:28px;text-align:right;font-weight:bold;\"><font size = \"1\">{ts 1=$defaultCurrency}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\"> {$value.tax_rate}%</font></td>\n {else}\n <td style = \"padding-left:28px;text-align:right\"><font size = \"1\" >{ts 1=$taxTerm}No %1{/ts}</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 {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\"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</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\">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td>\n <td style = \"padding-left:28px;text-align:right;\"><font size = \"1\" align = \"right\">{$value|crmMoney:$currency}</font> </td>\n </tr>\n {/if}\n {/foreach}\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=$defaultCurrency}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 <table style = \"margin-top:5px;padding-right:45px;\">\n <tr>\n <td><img src = \"{$resourceBase}/i/contribute/cut_line.png\" height = \"15\" width = \"630\"></td>\n </tr>\n </table>\n\n <table style = \"margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif\" width = \"507\" border = \"0\"cellpadding = \"-5\" cellspacing=\"19\" 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\" >{$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 </body>\n</html>\n',1,823,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,824,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,824,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,825,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,825,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,826,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,826,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,827,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,827,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}{/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}{/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,828,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}{/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}{/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,828,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,829,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,829,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,830,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,830,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,831,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,831,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 $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $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 $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 <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\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 </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 $billingName || $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 {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $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 $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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,832,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 $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n\n===============================================================================\n\n{ts}Contribution Details{/ts}\n\n===============================================================================\n{ts}Total Fee{/ts}: {$totalAmount|crmMoney}\n{ts}Total Paid{/ts}: {$totalPaid|crmMoney}\n{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *}\n\n\n{if $billingName || $address}\n\n===============================================================================\n\n{ts}Billing Name and Address{/ts}\n\n===============================================================================\n\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $event.participant_role}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $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 $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 <tr>\n <td {$labelStyle}>\n {ts}Total Fee{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney}\n </td>\n </tr>\n <tr>\n <td {$labelStyle}>\n {ts}Total Paid{/ts}\n </td>\n <td {$valueStyle}>\n {$totalPaid|crmMoney}\n </td>\n </tr>\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 </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 $billingName || $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 {$billingName}<br />\n {$address|nl2br}\n </td>\n </tr>\n {/if}\n {if $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 $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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,832,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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $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 $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 $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 $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"} {$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $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 $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $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 $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $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 $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $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 $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\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 $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 $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 $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 $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 $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 $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 $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 $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,833,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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n{$event.confirm_email_text}\n{/if}\n\n{if $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $email}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Registered Email{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$email}\n{/if}\n{if $event.is_monetary} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $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 $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 $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 $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture}\n{$ts_item|string_format:\"%-30s\"} {$ts_qty|string_format:\"%5s\"} {$ts_each|string_format:\"%10s\"} {if $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"} {$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n{/if}\n{/foreach}\n\n{if $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amount && !$lineItem}\n{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary}\n\n{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $balanceAmount}\n{ts}Balance{/ts}: {$balanceAmount|crmMoney}\n{/if}\n\n{if $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 $is_pay_later }\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $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 $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n===========================================================\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPre item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n\n{if $customPost}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPost item=value key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n{$customName}: {$value}\n{/if}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile item=value key=customName}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$customName+1}Participant Information - Participant %1{/ts}\n\n==========================================================={if $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 $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPre_grouptitle}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{else}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$additionalCustomPost_grouptitle}\n----------------------------------------------------------{if $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 $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)}\n <p>{$event.confirm_email_text|htmlize}</p>\n {/if}\n\n {if $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $event.is_monetary}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {if $balanceAmount}\n {ts}Total Paid{/ts}\n {else}\n {ts}Total Amount{/ts}\n {/if}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $is_pay_later}\n <tr>\n <td colspan=\"2\" {$labelStyle}>\n {$pay_later_receipt}\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 $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 $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 $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 $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 $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 $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 $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=value key=customName}\n {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 $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,833,0,1,0,NULL),(31,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $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 $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $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 $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 $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 $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"}{$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if $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 $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $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 $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $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{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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','<!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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $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 $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 $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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} {$part.$priceset.info}\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 $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 $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 $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $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 $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 $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 $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 $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 $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 {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 </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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 </table>\n</center>\n\n</body>\n</html>\n',1,834,1,0,0,NULL),(32,'Events - Registration Confirmation and Receipt (on-line)','{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{elseif $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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $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 $isOnWaitlist}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}You have been added to the WAIT LIST for this event.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $isRequireApproval}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Your registration has been submitted.{/ts}\n\n{if $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 $pricesetFieldsCount }===================={/if}\n\n{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$pay_later_receipt}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{/if}\n\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Event Information and Location{/ts}\n\n==========================================================={if $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 $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 $event.participant_role neq \'Attendee\' and $defaultRole}\n{ts}Participant Role{/ts}: {$event.participant_role}\n{/if}\n\n{if $isShowLocation}\n{$location.address.1.display|strip_tags:false}\n{/if}{*End of isShowLocation condition*}\n\n{if $location.phone.1.phone || $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 $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 $payer.name}\nYou were registered by: {$payer.name}\n{/if}\n{if $event.is_monetary and not $isRequireApproval} {* This section for Paid events only.*}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$event.fee_label}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{if $lineItem}{foreach from=$lineItem item=value key=priceset}\n\n{if $value neq \'skip\'}\n{if $isPrimary}\n{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *}\n{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info}\n\n{/if}\n{/if}\n-----------------------------------------------------------{if $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 $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 $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 $dataArray} {$ts_subtotal|string_format:\"%10s\"} {$ts_taxRate|string_format:\"%10s\"} {$ts_taxAmount|string_format:\"%10s\"} {/if} {$ts_total|string_format:\"%10s\"} {$ts_participant_total|string_format:\"%10s\"}\n-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if}\n\n{foreach from=$value item=line}\n{if $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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\"}{$ts_participant_count|string_format:\"%10s\"}\n{/foreach}\n----------------------------------------------------------------------------------------------------------------\n{if $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 $dataArray}\n{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency}\n\n{foreach from=$dataArray item=value key=priceset}\n{if $priceset || $priceset == 0}\n{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n{/if}\n\n{if $amounts && !$lineItem}\n{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label}\n{/foreach}\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n{if $isPrimary }\n\n{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n\n{if $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 $receive_date}\n{ts}Transaction Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $financialTypeName}\n{ts}Financial Type{/ts}: {$financialTypeName}\n{/if}\n{if $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n{/if}\n{if $paidBy}\n{ts}Paid By{/ts}: {$paidBy}\n{/if}\n{if $checkNumber}\n{ts}Check Number{/ts}: {$checkNumber}\n{/if}\n{if $billingName}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Billing Name and Address{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$billingName}\n{$address}\n{/if}\n\n{if $credit_card_type}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts}Credit Card Information{/ts}\n\n==========================================================={if $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 $customPre}\n{foreach from=$customPre item=customPr key=i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPre_grouptitle.$i}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPr item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $customPost}\n{foreach from=$customPost item=customPos key=j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customPost_grouptitle.$j}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$customPos item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/foreach}\n{/if}\n{if $customProfile}\n\n{foreach from=$customProfile.profile item=eachParticipant key=participantID}\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{ts 1=$participantID+2}Participant Information - Participant %1{/ts}\n\n==========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$eachParticipant item=eachProfile key=pid}\n----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if}\n\n{$customProfile.title.$pid}\n----------------------------------------------------------{if $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{if $customGroup}\n{foreach from=$customGroup item=value key=customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{$customName}\n=========================================================={if $pricesetFieldsCount }===================={/if}\n\n{foreach from=$value item=v key=n}\n{$n}: {$v}\n{/foreach}\n{/foreach}\n{/if}\n\n{if $event.allow_selfcancelxfer }\n{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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','<!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 $event.confirm_email_text AND (not $isOnWaitlist AND not $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 $isOnWaitlist}\n <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p>\n {if $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 $isRequireApproval}\n <p>{ts}Your registration has been submitted.{/ts}</p>\n {if $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 $is_pay_later && !$isAmountzero && !$isAdditionalParticipant}\n <p>{$pay_later_receipt}</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 $event.participant_role neq \'Attendee\' and $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 $isShowLocation}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {$location.address.1.display|nl2br}\n </td>\n </tr>\n {/if}\n\n {if $location.phone.1.phone || $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 $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 $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 $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 $event.is_monetary and not $isRequireApproval}\n\n <tr>\n <th {$headerStyle}>\n {$event.fee_label}\n </th>\n </tr>\n\n {if $lineItem}\n {foreach from=$lineItem item=value key=priceset}\n {if $value neq \'skip\'}\n {if $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} {$part.$priceset.info}\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 $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 $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 $dataArray}\n <td {$tdStyle}>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if}\n </tr>\n {/foreach}\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset || $priceset == 0}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}No{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n\n {if $amounts && !$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 $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 $isPrimary}\n <tr>\n <td {$labelStyle}>\n {ts}Total Amount{/ts}\n </td>\n <td {$valueStyle}>\n {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if}\n </td>\n </tr>\n {if $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 $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 $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 $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 $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 $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 $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 $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $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 {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 </table>\n {if $event.allow_selfcancelxfer }\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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 </table>\n</center>\n\n</body>\n</html>\n',1,834,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 $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 {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$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 $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 $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>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$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 $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,835,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 $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 {$pay_later_receipt}\n{/if}\n\n Your order number is #{$transaction_id}. {if $line_items && !$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 $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 $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>{$pay_later_receipt}</p>\n {/if}\n\n <p>Your order number is #{$transaction_id}. {if $line_items && !$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 $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,835,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 $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 $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}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 $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 $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,836,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 $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 $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}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 $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 $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,836,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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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=`$participantID`&{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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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,837,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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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=`$participantID`&{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=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before 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,837,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 $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 $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 $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 $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,838,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 $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 $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 $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 $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,838,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 $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 $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 $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 $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,839,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 $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 $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 $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 $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,839,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,840,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,840,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 $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$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 $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{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $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\" \"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 $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $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 !$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 ! $cancelled}\n {if !$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 $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $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 $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $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 $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 $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,841,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 $formValues.receipt_text_signup}\n{$formValues.receipt_text_signup}\n{elseif $formValues.receipt_text_renewal}\n{$formValues.receipt_text_renewal}\n{else}{ts}Thank you for this contribution.{/ts}{/if}\n\n{if !$lineItem}\n===========================================================\n{ts}Membership Information{/ts}\n\n===========================================================\n{ts}Membership Type{/ts}: {$membership_name}\n{/if}\n{if ! $cancelled}\n{if !$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 $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{capture assign=ts_item}{ts}Item{/ts}{/capture}\n{capture assign=ts_total}{ts}Fee{/ts}{/capture}\n{if $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"} %: {$value|crmMoney:$currency}\n{elseif $priceset == 0}\n{ts}No{/ts} {$taxTerm}: {$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 $receive_date}\n{ts}Date Received{/ts}: {$receive_date|truncate:10:\'\'|crmDate}\n{/if}\n{if $formValues.paidBy}\n{ts}Paid By{/ts}: {$formValues.paidBy}\n{if $formValues.check_number}\n{ts}Check Number{/ts}: {$formValues.check_number}\n{/if}\n{/if}\n{/if}\n{/if}\n\n{if $isPrimary }\n{if $billingName}\n\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n{/if}\n\n{if $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 $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\" \"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 $formValues.receipt_text_signup}\n <p>{$formValues.receipt_text_signup|htmlize}</p>\n {elseif $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 !$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 ! $cancelled}\n {if !$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 $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 $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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $dataArray}\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 {foreach from=$dataArray item=value key=priceset}\n <tr>\n {if $priceset}\n <td> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {elseif $priceset == 0}\n <td> {ts}No{/ts} {$taxTerm}</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 $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 $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 $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 $isPrimary}\n <tr>\n <td>\n <table style=\"border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;\">\n\n {if $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 $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 $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,841,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\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 && $membership_amount && $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 && $lineItem and $priceSetID & !$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 && !$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 $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $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 $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $membership_amount and $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 !$useForMember && $lineItem and $priceSetID and !$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 !$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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $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 $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 $is_monetary and $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 $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,842,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 $receipt_text}\n{$receipt_text}\n{/if}\n{if $is_pay_later}\n\n===========================================================\n{$pay_later_receipt}\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 && $membership_amount && $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 && $lineItem and $priceSetID & !$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 && !$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 $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 $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 $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:\"%10s\"} {if $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 $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{$taxTerm} {$priceset|string_format:\"%.2f\"}%: {$value|crmMoney:$currency}\n{else}\n{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency}\n{/if}\n{/foreach}\n{/if}\n--------------------------------------------------------------------------------------------------\n{/if}\n\n{if $totalTaxAmount}\n{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency}\n{/if}\n\n{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if}\n{/if}\n{elseif $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 $receive_date}\n\n{ts}Date{/ts}: {$receive_date|crmDate}\n{/if}\n{if $is_monetary and $trxn_id}\n{ts}Transaction #{/ts}: {$trxn_id}\n\n{/if}\n{if $membership_trx_id}\n{ts}Membership Transaction #{/ts}: {$membership_trx_id}\n\n{/if}\n{if $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 $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 $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 $billingName}\n===========================================================\n{ts}Billing Name and Address{/ts}\n\n===========================================================\n{$billingName}\n{$address}\n\n{$email}\n{elseif $email}\n===========================================================\n{ts}Registered Email{/ts}\n\n===========================================================\n{$email}\n{/if} {* End billingName or email *}\n{if $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 $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 $contact_email OR $contact_phone}\n\n{ts}For information about this premium, contact:{/ts}\n\n{if $contact_email}\n {$contact_email}\n{/if}\n{if $contact_phone}\n {$contact_phone}\n{/if}\n{/if}\n{if $is_deductible AND $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 $customPre}\n===========================================================\n{$customPre_grouptitle}\n\n===========================================================\n{foreach from=$customPre item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields}\n {$customName}: {$customValue}\n{/if}\n{/foreach}\n{/if}\n\n\n{if $customPost}\n===========================================================\n{$customPost_grouptitle}\n\n===========================================================\n{foreach from=$customPost item=customValue key=customName}\n{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $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 $receipt_text}\n <p>{$receipt_text|htmlize}</p>\n {/if}\n\n {if $is_pay_later}\n <p>{$pay_later_receipt}</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 $membership_amount and $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 !$useForMember && $lineItem and $priceSetID and !$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 !$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 $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 $dataArray}\n <td>\n {$line.unit_price*$line.qty|crmMoney}\n </td>\n {if $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 $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> {$taxTerm} {$priceset|string_format:\"%.2f\"}%</td>\n <td> {$value|crmMoney:$currency}</td>\n {else}\n <td> {ts}NO{/ts} {$taxTerm}</td>\n <td> {$value|crmMoney:$currency}</td>\n {/if}\n </tr>\n {/foreach}\n {/if}\n {/if}\n {if $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 $amount_level} - {$amount_level}{/if}\n </td>\n </tr>\n\n {/if}\n\n\n {elseif $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 $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 $is_monetary and $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 $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 $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 $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 $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 $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 $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 $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 $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 $contact_email OR $contact_phone}\n <tr>\n <td colspan=\"2\" {$valueStyle}>\n <p>{ts}For information about this premium, contact:{/ts}</p>\n {if $contact_email}\n <p>{$contact_email}</p>\n {/if}\n {if $contact_phone}\n <p>{$contact_phone}</p>\n {/if}\n </td>\n </tr>\n {/if}\n {if $is_deductible AND $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 $customPre}\n <tr>\n <th {$headerStyle}>\n {$customPre_grouptitle}\n </th>\n </tr>\n {foreach from=$customPre item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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 $customPost}\n <tr>\n <th {$headerStyle}>\n {$customPost_grouptitle}\n </th>\n </tr>\n {foreach from=$customPost item=customValue key=customName}\n {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $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,842,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,843,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,843,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,844,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,844,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,845,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,845,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,846,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,846,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}{/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}{/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,847,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}{/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}{/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,847,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,848,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,848,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,849,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,849,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,850,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,850,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,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,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,1,0,0,NULL); /*!40000 ALTER TABLE `civicrm_msg_template` ENABLE KEYS */; UNLOCK TABLES; @@ -986,7 +986,7 @@ 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`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',73,'Arrange collection of funds from members',1,'2018-12-31',NULL,'0'),(2,'civicrm_contact',106,'Chart out route map for next 10k run',1,'2019-10-22',NULL,'0'),(3,'civicrm_contact',160,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-08-17',NULL,'0'),(4,'civicrm_contact',77,'Get the registration done for NGO status',1,'2019-07-04',NULL,'0'),(5,'civicrm_contact',68,'Organize the Terry Fox run',1,'2019-01-02',NULL,'0'),(6,'civicrm_contact',105,'Send newsletter for April 2005',1,'2019-01-13',NULL,'0'),(7,'civicrm_contact',140,'Reminder screening of \"Black\" on next Friday',1,'2019-09-18',NULL,'0'),(8,'civicrm_contact',185,'Send newsletter for April 2005',1,'2019-09-01',NULL,'0'),(9,'civicrm_contact',195,'Send newsletter for April 2005',1,'2019-04-06',NULL,'0'),(10,'civicrm_contact',134,'Reminder screening of \"Black\" on next Friday',1,'2019-09-25',NULL,'0'),(11,'civicrm_contact',112,'Get the registration done for NGO status',1,'2019-08-20',NULL,'0'),(12,'civicrm_contact',100,'Connect for presentation',1,'2019-04-13',NULL,'0'),(13,'civicrm_contact',69,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-01-13',NULL,'0'),(14,'civicrm_contact',140,'Arrange collection of funds from members',1,'2019-01-03',NULL,'0'),(15,'civicrm_contact',126,'Reminder screening of \"Black\" on next Friday',1,'2018-12-01',NULL,'0'),(16,'civicrm_contact',166,'Arrange for cricket match with Sunil Gavaskar',1,'2019-04-12',NULL,'0'),(17,'civicrm_contact',28,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-03-23',NULL,'0'),(18,'civicrm_contact',55,'Send reminder for annual dinner',1,'2019-09-04',NULL,'0'),(19,'civicrm_contact',157,'Reminder screening of \"Black\" on next Friday',1,'2019-09-17',NULL,'0'),(20,'civicrm_contact',69,'Connect for presentation',1,'2019-03-03',NULL,'0'); +INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',159,'Contact the Commissioner of Charities',1,'2019-01-21',NULL,'0'),(2,'civicrm_contact',83,'Connect for presentation',1,'2019-05-07',NULL,'0'),(3,'civicrm_contact',186,'Send newsletter for April 2005',1,'2019-02-05',NULL,'0'),(4,'civicrm_contact',45,'Arrange for cricket match with Sunil Gavaskar',1,'2019-07-21',NULL,'0'),(5,'civicrm_contact',120,'Contact the Commissioner of Charities',1,'2019-05-02',NULL,'0'),(6,'civicrm_contact',74,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-05-02',NULL,'0'),(7,'civicrm_contact',175,'Send newsletter for April 2005',1,'2019-10-24',NULL,'0'),(8,'civicrm_contact',85,'Send reminder for annual dinner',1,'2019-01-24',NULL,'0'),(9,'civicrm_contact',73,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-09-04',NULL,'0'),(10,'civicrm_contact',197,'Organize the Terry Fox run',1,'2020-01-16',NULL,'0'),(11,'civicrm_contact',46,'Chart out route map for next 10k run',1,'2019-07-05',NULL,'0'),(12,'civicrm_contact',120,'Arrange for cricket match with Sunil Gavaskar',1,'2019-09-27',NULL,'0'),(13,'civicrm_contact',183,'Send reminder for annual dinner',1,'2019-12-15',NULL,'0'),(14,'civicrm_contact',103,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-07-22',NULL,'0'),(15,'civicrm_contact',93,'Send newsletter for April 2005',1,'2020-01-07',NULL,'0'),(16,'civicrm_contact',144,'Chart out route map for next 10k run',1,'2019-11-06',NULL,'0'),(17,'civicrm_contact',109,'Chart out route map for next 10k run',1,'2019-05-08',NULL,'0'),(18,'civicrm_contact',71,'Chart out route map for next 10k run',1,'2019-05-05',NULL,'0'),(19,'civicrm_contact',47,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-07-23',NULL,'0'),(20,'civicrm_contact',44,'Organize the Terry Fox run',1,'2019-12-15',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -1015,7 +1015,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_option_value` WRITE; /*!40000 ALTER TABLE `civicrm_option_value` DISABLE KEYS */; -INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL),(7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL),(8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL),(9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL),(10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL),(12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL),(13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL),(14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL),(15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL),(16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL),(17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL),(18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL),(19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL),(20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL),(21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL),(24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL),(25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL),(26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL),(27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL),(28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL),(29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL),(30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL),(31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL),(32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL),(33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL),(34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL),(35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL),(36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL),(37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL),(38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL),(39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL),(40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL),(42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL),(43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL),(44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL),(45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL),(46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL),(47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL),(48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL),(49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL),(50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL),(51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL),(58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL),(59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL),(60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL),(106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(194,46,'Postal Code','8','country',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL),(219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL),(222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL),(226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL),(227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL),(228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL),(229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL),(230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL),(231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL),(233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL),(234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL),(235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL),(236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL),(237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL),(238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL),(239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL),(240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL),(241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL),(242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).',0,0,1,2,NULL,NULL,NULL,NULL),(243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'SYBUNT means some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.',0,0,1,2,NULL,NULL,NULL,NULL),(244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'LYBUNT means last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.',0,0,1,2,NULL,NULL,NULL,NULL),(245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL),(247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.',0,0,1,3,NULL,NULL,NULL,NULL),(248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL),(249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL),(250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.',0,0,1,1,NULL,NULL,NULL,NULL),(251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL),(252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL),(253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL),(254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL),(255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL),(256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL),(257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL),(258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL),(259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL),(260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL),(261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL),(262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL),(263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL),(264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL),(265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL),(268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL),(269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL),(270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL),(271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL),(272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL),(273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL),(274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL),(275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL),(277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL),(278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL),(279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit, etc., NULL), showing within a given date range.',0,0,1,2,NULL,NULL,NULL,NULL),(280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL),(281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL),(293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL),(294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL),(295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(345,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(346,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(347,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(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),(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),(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),(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),(364,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(365,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(366,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(367,47,'Google+','4','Google_',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(368,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(369,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(370,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(371,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(372,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(373,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(374,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(375,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(376,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(377,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(378,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(379,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(380,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(381,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL),(382,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL),(383,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL),(384,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL),(385,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(386,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(387,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(388,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(389,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(390,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(391,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(392,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(393,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(394,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(395,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(396,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(397,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(398,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(399,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(400,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(401,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(402,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(403,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(404,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(405,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(406,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(407,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(408,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(409,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(410,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(411,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(412,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(413,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(414,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(415,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(416,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(417,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(418,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(419,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(420,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(421,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(422,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(423,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(424,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(425,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(426,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(427,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(428,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(429,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(430,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(431,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(432,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(433,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(434,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(435,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(436,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(437,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(438,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(439,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(440,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(441,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(442,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(443,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(444,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(445,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(446,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(447,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(448,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(449,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(450,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(451,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(452,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(453,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(454,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(455,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(456,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(457,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(458,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(459,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(460,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(461,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(462,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(463,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(464,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL),(465,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(466,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL),(467,71,'Cost of Sales','4','Cost of Sales',NULL,0,0,4,'Costs incurred to get revenue, e.g. premiums for donations, dinner for a fundraising dinner ticket',0,1,1,2,NULL,NULL,NULL,NULL),(468,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(469,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL),(470,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(471,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL),(472,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL),(473,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL),(474,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL),(475,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL),(476,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL),(477,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL),(478,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL),(479,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL),(480,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(481,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(482,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(483,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(484,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(485,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(486,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(487,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(488,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(489,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(490,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(491,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(492,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL),(493,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL),(494,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL),(495,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL),(496,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL),(497,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(498,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(499,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(500,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(501,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(502,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(503,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(504,74,'Avery 5395','{\"name\":\"Avery 5395\",\"paper-size\":\"a4\",\"metric\":\"mm\",\"lMargin\":15,\"tMargin\":26,\"NX\":2,\"NY\":4,\"SpaceX\":10,\"SpaceY\":5,\"width\":83,\"height\":57,\"font-size\":12,\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-style\":\"\",\"lPadding\":3,\"tPadding\":3}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(505,74,'A6 Badge Portrait 150x106','{\"paper-size\":\"a4\",\"orientation\":\"landscape\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":1,\"metric\":\"mm\",\"lMargin\":25,\"tMargin\":27,\"SpaceX\":0,\"SpaceY\":35,\"width\":106,\"height\":150,\"lPadding\":5,\"tPadding\":5}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(506,74,'Fattorini Name Badge 100x65','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":4,\"metric\":\"mm\",\"lMargin\":6,\"tMargin\":19,\"SpaceX\":0,\"SpaceY\":0,\"width\":100,\"height\":65,\"lPadding\":0,\"tPadding\":0}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(507,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":2,\"metric\":\"mm\",\"lMargin\":10,\"tMargin\":28,\"SpaceX\":0,\"SpaceY\":0,\"width\":96,\"height\":121,\"lPadding\":5,\"tPadding\":5}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(508,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":10,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":0,\"tMargin\":5,\"NX\":3,\"NY\":8,\"SpaceX\":0,\"SpaceY\":0,\"width\":70,\"height\":36,\"lPadding\":5.08,\"tPadding\":5.08}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(509,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.21975,\"tMargin\":0.5,\"NX\":3,\"NY\":10,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":2.5935,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(510,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.175,\"tMargin\":0.5,\"NX\":2,\"NY\":10,\"SpaceX\":0.15625,\"SpaceY\":0,\"width\":4,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(511,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.1525,\"tMargin\":0.88,\"NX\":2,\"NY\":7,\"SpaceX\":0.195,\"SpaceY\":0,\"width\":4,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(512,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.5,\"NX\":2,\"NY\":5,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":4,\"height\":2,\"lPadding\":0.20,\"tPadding\":0.20}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(513,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":12,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.156,\"tMargin\":0.5,\"NX\":2,\"NY\":3,\"SpaceX\":0.1875,\"SpaceY\":0,\"width\":4,\"height\":3.33,\"lPadding\":0.20,\"tPadding\":0.20}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(514,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":7.1,\"tMargin\":19,\"NX\":3,\"NY\":10,\"SpaceX\":9.5,\"SpaceY\":3.1,\"width\":66.6,\"height\":25.4,\"lPadding\":5.08,\"tPadding\":5.08}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(515,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.6,\"NX\":3,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(516,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.35,\"NX\":3,\"NY\":6,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.83,\"lPadding\":0.20,\"tPadding\":0.20}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(517,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.51,\"NX\":2,\"NY\":8,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(518,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.6,\"NX\":2,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(519,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(520,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(521,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(522,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(523,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(524,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(525,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(526,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(527,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL),(528,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL),(529,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(530,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(531,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(532,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(533,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(534,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(535,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(536,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(537,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(538,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(539,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(540,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(541,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(542,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(543,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(544,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(545,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(546,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(547,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(548,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(549,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(550,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(551,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(552,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(553,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(554,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(555,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(556,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(557,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(558,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(559,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(560,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(561,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(562,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(563,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(564,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(565,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(566,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(567,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(568,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(569,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(570,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(571,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(572,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(573,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(574,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(575,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(576,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(577,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(578,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(579,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(580,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(581,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(582,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(583,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(584,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(585,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(586,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(587,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(588,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(589,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(590,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(591,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(592,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(593,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(594,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(595,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(596,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(597,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(598,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(599,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(600,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(601,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(602,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(603,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(604,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(605,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(606,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(607,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(608,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(609,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(610,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(611,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL),(612,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(613,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(614,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(615,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(616,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL),(617,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL),(618,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL),(619,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(620,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL),(621,84,'Abkhaz','ab','ab_GE',NULL,NULL,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(622,84,'Afar','aa','aa_ET',NULL,NULL,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(623,84,'Afrikaans','af','af_ZA',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(624,84,'Akan','ak','ak_GH',NULL,NULL,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(625,84,'Albanian','sq','sq_AL',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(626,84,'Amharic','am','am_ET',NULL,NULL,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(627,84,'Arabic','ar','ar_EG',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(628,84,'Aragonese','an','an_ES',NULL,NULL,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(629,84,'Armenian','hy','hy_AM',NULL,NULL,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(630,84,'Assamese','as','as_IN',NULL,NULL,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(631,84,'Avaric','av','av_RU',NULL,NULL,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(632,84,'Avestan','ae','ae_XX',NULL,NULL,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(633,84,'Aymara','ay','ay_BO',NULL,NULL,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(634,84,'Azerbaijani','az','az_AZ',NULL,NULL,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(635,84,'Bambara','bm','bm_ML',NULL,NULL,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(636,84,'Bashkir','ba','ba_RU',NULL,NULL,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(637,84,'Basque','eu','eu_ES',NULL,NULL,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(638,84,'Belarusian','be','be_BY',NULL,NULL,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(639,84,'Bengali','bn','bn_BD',NULL,NULL,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(640,84,'Bihari','bh','bh_IN',NULL,NULL,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(641,84,'Bislama','bi','bi_VU',NULL,NULL,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(642,84,'Bosnian','bs','bs_BA',NULL,NULL,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(643,84,'Breton','br','br_FR',NULL,NULL,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(644,84,'Bulgarian','bg','bg_BG',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(645,84,'Burmese','my','my_MM',NULL,NULL,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(646,84,'Catalan; Valencian','ca','ca_ES',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(647,84,'Chamorro','ch','ch_GU',NULL,NULL,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(648,84,'Chechen','ce','ce_RU',NULL,NULL,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(649,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,NULL,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(650,84,'Chinese (China)','zh','zh_CN',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(651,84,'Chinese (Taiwan)','zh','zh_TW',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(652,84,'Chuvash','cv','cv_RU',NULL,NULL,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(653,84,'Cornish','kw','kw_GB',NULL,NULL,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(654,84,'Corsican','co','co_FR',NULL,NULL,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(655,84,'Cree','cr','cr_CA',NULL,NULL,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(656,84,'Croatian','hr','hr_HR',NULL,NULL,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(657,84,'Czech','cs','cs_CZ',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(658,84,'Danish','da','da_DK',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(659,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,NULL,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(660,84,'Dutch','nl','nl_NL',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(661,84,'Dzongkha','dz','dz_BT',NULL,NULL,0,41,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(662,84,'English (Australia)','en','en_AU',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(663,84,'English (Canada)','en','en_CA',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(664,84,'English (United Kingdom)','en','en_GB',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(665,84,'English (United States)','en','en_US',NULL,NULL,1,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(666,84,'Esperanto','eo','eo_XX',NULL,NULL,0,46,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(667,84,'Estonian','et','et_EE',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(668,84,'Ewe','ee','ee_GH',NULL,NULL,0,48,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(669,84,'Faroese','fo','fo_FO',NULL,NULL,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(670,84,'Fijian','fj','fj_FJ',NULL,NULL,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(671,84,'Finnish','fi','fi_FI',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(672,84,'French (Canada)','fr','fr_CA',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(673,84,'French (France)','fr','fr_FR',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,NULL,0,54,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(675,84,'Galician','gl','gl_ES',NULL,NULL,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(676,84,'Georgian','ka','ka_GE',NULL,NULL,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(677,84,'German','de','de_DE',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(678,84,'German (Swiss)','de','de_CH',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(679,84,'Greek, Modern','el','el_GR',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(680,84,'GuaraniÂ','gn','gn_PY',NULL,NULL,0,60,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(681,84,'Gujarati','gu','gu_IN',NULL,NULL,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,NULL,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(683,84,'Hausa','ha','ha_NG',NULL,NULL,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(684,84,'Hebrew (modern)','he','he_IL',NULL,NULL,0,64,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(685,84,'Herero','hz','hz_NA',NULL,NULL,0,65,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(686,84,'Hindi','hi','hi_IN',NULL,NULL,0,66,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(687,84,'Hiri Motu','ho','ho_PG',NULL,NULL,0,67,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(688,84,'Hungarian','hu','hu_HU',NULL,NULL,0,68,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(689,84,'Interlingua','ia','ia_XX',NULL,NULL,0,69,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(690,84,'Indonesian','id','id_ID',NULL,NULL,0,70,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(691,84,'Interlingue','ie','ie_XX',NULL,NULL,0,71,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(692,84,'Irish','ga','ga_IE',NULL,NULL,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(693,84,'Igbo','ig','ig_NG',NULL,NULL,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(694,84,'Inupiaq','ik','ik_US',NULL,NULL,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(695,84,'Ido','io','io_XX',NULL,NULL,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(696,84,'Icelandic','is','is_IS',NULL,NULL,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(697,84,'Italian','it','it_IT',NULL,NULL,0,77,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(698,84,'Inuktitut','iu','iu_CA',NULL,NULL,0,78,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(699,84,'Japanese','ja','ja_JP',NULL,NULL,0,79,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(700,84,'Javanese','jv','jv_ID',NULL,NULL,0,80,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,NULL,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(702,84,'Kannada','kn','kn_IN',NULL,NULL,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(703,84,'Kanuri','kr','kr_NE',NULL,NULL,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(704,84,'Kashmiri','ks','ks_IN',NULL,NULL,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(705,84,'Kazakh','kk','kk_KZ',NULL,NULL,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(706,84,'Khmer','km','km_KH',NULL,NULL,0,86,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,NULL,0,87,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(708,84,'Kinyarwanda','rw','rw_RW',NULL,NULL,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,NULL,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(710,84,'Komi','kv','kv_RU',NULL,NULL,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(711,84,'Kongo','kg','kg_CD',NULL,NULL,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(712,84,'Korean','ko','ko_KR',NULL,NULL,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(713,84,'Kurdish','ku','ku_IQ',NULL,NULL,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,NULL,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(715,84,'Latin','la','la_VA',NULL,NULL,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,NULL,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(717,84,'Luganda','lg','lg_UG',NULL,NULL,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,NULL,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(719,84,'Lingala','ln','ln_CD',NULL,NULL,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(720,84,'Lao','lo','lo_LA',NULL,NULL,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(721,84,'Lithuanian','lt','lt_LT',NULL,NULL,0,101,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(722,84,'Luba-Katanga','lu','lu_CD',NULL,NULL,0,102,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(723,84,'Latvian','lv','lv_LV',NULL,NULL,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(724,84,'Manx','gv','gv_IM',NULL,NULL,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(725,84,'Macedonian','mk','mk_MK',NULL,NULL,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(726,84,'Malagasy','mg','mg_MG',NULL,NULL,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(727,84,'Malay','ms','ms_MY',NULL,NULL,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(728,84,'Malayalam','ml','ml_IN',NULL,NULL,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(729,84,'Maltese','mt','mt_MT',NULL,NULL,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(730,84,'MÄori','mi','mi_NZ',NULL,NULL,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(731,84,'Marathi','mr','mr_IN',NULL,NULL,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(732,84,'Marshallese','mh','mh_MH',NULL,NULL,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(733,84,'Mongolian','mn','mn_MN',NULL,NULL,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(734,84,'Nauru','na','na_NR',NULL,NULL,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(735,84,'Navajo, Navaho','nv','nv_US',NULL,NULL,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,NULL,0,116,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(737,84,'North Ndebele','nd','nd_ZW',NULL,NULL,0,117,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(738,84,'Nepali','ne','ne_NP',NULL,NULL,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(739,84,'Ndonga','ng','ng_NA',NULL,NULL,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,NULL,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(741,84,'Norwegian','no','no_NO',NULL,NULL,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(742,84,'Nuosu','ii','ii_CN',NULL,NULL,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(743,84,'South Ndebele','nr','nr_ZA',NULL,NULL,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(744,84,'Occitan (after 1500)','oc','oc_FR',NULL,NULL,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(745,84,'Ojibwa','oj','oj_CA',NULL,NULL,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,NULL,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(747,84,'Oromo','om','om_ET',NULL,NULL,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(748,84,'Oriya','or','or_IN',NULL,NULL,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(749,84,'Ossetian, Ossetic','os','os_GE',NULL,NULL,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,NULL,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(751,84,'Pali','pi','pi_KH',NULL,NULL,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(752,84,'Persian (Iran)','fa','fa_IR',NULL,NULL,0,132,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(753,84,'Polish','pl','pl_PL',NULL,NULL,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(754,84,'Pashto, Pushto','ps','ps_AF',NULL,NULL,0,134,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,NULL,0,135,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,NULL,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(757,84,'Quechua','qu','qu_PE',NULL,NULL,0,137,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(758,84,'Romansh','rm','rm_CH',NULL,NULL,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(759,84,'Kirundi','rn','rn_BI',NULL,NULL,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,NULL,0,140,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(761,84,'Russian','ru','ru_RU',NULL,NULL,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(762,84,'Sanskrit','sa','sa_IN',NULL,NULL,0,142,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(763,84,'Sardinian','sc','sc_IT',NULL,NULL,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(764,84,'Sindhi','sd','sd_IN',NULL,NULL,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(765,84,'Northern Sami','se','se_NO',NULL,NULL,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(766,84,'Samoan','sm','sm_WS',NULL,NULL,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(767,84,'Sango','sg','sg_CF',NULL,NULL,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(768,84,'Serbian','sr','sr_RS',NULL,NULL,0,148,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,NULL,0,149,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(770,84,'Shona','sn','sn_ZW',NULL,NULL,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(771,84,'Sinhala, Sinhalese','si','si_LK',NULL,NULL,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(772,84,'Slovak','sk','sk_SK',NULL,NULL,0,152,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(773,84,'Slovene','sl','sl_SI',NULL,NULL,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(774,84,'Somali','so','so_SO',NULL,NULL,0,154,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(775,84,'Southern Sotho','st','st_ZA',NULL,NULL,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,NULL,0,156,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,NULL,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,NULL,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(779,84,'Sundanese','su','su_ID',NULL,NULL,0,159,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(780,84,'Swahili','sw','sw_TZ',NULL,NULL,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(781,84,'Swati','ss','ss_ZA',NULL,NULL,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(782,84,'Swedish','sv','sv_SE',NULL,NULL,0,162,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(783,84,'Tamil','ta','ta_IN',NULL,NULL,0,163,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(784,84,'Telugu','te','te_IN',NULL,NULL,0,164,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(785,84,'Tajik','tg','tg_TJ',NULL,NULL,0,165,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(786,84,'Thai','th','th_TH',NULL,NULL,0,166,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(787,84,'Tigrinya','ti','ti_ET',NULL,NULL,0,167,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,NULL,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(789,84,'Turkmen','tk','tk_TM',NULL,NULL,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(790,84,'Tagalog','tl','tl_PH',NULL,NULL,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(791,84,'Tswana','tn','tn_ZA',NULL,NULL,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,NULL,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(793,84,'Turkish','tr','tr_TR',NULL,NULL,0,173,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(794,84,'Tsonga','ts','ts_ZA',NULL,NULL,0,174,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(795,84,'Tatar','tt','tt_RU',NULL,NULL,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(796,84,'Twi','tw','tw_GH',NULL,NULL,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(797,84,'Tahitian','ty','ty_PF',NULL,NULL,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(798,84,'Uighur, Uyghur','ug','ug_CN',NULL,NULL,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(799,84,'Ukrainian','uk','uk_UA',NULL,NULL,0,179,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(800,84,'Urdu','ur','ur_PK',NULL,NULL,0,180,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(801,84,'Uzbek','uz','uz_UZ',NULL,NULL,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(802,84,'Venda','ve','ve_ZA',NULL,NULL,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(803,84,'Vietnamese','vi','vi_VN',NULL,NULL,0,183,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(804,84,'Volapük','vo','vo_XX',NULL,NULL,0,184,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(805,84,'Walloon','wa','wa_BE',NULL,NULL,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(806,84,'Welsh','cy','cy_GB',NULL,NULL,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(807,84,'Wolof','wo','wo_SN',NULL,NULL,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(808,84,'Western Frisian','fy','fy_NL',NULL,NULL,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(809,84,'Xhosa','xh','xh_ZA',NULL,NULL,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(810,84,'Yiddish','yi','yi_US',NULL,NULL,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(811,84,'Yoruba','yo','yo_NG',NULL,NULL,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(812,84,'Zhuang, Chuang','za','za_CN',NULL,NULL,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(813,84,'Zulu','zu','zu_ZA',NULL,NULL,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(835,88,'Events - Receipt only','3','event_registration_receipt',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(840,89,'Tell-a-Friend Email','1','friend',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(845,91,'Test-drive - Receipt Header','1','test_preview',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(848,93,'Profiles - Admin Notification','1','uf_notify',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(849,94,'Petition - signature added','1','petition_sign',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(851,95,'In Honor of','1','in_honor_of',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(852,95,'In Memory of','2','in_memory_of',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(853,95,'Solicited','3','solicited',NULL,NULL,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(854,95,'Household','4','household',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(855,95,'Workplace Giving','5','workplace',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(857,95,'3rd-party Service','7','3rd-party_service',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(859,95,'Matched Gift','9','matched_gift',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(860,95,'Personal Campaign Page','10','pcp',NULL,NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(861,95,'Gift','11','gift',NULL,NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); +INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL),(7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL),(8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL),(9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL),(10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL),(12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL),(13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL),(14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL),(15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL),(16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL),(17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL),(18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL),(19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL),(20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL),(21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL),(24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL),(25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL),(26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL),(27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL),(28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL),(29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL),(30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL),(31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL),(32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL),(33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL),(34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL),(35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL),(36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL),(37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL),(38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL),(39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL),(40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL),(42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL),(43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL),(44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL),(45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL),(46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL),(47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL),(48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL),(49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL),(50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL),(51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL),(58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL),(59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL),(60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL),(106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(194,46,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL),(219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL),(222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL),(226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL),(227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL),(228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL),(229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL),(230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL),(231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL),(233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL),(234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL),(235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL),(236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL),(237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL),(238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL),(239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL),(240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL),(241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL),(242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).',0,0,1,2,NULL,NULL,NULL,NULL),(243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'SYBUNT means some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.',0,0,1,2,NULL,NULL,NULL,NULL),(244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'LYBUNT means last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.',0,0,1,2,NULL,NULL,NULL,NULL),(245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL),(247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.',0,0,1,3,NULL,NULL,NULL,NULL),(248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL),(249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL),(250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.',0,0,1,1,NULL,NULL,NULL,NULL),(251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL),(252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL),(253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL),(254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL),(255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL),(256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL),(257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL),(258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL),(259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL),(260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL),(261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL),(262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL),(263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL),(264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL),(265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL),(268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL),(269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL),(270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL),(271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL),(272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL),(273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL),(274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL),(275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL),(277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL),(278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL),(279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit, etc., NULL), showing within a given date range.',0,0,1,2,NULL,NULL,NULL,NULL),(280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL),(281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL),(293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL),(294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL),(295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(345,38,'IMAP XOAUTH2','5','IMAP_XOAUTH2',NULL,0,NULL,5,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(346,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(347,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(348,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(349,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(350,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),(351,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(352,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),(353,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),(354,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(355,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(356,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(357,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),(358,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),(359,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(360,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(361,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),(362,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(363,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(364,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(365,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(366,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(367,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(368,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(369,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(370,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(371,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(372,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(373,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(374,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(375,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(376,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(377,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(378,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(379,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(380,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(381,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL),(382,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL),(383,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL),(384,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL),(385,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(386,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(387,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(388,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(389,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(390,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(391,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(392,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(393,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(394,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(395,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(396,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(397,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(398,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(399,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(400,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(401,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(402,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(403,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(404,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(405,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(406,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(407,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(408,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(409,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(410,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(411,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(412,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(413,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(414,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(415,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(416,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(417,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(418,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(419,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(420,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(421,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(422,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(423,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(424,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(425,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(426,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(427,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(428,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(429,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(430,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(431,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(432,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(433,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(434,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(435,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(436,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(437,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(438,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(439,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(440,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(441,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(442,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(443,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(444,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(445,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(446,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(447,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(448,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(449,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(450,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(451,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(452,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(453,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(454,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(455,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(456,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(457,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(458,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(459,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(460,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(461,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(462,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(463,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(464,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL),(465,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(466,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL),(467,71,'Cost of Sales','4','Cost of Sales',NULL,0,0,4,'Costs incurred to get revenue, e.g. premiums for donations, dinner for a fundraising dinner ticket',0,1,1,2,NULL,NULL,NULL,NULL),(468,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(469,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL),(470,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(471,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL),(472,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL),(473,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL),(474,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL),(475,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL),(476,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL),(477,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL),(478,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL),(479,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL),(480,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(481,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(482,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(483,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(484,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(485,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(486,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(487,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(488,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(489,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(490,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(491,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(492,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL),(493,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL),(494,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL),(495,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL),(496,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL),(497,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(498,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(499,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(500,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(501,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(502,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(503,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(504,74,'Avery 5395','{\"name\":\"Avery 5395\",\"paper-size\":\"a4\",\"metric\":\"mm\",\"lMargin\":15,\"tMargin\":26,\"NX\":2,\"NY\":4,\"SpaceX\":10,\"SpaceY\":5,\"width\":83,\"height\":57,\"font-size\":12,\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-style\":\"\",\"lPadding\":3,\"tPadding\":3}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(505,74,'A6 Badge Portrait 150x106','{\"paper-size\":\"a4\",\"orientation\":\"landscape\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":1,\"metric\":\"mm\",\"lMargin\":25,\"tMargin\":27,\"SpaceX\":0,\"SpaceY\":35,\"width\":106,\"height\":150,\"lPadding\":5,\"tPadding\":5}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(506,74,'Fattorini Name Badge 100x65','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":4,\"metric\":\"mm\",\"lMargin\":6,\"tMargin\":19,\"SpaceX\":0,\"SpaceY\":0,\"width\":100,\"height\":65,\"lPadding\":0,\"tPadding\":0}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(507,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":2,\"metric\":\"mm\",\"lMargin\":10,\"tMargin\":28,\"SpaceX\":0,\"SpaceY\":0,\"width\":96,\"height\":121,\"lPadding\":5,\"tPadding\":5}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(508,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":10,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":0,\"tMargin\":5,\"NX\":3,\"NY\":8,\"SpaceX\":0,\"SpaceY\":0,\"width\":70,\"height\":36,\"lPadding\":5.08,\"tPadding\":5.08}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(509,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.21975,\"tMargin\":0.5,\"NX\":3,\"NY\":10,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":2.5935,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(510,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.175,\"tMargin\":0.5,\"NX\":2,\"NY\":10,\"SpaceX\":0.15625,\"SpaceY\":0,\"width\":4,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(511,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.1525,\"tMargin\":0.88,\"NX\":2,\"NY\":7,\"SpaceX\":0.195,\"SpaceY\":0,\"width\":4,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(512,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.5,\"NX\":2,\"NY\":5,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":4,\"height\":2,\"lPadding\":0.20,\"tPadding\":0.20}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(513,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":12,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.156,\"tMargin\":0.5,\"NX\":2,\"NY\":3,\"SpaceX\":0.1875,\"SpaceY\":0,\"width\":4,\"height\":3.33,\"lPadding\":0.20,\"tPadding\":0.20}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(514,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":7.1,\"tMargin\":19,\"NX\":3,\"NY\":10,\"SpaceX\":9.5,\"SpaceY\":3.1,\"width\":66.6,\"height\":25.4,\"lPadding\":5.08,\"tPadding\":5.08}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(515,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.6,\"NX\":3,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(516,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.35,\"NX\":3,\"NY\":6,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.83,\"lPadding\":0.20,\"tPadding\":0.20}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(517,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.51,\"NX\":2,\"NY\":8,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(518,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.6,\"NX\":2,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(519,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(520,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(521,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(522,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(523,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(524,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(525,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(526,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(527,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL),(528,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL),(529,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(530,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(531,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(532,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(533,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(534,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(535,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(536,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(537,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(538,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(539,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(540,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(541,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(542,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(543,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(544,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(545,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(546,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(547,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(548,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(549,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(550,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(551,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(552,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(553,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(554,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(555,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(556,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(557,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(558,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(559,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(560,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(561,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(562,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(563,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(564,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(565,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(566,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(567,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(568,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(569,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(570,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(571,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(572,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(573,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(574,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(575,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(576,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(577,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(578,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(579,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(580,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(581,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(582,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(583,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(584,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(585,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(586,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(587,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(588,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(589,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(590,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(591,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(592,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(593,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(594,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(595,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(596,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(597,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(598,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(599,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(600,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(601,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(602,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(603,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(604,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(605,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(606,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(607,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(608,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(609,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(610,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(611,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL),(612,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(613,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(614,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(615,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(616,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL),(617,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL),(618,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL),(619,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(620,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL),(621,84,'Abkhaz','ab','ab_GE',NULL,NULL,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(622,84,'Afar','aa','aa_ET',NULL,NULL,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(623,84,'Afrikaans','af','af_ZA',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(624,84,'Akan','ak','ak_GH',NULL,NULL,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(625,84,'Albanian','sq','sq_AL',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(626,84,'Amharic','am','am_ET',NULL,NULL,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(627,84,'Arabic','ar','ar_EG',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(628,84,'Aragonese','an','an_ES',NULL,NULL,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(629,84,'Armenian','hy','hy_AM',NULL,NULL,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(630,84,'Assamese','as','as_IN',NULL,NULL,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(631,84,'Avaric','av','av_RU',NULL,NULL,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(632,84,'Avestan','ae','ae_XX',NULL,NULL,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(633,84,'Aymara','ay','ay_BO',NULL,NULL,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(634,84,'Azerbaijani','az','az_AZ',NULL,NULL,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(635,84,'Bambara','bm','bm_ML',NULL,NULL,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(636,84,'Bashkir','ba','ba_RU',NULL,NULL,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(637,84,'Basque','eu','eu_ES',NULL,NULL,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(638,84,'Belarusian','be','be_BY',NULL,NULL,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(639,84,'Bengali','bn','bn_BD',NULL,NULL,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(640,84,'Bihari','bh','bh_IN',NULL,NULL,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(641,84,'Bislama','bi','bi_VU',NULL,NULL,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(642,84,'Bosnian','bs','bs_BA',NULL,NULL,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(643,84,'Breton','br','br_FR',NULL,NULL,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(644,84,'Bulgarian','bg','bg_BG',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(645,84,'Burmese','my','my_MM',NULL,NULL,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(646,84,'Catalan; Valencian','ca','ca_ES',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(647,84,'Chamorro','ch','ch_GU',NULL,NULL,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(648,84,'Chechen','ce','ce_RU',NULL,NULL,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(649,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,NULL,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(650,84,'Chinese (China)','zh','zh_CN',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(651,84,'Chinese (Taiwan)','zh','zh_TW',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(652,84,'Chuvash','cv','cv_RU',NULL,NULL,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(653,84,'Cornish','kw','kw_GB',NULL,NULL,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(654,84,'Corsican','co','co_FR',NULL,NULL,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(655,84,'Cree','cr','cr_CA',NULL,NULL,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(656,84,'Croatian','hr','hr_HR',NULL,NULL,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(657,84,'Czech','cs','cs_CZ',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(658,84,'Danish','da','da_DK',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(659,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,NULL,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(660,84,'Dutch','nl','nl_NL',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(661,84,'Dzongkha','dz','dz_BT',NULL,NULL,0,41,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(662,84,'English (Australia)','en','en_AU',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(663,84,'English (Canada)','en','en_CA',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(664,84,'English (United Kingdom)','en','en_GB',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(665,84,'English (United States)','en','en_US',NULL,NULL,1,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(666,84,'Esperanto','eo','eo_XX',NULL,NULL,0,46,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(667,84,'Estonian','et','et_EE',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(668,84,'Ewe','ee','ee_GH',NULL,NULL,0,48,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(669,84,'Faroese','fo','fo_FO',NULL,NULL,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(670,84,'Fijian','fj','fj_FJ',NULL,NULL,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(671,84,'Finnish','fi','fi_FI',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(672,84,'French (Canada)','fr','fr_CA',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(673,84,'French (France)','fr','fr_FR',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,NULL,0,54,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(675,84,'Galician','gl','gl_ES',NULL,NULL,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(676,84,'Georgian','ka','ka_GE',NULL,NULL,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(677,84,'German','de','de_DE',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(678,84,'German (Swiss)','de','de_CH',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(679,84,'Greek, Modern','el','el_GR',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(680,84,'GuaraniÂ','gn','gn_PY',NULL,NULL,0,60,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(681,84,'Gujarati','gu','gu_IN',NULL,NULL,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,NULL,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(683,84,'Hausa','ha','ha_NG',NULL,NULL,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(684,84,'Hebrew (modern)','he','he_IL',NULL,NULL,0,64,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(685,84,'Herero','hz','hz_NA',NULL,NULL,0,65,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(686,84,'Hindi','hi','hi_IN',NULL,NULL,0,66,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(687,84,'Hiri Motu','ho','ho_PG',NULL,NULL,0,67,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(688,84,'Hungarian','hu','hu_HU',NULL,NULL,0,68,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(689,84,'Interlingua','ia','ia_XX',NULL,NULL,0,69,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(690,84,'Indonesian','id','id_ID',NULL,NULL,0,70,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(691,84,'Interlingue','ie','ie_XX',NULL,NULL,0,71,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(692,84,'Irish','ga','ga_IE',NULL,NULL,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(693,84,'Igbo','ig','ig_NG',NULL,NULL,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(694,84,'Inupiaq','ik','ik_US',NULL,NULL,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(695,84,'Ido','io','io_XX',NULL,NULL,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(696,84,'Icelandic','is','is_IS',NULL,NULL,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(697,84,'Italian','it','it_IT',NULL,NULL,0,77,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(698,84,'Inuktitut','iu','iu_CA',NULL,NULL,0,78,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(699,84,'Japanese','ja','ja_JP',NULL,NULL,0,79,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(700,84,'Javanese','jv','jv_ID',NULL,NULL,0,80,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,NULL,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(702,84,'Kannada','kn','kn_IN',NULL,NULL,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(703,84,'Kanuri','kr','kr_NE',NULL,NULL,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(704,84,'Kashmiri','ks','ks_IN',NULL,NULL,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(705,84,'Kazakh','kk','kk_KZ',NULL,NULL,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(706,84,'Khmer','km','km_KH',NULL,NULL,0,86,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,NULL,0,87,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(708,84,'Kinyarwanda','rw','rw_RW',NULL,NULL,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,NULL,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(710,84,'Komi','kv','kv_RU',NULL,NULL,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(711,84,'Kongo','kg','kg_CD',NULL,NULL,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(712,84,'Korean','ko','ko_KR',NULL,NULL,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(713,84,'Kurdish','ku','ku_IQ',NULL,NULL,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,NULL,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(715,84,'Latin','la','la_VA',NULL,NULL,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,NULL,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(717,84,'Luganda','lg','lg_UG',NULL,NULL,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,NULL,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(719,84,'Lingala','ln','ln_CD',NULL,NULL,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(720,84,'Lao','lo','lo_LA',NULL,NULL,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(721,84,'Lithuanian','lt','lt_LT',NULL,NULL,0,101,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(722,84,'Luba-Katanga','lu','lu_CD',NULL,NULL,0,102,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(723,84,'Latvian','lv','lv_LV',NULL,NULL,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(724,84,'Manx','gv','gv_IM',NULL,NULL,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(725,84,'Macedonian','mk','mk_MK',NULL,NULL,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(726,84,'Malagasy','mg','mg_MG',NULL,NULL,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(727,84,'Malay','ms','ms_MY',NULL,NULL,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(728,84,'Malayalam','ml','ml_IN',NULL,NULL,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(729,84,'Maltese','mt','mt_MT',NULL,NULL,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(730,84,'MÄori','mi','mi_NZ',NULL,NULL,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(731,84,'Marathi','mr','mr_IN',NULL,NULL,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(732,84,'Marshallese','mh','mh_MH',NULL,NULL,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(733,84,'Mongolian','mn','mn_MN',NULL,NULL,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(734,84,'Nauru','na','na_NR',NULL,NULL,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(735,84,'Navajo, Navaho','nv','nv_US',NULL,NULL,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,NULL,0,116,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(737,84,'North Ndebele','nd','nd_ZW',NULL,NULL,0,117,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(738,84,'Nepali','ne','ne_NP',NULL,NULL,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(739,84,'Ndonga','ng','ng_NA',NULL,NULL,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,NULL,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(741,84,'Norwegian','no','no_NO',NULL,NULL,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(742,84,'Nuosu','ii','ii_CN',NULL,NULL,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(743,84,'South Ndebele','nr','nr_ZA',NULL,NULL,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(744,84,'Occitan (after 1500)','oc','oc_FR',NULL,NULL,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(745,84,'Ojibwa','oj','oj_CA',NULL,NULL,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,NULL,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(747,84,'Oromo','om','om_ET',NULL,NULL,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(748,84,'Oriya','or','or_IN',NULL,NULL,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(749,84,'Ossetian, Ossetic','os','os_GE',NULL,NULL,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,NULL,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(751,84,'Pali','pi','pi_KH',NULL,NULL,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(752,84,'Persian (Iran)','fa','fa_IR',NULL,NULL,0,132,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(753,84,'Polish','pl','pl_PL',NULL,NULL,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(754,84,'Pashto, Pushto','ps','ps_AF',NULL,NULL,0,134,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,NULL,0,135,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,NULL,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(757,84,'Quechua','qu','qu_PE',NULL,NULL,0,137,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(758,84,'Romansh','rm','rm_CH',NULL,NULL,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(759,84,'Kirundi','rn','rn_BI',NULL,NULL,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,NULL,0,140,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(761,84,'Russian','ru','ru_RU',NULL,NULL,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(762,84,'Sanskrit','sa','sa_IN',NULL,NULL,0,142,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(763,84,'Sardinian','sc','sc_IT',NULL,NULL,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(764,84,'Sindhi','sd','sd_IN',NULL,NULL,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(765,84,'Northern Sami','se','se_NO',NULL,NULL,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(766,84,'Samoan','sm','sm_WS',NULL,NULL,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(767,84,'Sango','sg','sg_CF',NULL,NULL,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(768,84,'Serbian','sr','sr_RS',NULL,NULL,0,148,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,NULL,0,149,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(770,84,'Shona','sn','sn_ZW',NULL,NULL,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(771,84,'Sinhala, Sinhalese','si','si_LK',NULL,NULL,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(772,84,'Slovak','sk','sk_SK',NULL,NULL,0,152,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(773,84,'Slovene','sl','sl_SI',NULL,NULL,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(774,84,'Somali','so','so_SO',NULL,NULL,0,154,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(775,84,'Southern Sotho','st','st_ZA',NULL,NULL,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,NULL,0,156,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,NULL,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,NULL,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(779,84,'Sundanese','su','su_ID',NULL,NULL,0,159,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(780,84,'Swahili','sw','sw_TZ',NULL,NULL,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(781,84,'Swati','ss','ss_ZA',NULL,NULL,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(782,84,'Swedish','sv','sv_SE',NULL,NULL,0,162,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(783,84,'Tamil','ta','ta_IN',NULL,NULL,0,163,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(784,84,'Telugu','te','te_IN',NULL,NULL,0,164,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(785,84,'Tajik','tg','tg_TJ',NULL,NULL,0,165,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(786,84,'Thai','th','th_TH',NULL,NULL,0,166,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(787,84,'Tigrinya','ti','ti_ET',NULL,NULL,0,167,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,NULL,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(789,84,'Turkmen','tk','tk_TM',NULL,NULL,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(790,84,'Tagalog','tl','tl_PH',NULL,NULL,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(791,84,'Tswana','tn','tn_ZA',NULL,NULL,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,NULL,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(793,84,'Turkish','tr','tr_TR',NULL,NULL,0,173,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(794,84,'Tsonga','ts','ts_ZA',NULL,NULL,0,174,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(795,84,'Tatar','tt','tt_RU',NULL,NULL,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(796,84,'Twi','tw','tw_GH',NULL,NULL,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(797,84,'Tahitian','ty','ty_PF',NULL,NULL,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(798,84,'Uighur, Uyghur','ug','ug_CN',NULL,NULL,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(799,84,'Ukrainian','uk','uk_UA',NULL,NULL,0,179,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(800,84,'Urdu','ur','ur_PK',NULL,NULL,0,180,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(801,84,'Uzbek','uz','uz_UZ',NULL,NULL,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(802,84,'Venda','ve','ve_ZA',NULL,NULL,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(803,84,'Vietnamese','vi','vi_VN',NULL,NULL,0,183,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(804,84,'Volapük','vo','vo_XX',NULL,NULL,0,184,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(805,84,'Walloon','wa','wa_BE',NULL,NULL,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(806,84,'Welsh','cy','cy_GB',NULL,NULL,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(807,84,'Wolof','wo','wo_SN',NULL,NULL,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(808,84,'Western Frisian','fy','fy_NL',NULL,NULL,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(809,84,'Xhosa','xh','xh_ZA',NULL,NULL,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(810,84,'Yiddish','yi','yi_US',NULL,NULL,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(811,84,'Yoruba','yo','yo_NG',NULL,NULL,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(812,84,'Zhuang, Chuang','za','za_CN',NULL,NULL,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(813,84,'Zulu','zu','zu_ZA',NULL,NULL,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(835,88,'Events - Receipt only','3','event_registration_receipt',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(840,89,'Tell-a-Friend Email','1','friend',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(845,91,'Test-drive - Receipt Header','1','test_preview',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(848,93,'Profiles - Admin Notification','1','uf_notify',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(849,94,'Petition - signature added','1','petition_sign',NULL,NULL,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(851,95,'In Honor of','1','in_honor_of',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(852,95,'In Memory of','2','in_memory_of',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(853,95,'Solicited','3','solicited',NULL,NULL,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(854,95,'Household','4','household',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(855,95,'Workplace Giving','5','workplace',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(857,95,'3rd-party Service','7','3rd-party_service',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(859,95,'Matched Gift','9','matched_gift',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(860,95,'Personal Campaign Page','10','pcp',NULL,NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(861,95,'Gift','11','gift',NULL,NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); /*!40000 ALTER TABLE `civicrm_option_value` ENABLE KEYS */; UNLOCK TABLES; @@ -1025,7 +1025,7 @@ 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,103,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,68,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,195,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,135,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,188,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,149,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,131,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,58,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,162,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,184,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,47,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,165,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,115,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,61,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,22,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,121,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,6,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,78,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,85,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,105,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,88,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,77,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,5,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,189,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,179,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,64,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,118,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,102,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,52,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,133,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,14,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,18,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,25,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,171,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,27,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,191,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,81,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,113,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,159,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,73,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,2,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,89,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,63,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,142,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,107,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,109,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,16,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,30,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,33,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,92,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); +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,138,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,85,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,124,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,100,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,188,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,26,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,39,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,1,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,106,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,30,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,143,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,150,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,194,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,196,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,120,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,171,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,115,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,55,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,166,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,16,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,6,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,89,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,191,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,136,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,62,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,159,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,81,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,52,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,35,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,42,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,140,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,45,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,105,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,149,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,25,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,103,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,79,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,187,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,163,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,102,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,90,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,128,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,157,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,176,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,86,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,144,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,110,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,46,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,160,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; @@ -1035,7 +1035,7 @@ 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,41,45),(2,23,46),(3,17,47),(4,31,48),(5,47,49),(6,32,50),(7,15,51),(8,33,52),(9,35,53),(10,48,54),(11,49,55),(12,11,56),(13,29,57),(14,8,58),(15,14,59),(16,43,60),(17,26,61),(18,2,62),(19,40,63),(20,22,64),(21,18,65),(22,37,66),(23,19,67),(24,21,68),(25,42,69),(26,50,70),(27,28,71),(28,1,72),(29,20,73),(30,45,74),(31,46,75),(32,38,76),(33,13,77),(34,27,78),(35,16,79),(36,7,80),(37,30,81),(38,4,82),(39,44,83),(40,6,84),(41,39,85),(42,9,86),(43,12,87),(44,34,88),(45,25,89),(46,10,90),(47,5,91),(48,24,92),(49,36,93),(50,3,94); +INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES (1,8,45),(2,22,46),(3,21,47),(4,36,48),(5,6,49),(6,10,50),(7,30,51),(8,7,52),(9,31,53),(10,33,54),(11,49,55),(12,29,56),(13,19,57),(14,26,58),(15,38,59),(16,28,60),(17,2,61),(18,46,62),(19,23,63),(20,42,64),(21,4,65),(22,41,66),(23,37,67),(24,34,68),(25,9,69),(26,48,70),(27,18,71),(28,16,72),(29,3,73),(30,43,74),(31,25,75),(32,1,76),(33,32,77),(34,11,78),(35,47,79),(36,35,80),(37,13,81),(38,44,82),(39,27,83),(40,50,84),(41,40,85),(42,20,86),(43,12,87),(44,17,88),(45,45,89),(46,39,90),(47,5,91),(48,24,92),(49,14,93),(50,15,94); /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */; UNLOCK TABLES; @@ -1083,7 +1083,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,54,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); +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,140,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; @@ -1103,7 +1103,7 @@ 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,107,1,1,0,NULL,'(714) 741-6622',NULL,'7147416622',2),(2,172,1,1,0,NULL,'(753) 385-5732',NULL,'7533855732',2),(3,49,1,1,0,NULL,'(821) 242-4652',NULL,'8212424652',2),(4,49,1,0,0,NULL,'475-1202',NULL,'4751202',2),(5,75,1,1,0,NULL,'637-1196',NULL,'6371196',1),(6,75,1,0,0,NULL,'(837) 543-3106',NULL,'8375433106',2),(7,110,1,1,0,NULL,'502-7787',NULL,'5027787',2),(8,13,1,1,0,NULL,'(780) 651-8285',NULL,'7806518285',2),(9,127,1,1,0,NULL,'(748) 605-5496',NULL,'7486055496',2),(10,127,1,0,0,NULL,'322-9561',NULL,'3229561',2),(11,176,1,1,0,NULL,'(525) 542-6180',NULL,'5255426180',1),(12,174,1,1,0,NULL,'(760) 737-5217',NULL,'7607375217',2),(13,46,1,1,0,NULL,'(894) 368-1643',NULL,'8943681643',2),(14,46,1,0,0,NULL,'280-6860',NULL,'2806860',1),(15,28,1,1,0,NULL,'364-3759',NULL,'3643759',2),(16,157,1,1,0,NULL,'690-1895',NULL,'6901895',2),(17,66,1,1,0,NULL,'(510) 515-9350',NULL,'5105159350',1),(18,66,1,0,0,NULL,'(648) 215-4239',NULL,'6482154239',2),(19,14,1,1,0,NULL,'(803) 242-3006',NULL,'8032423006',2),(20,14,1,0,0,NULL,'(486) 288-4311',NULL,'4862884311',2),(21,30,1,1,0,NULL,'(403) 242-8025',NULL,'4032428025',1),(22,196,1,1,0,NULL,'863-4953',NULL,'8634953',2),(23,196,1,0,0,NULL,'416-8062',NULL,'4168062',2),(24,82,1,1,0,NULL,'(879) 210-9629',NULL,'8792109629',2),(25,194,1,1,0,NULL,'231-7932',NULL,'2317932',2),(26,57,1,1,0,NULL,'(244) 451-4439',NULL,'2444514439',2),(27,167,1,1,0,NULL,'504-3264',NULL,'5043264',1),(28,8,1,1,0,NULL,'(525) 428-9618',NULL,'5254289618',2),(29,8,1,0,0,NULL,'(539) 532-1004',NULL,'5395321004',1),(30,111,1,1,0,NULL,'365-8383',NULL,'3658383',2),(31,97,1,1,0,NULL,'(652) 624-4775',NULL,'6526244775',1),(32,97,1,0,0,NULL,'(378) 671-1760',NULL,'3786711760',1),(33,70,1,1,0,NULL,'430-3524',NULL,'4303524',1),(34,33,1,1,0,NULL,'476-2907',NULL,'4762907',1),(35,169,1,1,0,NULL,'219-3340',NULL,'2193340',2),(36,124,1,1,0,NULL,'274-2630',NULL,'2742630',2),(37,72,1,1,0,NULL,'(574) 686-1344',NULL,'5746861344',1),(38,72,1,0,0,NULL,'685-7892',NULL,'6857892',2),(39,197,1,1,0,NULL,'(868) 780-5348',NULL,'8687805348',1),(40,197,1,0,0,NULL,'644-7150',NULL,'6447150',1),(41,166,1,1,0,NULL,'(214) 789-3667',NULL,'2147893667',1),(42,166,1,0,0,NULL,'524-7328',NULL,'5247328',2),(43,191,1,1,0,NULL,'(391) 651-8691',NULL,'3916518691',2),(44,59,1,1,0,NULL,'(342) 559-9500',NULL,'3425599500',1),(45,122,1,1,0,NULL,'(628) 435-4609',NULL,'6284354609',2),(46,122,1,0,0,NULL,'863-3580',NULL,'8633580',2),(47,173,1,1,0,NULL,'(617) 636-2944',NULL,'6176362944',1),(48,173,1,0,0,NULL,'319-2930',NULL,'3192930',2),(49,53,1,1,0,NULL,'351-4567',NULL,'3514567',2),(50,53,1,0,0,NULL,'834-7419',NULL,'8347419',2),(51,23,1,1,0,NULL,'499-3388',NULL,'4993388',1),(52,23,1,0,0,NULL,'805-6600',NULL,'8056600',1),(53,133,1,1,0,NULL,'(321) 210-9476',NULL,'3212109476',2),(54,42,1,1,0,NULL,'(428) 325-2871',NULL,'4283252871',1),(55,42,1,0,0,NULL,'(297) 828-6773',NULL,'2978286773',2),(56,40,1,1,0,NULL,'577-5928',NULL,'5775928',2),(57,78,1,1,0,NULL,'(514) 407-7390',NULL,'5144077390',2),(58,78,1,0,0,NULL,'(741) 872-5459',NULL,'7418725459',2),(59,149,1,1,0,NULL,'(395) 253-6679',NULL,'3952536679',1),(60,149,1,0,0,NULL,'217-2286',NULL,'2172286',2),(61,19,1,1,0,NULL,'640-8245',NULL,'6408245',1),(62,19,1,0,0,NULL,'(442) 377-1741',NULL,'4423771741',2),(63,39,1,1,0,NULL,'(346) 478-9244',NULL,'3464789244',1),(64,113,1,1,0,NULL,'725-3483',NULL,'7253483',1),(65,113,1,0,0,NULL,'464-9108',NULL,'4649108',2),(66,55,1,1,0,NULL,'735-2685',NULL,'7352685',1),(67,145,1,1,0,NULL,'695-9671',NULL,'6959671',1),(68,162,1,1,0,NULL,'571-4497',NULL,'5714497',2),(69,193,1,1,0,NULL,'(891) 332-4071',NULL,'8913324071',1),(70,156,1,1,0,NULL,'(380) 671-2678',NULL,'3806712678',1),(71,26,1,1,0,NULL,'(842) 843-8591',NULL,'8428438591',2),(72,18,1,1,0,NULL,'(827) 462-4507',NULL,'8274624507',1),(73,18,1,0,0,NULL,'234-2763',NULL,'2342763',1),(74,3,1,1,0,NULL,'(836) 479-8499',NULL,'8364798499',1),(75,3,1,0,0,NULL,'274-4338',NULL,'2744338',2),(76,177,1,1,0,NULL,'(624) 495-8971',NULL,'6244958971',2),(77,192,1,1,0,NULL,'(806) 575-7750',NULL,'8065757750',1),(78,48,1,1,0,NULL,'648-6564',NULL,'6486564',2),(79,48,1,0,0,NULL,'(446) 559-7040',NULL,'4465597040',2),(80,105,1,1,0,NULL,'(675) 816-6565',NULL,'6758166565',2),(81,2,1,1,0,NULL,'684-8156',NULL,'6848156',1),(82,2,1,0,0,NULL,'(789) 533-2250',NULL,'7895332250',2),(83,112,1,1,0,NULL,'672-6129',NULL,'6726129',1),(84,112,1,0,0,NULL,'(542) 548-2056',NULL,'5425482056',1),(85,129,1,1,0,NULL,'(670) 336-4841',NULL,'6703364841',2),(86,129,1,0,0,NULL,'(711) 782-7627',NULL,'7117827627',2),(87,95,1,1,0,NULL,'411-2763',NULL,'4112763',1),(88,25,1,1,0,NULL,'788-8748',NULL,'7888748',1),(89,25,1,0,0,NULL,'771-6476',NULL,'7716476',2),(90,132,1,1,0,NULL,'513-4567',NULL,'5134567',2),(91,43,1,1,0,NULL,'(784) 535-1660',NULL,'7845351660',2),(92,43,1,0,0,NULL,'(661) 519-1221',NULL,'6615191221',1),(93,121,1,1,0,NULL,'(379) 411-9807',NULL,'3794119807',1),(94,121,1,0,0,NULL,'203-3734',NULL,'2033734',1),(95,125,1,1,0,NULL,'884-7184',NULL,'8847184',1),(96,125,1,0,0,NULL,'660-7645',NULL,'6607645',1),(97,115,1,1,0,NULL,'(884) 218-4327',NULL,'8842184327',1),(98,115,1,0,0,NULL,'543-6519',NULL,'5436519',1),(99,141,1,1,0,NULL,'(651) 724-5049',NULL,'6517245049',1),(100,65,1,1,0,NULL,'(403) 810-8052',NULL,'4038108052',2),(101,41,1,1,0,NULL,'206-4899',NULL,'2064899',2),(102,94,1,1,0,NULL,'522-5821',NULL,'5225821',1),(103,101,1,1,0,NULL,'637-6716',NULL,'6376716',2),(104,101,1,0,0,NULL,'203-2871',NULL,'2032871',1),(105,183,1,1,0,NULL,'597-2017',NULL,'5972017',2),(106,183,1,0,0,NULL,'670-2159',NULL,'6702159',1),(107,71,1,1,0,NULL,'(481) 443-2545',NULL,'4814432545',2),(108,71,1,0,0,NULL,'(556) 298-4544',NULL,'5562984544',1),(109,104,1,1,0,NULL,'665-5551',NULL,'6655551',2),(110,93,1,1,0,NULL,'(333) 364-6312',NULL,'3333646312',2),(111,199,1,1,0,NULL,'736-6099',NULL,'7366099',2),(112,73,1,1,0,NULL,'352-1797',NULL,'3521797',1),(113,73,1,0,0,NULL,'225-2169',NULL,'2252169',1),(114,68,1,1,0,NULL,'339-3597',NULL,'3393597',1),(115,68,1,0,0,NULL,'484-5434',NULL,'4845434',2),(116,140,1,1,0,NULL,'(785) 358-1983',NULL,'7853581983',2),(117,201,1,1,0,NULL,'(871) 570-4706',NULL,'8715704706',1),(118,201,1,0,0,NULL,'(481) 349-2921',NULL,'4813492921',2),(119,114,1,1,0,NULL,'874-6660',NULL,'8746660',1),(120,195,1,1,0,NULL,'(541) 693-8307',NULL,'5416938307',1),(121,175,1,1,0,NULL,'874-1687',NULL,'8741687',2),(122,175,1,0,0,NULL,'(818) 358-2235',NULL,'8183582235',1),(123,190,1,1,0,NULL,'455-7011',NULL,'4557011',1),(124,146,1,1,0,NULL,'(670) 386-7395',NULL,'6703867395',1),(125,160,1,1,0,NULL,'423-7345',NULL,'4237345',2),(126,160,1,0,0,NULL,'(378) 552-8456',NULL,'3785528456',1),(127,24,1,1,0,NULL,'706-4755',NULL,'7064755',1),(128,24,1,0,0,NULL,'(470) 769-6020',NULL,'4707696020',1),(129,47,1,1,0,NULL,'695-4274',NULL,'6954274',2),(130,135,1,1,0,NULL,'(777) 281-5780',NULL,'7772815780',2),(131,130,1,1,0,NULL,'(346) 441-8971',NULL,'3464418971',1),(132,130,1,0,0,NULL,'(345) 247-7220',NULL,'3452477220',2),(133,198,1,1,0,NULL,'278-4793',NULL,'2784793',1),(134,106,1,1,0,NULL,'494-9595',NULL,'4949595',1),(135,106,1,0,0,NULL,'670-7811',NULL,'6707811',2),(136,62,1,1,0,NULL,'862-5364',NULL,'8625364',1),(137,136,1,1,0,NULL,'(583) 323-2667',NULL,'5833232667',1),(138,12,1,1,0,NULL,'491-4683',NULL,'4914683',2),(139,165,1,1,0,NULL,'316-4138',NULL,'3164138',2),(140,15,1,1,0,NULL,'(294) 375-9884',NULL,'2943759884',2),(141,45,1,1,0,NULL,'(576) 264-5521',NULL,'5762645521',2),(142,91,1,1,0,NULL,'267-8376',NULL,'2678376',2),(143,91,1,0,0,NULL,'453-1132',NULL,'4531132',2),(144,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(145,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(146,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); +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,43,1,1,0,NULL,'(559) 672-8915',NULL,'5596728915',2),(2,189,1,1,0,NULL,'741-8922',NULL,'7418922',1),(3,189,1,0,0,NULL,'660-5381',NULL,'6605381',1),(4,140,1,1,0,NULL,'391-9297',NULL,'3919297',1),(5,140,1,0,0,NULL,'522-6294',NULL,'5226294',1),(6,166,1,1,0,NULL,'(629) 437-6995',NULL,'6294376995',2),(7,106,1,1,0,NULL,'645-9258',NULL,'6459258',2),(8,106,1,0,0,NULL,'(891) 818-5429',NULL,'8918185429',2),(9,98,1,1,0,NULL,'814-7524',NULL,'8147524',1),(10,102,1,1,0,NULL,'298-5536',NULL,'2985536',1),(11,102,1,0,0,NULL,'(296) 678-4087',NULL,'2966784087',2),(12,141,1,1,0,NULL,'(242) 387-2709',NULL,'2423872709',2),(13,105,1,1,0,NULL,'837-2717',NULL,'8372717',2),(14,105,1,0,0,NULL,'(608) 359-4613',NULL,'6083594613',2),(15,158,1,1,0,NULL,'654-1011',NULL,'6541011',2),(16,158,1,0,0,NULL,'(455) 818-6021',NULL,'4558186021',1),(17,117,1,1,0,NULL,'(715) 451-7266',NULL,'7154517266',2),(18,117,1,0,0,NULL,'350-9554',NULL,'3509554',2),(19,72,1,1,0,NULL,'(476) 346-8291',NULL,'4763468291',1),(20,10,1,1,0,NULL,'745-5815',NULL,'7455815',2),(21,169,1,1,0,NULL,'(579) 857-4926',NULL,'5798574926',2),(22,169,1,0,0,NULL,'(631) 645-7251',NULL,'6316457251',2),(23,143,1,1,0,NULL,'(778) 894-3548',NULL,'7788943548',2),(24,143,1,0,0,NULL,'(807) 861-1558',NULL,'8078611558',2),(25,37,1,1,0,NULL,'554-4480',NULL,'5544480',2),(26,37,1,0,0,NULL,'591-6448',NULL,'5916448',2),(27,27,1,1,0,NULL,'814-8692',NULL,'8148692',1),(28,27,1,0,0,NULL,'692-4799',NULL,'6924799',2),(29,63,1,1,0,NULL,'735-1245',NULL,'7351245',1),(30,49,1,1,0,NULL,'590-9237',NULL,'5909237',2),(31,192,1,1,0,NULL,'760-5637',NULL,'7605637',1),(32,130,1,1,0,NULL,'213-9247',NULL,'2139247',1),(33,4,1,1,0,NULL,'(432) 811-1219',NULL,'4328111219',2),(34,75,1,1,0,NULL,'(729) 381-8053',NULL,'7293818053',2),(35,75,1,0,0,NULL,'(309) 775-7933',NULL,'3097757933',2),(36,100,1,1,0,NULL,'220-1736',NULL,'2201736',2),(37,29,1,1,0,NULL,'(636) 755-5436',NULL,'6367555436',1),(38,59,1,1,0,NULL,'461-6403',NULL,'4616403',2),(39,144,1,1,0,NULL,'(718) 453-3535',NULL,'7184533535',1),(40,144,1,0,0,NULL,'(408) 852-1921',NULL,'4088521921',2),(41,21,1,1,0,NULL,'(377) 547-8813',NULL,'3775478813',1),(42,21,1,0,0,NULL,'(819) 254-7349',NULL,'8192547349',1),(43,122,1,1,0,NULL,'(718) 831-7394',NULL,'7188317394',2),(44,122,1,0,0,NULL,'841-8402',NULL,'8418402',1),(45,74,1,1,0,NULL,'(438) 339-4196',NULL,'4383394196',2),(46,128,1,1,0,NULL,'(586) 899-4090',NULL,'5868994090',1),(47,201,1,1,0,NULL,'854-2565',NULL,'8542565',1),(48,201,1,0,0,NULL,'(648) 716-4436',NULL,'6487164436',2),(49,184,1,1,0,NULL,'764-8950',NULL,'7648950',1),(50,176,1,1,0,NULL,'638-9608',NULL,'6389608',2),(51,176,1,0,0,NULL,'434-8221',NULL,'4348221',1),(52,52,1,1,0,NULL,'373-6442',NULL,'3736442',2),(53,52,1,0,0,NULL,'(384) 253-1593',NULL,'3842531593',2),(54,131,1,1,0,NULL,'368-7801',NULL,'3687801',2),(55,103,1,1,0,NULL,'(424) 875-6668',NULL,'4248756668',1),(56,65,1,1,0,NULL,'640-2997',NULL,'6402997',2),(57,65,1,0,0,NULL,'(292) 865-2064',NULL,'2928652064',2),(58,73,1,1,0,NULL,'504-4388',NULL,'5044388',2),(59,73,1,0,0,NULL,'(493) 726-4771',NULL,'4937264771',1),(60,55,1,1,0,NULL,'775-4962',NULL,'7754962',2),(61,55,1,0,0,NULL,'(433) 705-3182',NULL,'4337053182',1),(62,99,1,1,0,NULL,'839-5906',NULL,'8395906',2),(63,151,1,1,0,NULL,'(535) 544-1110',NULL,'5355441110',2),(64,108,1,1,0,NULL,'(838) 215-5772',NULL,'8382155772',1),(65,32,1,1,0,NULL,'340-9401',NULL,'3409401',2),(66,32,1,0,0,NULL,'(896) 227-8197',NULL,'8962278197',2),(67,25,1,1,0,NULL,'(251) 406-2150',NULL,'2514062150',2),(68,13,1,1,0,NULL,'406-1822',NULL,'4061822',2),(69,58,1,1,0,NULL,'(309) 547-6104',NULL,'3095476104',1),(70,58,1,0,0,NULL,'(377) 349-7034',NULL,'3773497034',1),(71,173,1,1,0,NULL,'827-3851',NULL,'8273851',2),(72,91,1,1,0,NULL,'277-3714',NULL,'2773714',1),(73,91,1,0,0,NULL,'(826) 549-2091',NULL,'8265492091',1),(74,112,1,1,0,NULL,'(484) 666-8271',NULL,'4846668271',1),(75,112,1,0,0,NULL,'(836) 500-9842',NULL,'8365009842',1),(76,101,1,1,0,NULL,'628-6187',NULL,'6286187',2),(77,24,1,1,0,NULL,'(576) 782-9271',NULL,'5767829271',2),(78,132,1,1,0,NULL,'(290) 541-3374',NULL,'2905413374',2),(79,6,1,1,0,NULL,'(448) 334-6609',NULL,'4483346609',1),(80,6,1,0,0,NULL,'335-2368',NULL,'3352368',1),(81,76,1,1,0,NULL,'(337) 335-6663',NULL,'3373356663',1),(82,42,1,1,0,NULL,'(286) 487-4565',NULL,'2864874565',2),(83,64,1,1,0,NULL,'438-5770',NULL,'4385770',1),(84,89,1,1,0,NULL,'(879) 694-1850',NULL,'8796941850',1),(85,89,1,0,0,NULL,'777-8896',NULL,'7778896',2),(86,161,1,1,0,NULL,'(222) 535-7098',NULL,'2225357098',1),(87,161,1,0,0,NULL,'376-9295',NULL,'3769295',1),(88,138,1,1,0,NULL,'852-9046',NULL,'8529046',2),(89,30,1,1,0,NULL,'290-3575',NULL,'2903575',2),(90,3,1,1,0,NULL,'(666) 269-8224',NULL,'6662698224',1),(91,3,1,0,0,NULL,'(235) 812-9510',NULL,'2358129510',1),(92,34,1,1,0,NULL,'(276) 583-2051',NULL,'2765832051',1),(93,56,1,1,0,NULL,'755-3007',NULL,'7553007',2),(94,56,1,0,0,NULL,'(613) 246-8594',NULL,'6132468594',1),(95,152,1,1,0,NULL,'(274) 276-9391',NULL,'2742769391',1),(96,94,1,1,0,NULL,'(625) 727-2937',NULL,'6257272937',2),(97,94,1,0,0,NULL,'(811) 323-8430',NULL,'8113238430',2),(98,194,1,1,0,NULL,'(500) 581-2960',NULL,'5005812960',1),(99,194,1,0,0,NULL,'843-9126',NULL,'8439126',1),(100,167,1,1,0,NULL,'637-4935',NULL,'6374935',2),(101,167,1,0,0,NULL,'(551) 665-3210',NULL,'5516653210',2),(102,45,1,1,0,NULL,'(560) 235-2517',NULL,'5602352517',1),(103,124,1,1,0,NULL,'(675) 324-6645',NULL,'6753246645',2),(104,124,1,0,0,NULL,'(658) 716-5906',NULL,'6587165906',1),(105,67,1,1,0,NULL,'370-7751',NULL,'3707751',1),(106,67,1,0,0,NULL,'392-9957',NULL,'3929957',1),(107,160,1,1,0,NULL,'(256) 532-2420',NULL,'2565322420',1),(108,126,1,1,0,NULL,'306-9846',NULL,'3069846',1),(109,126,1,0,0,NULL,'(363) 713-8831',NULL,'3637138831',2),(110,119,1,1,0,NULL,'267-1274',NULL,'2671274',1),(111,119,1,0,0,NULL,'(804) 631-6954',NULL,'8046316954',2),(112,44,1,1,0,NULL,'(672) 647-4514',NULL,'6726474514',2),(113,26,1,1,0,NULL,'(749) 442-3277',NULL,'7494423277',1),(114,26,1,0,0,NULL,'323-3587',NULL,'3233587',1),(115,133,1,1,0,NULL,'(300) 272-6799',NULL,'3002726799',2),(116,133,1,0,0,NULL,'642-7292',NULL,'6427292',1),(117,195,1,1,0,NULL,'720-7324',NULL,'7207324',2),(118,195,1,0,0,NULL,'328-7081',NULL,'3287081',2),(119,92,1,1,0,NULL,'(772) 241-7604',NULL,'7722417604',2),(120,92,1,0,0,NULL,'837-6695',NULL,'8376695',1),(121,145,1,1,0,NULL,'(785) 815-3393',NULL,'7858153393',1),(122,145,1,0,0,NULL,'(323) 400-4763',NULL,'3234004763',2),(123,114,1,1,0,NULL,'694-8860',NULL,'6948860',1),(124,147,1,1,0,NULL,'(222) 830-2285',NULL,'2228302285',2),(125,147,1,0,0,NULL,'612-5693',NULL,'6125693',2),(126,82,1,1,0,NULL,'(647) 413-4348',NULL,'6474134348',2),(127,82,1,0,0,NULL,'717-9238',NULL,'7179238',1),(128,66,1,1,0,NULL,'865-5651',NULL,'8655651',2),(129,107,1,1,0,NULL,'(480) 675-5888',NULL,'4806755888',1),(130,107,1,0,0,NULL,'(705) 425-6674',NULL,'7054256674',1),(131,81,1,1,0,NULL,'(253) 792-2238',NULL,'2537922238',2),(132,79,1,1,0,NULL,'(596) 455-8657',NULL,'5964558657',1),(133,123,1,1,0,NULL,'(815) 739-4093',NULL,'8157394093',1),(134,123,1,0,0,NULL,'(497) 701-3521',NULL,'4977013521',2),(135,199,1,1,0,NULL,'(201) 853-2710',NULL,'2018532710',1),(136,199,1,0,0,NULL,'890-5460',NULL,'8905460',1),(137,157,1,1,0,NULL,'(846) 655-4046',NULL,'8466554046',1),(138,163,1,1,0,NULL,'(821) 282-8363',NULL,'8212828363',1),(139,163,1,0,0,NULL,'759-1890',NULL,'7591890',2),(140,197,1,1,0,NULL,'(819) 753-9373',NULL,'8197539373',1),(141,197,1,0,0,NULL,'417-9748',NULL,'4179748',2),(142,69,1,1,0,NULL,'497-1166',NULL,'4971166',2),(143,87,1,1,0,NULL,'335-7823',NULL,'3357823',1),(144,87,1,0,0,NULL,'318-7391',NULL,'3187391',1),(145,62,1,1,0,NULL,'331-2533',NULL,'3312533',2),(146,84,1,1,0,NULL,'(749) 626-3560',NULL,'7496263560',2),(147,84,1,0,0,NULL,'765-2655',NULL,'7652655',2),(148,70,1,1,0,NULL,'740-2599',NULL,'7402599',2),(149,70,1,0,0,NULL,'357-3831',NULL,'3573831',2),(150,86,1,1,0,NULL,'(608) 359-1455',NULL,'6083591455',2),(151,86,1,0,0,NULL,'(394) 864-7246',NULL,'3948647246',1),(152,175,1,1,0,NULL,'662-7040',NULL,'6627040',2),(153,47,1,1,0,NULL,'(203) 437-6797',NULL,'2034376797',1),(154,183,1,1,0,NULL,'582-9083',NULL,'5829083',2),(155,183,1,0,0,NULL,'626-2787',NULL,'6262787',2),(156,38,1,1,0,NULL,'(891) 728-6872',NULL,'8917286872',1),(157,38,1,0,0,NULL,'(211) 291-9702',NULL,'2112919702',1),(158,50,1,1,0,NULL,'(655) 794-5098',NULL,'6557945098',2),(159,177,1,1,0,NULL,'583-4300',NULL,'5834300',1),(160,174,1,1,0,NULL,'782-4811',NULL,'7824811',1),(161,174,1,0,0,NULL,'(808) 479-1054',NULL,'8084791054',1),(162,115,1,1,0,NULL,'362-7708',NULL,'3627708',1),(163,115,1,0,0,NULL,'(479) 575-4949',NULL,'4795754949',1),(164,15,1,1,0,NULL,'(244) 345-2358',NULL,'2443452358',2),(165,15,1,0,0,NULL,'851-1819',NULL,'8511819',2),(166,18,1,1,0,NULL,'(506) 569-1679',NULL,'5065691679',2),(167,116,1,1,0,NULL,'417-7332',NULL,'4177332',2),(168,116,1,0,0,NULL,'731-8530',NULL,'7318530',2),(169,135,1,1,0,NULL,'(583) 322-8595',NULL,'5833228595',1),(170,54,1,1,0,NULL,'203-1123',NULL,'2031123',2),(171,54,1,0,0,NULL,'454-9036',NULL,'4549036',2),(172,136,1,1,0,NULL,'(538) 518-6185',NULL,'5385186185',1),(173,136,1,0,0,NULL,'691-6127',NULL,'6916127',2),(174,5,1,1,0,NULL,'(671) 214-8849',NULL,'6712148849',1),(175,5,1,0,0,NULL,'553-1704',NULL,'5531704',1),(176,39,1,1,0,NULL,'(369) 700-3811',NULL,'3697003811',1),(177,17,1,1,0,NULL,'569-5556',NULL,'5695556',1),(178,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(179,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(180,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */; UNLOCK TABLES; @@ -1260,7 +1260,7 @@ 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,192,119,1,NULL,NULL,1,NULL,0,0,NULL),(2,48,119,1,NULL,NULL,1,NULL,0,0,NULL),(3,192,84,1,NULL,NULL,1,NULL,0,0,NULL),(4,48,84,1,NULL,NULL,1,NULL,0,0,NULL),(5,48,192,4,NULL,NULL,1,NULL,0,0,NULL),(6,84,137,8,NULL,NULL,1,NULL,0,0,NULL),(7,192,137,8,NULL,NULL,1,NULL,0,0,NULL),(8,48,137,8,NULL,NULL,1,NULL,0,0,NULL),(9,119,137,7,NULL,NULL,1,NULL,0,0,NULL),(10,84,119,2,NULL,NULL,1,NULL,0,0,NULL),(11,2,147,1,NULL,NULL,1,NULL,0,0,NULL),(12,112,147,1,NULL,NULL,1,NULL,0,0,NULL),(13,2,105,1,NULL,NULL,1,NULL,0,0,NULL),(14,112,105,1,NULL,NULL,1,NULL,0,0,NULL),(15,112,2,4,NULL,NULL,1,NULL,0,0,NULL),(16,105,51,8,NULL,NULL,1,NULL,0,0,NULL),(17,2,51,8,NULL,NULL,1,NULL,0,0,NULL),(18,112,51,8,NULL,NULL,1,NULL,0,0,NULL),(19,147,51,7,NULL,NULL,0,NULL,0,0,NULL),(20,105,147,2,NULL,NULL,0,NULL,0,0,NULL),(21,95,129,1,NULL,NULL,1,NULL,0,0,NULL),(22,36,129,1,NULL,NULL,1,NULL,0,0,NULL),(23,95,123,1,NULL,NULL,1,NULL,0,0,NULL),(24,36,123,1,NULL,NULL,1,NULL,0,0,NULL),(25,36,95,4,NULL,NULL,1,NULL,0,0,NULL),(26,123,7,8,NULL,NULL,1,NULL,0,0,NULL),(27,95,7,8,NULL,NULL,1,NULL,0,0,NULL),(28,36,7,8,NULL,NULL,1,NULL,0,0,NULL),(29,129,7,7,NULL,NULL,1,NULL,0,0,NULL),(30,123,129,2,NULL,NULL,1,NULL,0,0,NULL),(31,131,134,1,NULL,NULL,1,NULL,0,0,NULL),(32,132,134,1,NULL,NULL,1,NULL,0,0,NULL),(33,131,25,1,NULL,NULL,1,NULL,0,0,NULL),(34,132,25,1,NULL,NULL,1,NULL,0,0,NULL),(35,132,131,4,NULL,NULL,1,NULL,0,0,NULL),(36,25,98,8,NULL,NULL,1,NULL,0,0,NULL),(37,131,98,8,NULL,NULL,1,NULL,0,0,NULL),(38,132,98,8,NULL,NULL,1,NULL,0,0,NULL),(39,134,98,7,NULL,NULL,0,NULL,0,0,NULL),(40,25,134,2,NULL,NULL,0,NULL,0,0,NULL),(41,125,43,1,NULL,NULL,1,NULL,0,0,NULL),(42,64,43,1,NULL,NULL,1,NULL,0,0,NULL),(43,125,121,1,NULL,NULL,1,NULL,0,0,NULL),(44,64,121,1,NULL,NULL,1,NULL,0,0,NULL),(45,64,125,4,NULL,NULL,1,NULL,0,0,NULL),(46,121,118,8,NULL,NULL,1,NULL,0,0,NULL),(47,125,118,8,NULL,NULL,1,NULL,0,0,NULL),(48,64,118,8,NULL,NULL,1,NULL,0,0,NULL),(49,43,118,7,NULL,NULL,1,NULL,0,0,NULL),(50,121,43,2,NULL,NULL,1,NULL,0,0,NULL),(51,115,152,1,NULL,NULL,1,NULL,0,0,NULL),(52,141,152,1,NULL,NULL,1,NULL,0,0,NULL),(53,115,9,1,NULL,NULL,1,NULL,0,0,NULL),(54,141,9,1,NULL,NULL,1,NULL,0,0,NULL),(55,141,115,4,NULL,NULL,1,NULL,0,0,NULL),(56,9,20,8,NULL,NULL,1,NULL,0,0,NULL),(57,115,20,8,NULL,NULL,1,NULL,0,0,NULL),(58,141,20,8,NULL,NULL,1,NULL,0,0,NULL),(59,152,20,7,NULL,NULL,0,NULL,0,0,NULL),(60,9,152,2,NULL,NULL,0,NULL,0,0,NULL),(61,41,65,1,NULL,NULL,1,NULL,0,0,NULL),(62,94,65,1,NULL,NULL,1,NULL,0,0,NULL),(63,41,158,1,NULL,NULL,1,NULL,0,0,NULL),(64,94,158,1,NULL,NULL,1,NULL,0,0,NULL),(65,94,41,4,NULL,NULL,1,NULL,0,0,NULL),(66,158,5,8,NULL,NULL,1,NULL,0,0,NULL),(67,41,5,8,NULL,NULL,1,NULL,0,0,NULL),(68,94,5,8,NULL,NULL,1,NULL,0,0,NULL),(69,65,5,7,NULL,NULL,1,NULL,0,0,NULL),(70,158,65,2,NULL,NULL,1,NULL,0,0,NULL),(71,71,101,1,NULL,NULL,1,NULL,0,0,NULL),(72,151,101,1,NULL,NULL,1,NULL,0,0,NULL),(73,71,183,1,NULL,NULL,1,NULL,0,0,NULL),(74,151,183,1,NULL,NULL,1,NULL,0,0,NULL),(75,151,71,4,NULL,NULL,1,NULL,0,0,NULL),(76,183,21,8,NULL,NULL,1,NULL,0,0,NULL),(77,71,21,8,NULL,NULL,1,NULL,0,0,NULL),(78,151,21,8,NULL,NULL,1,NULL,0,0,NULL),(79,101,21,7,NULL,NULL,0,NULL,0,0,NULL),(80,183,101,2,NULL,NULL,0,NULL,0,0,NULL),(81,93,104,1,NULL,NULL,1,NULL,0,0,NULL),(82,199,104,1,NULL,NULL,1,NULL,0,0,NULL),(83,93,67,1,NULL,NULL,1,NULL,0,0,NULL),(84,199,67,1,NULL,NULL,1,NULL,0,0,NULL),(85,199,93,4,NULL,NULL,1,NULL,0,0,NULL),(86,67,100,8,NULL,NULL,1,NULL,0,0,NULL),(87,93,100,8,NULL,NULL,1,NULL,0,0,NULL),(88,199,100,8,NULL,NULL,1,NULL,0,0,NULL),(89,104,100,7,NULL,NULL,1,NULL,0,0,NULL),(90,67,104,2,NULL,NULL,1,NULL,0,0,NULL),(91,73,179,1,NULL,NULL,1,NULL,0,0,NULL),(92,68,179,1,NULL,NULL,1,NULL,0,0,NULL),(93,73,92,1,NULL,NULL,1,NULL,0,0,NULL),(94,68,92,1,NULL,NULL,1,NULL,0,0,NULL),(95,68,73,4,NULL,NULL,1,NULL,0,0,NULL),(96,92,99,8,NULL,NULL,1,NULL,0,0,NULL),(97,73,99,8,NULL,NULL,1,NULL,0,0,NULL),(98,68,99,8,NULL,NULL,1,NULL,0,0,NULL),(99,179,99,7,NULL,NULL,1,NULL,0,0,NULL),(100,92,179,2,NULL,NULL,1,NULL,0,0,NULL),(101,201,188,1,NULL,NULL,1,NULL,0,0,NULL),(102,58,188,1,NULL,NULL,1,NULL,0,0,NULL),(103,201,140,1,NULL,NULL,1,NULL,0,0,NULL),(104,58,140,1,NULL,NULL,1,NULL,0,0,NULL),(105,58,201,4,NULL,NULL,1,NULL,0,0,NULL),(106,140,44,8,NULL,NULL,1,NULL,0,0,NULL),(107,201,44,8,NULL,NULL,1,NULL,0,0,NULL),(108,58,44,8,NULL,NULL,1,NULL,0,0,NULL),(109,188,44,7,NULL,NULL,0,NULL,0,0,NULL),(110,140,188,2,NULL,NULL,0,NULL,0,0,NULL),(111,35,114,1,NULL,NULL,1,NULL,0,0,NULL),(112,195,114,1,NULL,NULL,1,NULL,0,0,NULL),(113,35,109,1,NULL,NULL,1,NULL,0,0,NULL),(114,195,109,1,NULL,NULL,1,NULL,0,0,NULL),(115,195,35,4,NULL,NULL,1,NULL,0,0,NULL),(116,109,168,8,NULL,NULL,1,NULL,0,0,NULL),(117,35,168,8,NULL,NULL,1,NULL,0,0,NULL),(118,195,168,8,NULL,NULL,1,NULL,0,0,NULL),(119,114,168,7,NULL,NULL,1,NULL,0,0,NULL),(120,109,114,2,NULL,NULL,1,NULL,0,0,NULL),(121,146,175,1,NULL,NULL,1,NULL,0,0,NULL),(122,160,175,1,NULL,NULL,1,NULL,0,0,NULL),(123,146,190,1,NULL,NULL,1,NULL,0,0,NULL),(124,160,190,1,NULL,NULL,1,NULL,0,0,NULL),(125,160,146,4,NULL,NULL,1,NULL,0,0,NULL),(126,190,163,8,NULL,NULL,1,NULL,0,0,NULL),(127,146,163,8,NULL,NULL,1,NULL,0,0,NULL),(128,160,163,8,NULL,NULL,1,NULL,0,0,NULL),(129,175,163,7,NULL,NULL,0,NULL,0,0,NULL),(130,190,175,2,NULL,NULL,0,NULL,0,0,NULL),(131,85,52,1,NULL,NULL,1,NULL,0,0,NULL),(132,79,52,1,NULL,NULL,1,NULL,0,0,NULL),(133,85,81,1,NULL,NULL,1,NULL,0,0,NULL),(134,79,81,1,NULL,NULL,1,NULL,0,0,NULL),(135,79,85,4,NULL,NULL,1,NULL,0,0,NULL),(136,81,117,8,NULL,NULL,1,NULL,0,0,NULL),(137,85,117,8,NULL,NULL,1,NULL,0,0,NULL),(138,79,117,8,NULL,NULL,1,NULL,0,0,NULL),(139,52,117,7,NULL,NULL,0,NULL,0,0,NULL),(140,81,52,2,NULL,NULL,0,NULL,0,0,NULL),(141,32,24,1,NULL,NULL,1,NULL,0,0,NULL),(142,143,24,1,NULL,NULL,1,NULL,0,0,NULL),(143,32,47,1,NULL,NULL,1,NULL,0,0,NULL),(144,143,47,1,NULL,NULL,1,NULL,0,0,NULL),(145,143,32,4,NULL,NULL,1,NULL,0,0,NULL),(146,47,126,8,NULL,NULL,1,NULL,0,0,NULL),(147,32,126,8,NULL,NULL,1,NULL,0,0,NULL),(148,143,126,8,NULL,NULL,1,NULL,0,0,NULL),(149,24,126,7,NULL,NULL,0,NULL,0,0,NULL),(150,47,24,2,NULL,NULL,0,NULL,0,0,NULL),(151,135,139,1,NULL,NULL,1,NULL,0,0,NULL),(152,130,139,1,NULL,NULL,1,NULL,0,0,NULL),(153,135,185,1,NULL,NULL,1,NULL,0,0,NULL),(154,130,185,1,NULL,NULL,1,NULL,0,0,NULL),(155,130,135,4,NULL,NULL,1,NULL,0,0,NULL),(156,185,34,8,NULL,NULL,1,NULL,0,0,NULL),(157,135,34,8,NULL,NULL,1,NULL,0,0,NULL),(158,130,34,8,NULL,NULL,1,NULL,0,0,NULL),(159,139,34,7,NULL,NULL,0,NULL,0,0,NULL),(160,185,139,2,NULL,NULL,0,NULL,0,0,NULL),(161,106,63,1,NULL,NULL,1,NULL,0,0,NULL),(162,62,63,1,NULL,NULL,1,NULL,0,0,NULL),(163,106,198,1,NULL,NULL,1,NULL,0,0,NULL),(164,62,198,1,NULL,NULL,1,NULL,0,0,NULL),(165,62,106,4,NULL,NULL,1,NULL,0,0,NULL),(166,198,90,8,NULL,NULL,1,NULL,0,0,NULL),(167,106,90,8,NULL,NULL,1,NULL,0,0,NULL),(168,62,90,8,NULL,NULL,1,NULL,0,0,NULL),(169,63,90,7,NULL,NULL,0,NULL,0,0,NULL),(170,198,63,2,NULL,NULL,0,NULL,0,0,NULL),(171,31,182,1,NULL,NULL,1,NULL,0,0,NULL),(172,153,182,1,NULL,NULL,1,NULL,0,0,NULL),(173,31,136,1,NULL,NULL,1,NULL,0,0,NULL),(174,153,136,1,NULL,NULL,1,NULL,0,0,NULL),(175,153,31,4,NULL,NULL,1,NULL,0,0,NULL),(176,136,108,8,NULL,NULL,1,NULL,0,0,NULL),(177,31,108,8,NULL,NULL,1,NULL,0,0,NULL),(178,153,108,8,NULL,NULL,1,NULL,0,0,NULL),(179,182,108,7,NULL,NULL,1,NULL,0,0,NULL),(180,136,182,2,NULL,NULL,1,NULL,0,0,NULL),(181,165,12,1,NULL,NULL,1,NULL,0,0,NULL),(182,15,12,1,NULL,NULL,1,NULL,0,0,NULL),(183,165,178,1,NULL,NULL,1,NULL,0,0,NULL),(184,15,178,1,NULL,NULL,1,NULL,0,0,NULL),(185,15,165,4,NULL,NULL,1,NULL,0,0,NULL),(186,178,96,8,NULL,NULL,1,NULL,0,0,NULL),(187,165,96,8,NULL,NULL,1,NULL,0,0,NULL),(188,15,96,8,NULL,NULL,1,NULL,0,0,NULL),(189,12,96,7,NULL,NULL,0,NULL,0,0,NULL),(190,178,12,2,NULL,NULL,0,NULL,0,0,NULL),(191,154,77,1,NULL,NULL,1,NULL,0,0,NULL),(192,91,77,1,NULL,NULL,1,NULL,0,0,NULL),(193,154,45,1,NULL,NULL,1,NULL,0,0,NULL),(194,91,45,1,NULL,NULL,1,NULL,0,0,NULL),(195,91,154,4,NULL,NULL,1,NULL,0,0,NULL),(196,45,150,8,NULL,NULL,1,NULL,0,0,NULL),(197,154,150,8,NULL,NULL,1,NULL,0,0,NULL),(198,91,150,8,NULL,NULL,1,NULL,0,0,NULL),(199,77,150,7,NULL,NULL,0,NULL,0,0,NULL),(200,45,77,2,NULL,NULL,0,NULL,0,0,NULL),(201,188,6,5,NULL,NULL,1,NULL,0,0,NULL),(202,179,10,5,NULL,NULL,1,NULL,0,0,NULL),(203,78,16,5,NULL,NULL,1,NULL,0,0,NULL),(204,58,27,5,NULL,NULL,1,NULL,0,0,NULL),(205,63,29,5,NULL,NULL,1,NULL,0,0,NULL),(206,37,38,5,NULL,NULL,1,NULL,0,0,NULL),(207,24,56,5,NULL,NULL,1,NULL,0,0,NULL),(208,112,76,5,NULL,NULL,1,NULL,0,0,NULL),(209,3,83,5,NULL,NULL,1,NULL,0,0,NULL),(210,125,86,5,NULL,NULL,1,NULL,0,0,NULL),(211,75,120,5,NULL,NULL,1,NULL,0,0,NULL),(212,93,142,5,NULL,NULL,1,NULL,0,0,NULL),(213,89,155,5,NULL,NULL,1,NULL,0,0,NULL),(214,71,181,5,NULL,NULL,1,NULL,0,0,NULL),(215,189,187,5,NULL,NULL,1,NULL,0,0,NULL); +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,146,24,1,NULL,NULL,1,NULL,0,0,NULL),(2,132,24,1,NULL,NULL,1,NULL,0,0,NULL),(3,146,168,1,NULL,NULL,1,NULL,0,0,NULL),(4,132,168,1,NULL,NULL,1,NULL,0,0,NULL),(5,132,146,4,NULL,NULL,1,NULL,0,0,NULL),(6,168,48,8,NULL,NULL,1,NULL,0,0,NULL),(7,146,48,8,NULL,NULL,1,NULL,0,0,NULL),(8,132,48,8,NULL,NULL,1,NULL,0,0,NULL),(9,24,48,7,NULL,NULL,1,NULL,0,0,NULL),(10,168,24,2,NULL,NULL,1,NULL,0,0,NULL),(11,76,200,1,NULL,NULL,1,NULL,0,0,NULL),(12,42,200,1,NULL,NULL,1,NULL,0,0,NULL),(13,76,6,1,NULL,NULL,1,NULL,0,0,NULL),(14,42,6,1,NULL,NULL,1,NULL,0,0,NULL),(15,42,76,4,NULL,NULL,1,NULL,0,0,NULL),(16,6,188,8,NULL,NULL,1,NULL,0,0,NULL),(17,76,188,8,NULL,NULL,1,NULL,0,0,NULL),(18,42,188,8,NULL,NULL,1,NULL,0,0,NULL),(19,200,188,7,NULL,NULL,0,NULL,0,0,NULL),(20,6,200,2,NULL,NULL,0,NULL,0,0,NULL),(21,89,64,1,NULL,NULL,1,NULL,0,0,NULL),(22,161,64,1,NULL,NULL,1,NULL,0,0,NULL),(23,89,41,1,NULL,NULL,1,NULL,0,0,NULL),(24,161,41,1,NULL,NULL,1,NULL,0,0,NULL),(25,161,89,4,NULL,NULL,1,NULL,0,0,NULL),(26,41,90,8,NULL,NULL,1,NULL,0,0,NULL),(27,89,90,8,NULL,NULL,1,NULL,0,0,NULL),(28,161,90,8,NULL,NULL,1,NULL,0,0,NULL),(29,64,90,7,NULL,NULL,1,NULL,0,0,NULL),(30,41,64,2,NULL,NULL,1,NULL,0,0,NULL),(31,3,138,1,NULL,NULL,1,NULL,0,0,NULL),(32,34,138,1,NULL,NULL,1,NULL,0,0,NULL),(33,3,30,1,NULL,NULL,1,NULL,0,0,NULL),(34,34,30,1,NULL,NULL,1,NULL,0,0,NULL),(35,34,3,4,NULL,NULL,1,NULL,0,0,NULL),(36,30,139,8,NULL,NULL,1,NULL,0,0,NULL),(37,3,139,8,NULL,NULL,1,NULL,0,0,NULL),(38,34,139,8,NULL,NULL,1,NULL,0,0,NULL),(39,138,139,7,NULL,NULL,0,NULL,0,0,NULL),(40,30,138,2,NULL,NULL,0,NULL,0,0,NULL),(41,94,56,1,NULL,NULL,1,NULL,0,0,NULL),(42,194,56,1,NULL,NULL,1,NULL,0,0,NULL),(43,94,152,1,NULL,NULL,1,NULL,0,0,NULL),(44,194,152,1,NULL,NULL,1,NULL,0,0,NULL),(45,194,94,4,NULL,NULL,1,NULL,0,0,NULL),(46,152,171,8,NULL,NULL,1,NULL,0,0,NULL),(47,94,171,8,NULL,NULL,1,NULL,0,0,NULL),(48,194,171,8,NULL,NULL,1,NULL,0,0,NULL),(49,56,171,7,NULL,NULL,1,NULL,0,0,NULL),(50,152,56,2,NULL,NULL,1,NULL,0,0,NULL),(51,187,156,1,NULL,NULL,1,NULL,0,0,NULL),(52,45,156,1,NULL,NULL,1,NULL,0,0,NULL),(53,187,167,1,NULL,NULL,1,NULL,0,0,NULL),(54,45,167,1,NULL,NULL,1,NULL,0,0,NULL),(55,45,187,4,NULL,NULL,1,NULL,0,0,NULL),(56,167,12,8,NULL,NULL,1,NULL,0,0,NULL),(57,187,12,8,NULL,NULL,1,NULL,0,0,NULL),(58,45,12,8,NULL,NULL,1,NULL,0,0,NULL),(59,156,12,7,NULL,NULL,1,NULL,0,0,NULL),(60,167,156,2,NULL,NULL,1,NULL,0,0,NULL),(61,67,20,1,NULL,NULL,1,NULL,0,0,NULL),(62,160,20,1,NULL,NULL,1,NULL,0,0,NULL),(63,67,124,1,NULL,NULL,1,NULL,0,0,NULL),(64,160,124,1,NULL,NULL,1,NULL,0,0,NULL),(65,160,67,4,NULL,NULL,1,NULL,0,0,NULL),(66,124,134,8,NULL,NULL,1,NULL,0,0,NULL),(67,67,134,8,NULL,NULL,1,NULL,0,0,NULL),(68,160,134,8,NULL,NULL,1,NULL,0,0,NULL),(69,20,134,7,NULL,NULL,1,NULL,0,0,NULL),(70,124,20,2,NULL,NULL,1,NULL,0,0,NULL),(71,44,126,1,NULL,NULL,1,NULL,0,0,NULL),(72,2,126,1,NULL,NULL,1,NULL,0,0,NULL),(73,44,119,1,NULL,NULL,1,NULL,0,0,NULL),(74,2,119,1,NULL,NULL,1,NULL,0,0,NULL),(75,2,44,4,NULL,NULL,1,NULL,0,0,NULL),(76,119,8,8,NULL,NULL,1,NULL,0,0,NULL),(77,44,8,8,NULL,NULL,1,NULL,0,0,NULL),(78,2,8,8,NULL,NULL,1,NULL,0,0,NULL),(79,126,8,7,NULL,NULL,1,NULL,0,0,NULL),(80,119,126,2,NULL,NULL,1,NULL,0,0,NULL),(81,133,85,1,NULL,NULL,1,NULL,0,0,NULL),(82,195,85,1,NULL,NULL,1,NULL,0,0,NULL),(83,133,26,1,NULL,NULL,1,NULL,0,0,NULL),(84,195,26,1,NULL,NULL,1,NULL,0,0,NULL),(85,195,133,4,NULL,NULL,1,NULL,0,0,NULL),(86,26,155,8,NULL,NULL,1,NULL,0,0,NULL),(87,133,155,8,NULL,NULL,1,NULL,0,0,NULL),(88,195,155,8,NULL,NULL,1,NULL,0,0,NULL),(89,85,155,7,NULL,NULL,0,NULL,0,0,NULL),(90,26,85,2,NULL,NULL,0,NULL,0,0,NULL),(91,114,92,1,NULL,NULL,1,NULL,0,0,NULL),(92,147,92,1,NULL,NULL,1,NULL,0,0,NULL),(93,114,145,1,NULL,NULL,1,NULL,0,0,NULL),(94,147,145,1,NULL,NULL,1,NULL,0,0,NULL),(95,147,114,4,NULL,NULL,1,NULL,0,0,NULL),(96,145,198,8,NULL,NULL,1,NULL,0,0,NULL),(97,114,198,8,NULL,NULL,1,NULL,0,0,NULL),(98,147,198,8,NULL,NULL,1,NULL,0,0,NULL),(99,92,198,7,NULL,NULL,1,NULL,0,0,NULL),(100,145,92,2,NULL,NULL,1,NULL,0,0,NULL),(101,107,82,1,NULL,NULL,1,NULL,0,0,NULL),(102,81,82,1,NULL,NULL,1,NULL,0,0,NULL),(103,107,66,1,NULL,NULL,1,NULL,0,0,NULL),(104,81,66,1,NULL,NULL,1,NULL,0,0,NULL),(105,81,107,4,NULL,NULL,1,NULL,0,0,NULL),(106,66,148,8,NULL,NULL,1,NULL,0,0,NULL),(107,107,148,8,NULL,NULL,1,NULL,0,0,NULL),(108,81,148,8,NULL,NULL,1,NULL,0,0,NULL),(109,82,148,7,NULL,NULL,1,NULL,0,0,NULL),(110,66,82,2,NULL,NULL,1,NULL,0,0,NULL),(111,123,88,1,NULL,NULL,1,NULL,0,0,NULL),(112,77,88,1,NULL,NULL,1,NULL,0,0,NULL),(113,123,79,1,NULL,NULL,1,NULL,0,0,NULL),(114,77,79,1,NULL,NULL,1,NULL,0,0,NULL),(115,77,123,4,NULL,NULL,1,NULL,0,0,NULL),(116,79,61,8,NULL,NULL,1,NULL,0,0,NULL),(117,123,61,8,NULL,NULL,1,NULL,0,0,NULL),(118,77,61,8,NULL,NULL,1,NULL,0,0,NULL),(119,88,61,7,NULL,NULL,1,NULL,0,0,NULL),(120,79,88,2,NULL,NULL,1,NULL,0,0,NULL),(121,125,199,1,NULL,NULL,1,NULL,0,0,NULL),(122,163,199,1,NULL,NULL,1,NULL,0,0,NULL),(123,125,157,1,NULL,NULL,1,NULL,0,0,NULL),(124,163,157,1,NULL,NULL,1,NULL,0,0,NULL),(125,163,125,4,NULL,NULL,1,NULL,0,0,NULL),(126,157,179,8,NULL,NULL,1,NULL,0,0,NULL),(127,125,179,8,NULL,NULL,1,NULL,0,0,NULL),(128,163,179,8,NULL,NULL,1,NULL,0,0,NULL),(129,199,179,7,NULL,NULL,1,NULL,0,0,NULL),(130,157,199,2,NULL,NULL,1,NULL,0,0,NULL),(131,35,60,1,NULL,NULL,1,NULL,0,0,NULL),(132,69,60,1,NULL,NULL,1,NULL,0,0,NULL),(133,35,197,1,NULL,NULL,1,NULL,0,0,NULL),(134,69,197,1,NULL,NULL,1,NULL,0,0,NULL),(135,69,35,4,NULL,NULL,1,NULL,0,0,NULL),(136,197,78,8,NULL,NULL,1,NULL,0,0,NULL),(137,35,78,8,NULL,NULL,1,NULL,0,0,NULL),(138,69,78,8,NULL,NULL,1,NULL,0,0,NULL),(139,60,78,7,NULL,NULL,1,NULL,0,0,NULL),(140,197,60,2,NULL,NULL,1,NULL,0,0,NULL),(141,84,87,1,NULL,NULL,1,NULL,0,0,NULL),(142,70,87,1,NULL,NULL,1,NULL,0,0,NULL),(143,84,62,1,NULL,NULL,1,NULL,0,0,NULL),(144,70,62,1,NULL,NULL,1,NULL,0,0,NULL),(145,70,84,4,NULL,NULL,1,NULL,0,0,NULL),(146,62,172,8,NULL,NULL,1,NULL,0,0,NULL),(147,84,172,8,NULL,NULL,1,NULL,0,0,NULL),(148,70,172,8,NULL,NULL,1,NULL,0,0,NULL),(149,87,172,7,NULL,NULL,0,NULL,0,0,NULL),(150,62,87,2,NULL,NULL,0,NULL,0,0,NULL),(151,47,86,1,NULL,NULL,1,NULL,0,0,NULL),(152,183,86,1,NULL,NULL,1,NULL,0,0,NULL),(153,47,175,1,NULL,NULL,1,NULL,0,0,NULL),(154,183,175,1,NULL,NULL,1,NULL,0,0,NULL),(155,183,47,4,NULL,NULL,1,NULL,0,0,NULL),(156,175,93,8,NULL,NULL,1,NULL,0,0,NULL),(157,47,93,8,NULL,NULL,1,NULL,0,0,NULL),(158,183,93,8,NULL,NULL,1,NULL,0,0,NULL),(159,86,93,7,NULL,NULL,0,NULL,0,0,NULL),(160,175,86,2,NULL,NULL,0,NULL,0,0,NULL),(161,50,38,1,NULL,NULL,1,NULL,0,0,NULL),(162,177,38,1,NULL,NULL,1,NULL,0,0,NULL),(163,50,14,1,NULL,NULL,1,NULL,0,0,NULL),(164,177,14,1,NULL,NULL,1,NULL,0,0,NULL),(165,177,50,4,NULL,NULL,1,NULL,0,0,NULL),(166,14,33,8,NULL,NULL,1,NULL,0,0,NULL),(167,50,33,8,NULL,NULL,1,NULL,0,0,NULL),(168,177,33,8,NULL,NULL,1,NULL,0,0,NULL),(169,38,33,7,NULL,NULL,1,NULL,0,0,NULL),(170,14,38,2,NULL,NULL,1,NULL,0,0,NULL),(171,15,174,1,NULL,NULL,1,NULL,0,0,NULL),(172,154,174,1,NULL,NULL,1,NULL,0,0,NULL),(173,15,115,1,NULL,NULL,1,NULL,0,0,NULL),(174,154,115,1,NULL,NULL,1,NULL,0,0,NULL),(175,154,15,4,NULL,NULL,1,NULL,0,0,NULL),(176,115,36,8,NULL,NULL,1,NULL,0,0,NULL),(177,15,36,8,NULL,NULL,1,NULL,0,0,NULL),(178,154,36,8,NULL,NULL,1,NULL,0,0,NULL),(179,174,36,7,NULL,NULL,0,NULL,0,0,NULL),(180,115,174,2,NULL,NULL,0,NULL,0,0,NULL),(181,135,18,1,NULL,NULL,1,NULL,0,0,NULL),(182,54,18,1,NULL,NULL,1,NULL,0,0,NULL),(183,135,116,1,NULL,NULL,1,NULL,0,0,NULL),(184,54,116,1,NULL,NULL,1,NULL,0,0,NULL),(185,54,135,4,NULL,NULL,1,NULL,0,0,NULL),(186,116,180,8,NULL,NULL,1,NULL,0,0,NULL),(187,135,180,8,NULL,NULL,1,NULL,0,0,NULL),(188,54,180,8,NULL,NULL,1,NULL,0,0,NULL),(189,18,180,7,NULL,NULL,0,NULL,0,0,NULL),(190,116,18,2,NULL,NULL,0,NULL,0,0,NULL),(191,39,136,1,NULL,NULL,1,NULL,0,0,NULL),(192,17,136,1,NULL,NULL,1,NULL,0,0,NULL),(193,39,5,1,NULL,NULL,1,NULL,0,0,NULL),(194,17,5,1,NULL,NULL,1,NULL,0,0,NULL),(195,17,39,4,NULL,NULL,1,NULL,0,0,NULL),(196,5,170,8,NULL,NULL,1,NULL,0,0,NULL),(197,39,170,8,NULL,NULL,1,NULL,0,0,NULL),(198,17,170,8,NULL,NULL,1,NULL,0,0,NULL),(199,136,170,7,NULL,NULL,1,NULL,0,0,NULL),(200,5,136,2,NULL,NULL,1,NULL,0,0,NULL),(201,57,7,5,NULL,NULL,1,NULL,0,0,NULL),(202,59,31,5,NULL,NULL,1,NULL,0,0,NULL),(203,185,71,5,NULL,NULL,1,NULL,0,0,NULL),(204,150,97,5,NULL,NULL,1,NULL,0,0,NULL),(205,82,104,5,NULL,NULL,1,NULL,0,0,NULL),(206,21,110,5,NULL,NULL,1,NULL,0,0,NULL),(207,182,113,5,NULL,NULL,1,NULL,0,0,NULL),(208,109,118,5,NULL,NULL,1,NULL,0,0,NULL),(209,55,121,5,NULL,NULL,1,NULL,0,0,NULL),(210,176,142,5,NULL,NULL,1,NULL,0,0,NULL),(211,135,153,5,NULL,NULL,1,NULL,0,0,NULL),(212,80,159,5,NULL,NULL,1,NULL,0,0,NULL),(213,122,190,5,NULL,NULL,1,NULL,0,0,NULL),(214,66,191,5,NULL,NULL,1,NULL,0,0,NULL),(215,40,193,5,NULL,NULL,1,NULL,0,0,NULL); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -1336,7 +1336,7 @@ 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,107,2,'2019-03-22 10:05:47','Admin','Added',NULL),(2,164,2,'2019-11-19 18:11:46','Admin','Added',NULL),(3,172,2,'2019-11-16 09:01:37','Admin','Added',NULL),(4,54,2,'2019-08-21 17:27:23','Email','Added',NULL),(5,49,2,'2018-12-25 22:14:15','Email','Added',NULL),(6,159,2,'2019-05-25 22:14:22','Admin','Added',NULL),(7,75,2,'2019-09-19 17:51:20','Admin','Added',NULL),(8,110,2,'2019-07-17 18:30:44','Email','Added',NULL),(9,13,2,'2019-07-26 13:01:15','Admin','Added',NULL),(10,127,2,'2019-09-19 17:50:41','Admin','Added',NULL),(11,176,2,'2019-11-18 11:19:19','Email','Added',NULL),(12,200,2,'2019-10-25 07:25:34','Email','Added',NULL),(13,174,2,'2019-04-08 06:01:40','Email','Added',NULL),(14,46,2,'2019-01-24 20:29:07','Admin','Added',NULL),(15,28,2,'2019-09-02 01:14:56','Email','Added',NULL),(16,157,2,'2019-07-15 22:29:41','Admin','Added',NULL),(17,66,2,'2019-04-03 01:19:47','Email','Added',NULL),(18,14,2,'2019-08-14 06:31:09','Email','Added',NULL),(19,102,2,'2019-05-30 14:10:40','Email','Added',NULL),(20,22,2,'2019-04-08 00:13:03','Email','Added',NULL),(21,37,2,'2019-09-28 08:18:35','Email','Added',NULL),(22,30,2,'2019-04-22 10:03:59','Admin','Added',NULL),(23,196,2,'2019-06-29 16:00:09','Email','Added',NULL),(24,17,2,'2019-03-09 06:35:00','Email','Added',NULL),(25,80,2,'2019-03-24 09:49:04','Email','Added',NULL),(26,60,2,'2019-05-04 13:16:46','Email','Added',NULL),(27,144,2,'2019-08-14 11:05:06','Email','Added',NULL),(28,82,2,'2019-04-29 01:47:41','Email','Added',NULL),(29,74,2,'2019-06-24 19:18:15','Admin','Added',NULL),(30,88,2,'2019-06-27 17:05:43','Admin','Added',NULL),(31,194,2,'2019-01-24 00:42:59','Email','Added',NULL),(32,57,2,'2019-01-23 21:06:07','Admin','Added',NULL),(33,87,2,'2019-02-26 16:13:16','Admin','Added',NULL),(34,167,2,'2019-07-27 08:04:55','Admin','Added',NULL),(35,8,2,'2019-11-24 09:44:33','Email','Added',NULL),(36,170,2,'2019-10-16 15:58:55','Email','Added',NULL),(37,111,2,'2019-11-18 03:59:20','Email','Added',NULL),(38,97,2,'2019-08-26 17:08:32','Admin','Added',NULL),(39,70,2,'2019-05-18 04:17:06','Email','Added',NULL),(40,33,2,'2018-12-27 11:33:54','Email','Added',NULL),(41,169,2,'2019-03-22 07:47:58','Admin','Added',NULL),(42,124,2,'2019-09-11 19:28:11','Admin','Added',NULL),(43,103,2,'2019-05-22 12:34:45','Email','Added',NULL),(44,72,2,'2019-07-09 02:06:41','Email','Added',NULL),(45,197,2,'2019-04-02 21:00:14','Admin','Added',NULL),(46,50,2,'2019-08-25 21:35:22','Admin','Added',NULL),(47,4,2,'2019-02-11 13:38:40','Email','Added',NULL),(48,166,2,'2019-06-22 05:38:27','Admin','Added',NULL),(49,191,2,'2019-10-21 10:22:37','Email','Added',NULL),(50,59,2,'2019-01-19 11:24:33','Admin','Added',NULL),(51,122,2,'2019-01-18 08:33:30','Admin','Added',NULL),(52,173,2,'2019-05-13 14:43:26','Admin','Added',NULL),(53,53,2,'2019-04-14 14:53:29','Admin','Added',NULL),(54,116,2,'2018-12-15 14:08:08','Email','Added',NULL),(55,186,2,'2019-09-28 18:44:50','Admin','Added',NULL),(56,23,2,'2019-06-28 12:06:12','Admin','Added',NULL),(57,133,2,'2019-11-14 15:41:02','Admin','Added',NULL),(58,42,2,'2019-09-23 14:15:13','Admin','Added',NULL),(59,40,2,'2019-02-24 12:39:38','Email','Added',NULL),(60,171,2,'2019-04-23 17:58:43','Email','Added',NULL),(61,78,3,'2018-12-30 16:28:07','Email','Added',NULL),(62,149,3,'2019-09-26 00:34:40','Admin','Added',NULL),(63,19,3,'2019-07-11 04:32:28','Email','Added',NULL),(64,148,3,'2019-08-20 04:33:57','Admin','Added',NULL),(65,39,3,'2018-12-17 11:28:02','Admin','Added',NULL),(66,113,3,'2019-11-22 12:42:58','Admin','Added',NULL),(67,184,3,'2019-04-21 02:13:34','Admin','Added',NULL),(68,55,3,'2018-12-09 07:20:47','Admin','Added',NULL),(69,145,3,'2018-12-22 02:44:12','Admin','Added',NULL),(70,162,3,'2019-09-07 22:31:45','Admin','Added',NULL),(71,189,3,'2019-08-28 04:06:39','Email','Added',NULL),(72,193,3,'2019-04-15 15:31:15','Admin','Added',NULL),(73,156,3,'2019-08-08 15:24:31','Email','Added',NULL),(74,26,3,'2019-04-18 11:25:24','Email','Added',NULL),(75,61,3,'2019-07-29 04:16:31','Email','Added',NULL),(76,107,4,'2019-04-10 08:33:54','Email','Added',NULL),(77,110,4,'2019-03-27 15:59:43','Email','Added',NULL),(78,28,4,'2019-08-05 06:25:30','Admin','Added',NULL),(79,30,4,'2019-06-01 06:22:39','Email','Added',NULL),(80,74,4,'2019-03-15 13:16:16','Email','Added',NULL),(81,170,4,'2019-04-20 02:57:13','Admin','Added',NULL),(82,103,4,'2019-11-19 02:31:02','Admin','Added',NULL),(83,59,4,'2019-02-01 23:41:57','Email','Added',NULL); +INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES (1,96,2,'2019-06-13 04:12:33','Email','Added',NULL),(2,43,2,'2019-12-04 06:00:29','Admin','Added',NULL),(3,189,2,'2019-10-01 15:25:05','Admin','Added',NULL),(4,140,2,'2019-11-18 06:40:34','Admin','Added',NULL),(5,166,2,'2019-09-27 22:12:29','Email','Added',NULL),(6,95,2,'2019-09-09 00:21:57','Admin','Added',NULL),(7,106,2,'2019-08-14 10:19:29','Admin','Added',NULL),(8,98,2,'2019-05-07 10:09:51','Email','Added',NULL),(9,127,2,'2019-08-07 10:19:11','Email','Added',NULL),(10,137,2,'2019-12-29 13:34:53','Admin','Added',NULL),(11,102,2,'2019-01-17 10:06:09','Email','Added',NULL),(12,141,2,'2019-02-22 20:25:16','Admin','Added',NULL),(13,105,2,'2019-12-07 15:53:55','Email','Added',NULL),(14,23,2,'2019-02-14 20:52:45','Email','Added',NULL),(15,9,2,'2019-05-02 20:35:15','Email','Added',NULL),(16,158,2,'2019-12-17 11:26:23','Email','Added',NULL),(17,117,2,'2019-06-04 16:07:41','Admin','Added',NULL),(18,165,2,'2019-08-02 09:28:37','Admin','Added',NULL),(19,72,2,'2019-07-26 12:09:03','Email','Added',NULL),(20,186,2,'2019-04-29 20:31:41','Admin','Added',NULL),(21,10,2,'2019-10-16 02:28:00','Email','Added',NULL),(22,182,2,'2019-04-25 19:52:45','Email','Added',NULL),(23,40,2,'2019-05-03 21:51:56','Admin','Added',NULL),(24,169,2,'2019-11-30 16:42:29','Email','Added',NULL),(25,143,2,'2019-10-28 13:21:40','Email','Added',NULL),(26,185,2,'2019-08-08 08:34:41','Email','Added',NULL),(27,37,2,'2019-02-27 02:14:07','Email','Added',NULL),(28,27,2,'2019-02-08 16:43:31','Admin','Added',NULL),(29,164,2,'2019-07-02 18:50:09','Email','Added',NULL),(30,63,2,'2019-12-07 07:15:56','Email','Added',NULL),(31,49,2,'2019-10-04 18:43:58','Admin','Added',NULL),(32,192,2,'2019-04-20 06:54:45','Admin','Added',NULL),(33,130,2,'2019-03-15 23:03:37','Email','Added',NULL),(34,4,2,'2019-07-26 23:37:17','Email','Added',NULL),(35,75,2,'2019-09-22 12:47:30','Admin','Added',NULL),(36,100,2,'2019-09-22 21:00:59','Email','Added',NULL),(37,16,2,'2019-03-04 02:31:10','Email','Added',NULL),(38,29,2,'2019-01-29 08:26:21','Admin','Added',NULL),(39,162,2,'2019-08-01 15:15:04','Email','Added',NULL),(40,59,2,'2019-05-25 19:29:21','Admin','Added',NULL),(41,144,2,'2019-01-30 23:08:44','Email','Added',NULL),(42,21,2,'2019-07-12 17:19:04','Email','Added',NULL),(43,122,2,'2019-07-16 00:48:14','Admin','Added',NULL),(44,74,2,'2019-09-01 06:36:08','Admin','Added',NULL),(45,111,2,'2019-12-11 16:13:50','Admin','Added',NULL),(46,181,2,'2019-05-22 09:20:52','Email','Added',NULL),(47,128,2,'2019-11-14 22:55:59','Email','Added',NULL),(48,201,2,'2019-03-14 04:52:00','Admin','Added',NULL),(49,184,2,'2019-04-23 19:24:07','Email','Added',NULL),(50,176,2,'2019-12-11 14:40:08','Admin','Added',NULL),(51,178,2,'2019-03-04 05:57:42','Email','Added',NULL),(52,51,2,'2019-08-08 10:13:57','Email','Added',NULL),(53,52,2,'2019-08-21 18:45:37','Admin','Added',NULL),(54,11,2,'2019-03-03 15:48:19','Admin','Added',NULL),(55,131,2,'2019-09-19 05:42:15','Email','Added',NULL),(56,103,2,'2019-06-09 01:33:11','Email','Added',NULL),(57,65,2,'2019-06-30 21:53:06','Admin','Added',NULL),(58,109,2,'2019-11-10 23:15:58','Email','Added',NULL),(59,68,2,'2019-10-16 04:15:58','Admin','Added',NULL),(60,73,2,'2019-02-13 08:59:43','Email','Added',NULL),(61,55,3,'2019-12-27 04:33:35','Email','Added',NULL),(62,99,3,'2019-06-26 14:06:14','Admin','Added',NULL),(63,151,3,'2019-06-03 15:30:25','Email','Added',NULL),(64,108,3,'2019-02-01 12:59:06','Admin','Added',NULL),(65,150,3,'2019-02-09 14:53:50','Email','Added',NULL),(66,19,3,'2019-03-23 13:49:12','Email','Added',NULL),(67,196,3,'2019-11-29 23:23:55','Admin','Added',NULL),(68,83,3,'2019-08-26 03:37:58','Admin','Added',NULL),(69,32,3,'2019-04-17 19:55:44','Email','Added',NULL),(70,120,3,'2019-01-19 15:16:03','Admin','Added',NULL),(71,80,3,'2019-07-25 05:43:58','Email','Added',NULL),(72,129,3,'2019-10-27 10:04:19','Admin','Added',NULL),(73,25,3,'2019-09-03 13:55:52','Email','Added',NULL),(74,13,3,'2019-09-13 19:40:37','Email','Added',NULL),(75,58,3,'2019-11-15 15:24:09','Admin','Added',NULL),(76,96,4,'2019-10-05 21:31:49','Email','Added',NULL),(77,98,4,'2019-09-03 23:22:57','Admin','Added',NULL),(78,9,4,'2019-10-07 01:28:44','Admin','Added',NULL),(79,182,4,'2020-01-12 11:07:31','Email','Added',NULL),(80,164,4,'2019-04-07 18:58:52','Admin','Added',NULL),(81,100,4,'2019-11-12 16:57:19','Admin','Added',NULL),(82,122,4,'2019-05-09 15:38:54','Admin','Added',NULL),(83,176,4,'2019-07-14 23:18:12','Email','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -1432,7 +1432,7 @@ 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,83,'http://almacenter.org',1),(2,86,'http://lincolnmusic.org',1),(3,10,'http://redmonhealth.org',1),(4,181,'http://cadelldevelopmentservices.org',1),(5,29,'http://sissetoninitiative.org',1),(6,187,'http://creativeeducation.org',1),(7,155,'http://jamestownwellnesspartners.org',1),(8,161,'http://urbanliteracycollective.org',1),(9,138,'http://imbodenalliance.org',1),(10,38,'http://baypartners.org',1),(11,6,'http://yhpeaceacademy.org',1),(12,27,'http://fredericksburgfoodfund.org',1),(13,69,'http://scliteracyservices.org',1),(14,142,'http://wisconsintechnology.org',1),(15,11,'http://montanaadvocacyalliance.org',1),(16,120,'http://wisconsintrust.org',1),(17,56,'http://ohioadvocacy.org',1),(18,76,'http://communityfellowship.org',1); +INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES (1,149,'http://unitedpoetryfellowship.org',1),(2,121,'http://communitylegal.org',1),(3,153,'http://beechsustainability.org',1),(4,113,'http://friendsservices.org',1),(5,28,'http://michigansports.org',1),(6,142,'http://statesinitiative.org',1),(7,191,'http://friendsfood.org',1),(8,104,'http://localnetwork.org',1),(9,190,'http://yukonfellowship.org',1),(10,22,'http://jacksonassociation.org',1),(11,97,'http://progressivepoetrypartnership.org',1),(12,71,'http://beechartsfund.org',1),(13,159,'http://unitedhealth.org',1),(14,31,'http://collegefund.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -1464,7 +1464,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2019-11-29 8:55:52 +-- Dump completed on 2020-01-17 9:53:52 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | diff --git a/civicrm/templates/CRM/Activity/Form/Activity.tpl b/civicrm/templates/CRM/Activity/Form/Activity.tpl index 5b2e22a499a97615984ecb407a1a897308d81593..a013a7cb74a999051f0dfbdf102279a3dd5ddd5c 100644 --- a/civicrm/templates/CRM/Activity/Form/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Form/Activity.tpl @@ -134,13 +134,11 @@ </tr> <tr class="crm-activity-form-block-details"> <td class="label">{$form.details.label}</td> - {* activityTypeName means label here not name, but it should be name (dev/core#1116-fixme) *} - {if $activityTypeName eq "Print PDF Letter"} + {if $activityTypeNameAndLabel.machineName eq "Print PDF Letter"} <td class="view-value"> {$form.details.html} </td> - {* activityTypeName means label here not name, but it should be name (dev/core#1116-fixme) *} - {elseif $activityTypeName eq "Inbound Email"} + {elseif $activityTypeNameAndLabel.machineName eq "Inbound Email"} <td class="view-value"> {$form.details.html|crmStripAlternatives|nl2br} </td> @@ -179,7 +177,6 @@ {if $action eq 4} {include file="CRM/Custom/Page/CustomDataView.tpl"} {else} - <div id="customData"></div> {include file="CRM/common/customDataBlock.tpl"} {/if} </td> diff --git a/civicrm/templates/CRM/Activity/Form/Task/PDF.tpl b/civicrm/templates/CRM/Activity/Form/Task/PDF.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b28c9ffac54b64d0b10939614b7a523414d27736 --- /dev/null +++ b/civicrm/templates/CRM/Activity/Form/Task/PDF.tpl @@ -0,0 +1,14 @@ +{* + +--------------------------------------------------------------------+ + | 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 | + +--------------------------------------------------------------------+ +*} +<div class="crm-form-block crm-block crm-contact-task-pdf-form-block"> + <div class="messages status no-popup">{include file="CRM/Activity/Form/Task.tpl"}</div> + {include file="CRM/Contact/Form/Task/PDFLetterCommon.tpl"} + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> +</div> diff --git a/civicrm/templates/CRM/Admin/Form/Job.tpl b/civicrm/templates/CRM/Admin/Form/Job.tpl index 7d9959c8762bf900c5d963447a28244b7345bfb6..3c319aba56984d9e094d390dfd98d5c7763a4ebe 100644 --- a/civicrm/templates/CRM/Admin/Form/Job.tpl +++ b/civicrm/templates/CRM/Admin/Form/Job.tpl @@ -86,7 +86,7 @@ CRM.$(function($) { </td> </tr> <tr class="crm-job-form-block-parameters"> - <td class="label">{$form.parameters.label}<br />{docURL page="Managing Scheduled Jobs" resource="wiki"}</td> + <td class="label">{$form.parameters.label}<br />{docURL page="user/initial-set-up/scheduled-jobs/#parameters"}</td> <td>{$form.parameters.html}</td> </tr> <tr class="crm-job-form-block-scheduled-run-date"> diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp b/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp index 991ed6f4707ab2fd9175ba0b1e61437454a539ba..84e57270ea15d36c32f7a6478838eaa26538e72a 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp @@ -17,7 +17,7 @@ <ul> <li>{ts}Select 'CKEditor' for the built-in WYSIWYG option. You can customize the toolbar buttons and other settings by clicking "Configure CKEditor."{/ts}</li> <li>{ts}Select 'Textarea' if you want users to type text and/or HTML code into plain text fields.{/ts}</li> - <li>{ts 1='target="_blank" href="https://civicrm.org/extensions/home?body_value=wysiwyg&field_extension_cms_tid=127"'}Other WYSIWYG editors are available for download from the <a %1>CiviCRM Extension Directory</a>.{/ts}</li> + <li>{ts 1='target="_blank" href="https://civicrm.org/extensions?body_value=wysiwyg&field_extension_cms_tid=127"'}Other WYSIWYG editors are available for download from the <a %1>CiviCRM Extension Directory</a>.{/ts}</li> </ul> {/htxt} diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl index 79b845f9832b752e6bfb84f7157cecc5f07f9456..fc863329550ccf867f285ca8b9147ecfd995c706 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl @@ -80,7 +80,7 @@ <h3>{ts}reCAPTCHA Keys{/ts}</h3> <div class="description"> - {ts 1="https://www.google.com/recaptcha"}reCAPTCHA is a free service that helps prevent automated abuse of your site. To use reCAPTCHA on public-facing CiviCRM forms: sign up at <a href="%1" "target=_blank">Google's reCaptcha site</a>; enter the provided public and private reCAPTCHA keys here; then enable reCAPTCHA under Advanced Settings in any Profile.{/ts} + {ts 1='href="https://www.google.com/recaptcha" target="_blank"'}reCAPTCHA is a free service that helps prevent automated abuse of your site. To use reCAPTCHA on public-facing CiviCRM forms: sign up at <a %1>Google's reCaptcha site</a>; enter the provided public and private reCAPTCHA keys here; then enable reCAPTCHA under Advanced Settings in any Profile.{/ts} </div> <table class="form-layout"> <tr class="crm-miscellaneous-form-block-recaptchaPublicKey"> @@ -97,7 +97,7 @@ <span class="description"> {ts}You can specify the reCAPTCHA theme options as comma separated data.(eg: theme:'blackglass', lang : 'fr' ).{/ts} <br /> - {ts 1='href="https://developers.google.com/recaptcha/docs/display#config" target="_blank"'}Check the available options at <a %1>Customizing the Look and Feel of reCAPTCHA</a>.{/ts} + {ts 1='href="https://developers.google.com/recaptcha/docs/display#configuration" target="_blank"'}Check the available options at <a %1>Customizing the Look and Feel of reCAPTCHA</a>.{/ts} </span> </td> </tr> diff --git a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp index 10d45936cd820e2cc6a9744f4cdff47adc937bea..96722905bde575e1044ac411f078fe9376ade11d 100644 --- a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp +++ b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp @@ -17,7 +17,7 @@ <li>{docURL page="Payment Processors" text="Processor comparison and setup guide" resource="wiki"}</li> </ul> <p>{ts}If you're not sure which processor to use - we recommend reviewing terms, limitations and coverage areas on each processor's website before proceeding.{/ts}</p> -<p>{ts 1="https://civicrm.org/extensions/civicrm?cat=125"}If your desired processor is not in the list, check the <a href="%1">Extensions Directory</a> for more payment processors you can download. If you still can't find it, consider partnering with a developer and contributing a new extension.{/ts}</p> +<p>{ts 1="https://civicrm.org/extensions?tid_4[]=125"}If your desired processor is not in the list, check the <a href="%1">Extensions Directory</a> for more payment processors you can download. If you still can't find it, consider partnering with a developer and contributing a new extension.{/ts}</p> {/htxt} {htxt id='AuthNet-live-user-name'} diff --git a/civicrm/templates/CRM/Case/Form/CaseView.js b/civicrm/templates/CRM/Case/Form/CaseView.js index 06fdec4b000001e8675a9025bb97e9fc21765fc4..192a52b8670715c593a104230965e222aaa87ba5 100644 --- a/civicrm/templates/CRM/Case/Form/CaseView.js +++ b/civicrm/templates/CRM/Case/Form/CaseView.js @@ -73,29 +73,12 @@ var val = $(this).val(); $contactField.val('').change().prop('disabled', !val); if (val) { - var - pieces = val.split('_'), - rType = pieces[0], - target = pieces[2], // b or a - contact_type = CRM.vars.relationshipTypes[rType]['contact_type_' + target], - contact_sub_type = CRM.vars.relationshipTypes[rType]['contact_sub_type_' + target], - api = {params: {}}; - if (contact_type) { - api.params.contact_type = contact_type; - } - if (contact_sub_type) { - api.params.contact_sub_type = contact_sub_type; - } - $contactField - .data('api-params', api) - .data('user-filter', {}) - .attr('placeholder', CRM.vars.relationshipTypes[rType]['placeholder_' + target]) - .change(); + prepareRelationshipField(val, $contactField); } }) .val('') .change(); - $contactField.val('').crmEntityRef({create: true, api: {params: {contact_type: 'Individual'}}}); + $contactField.val('').crmEntityRef(); }, post: function(data) { var contactID = $('[name=add_role_contact_id]', this).val(), @@ -114,11 +97,7 @@ }, '#editCaseRoleDialog': { pre: function(data) { - var params = {create: true}; - if (data.contact_type) { - params.api = {params: {contact_type: data.contact_type}}; - } - $('[name=edit_role_contact_id]', this).val('').crmEntityRef(params); + prepareRelationshipField(data.rel_type, $('[name=edit_role_contact_id]', this)); }, post: function(data) { data.rel_contact = $('[name=edit_role_contact_id]', this).val(); @@ -164,6 +143,31 @@ }, detached = {}; + function prepareRelationshipField(relType, $contactField) { + var + pieces = relType.split('_'), + rType = pieces[0], + target = pieces[2], // b or a + relationshipType = CRM.vars.relationshipTypes[rType], + api = {params: {}}; + if (relationshipType['contact_type_' + target]) { + api.params.contact_type = relationshipType['contact_type_' + target]; + } + if (relationshipType['contact_sub_type_' + target]) { + api.params.contact_sub_type = relationshipType['contact_sub_type_' + target]; + } + if (relationshipType['group_' + target]) { + api.params.group = {IN: relationshipType['group_' + target]}; + } + $contactField + .data('create-links', !relationshipType['group_' + target]) + .data('api-params', api) + .data('user-filter', {}) + .attr('placeholder', relationshipType['placeholder_' + target]) + .change() + .crmEntityRef(); + } + function detachMiniForms() { detached = {}; $.each(miniForms, function(selector) { diff --git a/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl b/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl index 2d253764edb49daedbf68c9605098d13db47ab08..e8d780d8df7327941f433f80f0ae9d0a9ab633b2 100644 --- a/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl +++ b/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl @@ -14,10 +14,10 @@ <div id="shared-address-{$blockId}" class="form-layout-compressed"> {$form.address.$blockId.master_contact_id.label} {$form.address.$blockId.master_contact_id.html} - <div class="shared-address-update-employer" style="display: none;"> - {$form.address.$blockId.update_current_employer.html} - {$form.address.$blockId.update_current_employer.label} - {help id="id-sharedAddress-updateRelationships" file="CRM/Contact/Form/Contact"} + <div class="shared-address-add-relationship" style="display: none;"> + {$form.address.$blockId.add_relationship.html} + {$form.address.$blockId.add_relationship.label} + <span class="employer">{help id="id-sharedAddress-updateRelationships" file="CRM/Contact/Form/Contact"}</span> </div> <div class="shared-address-list"> {if !empty($sharedAddresses.$blockId.shared_address_display)} @@ -39,7 +39,10 @@ CRM.$(function($) { var blockNo = {/literal}{$blockId}{literal}, contactType = {/literal}{$contactType|@json_encode}{literal}, - $employerSection = $('#shared-address-' + blockNo + ' .shared-address-update-employer'), + $addRelationshipSection = $('#shared-address-' + blockNo + ' .shared-address-add-relationship'), + $employerSection = $('#shared-address-' + blockNo + ' .shared-address-add-relationship .employer'), + $employerLabel = $('#shared-address-' + blockNo + ' .shared-address-add-relationship label .addrel-employer'), + $householdLabel = $('#shared-address-' + blockNo + ' .shared-address-add-relationship label .addrel-household'), $contentArea = $('#shared-address-' + blockNo + ' .shared-address-list'), $masterElement = $('input[name="address[' + blockNo + '][master_id]"]'); @@ -68,12 +71,21 @@ if (!sharedContactId || isNaN(sharedContactId)) { $employerSection.hide(); + $addRelationshipSection.hide(); + $employerLabel.hide(); + $householdLabel.hide(); return; } var otherContactType = $el.select2('data').extra.contact_type; + $addRelationshipSection.toggle(contactType === 'Individual' && (otherContactType === 'Organization' || otherContactType === 'Household')); $employerSection.toggle(contactType === 'Individual' && otherContactType === 'Organization'); + // use the appropriate label + $employerLabel.toggle(contactType === 'Individual' && otherContactType === 'Organization'); + $householdLabel.toggle(contactType === 'Individual' && otherContactType === 'Household'); + + $.post(CRM.url('civicrm/ajax/inline'), { 'contact_id': sharedContactId, 'type': 'method', diff --git a/civicrm/templates/CRM/Contribute/Page/Widget.tpl b/civicrm/templates/CRM/Contribute/Page/Widget.tpl index 1074e2e1a71f9f0f59f67742f33f8ee07c09e718..125d07d34029f9be19ce44b4a1e82f2646598969 100644 --- a/civicrm/templates/CRM/Contribute/Page/Widget.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Widget.tpl @@ -211,4 +211,4 @@ function onReady( ) { } </script> {/literal} -<script type="text/javascript" src="{$config->userFrameworkResourceURL}/extern/widget.php?cpageId={$cpageId}&widgetId={$widget_id}&format=3"></script> +<script type="text/javascript" src="{$widgetExternUrl}"></script> diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Location.hlp b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.hlp new file mode 100644 index 0000000000000000000000000000000000000000..4bae73ef50f6836417bb33646a8bab92602565da --- /dev/null +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.hlp @@ -0,0 +1,24 @@ +{* + +--------------------------------------------------------------------+ + | 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 | + +--------------------------------------------------------------------+ +*} +{htxt id="id-is_show_location-title"} + {ts}Show Location{/ts} +{/htxt} +{htxt id="id-is_show_location"} + {ts}If this option is selected, the location will be shown in various places including: + <ul> + <li>Event information page</li> + <li>Event registration confirmation emails</li> + <li>HTML, RSS and ICALENDAR feeds of event information</li> + </ul> + Normally location information is made publicly available. By deselecting this box, the location is only available to event administrators.{/ts} + <br /> + {ts}Note that if 'Show Location' is not set a map will not be shown, regardless of the setting of 'Include Map to Event Location'.{/ts} +{/htxt} + diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl index 20733758f6f2e044967958dcff7fdb52ec1d1d37..72f5d7bdf82b3cf37049d1e9a448c2c0fb4ff524 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl @@ -40,6 +40,14 @@ <td id="locUsedMsg" colspan="3"> </td> </tr> + <tr id="is_show_location" class="crm-event-manage-location-form-block-is_show_location"> + <td class="labels"> + {$form.is_show_location.label} {help id="id-is_show_location"} + </td> + <td class="values"> + {$form.is_show_location.html} + </td> + </tr> </table> {/if} diff --git a/civicrm/templates/CRM/Event/Form/Participant.tpl b/civicrm/templates/CRM/Event/Form/Participant.tpl index 19edcb477454d9a21947c2b7ac5d573510ad2671..9cded07e8e165e6873bd54fddfb01ca58c5f1629 100644 --- a/civicrm/templates/CRM/Event/Form/Participant.tpl +++ b/civicrm/templates/CRM/Event/Form/Participant.tpl @@ -372,9 +372,7 @@ {if $urlPathVar} dataUrl += '&' + '{$urlPathVar}'; {/if} - {if $isBackOffice} - dataUrl += '&' + 'is_backoffice=1'; - {/if} + dataUrl += '&' + 'is_backoffice=1'; {literal} var eventId = $('[name=event_id], #event_id', $form).val(); diff --git a/civicrm/templates/CRM/Export/Form/Map.tpl b/civicrm/templates/CRM/Export/Form/Map.tpl index f3964cfb22aaf51a5018ef9b7dcbacdd935f198b..dda47d32d2e4f2cb612b03730848cfc67c0bc194 100644 --- a/civicrm/templates/CRM/Export/Form/Map.tpl +++ b/civicrm/templates/CRM/Export/Form/Map.tpl @@ -8,14 +8,11 @@ +--------------------------------------------------------------------+ *} <div class="help"> -<p>{ts}Select the fields to be exported using the table below. For each field, first select the contact type that the field belongs to (e.g. select <strong>Individuals</strong> if you are exporting <strong>Last Name</strong>). Then select the actual field to be exported from the drop-down menu which will appear next to the contact type. Your export can include multiple types of contact records, and non-applicable fields will be empty (e.g. <strong>Last Name</strong> will not be populated for an Organization record).{/ts}</p> -<p>{ts}Click <strong>Select more fields...</strong> if you want to export more fields than are initially displayed in the table.{/ts}</p> +<p>{ts}Select the fields to be exported using the table below. You'll see a live preview of the first few records for each field.{/ts}</p> -{if $savedMapping} -<p>{ts}Click 'Load Saved Field Mapping' to retrieve an export setup that you have previously saved.{/ts}</p> -{/if} +<p>{ts}Your export can include multiple types of contacts, and non-applicable fields will be empty (e.g. <strong>Last Name</strong> will not be populated for an Organization record).{/ts}</p> -<p>{ts}If you want to use the same export setup in the future, check 'Save this field mapping' at the bottom of the page before continuing. You will then be able to reload this setup with a single click.{/ts}</p> +<p>{ts}If you want to use the same export setup in the future, check 'Save Fields' at the bottom of the page before continuing. You will then be able to reload this setup with a single click.{/ts}</p> </div> <div class="crm-block crm-form-block crm-export-map-form-block"> @@ -23,11 +20,12 @@ {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} {include file="CRM/common/WizardHeader.tpl"} -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> -{* Table for mapping data to CRM fields *} -{include file="CRM/Export/Form/table.tpl"} + <div ng-app="exportui"> + <div class="crm-export-field-selector-outer" ng-controller="ExportUiCtrl" ng-include="'~/exportui/export.html'"></div> + </div> -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> -{$initHideBoxes} + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> + {$initHideBoxes} </div> diff --git a/civicrm/templates/CRM/Export/Form/table.tpl b/civicrm/templates/CRM/Export/Form/table.tpl deleted file mode 100644 index dfddabfcba25bb9525bac395b962638d356c8549..0000000000000000000000000000000000000000 --- a/civicrm/templates/CRM/Export/Form/table.tpl +++ /dev/null @@ -1,76 +0,0 @@ -{* - +--------------------------------------------------------------------+ - | 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 | - +--------------------------------------------------------------------+ -*} -{* Export Wizard - Data Mapping table used by MapFields.tpl and Preview.tpl *} - <div id="map-field"> - {strip} - <table> - {if $loadedMapping} - <tr class="columnheader-dark"><th colspan="4">{ts 1=$savedName}Using Field Mapping: %1{/ts}</td></tr> - {/if} - <tr class="columnheader"> - <th>{ts}Fields to Include in Export File{/ts}</th> - </tr> - {*section name=cols loop=$columnCount*} - {section name=cols loop=$columnCount.1} - {assign var="i" value=$smarty.section.cols.index} - <tr> - <td class="form-item even-row"> - {$form.mapper.1[$i].html} - </td> - </tr> - {/section} - - <tr> - <td class="form-item even-row underline-effect"> - {$form.addMore.1.html} - </td> - </tr> - </table> - {/strip} - - - <div> - {if $loadedMapping} - <span>{$form.updateMapping.html}{$form.updateMapping.label} </span> - {/if} - <span>{$form.saveMapping.html}{$form.saveMapping.label}</span> - <div id="saveDetails" class="form-item"> - <table class="form-layout-compressed"> - <tr><td class="label">{$form.saveMappingName.label}</td><td>{$form.saveMappingName.html}</td></tr> - <tr><td class="label">{$form.saveMappingDesc.label}</td><td>{$form.saveMappingDesc.html}</td></tr> - </table> - </div> - - - <script type="text/javascript"> - {if $mappingDetailsError } - cj('#saveDetails').show(); - {else} - cj('#saveDetails').hide(); - {/if} - - {literal} - function showSaveDetails(chkbox) { - if (chkbox.checked) { - document.getElementById("saveDetails").style.display = "block"; - document.getElementById("saveMappingName").disabled = false; - document.getElementById("saveMappingDesc").disabled = false; - } else { - document.getElementById("saveDetails").style.display = "none"; - document.getElementById("saveMappingName").disabled = true; - document.getElementById("saveMappingDesc").disabled = true; - } - } - {/literal} - cj('Select[id^="mapper[1]"][id$="[1]"]').addClass('huge'); - </script> - </div> - - </div> diff --git a/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp b/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp index 29c0d28a7cbc972c81c7819ddf54f9b73b0b172e..81ce831f2a958e9571d704c6be636e2acaf2c293 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp +++ b/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp @@ -11,7 +11,7 @@ {ts}Financial Account Owner{/ts} {/htxt} {htxt id="id-financial-owner"} -<p>{ts}Normally the owner of a financial account is the organization implementing CiviCRM so there is no need to change this. Some organizations that maintain accounts for groups, chapters, regions, constiuency associations or other parts of the main CiviCRM organization may need to change the owner to one of these sub-entities or sibling entities.{/ts}</p> +<p>{ts}Normally the owner of a financial account is the organization implementing CiviCRM so there is no need to change this. Some organizations that maintain accounts for groups, chapters, regions, constituency associations or other parts of the main CiviCRM organization may need to change the owner to one of these sub-entities or sibling entities.{/ts}</p> {/htxt} {htxt id="id-account-type-code-title"} diff --git a/civicrm/templates/CRM/Friend/Form/Friend.tpl b/civicrm/templates/CRM/Friend/Form/Friend.tpl index 549f2537dbae28799e817526c4d7ddb530e0c399..8d79bb433b3d51c624a82d16f78a4465bd1204ca 100644 --- a/civicrm/templates/CRM/Friend/Form/Friend.tpl +++ b/civicrm/templates/CRM/Friend/Form/Friend.tpl @@ -22,7 +22,7 @@ {assign var=pageType value="Pledge Information page"} {ts}Tell a Friend gives registering pledge signers an easy way to spread the word about this pledge. The registration thank-you page will include a link to a form where they can enter their friends' email addresses, along with a personalized message. CiviCRM will record these solicitation activities, and will add the friends to your database.{/ts} {/if} - {ts}If sharing through social media is enabled, links allowing people to share with their social network will also be included on the Tell a Friend form (e.g. Facebook "Like", Google+, and Twitter). You can turn social media sharing on and off from the Settings tab.{/ts} + {ts}If sharing through social media is enabled, links allowing people to share with their social network will also be included on the Tell a Friend form (e.g. Facebook "Like" and Twitter). You can turn social media sharing on and off from the Settings tab.{/ts} </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> diff --git a/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl b/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl index 2bec30d8d4805a427ed54c04b17176585db211c8..ac2669f54b75788886c938035de45162307b3507 100644 --- a/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl @@ -32,7 +32,7 @@ {assign var=cbName value=$row.checkbox} <td class="crm-mailing-subscribe-form-block-{$cbName}">{$form.$cbName.html}</td> <td class="crm-mailing-subscribe-form-block-title"><label for="{$cbName}"><strong>{$row.title}</strong></label></td> - <td class="crm-mailing-subscribe-form-block-description"> {$row.description} </td> + <td class="crm-mailing-subscribe-form-block-description">{$row.description}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Member/Form/Membership.tpl b/civicrm/templates/CRM/Member/Form/Membership.tpl index 8dd6f42ab5cfee60def703e9fa7e9b02100ada00..58fd9337a68966a7d6a71a322bf7f334e2b50b2c 100644 --- a/civicrm/templates/CRM/Member/Form/Membership.tpl +++ b/civicrm/templates/CRM/Member/Form/Membership.tpl @@ -11,7 +11,7 @@ {if $cancelAutoRenew} <div class="messages status no-popup"> <div class="icon inform-icon"></div> - <p>{ts 1=$cancelAutoRenew}This membership is set to renew automatically {if $endDate}on {$endDate|crmDate}{/if}. You will need to cancel the auto-renew option if you want to modify the Membership Type or Membership Status. <a href="%1">Click here</a> if you want to cancel the automatic renewal option.{/ts}</p> + <p>{ts 1=$cancelAutoRenew}This membership is set to renew automatically {if $endDate}on {$endDate|crmDate}{/if}. You will need to cancel the auto-renew option if you want to modify the Membership Type or Membership Status: <a href="%1">Cancel auto-renew</a>{/ts}</p> </div> {/if} <div class="spacer"></div> @@ -90,7 +90,7 @@ <tr id="maxRelated" class="crm-membership-form-block-max_related"> <td class="label">{$form.max_related.label}</td> <td>{$form.max_related.html}<br /> - <span class="description">{ts}Maximum number of related memberships (leave blank for unlimited).{/ts}</span> + <span class="description">{ts}Maximum number of related memberships (leave blank for unlimited).{/ts} <span id="eligibleRelated"></span></span> </td> </tr> {if $action eq 1} @@ -163,15 +163,25 @@ {include file="CRM/Member/Form/MembershipCommon.tpl"} {if $emailExists and $isEmailEnabledForSite} <tr id="send-receipt" class="crm-membership-form-block-send_receipt"> - <td class="label">{$form.send_receipt.label}</td><td>{$form.send_receipt.html}<br /> - <span class="description">{ts 1=$emailExists}Automatically email a membership confirmation and receipt to %1? OR if the payment is from a different contact, this email will only go to them.{/ts}</span></td> - <span class="auto-renew-text">{ts}For auto-renewing memberships the emails are sent when each payment is received{/ts}</span> + <td class="label">{$form.send_receipt.label}</td> + <td> + {$form.send_receipt.html}<br /> + <span class="description"> + {ts 1=$emailExists}Automatically email a membership confirmation and receipt to %1? OR if the payment is from a different contact, this email will only go to them.{/ts} + <span class="auto-renew-text">{ts}For auto-renewing memberships the emails are sent when each payment is received{/ts}</span> + </span> + </td> </tr> - {elseif $context eq 'standalone' and $isEmailEnabledForSite} + {elseif $context eq 'standalone' and $isEmailEnabledForSite} <tr id="email-receipt" style="display:none;"> - <td class="label">{$form.send_receipt.label}</td><td>{$form.send_receipt.html}<br /> - <span class="description">{ts}Automatically email a membership confirmation and receipt to {/ts}<span id="email-address"></span>? {ts}OR if the payment is from a different contact, this email will only go to them.{/ts}</span></td> - <span class="auto-renew-text">{ts}For auto-renewing memberships the emails are sent when each payment is received{/ts}</span> + <td class="label">{$form.send_receipt.label}</td> + <td> + {$form.send_receipt.html}<br /> + <span class="description"> + {ts}Automatically email a membership confirmation and receipt to {/ts}<span id="email-address"></span>? {ts}OR if the payment is from a different contact, this email will only go to them.{/ts} + <span class="auto-renew-text">{ts}For auto-renewing memberships the emails are sent when each payment is received{/ts}</span> + </span> + </td> </tr> {/if} <tr id="fromEmail" style="display: none" class="crm-contactEmail-form-block-fromEmailAddress crm-email-element"> @@ -654,7 +664,7 @@ relatable = '{/literal}{ts escape='js' 1='%1'}%1 contacts are currently eligible to inherit this relationship.{/ts}{literal}'; relatable = ts(relatable, {1: result}); } - cj('#max_related').siblings('.description').append(' ' + relatable); + cj('#eligibleRelated').text(relatable); } }); } diff --git a/civicrm/templates/CRM/Member/Form/MembershipView.tpl b/civicrm/templates/CRM/Member/Form/MembershipView.tpl index 0fcbe4cc331480ba8c189aa3941ac6dbc7f55798..546c295236f6540c4e13bded6da949e592495da8 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipView.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipView.tpl @@ -44,7 +44,7 @@ {if $has_related} <tr><td class="label">{ts}Max related{/ts}</td><td>{$max_related}</td></tr> {/if} - <tr><td class="label">{ts}Status{/ts}</td><td>{$status}</td></tr> + <tr><td class="label">{ts}Status{/ts}</td><td>{$status} {if $member_is_override}({ts}Overridden{/ts}){/if}</td></tr> <tr><td class="label">{ts}Source{/ts}</td><td>{$source}</td></tr> {if $campaign}<tr><td class="label">{ts}Campaign{/ts}</td><td>{$campaign}</td></tr>{/if} <tr><td class="label">{ts}Member Since{/ts}</td><td>{$join_date|crmDate}</td></tr> diff --git a/civicrm/templates/CRM/common/SocialNetwork.tpl b/civicrm/templates/CRM/common/SocialNetwork.tpl index fb2b2d3c21fccfd4dc0898d17b7922febbeaf779..a5b786b173f128b496590d6bbd94861d201345d5 100644 --- a/civicrm/templates/CRM/common/SocialNetwork.tpl +++ b/civicrm/templates/CRM/common/SocialNetwork.tpl @@ -26,7 +26,6 @@ <img title="Facebook Like Button" src="{$config->userFrameworkResourceURL|replace:'https://':'http://'}/i/fblike.png" alt="Facebook Button" /> </a> {else} - <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> {*use advanced buttons for pages*} <div class="label"> <iframe allowtransparency="true" frameborder="0" scrolling="no" @@ -34,9 +33,6 @@ style="width:100px; height:20px;"> </iframe> </div> - <div class="label"> - <g:plusone href={$url}></g:plusone> - </div> <div class="label" style="width:300px;"> <iframe src="https://www.facebook.com/plugins/like.php?app_id=240719639306341&href={$url|escape:'url'}&send=false&layout=standard&show_faces=false&action=like&colorscheme=light" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:30px;" allowTransparency="true"> </iframe> diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index 4d2683f30074461794aead371da304459b02f919..65bbd8f920d3b400b2c029f45d34de23e8bbf83c 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -505,6 +505,9 @@ if (!defined('CIVICRM_CLEANURL')) { elseif ( function_exists('config_get') && config_get('system.core', 'clean_url') != 0) { define('CIVICRM_CLEANURL', 1 ); } + elseif( function_exists('get_option') && get_option('permalink_structure') != '' ) { + define('CIVICRM_CLEANURL', 1 ); + } else { define('CIVICRM_CLEANURL', 0); } diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index 38001a762f99f6b84e071790b06a555f5139d930..74777751aec8fca0578b7af6568e1fe2926f22af 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -13,6 +13,7 @@ // Config settings CRM.config.userFramework = {$config->userFramework|@json_encode}; CRM.config.resourceBase = {$config->userFrameworkResourceURL|@json_encode}; + CRM.config.packagesBase = {capture assign=packagesBase}{crmResURL expr='[civicrm.packages]/.'}{/capture}{$packagesBase|@json_encode}; CRM.config.lcMessages = {$config->lcMessages|@json_encode}; CRM.config.locale = {$locale|@json_encode}; CRM.config.cid = {$cid|@json_encode}; diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index c49a67619c0d8159382b22bfe05743f955256ea0..708749ae2708f7c9eedd3492740bdd1fd845ee86 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484::getLoader(); +return ComposerAutoloaderInite6f45a43176252aa6a8458e979f01dd8::getLoader(); diff --git a/civicrm/vendor/civicrm/civicrm-setup/README.md b/civicrm/vendor/civicrm/civicrm-setup/README.md index 936926015e9a7e55311ddc4a32ee85f2338ae4ef..a1a31450cc3a221cf8c3f214415f3d909a2a1977 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/README.md +++ b/civicrm/vendor/civicrm/civicrm-setup/README.md @@ -27,7 +27,7 @@ Key features: * The library can be used by other projects -- such as `cv`, `civicrm-drupal`, `civicrm-wordpress` -- to provide an installation process. * It is a *leap*. It can coexist with the old installer, and it lives in a separate project/repo which can be deployed optionally. - * To enable it, add the codebase to your civicrm source tree. (This can be done manually - or as part of a build process.) + * _Example_: The `civicrm-wordpress` integration is phasing-in support for the new installer. By default, it uses the old installer. If you create a file `civicrm/.use-civicrm-setup`, then it will use the new installer. * It has minimal external dependencies. (The codebase for CiviCRM and its dependencies must be available -- but nothing else is needed.) ## Documentation diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/blocks/header.tpl.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/blocks/header.tpl.php index fe27df7dcb08c4954270e463e690c2bbf5269bc0..65bf8f162589d95643fdb10ed7731a02dc87b991 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/blocks/header.tpl.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/blocks/header.tpl.php @@ -1,9 +1,13 @@ <?php if (!defined('CIVI_SETUP')): exit("Installation plugins must only be loaded by the installer.\n"); endif; ?> -<div class="civicrm-logo"><strong><?php echo ts('Version %1', array(1 => "{$civicrm_version} {$model->cms}")); ?></strong><br/> - <span><img src=<?php echo $installURLPath . "block_small.png"?> /></span> - </div> - -<h1><?php echo ts("CiviCRM Installer"); ?></h1> +<div class="civicrm-setup-header"> + <div class="title"> + <h1><?php echo ts("Thanks for choosing CiviCRM. You're nearly there!"); ?><hr></h1> + </div> + <div class="civicrm-logo"><strong><?php echo ts('Version %1', array(1 => "{$civicrm_version} {$model->cms}")); ?></strong> + <span><img src=<?php echo $installURLPath . "updated-logo.jpg"?> /></span> + </div> +</div> +<h2><?php echo ts("CiviCRM Installer"); ?></h2> <noscript> <p class="error"><?php echo ts("Error: Javascipt appears to be disabled. The CiviCRM web-based installer requires Javascript.");?></p> diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CheckDbWellFormed.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CheckDbWellFormed.civi-setup.php index 46e00dededc96001a3a41ec4d91b5ca63a529fe0..d48925c3de924d84e839e9bf02bc1550a5b037f2 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CheckDbWellFormed.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CheckDbWellFormed.civi-setup.php @@ -32,7 +32,10 @@ if (!defined('CIVI_SETUP')) { } foreach ($db as $k => $v) { - if (!is_scalar($v)) { + if ($k === 'password' && empty($v)) { + $e->addWarning('database', "$dbField.$k", "The property \"$dbField.$k\" is blank. This may be correct in some controlled environments; it could also be a mistake or a symptom of an insecure configuration."); + } + elseif (!is_scalar($v)) { $e->addError('database', "$dbField.$k", "The property \"$dbField.$k\" is not well-formed."); $errors++; } diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CoreRequirementsAdapter.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CoreRequirementsAdapter.civi-setup.php index 5e915ffefd1db8fa901e068171221c9c144219b2..f0d15507c3fe5585fcd12aa16d62f7fdd53b2f03 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CoreRequirementsAdapter.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/checkRequirements/CoreRequirementsAdapter.civi-setup.php @@ -18,7 +18,7 @@ if (!defined('CIVI_SETUP')) { $r = new \Civi\Install\Requirements(); \Civi\Setup::log()->info(sprintf('[%s] Run Requirements::checkSystem()', basename(__FILE__))); - $systemMsgs = $r->checkSystem(array(/* we do this elsewhere */)); + $systemMsgs = $r->checkSystem(array(/* no $file_paths to pass - we check those elsewhere */)); _corereqadapter_addMessages($e, 'system', $systemMsgs); \Civi\Setup::log()->info(sprintf('[%s] Run Requirements::checkDatabase()', basename(__FILE__))); diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/common/LogEvents.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/common/LogEvents.civi-setup.php index ad2c3931170a0ba4b2c9ea9d10299e00a8d0b36e..fe23cd6b648fa224ed3cfe845115c3c7896cc31c 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/common/LogEvents.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/common/LogEvents.civi-setup.php @@ -8,7 +8,7 @@ if (!defined('CIVI_SETUP')) { exit("Installation plugins must only be loaded by the installer.\n"); } -use \Civi\Setup; +use Civi\Setup; $setup = Setup::instance(); diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Backdrop.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Backdrop.civi-setup.php index df3a74bdd8354d8f358efff3d765bbfead0467bb..57e867f90c366b5816a3a5bfc67dac8182b23109 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Backdrop.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Backdrop.civi-setup.php @@ -33,7 +33,7 @@ if (!defined('CIVI_SETUP')) { $cmsPath = $object->cmsRootPath(); // Compute settingsPath. - $model->settingsPath = $cmsPath . DIRECTORY_SEPARATOR . 'civicrm.settings.php'; + $model->settingsPath = $cmsPath . DIRECTORY_SEPARATOR . 'civicrm.settings.php'; $model->templateCompilePath = 'FIXME'; diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal.civi-setup.php index 8f51f99032299c7c03c448bd768c84550f44454a..75e7c5a3d4c87756ce88560e34dec84eb9c5860a 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal.civi-setup.php @@ -12,7 +12,7 @@ if (!defined('CIVI_SETUP')) { \Civi\Setup::dispatcher() ->addListener('civi.setup.checkAuthorized', function (\Civi\Setup\Event\CheckAuthorizedEvent $e) { $model = $e->getModel(); - if ($model->cms !== 'Drupal') { + if ($model->cms !== 'Drupal' || !function_exists('user_access')) { return; } @@ -31,7 +31,7 @@ if (!defined('CIVI_SETUP')) { // Compute settingsPath. $drupalSystem = new CRM_Utils_System_Drupal(); $cmsPath = $drupalSystem->cmsRootPath(); - $siteDir = _drupal_civisetup_getSiteDir($cmsPath, $_SERVER['SCRIPT_FILENAME']); + $siteDir = \Civi\Setup\DrupalUtil::getDrupalSiteDir($cmsPath); $model->settingsPath = implode(DIRECTORY_SEPARATOR, [$cmsPath, 'sites', $siteDir, 'civicrm.settings.php']); @@ -89,46 +89,3 @@ function _drupal_civisetup_getPrivateFiles() { return $filePrivatePath; } - -/** - * @param $cmsPath - * @param $str - * - * @return string - */ -function _drupal_civisetup_getSiteDir($cmsPath, $str) { - static $siteDir = ''; - - if ($siteDir) { - return $siteDir; - } - - $sites = CIVICRM_DIRECTORY_SEPARATOR . 'sites' . CIVICRM_DIRECTORY_SEPARATOR; - $modules = CIVICRM_DIRECTORY_SEPARATOR . 'modules' . CIVICRM_DIRECTORY_SEPARATOR; - preg_match("/" . preg_quote($sites, CIVICRM_DIRECTORY_SEPARATOR) . - "([\-a-zA-Z0-9_.]+)" . - preg_quote($modules, CIVICRM_DIRECTORY_SEPARATOR) . "/", - $_SERVER['SCRIPT_FILENAME'], $matches - ); - $siteDir = isset($matches[1]) ? $matches[1] : 'default'; - - if (strtolower($siteDir) == 'all') { - // For this case - use drupal's way of finding out multi-site directory - $uri = explode(CIVICRM_DIRECTORY_SEPARATOR, $_SERVER['SCRIPT_FILENAME']); - $server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.'))))); - for ($i = count($uri) - 1; $i > 0; $i--) { - for ($j = count($server); $j > 0; $j--) { - $dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i)); - if (file_exists($cmsPath . CIVICRM_DIRECTORY_SEPARATOR . - 'sites' . CIVICRM_DIRECTORY_SEPARATOR . $dir - )) { - $siteDir = $dir; - return $siteDir; - } - } - } - $siteDir = 'default'; - } - - return $siteDir; -} diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal8.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal8.civi-setup.php new file mode 100644 index 0000000000000000000000000000000000000000..a6f296d8060b88570f16533d6517bedf86c3f9a5 --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/init/Drupal8.civi-setup.php @@ -0,0 +1,92 @@ +<?php +/** + * @file + * + * Determine default settings for Drupal 8. + */ + +if (!defined('CIVI_SETUP')) { + exit("Installation plugins must only be loaded by the installer.\n"); +} + +\Civi\Setup::dispatcher() + ->addListener('civi.setup.checkAuthorized', function (\Civi\Setup\Event\CheckAuthorizedEvent $e) { + $model = $e->getModel(); + if ($model->cms !== 'Drupal8' || !is_callable(['Drupal', 'currentUser'])) { + return; + } + + \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkAuthorized')); + $e->setAuthorized(\Drupal::currentUser()->hasPermission('administer modules')); + }); + +\Civi\Setup::dispatcher() + ->addListener('civi.setup.init', function (\Civi\Setup\Event\InitEvent $e) { + $model = $e->getModel(); + if ($model->cms !== 'Drupal8' || !is_callable(['Drupal', 'currentUser'])) { + return; + } + \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'init')); + + $cmsPath = \Drupal::root(); + + // Compute settingsPath. + $siteDir = \Civi\Setup\DrupalUtil::getDrupalSiteDir($cmsPath); + $model->settingsPath = implode(DIRECTORY_SEPARATOR, [$cmsPath, 'sites', $siteDir, 'civicrm.settings.php']); + + if (($loadGenerated = \Drupal\Core\Site\Settings::get('civicrm_load_generated', NULL)) !== NULL) { + $model->loadGenerated = $loadGenerated; + } + + // Compute DSN. + $connectionOptions = \Drupal::database()->getConnectionOptions(); + $model->db = $model->cmsDb = array( + 'server' => \Civi\Setup\DbUtil::encodeHostPort($connectionOptions['host'], $connectionOptions['port'] ?: NULL), + 'username' => $connectionOptions['username'], + 'password' => $connectionOptions['password'], + 'database' => $connectionOptions['database'], + ); + + // Compute cmsBaseUrl. + if (empty($model->cmsBaseUrl)) { + global $base_url, $base_path; + $model->cmsBaseUrl = $base_url . $base_path; + } + + // Compute general paths + $model->paths['civicrm.files']['url'] = implode('/', [$model->cmsBaseUrl, \Drupal\Core\StreamWrapper\PublicStream::basePath(), 'civicrm']); + $model->paths['civicrm.files']['path'] = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPublicFiles(), 'civicrm']); + + // Compute templateCompileDir. + $model->templateCompilePath = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPrivateFiles(), 'civicrm', 'templates_c']); + + // Compute default locale. + $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId(); + $model->lang = \Civi\Setup\LocaleUtil::pickClosest($langcode, $model->getField('lang', 'options')); + }); + +function _drupal8_civisetup_getPublicFiles() { + $filePublicPath = \Drupal\Core\StreamWrapper\PublicStream::basePath(); + + if (!$filePublicPath) { + throw new \Civi\Setup\Exception\InitException("Failed to identify public files path"); + } + elseif (!CRM_Utils_File::isAbsolute($filePublicPath)) { + $filePublicPath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePublicPath; + } + + return $filePublicPath; +} + +function _drupal8_civisetup_getPrivateFiles() { + $filePrivatePath = \Drupal\Core\StreamWrapper\PrivateStream::basePath(); + + if (!$filePrivatePath) { + $filePrivatePath = _drupal8_civisetup_getPublicFiles(); + } + elseif ($filePrivatePath && !CRM_Utils_File::isAbsolute($filePrivatePath)) { + $filePrivatePath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePrivatePath; + } + + return $filePrivatePath; +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/BootstrapCivi.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/BootstrapCivi.civi-setup.php index f7c8f08a16a9f701791dd6368364024fb74de691..b2c0a17446b9663682e07c5bad5f3e87df89dda7 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/BootstrapCivi.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/BootstrapCivi.civi-setup.php @@ -17,7 +17,7 @@ if (!defined('CIVI_SETUP')) { define('CIVICRM_SETTINGS_PATH', $e->getModel()->settingsPath); } - if (CIVICRM_SETTINGS_PATH !== $e->getModel()->settingsPath) { + if (realpath(CIVICRM_SETTINGS_PATH) !== realpath($e->getModel()->settingsPath)) { throw new \RuntimeException(sprintf("Cannot boot: The civicrm.settings.php path appears inconsistent (%s vs %s)", CIVICRM_SETTINGS_PATH, $e->getModel()->settingsPath)); } diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/FlushDrupal8.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/FlushDrupal8.civi-setup.php new file mode 100644 index 0000000000000000000000000000000000000000..05836729da51ca12699bc660f5189ecf4ee86bf4 --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/FlushDrupal8.civi-setup.php @@ -0,0 +1,56 @@ +<?php +/** + * @file + * + * Finalize any extra CMS changes in Drupal. + */ + +if (!defined('CIVI_SETUP')) { + exit("Installation plugins must only be loaded by the installer.\n"); +} + +\Civi\Setup::dispatcher() + ->addListener('civi.setup.installDatabase', function (\Civi\Setup\Event\InstallDatabaseEvent $e) { + if ($e->getModel()->cms !== 'Drupal8') { + return; + } + \Civi\Setup::log()->info(sprintf('[%s] Flush CMS metadata', basename(__FILE__))); + + system_rebuild_module_data(); + \Drupal::service('module_installer')->install(['civicrm', 'civicrmtheme']); + drupal_flush_all_caches(); + civicrm_install_set_drupal8_perms(); + + }, \Civi\Setup::PRIORITY_LATE - 50); + +function civicrm_install_set_drupal8_perms() { + $perms = array( + 'access all custom data', + 'access uploaded files', + 'make online contributions', + 'profile create', + 'profile edit', + 'profile view', + 'register for events', + 'view event info', + 'view event participants', + 'access CiviMail subscribe/unsubscribe pages', + ); + + // Adding a permission that has not yet been assigned to a module by + // a hook_permission implementation results in a database error. + // CRM-9042 + + /** @var \Drupal\user\PermissionHandlerInterface $permissionHandler */ + $permissionHandler = \Drupal::service('user.permissions'); + + $allPerms = array_keys($permissionHandler->getPermissions()); + foreach (array_diff($perms, $allPerms) as $perm) { + \Drupal::logger('my_module')->error('Cannot grant the %perm permission because it does not yet exist.', [ + '%perm' => $perm, + ]); + } + $perms = array_intersect($perms, $allPerms); + user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, $perms); + user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, $perms); +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/InstallSchema.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/InstallSchema.civi-setup.php index 79c798c29e667d5b37beb8b8137539ea379c9243..fec273ce0735c67586fb724a40dee9ee5505b648 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/InstallSchema.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/installDatabase/InstallSchema.civi-setup.php @@ -9,8 +9,36 @@ if (!defined('CIVI_SETUP')) { exit("Installation plugins must only be loaded by the installer.\n"); } -\Civi\Setup::dispatcher() - ->addListener('civi.setup.checkRequirements', function (\Civi\Setup\Event\CheckRequirementsEvent $e) { +class InstallSchemaPlugin implements \Symfony\Component\EventDispatcher\EventSubscriberInterface { + + public static function getSubscribedEvents() { + return [ + 'civi.setup.checkRequirements' => [ + ['checkXmlFiles', 0], + ['checkSqlFiles', 0], + ], + 'civi.setup.installDatabase' => [ + ['installDatabase', 0], + ], + ]; + } + + public function checkXmlFiles(\Civi\Setup\Event\CheckRequirementsEvent $e) { + $m = $e->getModel(); + $files = array( + 'xmlMissing' => implode(DIRECTORY_SEPARATOR, [$m->srcPath, 'xml']), + 'xmlSchemaMissing' => implode(DIRECTORY_SEPARATOR, [$m->srcPath, 'xml', 'schema', 'Schema.xml']), + 'xmlVersionMissing' => implode(DIRECTORY_SEPARATOR, [$m->srcPath, 'xml', 'version.xml']), + ); + + foreach ($files as $key => $file) { + if (!file_exists($file)) { + $e->addError('system', $key, "Schema file is missing: \"$file\""); + } + } + } + + public function checkSqlFiles(\Civi\Setup\Event\CheckRequirementsEvent $e) { \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkRequirements')); $seedLanguage = $e->getModel()->lang; $sqlPath = $e->getModel()->srcPath . DIRECTORY_SEPARATOR . 'sql'; @@ -25,44 +53,63 @@ if (!defined('CIVI_SETUP')) { return; } - $files = array( - $sqlPath . DIRECTORY_SEPARATOR . "civicrm_data.{$seedLanguage}.mysql", - $sqlPath . DIRECTORY_SEPARATOR . "civicrm_acl.{$seedLanguage}.mysql", - ); - - foreach ($files as $file) { - if (!file_exists($file)) { - $e->addError('system', 'langMissing', "Language schema file is missing: \"$file\""); - return; - } + if (!file_exists($e->getModel()->settingsPath)) { + $e->addError('system', 'settingsPath', sprintf('The CiviCRM setting file is missing.')); } $e->addInfo('system', 'lang', "Language $seedLanguage is allowed."); - }); + } -\Civi\Setup::dispatcher() - ->addListener('civi.setup.installDatabase', function (\Civi\Setup\Event\InstallDatabaseEvent $e) { + public function installDatabase(\Civi\Setup\Event\InstallDatabaseEvent $e) { \Civi\Setup::log()->info(sprintf('[%s] Install database schema', basename(__FILE__))); $model = $e->getModel(); $sqlPath = $model->srcPath . DIRECTORY_SEPARATOR . 'sql'; + $spec = $this->loadSpecification($model->srcPath); - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . 'civicrm.mysql'); + $conn = \Civi\Setup\DbUtil::connect($model->db); + \CRM_Core_I18n::$SQL_ESCAPER = function($text) use ($conn) { + return $conn->escape_string($text); + }; + \Civi\Setup::log()->info(sprintf('[%s] Load basic tables', basename(__FILE__))); + \Civi\Setup\DbUtil::sourceSQL($model->db, \Civi\Setup\SchemaGenerator::generateCreateSql($model->srcPath, $spec->database, $spec->tables)); + + $seedLanguage = $model->lang; if (!empty($model->loadGenerated)) { - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . 'civicrm_generated.mysql', TRUE); + \Civi\Setup::log()->info(sprintf('[%s] Load sample data', basename(__FILE__))); + // At time of writing, `generateSampleData()` is not yet a full replacement for `civicrm_generated.mysql`. + \Civi\Setup\DbUtil::sourceSQL($model->db, file_get_contents($sqlPath . DIRECTORY_SEPARATOR . 'civicrm_generated.mysql')); + // \Civi\Setup\DbUtil::sourceSQL($model->db, \Civi\Setup\SchemaGenerator::generateSampleData($model->srcPath)); } - else { - $seedLanguage = $model->lang; - if ($seedLanguage && $seedLanguage !== 'en_US') { - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . "civicrm_data.{$seedLanguage}.mysql"); - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . "civicrm_acl.{$seedLanguage}.mysql"); - } - else { - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . 'civicrm_data.mysql'); - \Civi\Setup\DbUtil::sourceSQL($model->db, $sqlPath . DIRECTORY_SEPARATOR . 'civicrm_acl.mysql'); - } + elseif ($seedLanguage) { + global $tsLocale; + $tsLocale = $seedLanguage; + \Civi\Setup::log()->info(sprintf('[%s] Load basic data', basename(__FILE__))); + \Civi\Setup\DbUtil::sourceSQL($model->db, \Civi\Setup\SchemaGenerator::generateBasicData($model->srcPath)); } - }); + require_once $model->settingsPath; + \Civi\Core\Container::boot(TRUE); + + \CRM_Core_I18n::$SQL_ESCAPER = NULL; + } + + /** + * @param string $srcPath + * @return \CRM_Core_CodeGen_Specification + */ + protected function loadSpecification($srcPath) { + $schemaFile = implode(DIRECTORY_SEPARATOR, [$srcPath, 'xml', 'schema', 'Schema.xml']); + $versionFile = implode(DIRECTORY_SEPARATOR, [$srcPath, 'xml', 'version.xml']); + $xmlBuilt = \CRM_Core_CodeGen_Util_Xml::parse($versionFile); + $buildVersion = preg_replace('/^(\d{1,2}\.\d{1,2})\.(\d{1,2}|\w{4,7})$/i', '$1', $xmlBuilt->version_no); + $specification = new \CRM_Core_CodeGen_Specification(); + $specification->parse($schemaFile, $buildVersion, FALSE); + return $specification; + } + +} + +\Civi\Setup::dispatcher()->addSubscriber(new InstallSchemaPlugin()); diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/GenerateSiteKey.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/GenerateSiteKey.civi-setup.php index c4c099844b98bc066efd74bd2b5adafea9e6d733..b055f32f1c3c718f609438e5ae5f35d838eb0196 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/GenerateSiteKey.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/GenerateSiteKey.civi-setup.php @@ -13,6 +13,23 @@ if (!defined('CIVI_SETUP')) { ->addListener('civi.setup.installFiles', function (\Civi\Setup\Event\InstallFilesEvent $e) { \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'installFiles')); - $e->getModel()->siteKey = \CRM_Utils_String::createRandom(32, \CRM_Utils_String::ALPHANUMERIC); + $toAlphanum = function($bits) { + return preg_replace(';[^a-zA-Z0-9];', '', base64_encode($bits)); + }; + + if (!empty($e->getModel()->siteKey)) { + // skip + } + elseif (function_exists('random_bytes')) { + $e->getModel()->siteKey = $toAlphanum(random_bytes(32)); + } + elseif (function_exists('openssl_random_pseudo_bytes')) { + $e->getModel()->siteKey = $toAlphanum(openssl_random_pseudo_bytes(32)); + } + else { + throw new \RuntimeException("Failed to generate a random site key"); + } + + \Civi\Setup::log()->info(sprintf('[%s] Done %s', basename(__FILE__), 'installFiles')); }, \Civi\Setup::PRIORITY_PREPARE); diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/InstallSettingsFile.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/InstallSettingsFile.civi-setup.php index 330f0e3e1d3c2dec352525ee0f9128ddd2bc18d4..3581eb3bed8e5778c37f927fb3f7122f4e731fc1 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/InstallSettingsFile.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/installFiles/InstallSettingsFile.civi-setup.php @@ -13,7 +13,7 @@ if (!defined('CIVI_SETUP')) { * Validate the $model. */ \Civi\Setup::dispatcher() - ->addListener('civi.setup.checkRequirements', function(\Civi\Setup\Event\CheckRequirementsEvent $e){ + ->addListener('civi.setup.checkRequirements', function(\Civi\Setup\Event\CheckRequirementsEvent $e) { \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkRequirements')); /** @@ -52,7 +52,8 @@ if (!defined('CIVI_SETUP')) { $params = array(); $params['crmRoot'] = addslashes(rtrim($m->srcPath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR); $params['templateCompileDir'] = addslashes($m->templateCompilePath); - $params['frontEnd'] = 0; // ??why?? + // ??why is frontEnd=0?? + $params['frontEnd'] = 0; $params['baseURL'] = addslashes(rtrim($m->cmsBaseUrl, '/')); $params['dbUser'] = addslashes($m->db['username']); $params['dbPass'] = addslashes($m->db['password']); diff --git a/civicrm/vendor/civicrm/civicrm-setup/plugins/uninstallFiles/UninstallSettingsFile.civi-setup.php b/civicrm/vendor/civicrm/civicrm-setup/plugins/uninstallFiles/UninstallSettingsFile.civi-setup.php index aec95b0514b60165addfb92206fff53e5176f7ec..b10ab4be7cefa704c75e772aa190cda516605302 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/plugins/uninstallFiles/UninstallSettingsFile.civi-setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/plugins/uninstallFiles/UninstallSettingsFile.civi-setup.php @@ -16,7 +16,7 @@ if (!defined('CIVI_SETUP')) { $file = $e->getModel()->settingsPath; if (file_exists($file)) { if (!\Civi\Setup\FileUtil::isDeletable($file)) { - throw new \Exception("Cannot remove $file"); + throw new \Exception("Cannot remove \"$file\". Please check permissions on the file and directory."); } unlink($file); } diff --git a/civicrm/vendor/civicrm/civicrm-setup/res/template.css b/civicrm/vendor/civicrm/civicrm-setup/res/template.css index f1cda3c10d29ff8727af9b4ab8fa980cfb99f21f..4d05aba3f54370ea924a0ea77e7a3954a7d4677f 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/res/template.css +++ b/civicrm/vendor/civicrm/civicrm-setup/res/template.css @@ -1,6 +1,64 @@ body { background: #eee; } +/* Header */ +.civicrm-setup-header{ + height: 300px; + width: 100%; + display: block; +} + +.civicrm-setup-header .title{ + width: 25%; + position: absolute; + overflow: hidden; + float: left; + margin-left: 10%; + margin-top: 50px; + margin-right: 20%; + display: inline-flex; +} + +.civicrm-setup-header h1{ + line-height: 35px; + color: #ddd; + position: relative; + left: 400px; + -webkit-animation: slide 1s forwards; + -webkit-animation-delay: 0.5s; + animation: slide 1s forwards; + animation-delay: 0.5s; + +} + +@-webkit-keyframes slide{ + 100% { left: 0; color:#555;} +} + +@keyframes slide{ + 100% { left: 0; color: #555;} +} + + +.civicrm-setup-header hr{ + border-bottom: 2px solid #fff; + border-top: 2px solid #ddd; +} + +.civicrm-setup-body .civicrm-logo { + float: right; + width: 30%; + display: grid; + margin-top: 50px; + margin-right: 10%; +} + +.civicrm-setup-body .civicrm-logo img{ + width: 100%; +} + + +/* Header End */ .civicrm-setup-body #All { font-family: Arial, sans-serif; @@ -13,16 +71,13 @@ body { max-width: 1200px; } -.civicrm-setup-body .civicrm-logo { - float: right; -} - .civicrm-setup-body form { - margin: 0; + margin: 3%; } -.civicrm-setup-body h1 { +.civicrm-setup-body h2 { margin-top: 0; + display: inline-block; } .civicrm-setup-body li { @@ -31,7 +86,7 @@ body { .civicrm-setup-body label span { float: left; - width: 14em; + width: 120px; } .civicrm-setup-body p.error { @@ -101,9 +156,10 @@ body { .civicrm-setup-body .comp-box { height: 3.5em; - width: 30%; + width: 31%; display: inline-block; padding: 0.5em; + padding-top: 15px; margin: 0.25em; border: 1px dashed #aaa; background: #eee; @@ -155,16 +211,49 @@ body { margin: 2em 0.5em; } .civicrm-setup-body input[type=submit] { - padding:5px 15px; - background:#44f; + padding:15px 25px; + background:#82C459; color: white; border:0 none; cursor:pointer; -webkit-border-radius: 5px; border-radius: 5px; + font-size: 20px; } .civicrm-setup-body input[type=submit]:hover { - background: #33e; + background: #60A237; } .civicrm-setup-body .settingsTable input[type=text] { width: 80%; } + + + +@media only screen and (max-width: 801px){ + .civicrm-setup-body .comp-box{ + width: 45%; + } +} + +@media only screen and (max-width: 635px){ + .civicrm-setup-header .title{ + width: 45%; + margin-left: 5%; + margin-top: 30px; + } + + .civicrm-setup-body .settingsTable{ + display: block; + overflow-x: auto; + white-space: nowrap; + width: 95%; + margin: 10px 2% 10px 2%; + } + +} + +@media only screen and (max-width: 503px){ + .civicrm-setup-body .comp-box{ + width: 95%; + } +} + diff --git a/civicrm/vendor/civicrm/civicrm-setup/res/updated-logo.jpg b/civicrm/vendor/civicrm/civicrm-setup/res/updated-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdb9e006e24b61e73753b18c60c1aec6bed938bc Binary files /dev/null and b/civicrm/vendor/civicrm/civicrm-setup/res/updated-logo.jpg differ diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup.php index ffb1a292ca68afb93a78cea5b027f1b4002eff73..682b0b712f6d337acb4ebd89c82d162be0b2e4ae 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup.php @@ -11,7 +11,6 @@ use Civi\Setup\Event\InstallFilesEvent; use Civi\Setup\Event\UninstallDatabaseEvent; use Civi\Setup\Event\UninstallFilesEvent; use Civi\Setup\Exception\InitException; -use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\EventDispatcher\EventDispatcher; @@ -38,7 +37,7 @@ class Setup { protected $model; /** - * @var LoggerInterface + * @var \Psr\Log\LoggerInterface */ protected $log; @@ -56,7 +55,7 @@ class Setup { * Use this to add, remove, or re-order callbacks. * function(array $files) => array * Ex: ['hello' => '/var/www/plugins/hello.civi-setup.php'] - * @param LoggerInterface $log + * @param \Psr\Log\LoggerInterface $log */ public static function init($modelValues = array(), $pluginCallback = NULL, $log = NULL) { if (!defined('CIVI_SETUP')) { diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DbUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DbUtil.php index 15c8a3e4b7681578e348ec8760160294dfb13800..054fe8d731b08754f5c27be202fd7ac7ce61b62d 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DbUtil.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DbUtil.php @@ -29,7 +29,7 @@ class DbUtil { return sprintf('mysql://%s:%s@%s/%s', $db['username'], $db['password'], - self::encodeHostPort($db['host'], $db['port']), + $db['server'], $db['database'] ); } @@ -96,17 +96,17 @@ class DbUtil { /** * @param array $db - * @param string $fileName + * @param string $SQLcontent * @param bool $lineMode * What does this mean? Seems weird. */ - public static function sourceSQL($db, $fileName, $lineMode = FALSE) { + public static function sourceSQL($db, $SQLcontent, $lineMode = FALSE) { $conn = self::connect($db); - $conn->query('SET NAMES utf8'); + $conn->query('SET NAMES ' . ($conn->server_version < 50503 ? 'utf8' : 'utf8mb4')); if (!$lineMode) { - $string = file_get_contents($fileName); + $string = $SQLcontent; // change \r\n to fix windows issues $string = str_replace("\r\n", "\n", $string); @@ -132,23 +132,24 @@ class DbUtil { } } else { - $fd = fopen($fileName, "r"); - while ($string = fgets($fd)) { - $string = preg_replace("/^#[^\n]*$/m", "\n", $string); - $string = preg_replace("/^(--[^-]).*/m", "\n", $string); - - $string = trim($string); - if (!empty($string)) { - if ($result = $conn->query($string)) { - if (is_object($result)) { - mysqli_free_result($result); - } - } - else { - throw new SqlException("Cannot execute $string: " . mysqli_error($conn)); - } - } - } + throw new \RuntimeException("Not implemented: lineMode"); + // $fd = fopen($SQLcontent, "r"); + // while ($string = fgets($fd)) { + // $string = preg_replace("/^#[^\n]*$/m", "\n", $string); + // $string = preg_replace("/^(--[^-]).*/m", "\n", $string); + // + // $string = trim($string); + // if (!empty($string)) { + // if ($result = $conn->query($string)) { + // if (is_object($result)) { + // mysqli_free_result($result); + // } + // } + // else { + // throw new SqlException("Cannot execute $string: " . mysqli_error($conn)); + // } + // } + // } } } @@ -214,7 +215,7 @@ class DbUtil { $sql = sprintf("SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='%s' AND TABLE_TYPE = 'VIEW'", $conn->escape_string($databaseName)); - return array_map(function($arr){ + return array_map(function($arr) { return $arr['table_name']; }, self::fetchAll($conn, $sql)); } @@ -233,7 +234,7 @@ class DbUtil { $sql = sprintf("SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='%s' AND TABLE_TYPE = 'BASE TABLE'", $conn->escape_string($databaseName)); - return array_map(function($arr){ + return array_map(function($arr) { return $arr['table_name']; }, self::fetchAll($conn, $sql)); } diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DrupalUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DrupalUtil.php new file mode 100644 index 0000000000000000000000000000000000000000..ea17ae4606841db8aea8c2117250ec86a1ad7842 --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/DrupalUtil.php @@ -0,0 +1,67 @@ +<?php +namespace Civi\Setup; + +class DrupalUtil { + + /** + * @param $cmsPath + * + * @return string + */ + public static function getDrupalSiteDir($cmsPath) { + if (function_exists('conf_path')) { + return basename(conf_path()); + } + elseif (class_exists('Drupal')) { + return basename(\Drupal::service('site.path')); + } + else { + throw new \Exception('Cannot detect path under Drupal "sites/".'); + // The old 'install/index.php' system duplicated the conf_path() logic so that it could work pre-boot. + // With civicrm-setup, the CMS should always be booted first, so we should never go down this path. + // For the moment, the code is kept below in case it turns out we do need this for some reason. + } + + /* + static $siteDir = ''; + + if ($siteDir) { + return $siteDir; + } + + // The SCRIPT_FILENAME check was copied over from the 'install/index.php' system. + // It probably doesn't make sense in the context of civicrm-setup b/c we don't know what the SCRIPT will be + // and instead rely on $model inputs. + + $sites = DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR; + $modules = DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR; + preg_match("/" . preg_quote($sites, DIRECTORY_SEPARATOR) . + "([\-a-zA-Z0-9_.]+)" . + preg_quote($modules, DIRECTORY_SEPARATOR) . "/", + $_SERVER['SCRIPT_FILENAME'], $matches + ); + $siteDir = isset($matches[1]) ? $matches[1] : 'default'; + + if (strtolower($siteDir) == 'all') { + // For this case - use drupal's way of finding out multi-site directory + $uri = explode(DIRECTORY_SEPARATOR, $_SERVER['SCRIPT_FILENAME']); + $server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.'))))); + for ($i = count($uri) - 1; $i > 0; $i--) { + for ($j = count($server); $j > 0; $j--) { + $dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i)); + if (file_exists($cmsPath . DIRECTORY_SEPARATOR . + 'sites' . DIRECTORY_SEPARATOR . $dir + )) { + $siteDir = $dir; + return $siteDir; + } + } + } + $siteDir = 'default'; + } + + return $siteDir; + */ + } + +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Event/CheckInstalledEvent.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Event/CheckInstalledEvent.php index 06e409244e95124bdd9731c2f85e20045f3e0f02..87273e4d6511d730da25336951641419d3bc0793 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Event/CheckInstalledEvent.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Event/CheckInstalledEvent.php @@ -11,7 +11,12 @@ class CheckInstalledEvent extends BaseSetupEvent { /** * @var bool */ - private $settingInstalled = NULL, $databaseInstalled = NULL; + private $settingInstalled = NULL; + + /** + * @var bool + */ + private $databaseInstalled = NULL; /** * @return bool diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/FileUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/FileUtil.php index 0842be88da9954e51dc536be5c3a5f917482ff5a..54a86bf863248e2f48479f6ade916fa136f6f398 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/FileUtil.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/FileUtil.php @@ -30,4 +30,16 @@ class FileUtil { return is_writable(dirname($path)); } + /** + * @param $prefix + * + * @return string + */ + public static function createTempDir($prefix) { + $newTempDir = tempnam(sys_get_temp_dir(), $prefix) . '.d'; + mkdir($newTempDir, 0755, TRUE); + + return $newTempDir; + } + } diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/LocaleUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/LocaleUtil.php index e54ed98a279ef648db900aa02270ac4f7ff60a6b..fe0c9f0e6042b685345fdd87a511844bfe0db8e8 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/LocaleUtil.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/LocaleUtil.php @@ -12,6 +12,9 @@ class LocaleUtil { * @param array $availLangs * List of available languages. * Ex: ['en_US' => 'English (US)', 'fr_CA' => 'French (Canadian)']. + * @param string $default + * The locale to use if none other can be determined. + * Ex: 'en_US'. * @return string * Ex: 'en_US'. */ diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Model.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Model.php index abacfb07ccaae3e2ac9b1330ba525f9fa8eb4e25..68100aef34ce15e4ae3247321cdba78028eec2f9 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Model.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Model.php @@ -144,6 +144,12 @@ class Model { 'type' => 'array', 'value' => array(), )); + $this->addField(array( + 'description' => 'List of mandatory settings', + 'name' => 'mandatorySettings', + 'type' => 'array', + 'value' => array(), + )); $this->addField(array( 'description' => 'Open-ended list of private, adhoc fields/flags/tags', 'name' => 'extras', diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/PackageUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/PackageUtil.php new file mode 100644 index 0000000000000000000000000000000000000000..e0dbcf3b37ab0e2880b70ef2d9e4cf4a2c1ee04e --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/PackageUtil.php @@ -0,0 +1,33 @@ +<?php +namespace Civi\Setup; + +class PackageUtil { + + /** + * Locate the civicrm-packages source tree. + * + * @param string $srcPath + * The path to the civicrm-core source tree. + * @return string + * The path to the civicrm-packages source tree. + */ + public static function getPath($srcPath) { + global $civicrm_paths; + + $candidates = [ + // TODO: Trace the code-path and allow reading $model for packages dir? + $civicrm_paths['civicrm.packages'] ?? NULL, + implode(DIRECTORY_SEPARATOR, [$srcPath, 'packages']), + implode(DIRECTORY_SEPARATOR, [dirname($srcPath), 'civicrm-packages']), + ]; + + foreach ($candidates as $candidate) { + if (!empty($candidate) && file_exists($candidate)) { + return $candidate; + } + } + + throw new \RuntimeException("Failed to locate civicrm-packages"); + } + +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SchemaGenerator.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SchemaGenerator.php new file mode 100644 index 0000000000000000000000000000000000000000..c27f5fadab52f19cbd52cb972e725ec5154df395 --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SchemaGenerator.php @@ -0,0 +1,90 @@ +<?php +namespace Civi\Setup; + +class SchemaGenerator { + + /** + * Return translated SQL content using tpl, mainly contain SQL codes on table CREATE/DROP + * + * @param string $srcPath + * @param array $database + * @param array $tables + * @return string + */ + public static function generateCreateSql($srcPath, $database, $tables) { + $template = new Template($srcPath, 'sql'); + + $template->assign('database', $database); + $template->assign('tables', $tables); + $dropOrder = array_reverse(array_keys($tables)); + $template->assign('dropOrder', $dropOrder); + $template->assign('mysql', 'modern'); + + return $template->getContent('schema.tpl'); + } + + /** + * Generate an example set of data, including the basic data as well + * as some example records/entities (e.g. case-types, membership types). + * + * @param string $srcPath + * + * @return string + */ + public static function generateSampleData($srcPath) { + $versionFile = implode(DIRECTORY_SEPARATOR, [$srcPath, 'xml', 'version.xml']); + $xml = \CRM_Core_CodeGen_Util_Xml::parse($versionFile); + + $template = new Template($srcPath, 'sql'); + $template->assign('db_version', $xml->version_no); + + // If you're going to use the full data generator... + // "DROP TABLE IF EXISTS zipcodes" + // .... file_get_contents($sqlPath . DIRECTORY_SEPARATOR . 'zipcodes.mysql')... + + $sections = [ + 'civicrm_country.tpl', + 'civicrm_state_province.tpl', + 'civicrm_currency.tpl', + 'civicrm_data.tpl', + 'civicrm_acl.tpl', + 'civicrm_sample.tpl', + 'case_sample.tpl', + 'civicrm_version_sql.tpl', + 'civicrm_navigation.tpl', + ]; + + // DROP TABLE IF EXISTS zipcodes; + + return $template->getConcatContent($sections); + } + + /** + * Generate a minimalist set of basic data, such as + * common option-values and countries. + * + * @param string $srcPath + * + * @return string + * SQL + */ + public static function generateBasicData($srcPath) { + $versionFile = implode(DIRECTORY_SEPARATOR, [$srcPath, 'xml', 'version.xml']); + $xml = \CRM_Core_CodeGen_Util_Xml::parse($versionFile); + + $template = new Template($srcPath, 'sql'); + $template->assign('db_version', $xml->version_no); + + $sections = [ + 'civicrm_country.tpl', + 'civicrm_state_province.tpl', + 'civicrm_currency.tpl', + 'civicrm_data.tpl', + 'civicrm_acl.tpl', + 'civicrm_version_sql.tpl', + 'civicrm_navigation.tpl', + ]; + return $template->getConcatContent($sections); + } + +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SmartyUtil.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SmartyUtil.php new file mode 100644 index 0000000000000000000000000000000000000000..aa3f612dcbfeb1a03791c1b7e95108eb79c900e3 --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/SmartyUtil.php @@ -0,0 +1,33 @@ +<?php +namespace Civi\Setup; + +class SmartyUtil { + + /** + * Create a Smarty instance. + * + * @return \Smarty + */ + public static function createSmarty($srcPath) { + require_once 'CRM/Core/I18n.php'; + + $packagePath = PackageUtil::getPath($srcPath); + require_once $packagePath . DIRECTORY_SEPARATOR . 'Smarty' . DIRECTORY_SEPARATOR . 'Smarty.class.php'; + + $smarty = new \Smarty(); + $smarty->template_dir = implode(DIRECTORY_SEPARATOR, [$srcPath, 'xml', 'templates']); + $smarty->plugins_dir = [ + implode(DIRECTORY_SEPARATOR, [$packagePath, 'Smarty', 'plugins']), + implode(DIRECTORY_SEPARATOR, [$srcPath, 'CRM', 'Core', 'Smarty', 'plugins']), + ]; + $smarty->compile_dir = \Civi\Setup\FileUtil::createTempDir('templates_c'); + $smarty->clear_all_cache(); + + // CRM-5308 / CRM-3507 - we need {localize} to work in the templates + require_once implode(DIRECTORY_SEPARATOR, [$srcPath, 'CRM', 'Core', 'Smarty', 'plugins', 'block.localize.php']); + $smarty->register_block('localize', 'smarty_block_localize'); + + return $smarty; + } + +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Template.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Template.php new file mode 100644 index 0000000000000000000000000000000000000000..7ead78bcd68a8beaa913315557a07a39fe9ef8fd --- /dev/null +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/Template.php @@ -0,0 +1,79 @@ +<?php +namespace Civi\Setup; + +class Template { + + protected $filetype; + + protected $smarty; + protected $beautifier; + + public function __construct($srcPath, $fileType) { + $this->filetype = $fileType; + + $this->smarty = \Civi\Setup\SmartyUtil::createSmarty($srcPath); + + $this->assign('generated', "DO NOT EDIT. Generated by Installer"); + + if ($this->filetype === 'php') { + $packagePath = PackageUtil::getPath($srcPath); + require_once implode(DIRECTORY_SEPARATOR, [$packagePath, 'PHP', 'Beautifier.php']); + // create an instance + $this->beautifier = new PHP_Beautifier(); + $this->beautifier->addFilter('ArrayNested'); + // add one or more filters + $this->beautifier->setIndentChar(' '); + $this->beautifier->setIndentNumber(2); + $this->beautifier->setNewLine("\n"); + } + } + + public function assign($tpl_var, $value = NULL) { + return $this->smarty->assign($tpl_var, $value); + } + + /** + * Run template generator. + * + * @param string $infile + * Filename of the template, without a path. + * @return string + */ + public function getContent($infile) { + $contents = $this->smarty->fetch($infile); + + if ($this->filetype === 'php') { + $this->beautifier->setInputString($contents); + $this->beautifier->process(); + $contents = $this->beautifier->get(); + // The beautifier isn't as beautiful as one would hope. Here's some extra string fudging. + $replacements = [ + ') ,' => '),', + "\n }\n}\n" => "\n }\n\n}\n", + '=> true,' => '=> TRUE,', + '=> false,' => '=> FALSE,', + ]; + $contents = str_replace(array_keys($replacements), array_values($replacements), $contents); + $contents = preg_replace('#(\s*)\\/\\*\\*#', "\n\$1/**", $contents); + // Convert old array syntax to new square brackets + $contents = CRM_Core_CodeGen_Util_ArraySyntaxConverter::convert($contents); + } + + return $contents; + } + + /** + * @param array $inputs + * Template filenames. + */ + public function getConcatContent($inputs) { + $content = ''; + foreach ($inputs as $infile) { + // FIXME: does not beautify. Document. + $content .= $this->smarty->fetch($infile) . "\n"; + } + + return $content; + } + +} diff --git a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/UI/SetupController.php b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/UI/SetupController.php index 4c54db7dfa810c18622f274aff99e02e31cb6fe3..841c7c71c14651d12de3eac727cb18e23c01a808 100644 --- a/civicrm/vendor/civicrm/civicrm-setup/src/Setup/UI/SetupController.php +++ b/civicrm/vendor/civicrm/civicrm-setup/src/Setup/UI/SetupController.php @@ -175,11 +175,14 @@ class SetupController implements SetupControllerInterface { } public function createError($message, $title = 'Error') { - return array(array(), $this->render($this->getResourcePath('error.html'), [ - 'errorTitle' => htmlentities($title), - 'errorMsg' => htmlentities($message), - 'installURLPath' => $this->urls['res'], - ])); + return [ + [], + $this->render($this->getResourcePath('error.html'), [ + 'errorTitle' => htmlentities($title), + 'errorMsg' => htmlentities($message), + 'installURLPath' => $this->urls['res'], + ]), + ]; } /** @@ -225,6 +228,8 @@ class SetupController implements SetupControllerInterface { * @param array $fields * HTTP inputs -- e.g. with a form element like this: * `<input type="submit" name="civisetup[action][Foo]" value="Do the foo">` + * @param string $default + * The action-name to return if no other action is identified. * @return string * The name of the action. * Ex: 'Foo'. diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 1d308d29d55e792515100bb25d41d2d31cbbdbca..5d9c2db3d9852855d8ba8a6fe256d498161ed79d 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 ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484 +class ComposerAutoloaderInite6f45a43176252aa6a8458e979f01dd8 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInite6f45a43176252aa6a8458e979f01dd8', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInite6f45a43176252aa6a8458e979f01dd8', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484 if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit4ee0d0ceec53632120da6413d96e8484 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$files; + $includeFiles = Composer\Autoload\ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire4ee0d0ceec53632120da6413d96e8484($fileIdentifier, $file); + composerRequiree6f45a43176252aa6a8458e979f01dd8($fileIdentifier, $file); } return $loader; } } -function composerRequire4ee0d0ceec53632120da6413d96e8484($fileIdentifier, $file) +function composerRequiree6f45a43176252aa6a8458e979f01dd8($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 1d937c6802a29322bc9e23f0d6d8a834585bdfd2..f98e998adc1c36dddb6284cebedb8527915fe6bf 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit4ee0d0ceec53632120da6413d96e8484 +class ComposerStaticInite6f45a43176252aa6a8458e979f01dd8 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -476,11 +476,11 @@ class ComposerStaticInit4ee0d0ceec53632120da6413d96e8484 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit4ee0d0ceec53632120da6413d96e8484::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInite6f45a43176252aa6a8458e979f01dd8::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index 48b3529d7d2e8432ee5e8ff2decc41bb03432604..3553e4d46c67be55906f360bf222b251c00caf6d 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -161,24 +161,24 @@ }, { "name": "civicrm/civicrm-setup", - "version": "v0.2.0", - "version_normalized": "0.2.0.0", + "version": "v0.4.0", + "version_normalized": "0.4.0.0", "source": { "type": "git", "url": "https://github.com/civicrm/civicrm-setup.git", - "reference": "e7991aff516c3fff952bed8f90832804a134358a" + "reference": "8417d0c62b6e725ef7a49a75935995d0269cbbe8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/e7991aff516c3fff952bed8f90832804a134358a", - "reference": "e7991aff516c3fff952bed8f90832804a134358a", + "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/8417d0c62b6e725ef7a49a75935995d0269cbbe8", + "reference": "8417d0c62b6e725ef7a49a75935995d0269cbbe8", "shasum": "" }, "require": { "psr/log": "~1.0", "symfony/event-dispatcher": "^2.6.13 || ~3.0" }, - "time": "2018-01-23T06:26:55+00:00", + "time": "2020-01-18T03:46:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -638,7 +638,8 @@ "keywords": [ "mimetype", "php" - ] + ], + "abandoned": true }, { "name": "league/csv", @@ -1742,27 +1743,27 @@ }, { "name": "psr/log", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "version": "1.1.2", + "version_normalized": "1.1.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2018-11-20T15:27:04+00:00", + "time": "2019-11-01T11:05:21+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "installation-source": "dist", @@ -2624,7 +2625,8 @@ "keywords": [ "escaper", "zf2" - ] + ], + "abandoned": "laminas/laminas-escaper" }, { "name": "zetacomponents/base", @@ -2694,17 +2696,17 @@ }, { "name": "zetacomponents/mail", - "version": "dev-master", - "version_normalized": "9999999-dev", + "version": "1.9.1", + "version_normalized": "1.9.1.0", "source": { "type": "git", "url": "https://github.com/zetacomponents/Mail.git", - "reference": "b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77" + "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77", - "reference": "b60e9a543f6c3d9a9ec74452d4ff5736a1c63a77", + "url": "https://api.github.com/repos/zetacomponents/Mail/zipball/4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", + "reference": "4dc71ccbcc8b67951a2efe47d3fcc2aeaa7f530d", "shasum": "" }, "require": { @@ -2713,14 +2715,14 @@ "require-dev": { "zetacomponents/unit-test": "*" }, - "time": "2019-02-13T11:33:09+00:00", + "time": "2020-01-17T11:18:01+00:00", "type": "library", "extra": { "patches_applied": { "CiviCRM Custom Patches for ZetaCompoents mail": "tools/scripts/composer/patches/civicrm-custom-patches-zetacompoents-mail.patch" } }, - "installation-source": "source", + "installation-source": "dist", "autoload": { "classmap": [ "src" @@ -2761,14 +2763,14 @@ { "name": "Alexandru Stanoi" }, - { - "name": "Christian Michel" - }, { "name": "Sinisa Dukaric" }, { "name": "Mikko Koppanen" + }, + { + "name": "Christian Michel" } ], "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", diff --git a/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php b/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php index 5ea72438b56694639c13101cbc3c82339a6e96a8..e695046e30f737120f794e171a607c8226bfd390 100644 --- a/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php +++ b/civicrm/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -118,6 +118,8 @@ interface LoggerInterface * @param array $context * * @return void + * + * @throws \Psr\Log\InvalidArgumentException */ public function log($level, $message, array $context = array()); } diff --git a/civicrm/vendor/psr/log/Psr/Log/LoggerTrait.php b/civicrm/vendor/psr/log/Psr/Log/LoggerTrait.php index 867225df1d12469facd1355e6db7467e0d8de128..e392fef0a0cb0a6653ab2a2a887e8811937ef51f 100644 --- a/civicrm/vendor/psr/log/Psr/Log/LoggerTrait.php +++ b/civicrm/vendor/psr/log/Psr/Log/LoggerTrait.php @@ -135,6 +135,8 @@ trait LoggerTrait * @param array $context * * @return void + * + * @throws \Psr\Log\InvalidArgumentException */ abstract public function log($level, $message, array $context = array()); } diff --git a/civicrm/vendor/psr/log/Psr/Log/NullLogger.php b/civicrm/vendor/psr/log/Psr/Log/NullLogger.php index d8cd682c8f963e8f5e04f46a4a57308cc8d9ecf0..c8f7293b1c66886bcb2d47f30f5a8decc67712ba 100644 --- a/civicrm/vendor/psr/log/Psr/Log/NullLogger.php +++ b/civicrm/vendor/psr/log/Psr/Log/NullLogger.php @@ -20,6 +20,8 @@ class NullLogger extends AbstractLogger * @param array $context * * @return void + * + * @throws \Psr\Log\InvalidArgumentException */ public function log($level, $message, array $context = array()) { diff --git a/civicrm/vendor/psr/log/README.md b/civicrm/vendor/psr/log/README.md index 5571a25e8df01732f1b7141b3ccc6835b3bb429c..a9f20c437b385e5afab15096bde84c51e31bc812 100644 --- a/civicrm/vendor/psr/log/README.md +++ b/civicrm/vendor/psr/log/README.md @@ -38,6 +38,12 @@ class Foo if ($this->logger) { $this->logger->info('Doing work'); } + + try { + $this->doSomethingElse(); + } catch (Exception $exception) { + $this->logger->error('Oh no!', array('exception' => $exception)); + } // do something useful } diff --git a/civicrm/vendor/psr/log/composer.json b/civicrm/vendor/psr/log/composer.json index 87934d707e7a37325a0ec6afe4b63aaa4ca6337c..3f6d4eea4cb348c964c7642291dd7c608697c028 100644 --- a/civicrm/vendor/psr/log/composer.json +++ b/civicrm/vendor/psr/log/composer.json @@ -20,7 +20,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } } } diff --git a/civicrm/vendor/zetacomponents/mail/ChangeLog b/civicrm/vendor/zetacomponents/mail/ChangeLog index 5a90d8cb1f41d59e213735dbe4f3cfadbc143125..de8b12300f5891fa8233d94f316ee271942f9077 100644 --- a/civicrm/vendor/zetacomponents/mail/ChangeLog +++ b/civicrm/vendor/zetacomponents/mail/ChangeLog @@ -1,7 +1,27 @@ -1.8.4 - [RELEASEDATE] +1.9.1 - Friday 17 January 2020 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +- Fixed syntax errors introduced in 1.9.0. + + +1.9.0 - Thursday 16 January 2020 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Fixed #31: Provide a listLimit option to prevent fetch queries from exceeding + the server's query size limit. (Mark Burdett) +- Fixed #77: Curly-brace syntax for array and string access is deprecated in + PHP 7.4 +- Add support for XOAUTH2 authentication method for IMAP. (Seamus Lee) + + +1.8.4 - Thursday 17 October 2019 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Fixed #51: User names and passwords need to be escaped if they contain + spaces. (Mark Burdett) - Fixed #61: create_function() is deprecated in PHP 7.2. (Derick Rethans) +- Fixed implode() argument order. (Michael Kliewe) +- Fixed regexp patterns for PHP 7.3 and later. (Derick Rethans) 1.8.3 - Saturday 18 November 2017 diff --git a/civicrm/vendor/zetacomponents/mail/src/options/imap_options.php b/civicrm/vendor/zetacomponents/mail/src/options/imap_options.php index e0976077d5f60cd1484360a8a853c18d733322fd..ba18206af4de9b10ec53f14cffe422c2394a1114 100644 --- a/civicrm/vendor/zetacomponents/mail/src/options/imap_options.php +++ b/civicrm/vendor/zetacomponents/mail/src/options/imap_options.php @@ -42,6 +42,9 @@ * @property bool $uidReferencing * Specifies if the IMAP commands will operate with message unique * IDs or with message numbers (default). + * @property int $listLimit + * Specifies the maximum number of messages to be returned by the + * listMessages() method, or 0 for no limit (default). * * @package Mail * @version //autogen// @@ -60,6 +63,7 @@ class ezcMailImapTransportOptions extends ezcMailTransportOptions public function __construct( array $options = array() ) { $this->uidReferencing = false; + $this->listLimit = 0; parent::__construct( $options ); } @@ -87,6 +91,14 @@ class ezcMailImapTransportOptions extends ezcMailTransportOptions $this->properties[$name] = $value; break; + case 'listLimit': + if ( !is_int( $value ) || $value < 0 ) + { + throw new ezcBaseValueException( $name, $value, 'int >= 0' ); + } + $this->properties[$name] = $value; + break; + default: parent::__set( $name, $value ); } diff --git a/civicrm/vendor/zetacomponents/mail/src/tools.php b/civicrm/vendor/zetacomponents/mail/src/tools.php index 115079c7c22fc1f468a342da53e1b0c6b20a6b4d..6bac570bee1bca97575c9e5cd8470e62ef624e66 100644 --- a/civicrm/vendor/zetacomponents/mail/src/tools.php +++ b/civicrm/vendor/zetacomponents/mail/src/tools.php @@ -9,9 +9,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -105,7 +105,7 @@ class ezcMailTools if ( $name !== '' ) { // remove the quotes around the name part if they are already there - if ( $name{0} === '"' && $name{strlen( $name ) - 1} === '"' ) + if ( $name[0] === '"' && $name[strlen( $name ) - 1] === '"' ) { $name = substr( $name, 1, -1 ); } @@ -761,7 +761,7 @@ class ezcMailTools * $contentIdArray = array( 'consoletools-table.png@1421450' => 'http://localhost/consoletools-table.jpg' ); * $text = "<html> Embedded image: <img src='cid:consoletools-table.png@1421450'/> </html>"; * $htmlBody = ezcMailTools::replaceContentIdRefs( $text, $contentIdArray ); - * // $htmlBody is now: + * // $htmlBody is now: * // <html> Embedded image: <img src='http://localhost/consoletools-table.jpg'/> </html> * ?> * </code> diff --git a/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_set.php b/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_set.php index 25d1f42051af1d4e4c45b0b0f3c956bccc03dd47..93e5ef24513c56b8ed720a796aa67448b9e75c56 100644 --- a/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_set.php +++ b/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_set.php @@ -221,8 +221,8 @@ class ezcMailImapSet implements ezcMailParserSet } return $data; } + return $data; } - return $data; } return null; } diff --git a/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_transport.php b/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_transport.php index 15426738ce49cbfc82d12583229b4429d7ce8052..e632af315a2cacce55297d9dfa3e043f623b8423 100644 --- a/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_transport.php +++ b/civicrm/vendor/zetacomponents/mail/src/transports/imap/imap_transport.php @@ -9,9 +9,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -244,6 +244,16 @@ class ezcMailImapTransport */ const SERVER_GIMAP = 'Gimap'; + /** + * Authenticate with 'AUTH LOGIN'. + */ + const AUTH_LOGIN = 'LOGIN'; + + /** + * Authenticate with 'AUTH XOAUTH2'. + */ + const AUTH_XOAUTH2 = 'XOAUTH2'; + /** * Basic flags are used by {@link setFlag()} and {@link clearFlag()} * @@ -411,7 +421,7 @@ class ezcMailImapTransport */ public function __destruct() { - try + try { $this->disconnect(); } @@ -463,7 +473,7 @@ class ezcMailImapTransport { case 'options': return $this->options; - + default: throw new ezcBasePropertyNotFoundException( $name ); } @@ -509,6 +519,23 @@ class ezcMailImapTransport } } + /** + * Returns an array with the authentication methods supported by the + * IMAP transport class (not by the IMAP server!). + * + * The returned array has the methods sorted by their relative strengths, + * so stronger methods are first in the array. + * + * @return array(string) + */ + public static function getSupportedAuthMethods() + { + return array( + ezcMailImapTransport::AUTH_LOGIN, + ezcMailImapTransport::AUTH_XOAUTH2, + ); + } + /** * Authenticates the user to the IMAP server with $user and $password. * @@ -535,17 +562,28 @@ class ezcMailImapTransport * @param string $password * @return bool */ - public function authenticate( $user, $password ) + public function authenticate( $user, $password, $method = ezcMailImapTransport::AUTH_LOGIN ) { + if ( !in_array( $method, self::getSupportedAuthMethods() ) ) + { + throw new ezcMailTransportException( "Unsupported Authentication method used" ); + } if ( $this->state != self::STATE_NOT_AUTHENTICATED ) { throw new ezcMailTransportException( "Tried to authenticate when there was no connection or when already authenticated." ); } - $tag = $this->getNextTag(); - $user = addcslashes($user, '\"'); - $password = addcslashes($password, '\"'); - $this->connection->sendData( "{$tag} LOGIN \"{$user}\" \"{$password}\"" ); + switch ( $method ) + { + case self::AUTH_LOGIN: + $this->sendLogin( $user, $password ); + break; + + case self::AUTH_XOAUTH2: + $this->sendXOAuth2( $user, $password ); + break; + + } $response = trim( $this->connection->getLine() ); // hack for gmail, to fix issue #15837: imap.google.com (google gmail) changed IMAP response if ( $this->serverType === self::SERVER_GIMAP && strpos( $response, "* CAPABILITY" ) === 0 ) @@ -565,6 +603,14 @@ class ezcMailImapTransport } if ( $this->responseType( $response ) != self::RESPONSE_OK ) { + // If we are using the XOAuth2 SASL mechanism we will get a base64 encoded response back to get standard + // response back we then need to send a blank response "\r\n" to the authentication response. + // @see https://developers.google.com/gmail/imap/xoauth2-protocol + if ( $method === self::AUTH_XOAUTH2 ) + { + $this->connection->sendData( "\r\n" ); + $response = trim( $this->connection->getLine() ); + } throw new ezcMailTransportException( "The IMAP server did not accept the username and/or password: {$response}." ); } else @@ -575,6 +621,30 @@ class ezcMailImapTransport return true; } + /** + * Tries to login to the SMTP server with 'AUTH LOGIN' + */ + private function sendLogin( $user, $password ) + { + $user = addcslashes( $user, '\"' ); + $password = addcslashes( $password, '\"' ); + $tag = $this->getNextTag(); + $this->connection->sendData( "{$tag} LOGIN \"{$user}\" \"{$password}\"" ); + } + + /** + * Tries to login to the IMAP server with 'AUTH XOAUTH2' + * This is constructed as per the Google documentation on authenticating + * with XOAuth2 + * @see https://developers.google.com/gmail/imap/xoauth2-protocol + */ + private function sendXOAuth2( $user, $password ) + { + $digest = base64_encode("user={$user}\1auth=Bearer {$password}\1\1"); + $tag = $this->getNextTag(); + $this->connection->sendData( "{$tag} AUTHENTICATE XOAUTH2 {$digest}" ); + } + /** * Returns an array with the names of the available mailboxes for the user * currently authenticated on the IMAP server. @@ -741,7 +811,7 @@ class ezcMailImapTransport // if the mailbox selection will be successful, $state will be STATE_SELECTED // or STATE_SELECTED_READONLY, depending on the $readOnly parameter - if ( $readOnly !== true ) + if ( $readOnly !== true ) { $this->connection->sendData( "{$tag} SELECT \"{$mailbox}\"" ); $state = self::STATE_SELECTED; @@ -880,7 +950,7 @@ class ezcMailImapTransport return true; } - /** + /** * Copies message(s) from the currently selected mailbox to mailbox * $destination. * @@ -930,10 +1000,10 @@ class ezcMailImapTransport { throw new ezcMailTransportException( "Can't call copyMessages() on the IMAP transport when a mailbox is not selected." ); } - + $tag = $this->getNextTag(); $this->connection->sendData( "{$tag} {$uid}COPY {$messages} \"{$destination}\"" ); - + $response = trim( $this->getResponse( $tag ) ); if ( $this->responseType( $response ) != self::RESPONSE_OK ) { @@ -983,7 +1053,7 @@ class ezcMailImapTransport $messageList = array(); $messages = array(); - + // get the numbers of the existing messages $tag = $this->getNextTag(); $command = "{$tag} SEARCH UNDELETED"; @@ -1012,9 +1082,12 @@ class ezcMailImapTransport { // get the sizes of the messages $tag = $this->getNextTag(); - $mailBatchSize = defined('MAIL_BATCH_SIZE') ? MAIL_BATCH_SIZE : 1000; - $truncatedMessageList = array_slice($messageList, 0, $mailBatchSize); - $query = trim( implode( ',', $truncatedMessageList ) ); + // The listLimit option will prevent fetch queries from exceeding + // the IMAP server's query size limit. + if ( $this->options->listLimit ) { + $messageList = array_slice( $messageList, 0, $this->options->listLimit ); + } + $query = trim( implode( ',', $messageList ) ); $this->connection->sendData( "{$tag} FETCH {$query} RFC822.SIZE" ); $response = $this->getResponse( 'FETCH (' ); $currentMessage = trim( reset( $messageList ) ); @@ -2497,7 +2570,7 @@ class ezcMailImapTransport * * @param string $flag * @return string - */ + */ protected function normalizeFlag( $flag ) { $flag = strtoupper( $flag ); diff --git a/civicrm/xml/GenCode.php b/civicrm/xml/GenCode.php index cee7f1475a5df5da572df96fdb93fb333a6454bd..65e13eb23ec75a2ecd0ecb46ef3e1b84bca144ce 100644 --- a/civicrm/xml/GenCode.php +++ b/civicrm/xml/GenCode.php @@ -4,7 +4,8 @@ if (PHP_SAPI !== 'cli') { die("GenCode can only be run from command line."); } -ini_set('include_path', '.' . PATH_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'packages' . PATH_SEPARATOR . '..'); +$includes = ['.', '../packages', '../../civicrm-packages', '..']; +ini_set('include_path', implode(PATH_SEPARATOR, $includes)); // make sure the memory_limit is at least 512 MB $memLimitString = trim(ini_get('memory_limit')); $memLimitUnit = strtolower(substr($memLimitString, -1)); @@ -27,6 +28,8 @@ date_default_timezone_set('UTC'); define('CIVICRM_UF', 'Drupal'); define('CIVICRM_UF_BASEURL', '/'); +define('CIVICRM_L10N_BASEDIR', getenv('CIVICRM_L10N_BASEDIR') ? getenv('CIVICRM_L10N_BASEDIR') : __DIR__ . '/../l10n'); +$GLOBALS['civicrm_paths']['cms.root']['url'] = 'http://gencode.example.com/do-not-use'; require_once 'CRM/Core/ClassLoader.php'; CRM_Core_ClassLoader::singleton()->register(); diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml index 262358eaf1c91d046e68cde06deb0f114e8a0ca2..28a2ee98f704bfa65ebffa823a49a8933ac5494a 100644 --- a/civicrm/xml/schema/Contact/Contact.xml +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -238,7 +238,7 @@ <type>Text</type> <size>30</size> </html> - + <contactType>Organization</contactType> <import>true</import> <headerPattern>/^legal|(l(egal\s)?name)$/i</headerPattern> <comment>Legal Name.</comment> diff --git a/civicrm/xml/schema/Core/Address.xml b/civicrm/xml/schema/Core/Address.xml index 97ea97b3753a86cc2817fc27f954977802e8ba3f..49bbcc38b5b12dd2b8014aeab7a61dcec6b7f7b0 100644 --- a/civicrm/xml/schema/Core/Address.xml +++ b/civicrm/xml/schema/Core/Address.xml @@ -9,7 +9,9 @@ <log>true</log> <field> <name>id</name> + <uniqueName>address_id</uniqueName> <type>int unsigned</type> + <export>true</export> <title>Address ID</title> <required>true</required> <comment>Unique Address ID</comment> @@ -55,13 +57,13 @@ </index> <field> <name>is_primary</name> - <title>Is Address Primary?</title> + <title>Primary address</title> <type>boolean</type> <default>0</default> <comment>Is this the primary address.</comment> <add>2.0</add> <html> - <type>CheckBox</type> + <type>Radio</type> </html> </field> <index> diff --git a/civicrm/xml/schema/Core/Domain.xml b/civicrm/xml/schema/Core/Domain.xml index f9478785599e4cdf9827074cda8df4e0d0496a17..1dc87d1bc93a049f77f56c95b1166e9795bbbc02 100644 --- a/civicrm/xml/schema/Core/Domain.xml +++ b/civicrm/xml/schema/Core/Domain.xml @@ -93,6 +93,7 @@ <comment>Backend configuration.</comment> <serialize>PHP</serialize> <add>1.6</add> + <drop>5.23</drop> </field> <field> <name>version</name> diff --git a/civicrm/xml/schema/Core/Email.xml b/civicrm/xml/schema/Core/Email.xml index c9881ac4f89fe4aaedd8d0dd423883e389af53c7..90f7a7bef53230c6642967eca5870a6d5c71f57d 100644 --- a/civicrm/xml/schema/Core/Email.xml +++ b/civicrm/xml/schema/Core/Email.xml @@ -76,18 +76,14 @@ </index> <field> <name>is_primary</name> + <title>Primary email</title> <type>boolean</type> <default>0</default> - <comment>Is this the primary email for this contact and location.</comment> + <comment>Is this the primary email address</comment> <add>1.1</add> - </field> - <field> - <name>is_primary</name> - <title>Is Primary email</title> - <type>boolean</type> - <default>0</default> - <comment>Is this the primary?</comment> - <add>2.0</add> + <html> + <type>Radio</type> + </html> </field> <index> <name>index_is_primary</name> diff --git a/civicrm/xml/schema/Core/IM.xml b/civicrm/xml/schema/Core/IM.xml index ce4e3961e6cb8d4a1600abbf584ffa77ed116ed0..74b0cd8e6c794483e7a28a49afb11cd3d77bc481 100644 --- a/civicrm/xml/schema/Core/IM.xml +++ b/civicrm/xml/schema/Core/IM.xml @@ -87,9 +87,12 @@ </index> <field> <name>is_primary</name> - <title>Is IM Primary?</title> + <title>Primary IM</title> <type>boolean</type> <default>0</default> + <html> + <type>Radio</type> + </html> <comment>Is this the primary IM for this contact and location.</comment> <add>1.1</add> </field> diff --git a/civicrm/xml/schema/Core/OpenID.xml b/civicrm/xml/schema/Core/OpenID.xml index a7b2e2aba9f6615bdb33ebda522f7c783fef96ed..1aa5c579f679cd7c54228f5f8f7ba4e212d7fe3d 100644 --- a/civicrm/xml/schema/Core/OpenID.xml +++ b/civicrm/xml/schema/Core/OpenID.xml @@ -73,9 +73,12 @@ </field> <field> <name>is_primary</name> - <title>Is OpenID Primary?</title> + <title>Primary ID</title> <type>boolean</type> <default>0</default> + <html> + <type>Radio</type> + </html> <comment>Is this the primary email for this contact and location.</comment> <add>2.0</add> </field> diff --git a/civicrm/xml/schema/Core/Phone.xml b/civicrm/xml/schema/Core/Phone.xml index f3703dc8f585ef43dd683a96d850c261ab3170b3..f6531dbf7cae8210899178f660d8a9284167564e 100644 --- a/civicrm/xml/schema/Core/Phone.xml +++ b/civicrm/xml/schema/Core/Phone.xml @@ -55,9 +55,12 @@ </index> <field> <name>is_primary</name> - <title>Is Phone Primary?</title> + <title>Primary phone</title> <type>boolean</type> <default>0</default> + <html> + <type>Radio</type> + </html> <comment>Is this the primary phone for this contact and location.</comment> <add>1.1</add> </field> diff --git a/civicrm/xml/schema/Financial/PaymentProcessorType.xml b/civicrm/xml/schema/Financial/PaymentProcessorType.xml index 27273978a9a1a4fb2eb97aaba4322afec0d1b75c..72ea65d2b245ce5233dbf2566087949a3d2e32b5 100644 --- a/civicrm/xml/schema/Financial/PaymentProcessorType.xml +++ b/civicrm/xml/schema/Financial/PaymentProcessorType.xml @@ -19,10 +19,10 @@ </primaryKey> <field> <name>name</name> - <title>Payment Processor variable name to be used in code</title> + <title>Payment Processor Type variable name to be used in code</title> <type>varchar</type> <length>64</length> - <comment>Payment Processor Name.</comment> + <comment>Payment Processor Type Name.</comment> <add>1.8</add> <required>true</required> </field> diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl index d85d0d77863ec4e2950f4530eb2beb489f386723..d076d8ef14d1c9f7f1733c52755b45e92d0dc53b 100644 --- a/civicrm/xml/templates/civicrm_data.tpl +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -535,7 +535,7 @@ VALUES (@option_group_id_acConRef, '{ts escape="sql"}City{/ts}' , 5, 'city' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_acConRef, '{ts escape="sql"}State/Province{/ts}' , 6, 'state_province', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_acConRef, '{ts escape="sql"}Country{/ts}' , 7, 'country' , NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_acConRef, '{ts escape="sql"}Postal Code{/ts}' , 8, 'country' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}Postal Code{/ts}' , 8, 'postal_code' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_adOpt, '{ts escape="sql"}Street Address{/ts}' , 1, 'street_address', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_adOpt, '{ts escape="sql"}Supplemental Address 1{/ts}' , 2, 'supplemental_address_1', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -707,6 +707,7 @@ VALUES (@option_group_id_mp, 'Maildir', 2, 'Maildir', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), (@option_group_id_mp, 'POP3', 3, 'POP3', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL , NULL), (@option_group_id_mp, 'Localdir', 4, 'Localdir', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_mp, 'IMAP XOAUTH2', 5, 'IMAP_XOAUTH2', NULL, 0, NULL, 5, NULL, 0, 0, 0, NULL, NULL , NULL), -- priority (@option_group_id_priority, '{ts escape="sql"}Urgent{/ts}', 1, 'Urgent', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -740,7 +741,6 @@ VALUES (@option_group_id_website, 'Work', 1, 'Work', NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Main', 2, 'Main', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Facebook', 3, 'Facebook', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_website, 'Google+', 4, 'Google_', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'Instagram', 5, 'Instagram', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'LinkedIn', 6, 'LinkedIn', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_website, 'MySpace', 7, 'MySpace', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), @@ -925,17 +925,17 @@ VALUES (@option_group_id_name_badge, '{ts escape="sql"}Hanging Badge 3-3/4" x 4-3"/4{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"times","font-size":6,"font-style":"","NX":2,"NY":2,"metric":"mm","lMargin":10,"tMargin":28,"SpaceX":0,"SpaceY":0,"width":96,"height":121,"lPadding":5,"tPadding":5}{/literal}', 'Hanging Badge 3-3/4" x 4-3"/4', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), -- Mailing Label Formats - (@option_group_id_label, '{ts escape="sql"}Avery 3475{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":10,"font-style":"","metric":"mm","lMargin":0,"tMargin":5,"NX":3,"NY":8,"SpaceX":0,"SpaceY":0,"width":70,"height":36,"lPadding":5.08,"tPadding":5.08}{/literal}', '3475', 'Avery', NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 5160{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.21975,"tMargin":0.5,"NX":3,"NY":10,"SpaceX":0.14,"SpaceY":0,"width":2.5935,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5160', 'Avery', NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 5161{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.175,"tMargin":0.5,"NX":2,"NY":10,"SpaceX":0.15625,"SpaceY":0,"width":4,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5161', 'Avery', NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 5162{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.1525,"tMargin":0.88,"NX":2,"NY":7,"SpaceX":0.195,"SpaceY":0,"width":4,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5162', 'Avery', NULL, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 5163{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.5,"NX":2,"NY":5,"SpaceX":0.14,"SpaceY":0,"width":4,"height":2,"lPadding":0.20,"tPadding":0.20}{/literal}', '5163', 'Avery', NULL, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 5164{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":12,"font-style":"","metric":"in","lMargin":0.156,"tMargin":0.5,"NX":2,"NY":3,"SpaceX":0.1875,"SpaceY":0,"width":4,"height":3.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5164', 'Avery', NULL, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery 8600{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"mm","lMargin":7.1,"tMargin":19,"NX":3,"NY":10,"SpaceX":9.5,"SpaceY":3.1,"width":66.6,"height":25.4,"lPadding":5.08,"tPadding":5.08}{/literal}', '8600', 'Avery', NULL, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery L7160{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.6,"NX":3,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7160', 'Avery', NULL, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery L7161{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.35,"NX":3,"NY":6,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.83,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7161', 'Avery', NULL, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery L7162{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.51,"NX":2,"NY":8,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7162', 'Avery', NULL, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), - (@option_group_id_label, '{ts escape="sql"}Avery L7163{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.6,"NX":2,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7163', 'Avery', NULL, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 3475{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":10,"font-style":"","metric":"mm","lMargin":0,"tMargin":5,"NX":3,"NY":8,"SpaceX":0,"SpaceY":0,"width":70,"height":36,"lPadding":5.08,"tPadding":5.08}{/literal}', '3475', 'Avery', NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5160{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.21975,"tMargin":0.5,"NX":3,"NY":10,"SpaceX":0.14,"SpaceY":0,"width":2.5935,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5160', 'Avery', NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5161{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.175,"tMargin":0.5,"NX":2,"NY":10,"SpaceX":0.15625,"SpaceY":0,"width":4,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5161', 'Avery', NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5162{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.1525,"tMargin":0.88,"NX":2,"NY":7,"SpaceX":0.195,"SpaceY":0,"width":4,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5162', 'Avery', NULL, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5163{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.5,"NX":2,"NY":5,"SpaceX":0.14,"SpaceY":0,"width":4,"height":2,"lPadding":0.20,"tPadding":0.20}{/literal}', '5163', 'Avery', NULL, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5164{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":12,"font-style":"","metric":"in","lMargin":0.156,"tMargin":0.5,"NX":2,"NY":3,"SpaceX":0.1875,"SpaceY":0,"width":4,"height":3.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5164', 'Avery', NULL, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 8600{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"dejavusans","font-size":8,"font-style":"","metric":"mm","lMargin":7.1,"tMargin":19,"NX":3,"NY":10,"SpaceX":9.5,"SpaceY":3.1,"width":66.6,"height":25.4,"lPadding":5.08,"tPadding":5.08}{/literal}', '8600', 'Avery', NULL, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7160{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.6,"NX":3,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7160', 'Avery', NULL, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7161{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.35,"NX":3,"NY":6,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.83,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7161', 'Avery', NULL, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7162{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.51,"NX":2,"NY":8,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7162', 'Avery', NULL, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7163{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"dejavusans","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.6,"NX":2,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7163', 'Avery', NULL, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), -- Communication Styles (@option_group_id_communication_style, '{ts escape="sql"}Formal{/ts}' , 1, 'formal' , NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), diff --git a/civicrm/xml/templates/civicrm_msg_template.tpl b/civicrm/xml/templates/civicrm_msg_template.tpl index 805a67cba4502ed96567c20632755d6714e44dff..b664df6674688f173fcf434df3f15c27ea01e7fd 100644 --- a/civicrm/xml/templates/civicrm_msg_template.tpl +++ b/civicrm/xml/templates/civicrm_msg_template.tpl @@ -106,16 +106,16 @@ 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`/../../xml/templates/message_templates/`$vName`_subject.tpl"} - {fetch assign=text file="`$smarty.const.SMARTY_DIR`/../../xml/templates/message_templates/`$vName`_text.tpl"} - {fetch assign=html file="`$smarty.const.SMARTY_DIR`/../../xml/templates/message_templates/`$vName`_html.tpl"} + {fetch assign=subject file="`$gencodeXmlDir`/templates/message_templates/`$vName`_subject.tpl"} + {fetch assign=text file="`$gencodeXmlDir`/templates/message_templates/`$vName`_text.tpl"} + {fetch assign=html file="`$gencodeXmlDir`/templates/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} {php} - $dir = SMARTY_DIR . '/../../xml/templates/message_templates/sample'; + $dir = $this->_tpl_vars['gencodeXmlDir'] . '/templates/message_templates/sample'; $templates = array(); foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { $templates[] = array('name' => basename($filename, '.tpl'), 'filename' => "$dir/$filename"); diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl index c68ad33d0a7f919ae4eb891507f56ec90e2c1b64..4f7b8819f3bcee8a36bfb359cbeb7adf193f3ab2 100644 --- a/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl @@ -37,6 +37,14 @@ {ts}Contribution Information{/ts} </th> </tr> + <tr> + <td {$labelStyle}> + {ts}Contributor Name{/ts} + </td> + <td {$valueStyle}> + {contact.display_name} + </td> + </tr> <tr> <td {$labelStyle}> {ts}Financial Type{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl index 2012417303498e1525d53ba89a3d87c0440a5b21..50e0cd4e3708dec1b4946cdd6568e8064c34133b 100644 --- a/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl @@ -8,6 +8,7 @@ {ts}Contribution Information{/ts} =========================================================== +{ts}Contributor{/ts}: {contact.display_name} {ts}Financial Type{/ts}: {$formValues.contributionType_name} {if $lineItem} {foreach from=$lineItem item=value key=priceset} diff --git a/civicrm/xml/templates/message_templates/participant_confirm_html.tpl b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl index 75745fd10fd3d1a30be30358435c95593bb6fc6a..ed1d2b7b0db90d4d9f71837e27f653c073aedf6f 100644 --- a/civicrm/xml/templates/message_templates/participant_confirm_html.tpl +++ b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl @@ -39,7 +39,7 @@ {/if} {if $event.allow_selfcancelxfer } {ts}This event allows for{/ts} - {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participantID`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} <a href="{$selfService}"> {ts}self service cancel or transfer{/ts}</a> {/if} diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 54074b81d7f5d5dbe0448df751e5da1ec858918a..500e0126f413aaeacee7fcc40d563261f86c6723 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.22.1</version_no> + <version_no>5.23.0</version_no> </version> diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php index 9ce1a35e9300e299d12bcfbb3fd9e070e1117501..3750637d5512caa930772c82227774190dd6c4bd 100644 --- a/includes/civicrm.basepage.php +++ b/includes/civicrm.basepage.php @@ -300,6 +300,9 @@ class CiviCRM_For_WordPress_Basepage { restore_current_blog(); } + // Make sure Rewrite Rules are flushed. + delete_option( 'civicrm_rules_flushed' ); + return $page_id; } diff --git a/languages/civicrm.pot b/languages/civicrm.pot index 22349420e72fdbd042457fe592b7f43a0bd1c8a6..9250ed70afe67320db0a9b8536435164279ae1e7 100644 --- a/languages/civicrm.pot +++ b/languages/civicrm.pot @@ -1,184 +1,107 @@ -# Copyright (C) 2014 CiviCRM +# Copyright (C) 2020 CiviCRM # This file is distributed under the same license as the CiviCRM package. msgid "" msgstr "" -"Project-Id-Version: CiviCRM 4.6\n" -"Report-Msgid-Bugs-To: http://wordpress.org/tag/civicrm\n" -"POT-Creation-Date: 2014-11-11 09:48:56+00:00\n" +"Project-Id-Version: CiviCRM 4.7\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/civicrm\n" +"POT-Creation-Date: 2020-02-14 10:30:38+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" -#: assets/templates/civicrm.modal.php:49 -msgid "Can't find your form? Make sure it is active." +#: civicrm/CRM/Admin/Page/Access.php:43 +msgid "behavior.modal" msgstr "" -#: assets/templates/civicrm.modal.php:54 -msgid "Select Page Type" -msgstr "" - -#: assets/templates/civicrm.modal.php:56 -msgid "Contribution Page" -msgstr "" - -#: assets/templates/civicrm.modal.php:59 -msgid "Event Page" -msgstr "" - -#: assets/templates/civicrm.modal.php:62 -msgid "Profile" -msgstr "" - -#: assets/templates/civicrm.modal.php:64 -msgid "User Dashboard" -msgstr "" - -#: assets/templates/civicrm.modal.php:66 -msgid "Petition" -msgstr "" - -#: assets/templates/civicrm.modal.php:116 -msgid "Event Info Page" -msgstr "" - -#: assets/templates/civicrm.modal.php:118 -msgid "Event Registration Page" -msgstr "" - -#: assets/templates/civicrm.modal.php:125 -msgid "Live Page" -msgstr "" - -#: assets/templates/civicrm.modal.php:127 -msgid "Test Drive" -msgstr "" - -#: assets/templates/civicrm.modal.php:134 -msgid "Create" -msgstr "" - -#: assets/templates/civicrm.modal.php:136 -msgid "Edit" -msgstr "" - -#: assets/templates/civicrm.modal.php:138 -msgid "View" -msgstr "" - -#: assets/templates/civicrm.modal.php:140 -msgid "Search/Public Directory" -msgstr "" - -#: assets/templates/civicrm.modal.php:145 -msgid "If you only insert one shortcode, you can choose to override all page content with the content of the shortcode." -msgstr "" - -#: assets/templates/civicrm.modal.php:147 -msgid "Override page content" -msgstr "" - -#: assets/templates/civicrm.modal.php:149 -msgid "Don't override" -msgstr "" - -#: assets/templates/civicrm.modal.php:156 -msgid "Cancel" -msgstr "" - -#: civicrm.php:168 civicrm.php:260 +#: civicrm.php:241 civicrm.php:337 msgid "Only one instance of CiviCRM_For_WordPress please" msgstr "" -#: civicrm.php:175 +#: civicrm.php:250 msgid "Please do not serialize CiviCRM_For_WordPress" msgstr "" -#: civicrm.php:539 -msgid "CiviCRM requires PHP Version %s or greater. You are running PHP Version %s" +#: civicrm.php:853 +msgid "CiviCRM requires PHP version %1$s or greater. You are running PHP version %2$s" msgstr "" -#: civicrm.php:567 +#: civicrm.php:902 msgid "Please review the <a href=\"%s\">WordPress Installation Guide</a> and the <a href=\"%s\">Trouble-shooting page</a> for assistance. If you still need help installing, you can often find solutions to your issue by searching for the error message in the <a href=\"%s\">installation support section of the community forum</a>." msgstr "" -#: civicrm.php:575 +#: civicrm.php:910 msgid "Click <a href=\"%s\">here</a> for fresh install." msgstr "" -#: civicrm.php:604 +#: civicrm.php:939 msgid "Oops! - The path for including CiviCRM code files is not set properly. Most likely there is an error in the <em>civicrm_root</em> setting in your CiviCRM settings file (%s)." msgstr "" -#: civicrm.php:609 +#: civicrm.php:944 msgid "civicrm_root is currently set to: <em>%s</em>." msgstr "" -#: civicrm.php:705 civicrm.php:706 civicrm.php:882 -#: includes/civicrm.shortcodes.modal.php:106 -#: includes/civicrm.shortcodes.php:417 +#: civicrm.php:1044 civicrm.php:1045 includes/civicrm.basepage.php:280 +#: includes/civicrm.shortcodes.modal.php:93 includes/civicrm.shortcodes.php:489 msgid "CiviCRM" msgstr "" -#: civicrm.php:724 civicrm.php:725 +#: civicrm.php:1060 civicrm.php:1061 msgid "CiviCRM Installer" msgstr "" -#: civicrm.php:779 +#: civicrm.php:1148 msgid "CiviCRM is almost ready." msgstr "" -#: civicrm.php:782 +#: civicrm.php:1151 msgid "You must <a href=\"%s\">configure CiviCRM</a> for it to work." msgstr "" -#: civicrm.php:885 +#: includes/civicrm.basepage.php:283 msgid "Do not delete this page. Page content is generated by CiviCRM." msgstr "" -#: includes/civicrm.shortcodes.modal.php:106 +#: includes/civicrm.shortcodes.modal.php:93 msgid "Add CiviCRM Public Pages" msgstr "" -#: includes/civicrm.shortcodes.modal.php:345 -msgid "Please select a CiviCRM front-end page type" +#: includes/civicrm.shortcodes.php:302 includes/civicrm.shortcodes.php:355 +msgid "Do not know how to handle this shortcode." msgstr "" -#: includes/civicrm.shortcodes.php:322 +#: includes/civicrm.shortcodes.php:365 msgid "Content via CiviCRM" msgstr "" -#: includes/civicrm.shortcodes.php:405 +#: includes/civicrm.shortcodes.php:476 msgid "Find out more..." msgstr "" -#: includes/civicrm.shortcodes.php:416 +#: includes/civicrm.shortcodes.php:488 msgid "CiviCRM.org - Growing and Sustaining Relationships" msgstr "" -#: includes/civicrm.shortcodes.php:419 +#: includes/civicrm.shortcodes.php:491 msgid "Empowered by %s" msgstr "" -#: includes/civicrm.shortcodes.php:606 includes/civicrm.shortcodes.php:644 -msgid "Do not know how to handle this shortcode" -msgstr "" - -#: includes/civicrm.shortcodes.php:711 +#: includes/civicrm.shortcodes.php:850 msgid "Register for %s" msgstr "" -#: includes/civicrm.shortcodes.php:743 +#: includes/civicrm.shortcodes.php:882 msgid "Dashboard" msgstr "" -#: includes/civicrm.users.php:125 +#: includes/civicrm.users.php:138 msgid "You do not have permission to access this content." msgstr "" -#: includes/civicrm.users.php:262 +#: includes/civicrm.users.php:292 msgid "Anonymous User" msgstr "" #. Plugin Name of the plugin/theme @@ -186,7 +109,7 @@ msgid "CiviCRM" msgstr "" #. Plugin URI of the plugin/theme -msgid "http://wiki.civicrm.org/confluence/display/CRMDOC/WordPress+Installation+Guide+for+CiviCRM+4.5" +msgid "https://docs.civicrm.org/sysadmin/en/latest/install/wordpress/" msgstr "" #. Description of the plugin/theme @@ -198,5 +121,5 @@ msgid "CiviCRM LLC" msgstr "" #. Author URI of the plugin/theme -msgid "http://civicrm.org/" +msgid "https://civicrm.org/" msgstr "" diff --git a/wp-rest/.editorconfig b/wp-rest/.editorconfig deleted file mode 100644 index 09dc3747d33a42560841336306fc106d96b39a47..0000000000000000000000000000000000000000 --- a/wp-rest/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -# EditorConfig is awesome: https://editorconfig.org - -# Not top-most EditorConfig file -root = false - -# Tab indentation -[*.php] -indent_style = tab -indent_size = 4 diff --git a/wp-rest/Autoloader.php b/wp-rest/Autoloader.php deleted file mode 100644 index 01118666154c90313681973608f4d3444fd69a6b..0000000000000000000000000000000000000000 --- a/wp-rest/Autoloader.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Autoloader class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST; - -class Autoloader { - - /** - * Instance. - * - * @since 0.1 - * @var string - */ - private static $instance = null; - - /** - * Namespace. - * - * @since 0.1 - * @var string - */ - private $namespace = 'CiviCRM_WP_REST'; - - /** - * Autoloader directory sources. - * - * @since 0.1 - * @var array - */ - private static $source_directories = []; - - /** - * Constructor. - * - * @since 0.1 - */ - private function __construct() { - - $this->register_autoloader(); - - } - - /** - * Creates an instance of this class. - * - * @since 0.1 - */ - private static function instance() { - - if ( ! self::$instance ) self::$instance = new self; - - } - - /** - * Adds a directory source. - * - * @since 0.1 - * @param string $source The source path - */ - public static function add_source( string $source_path ) { - - // make sure we have an instance - self::instance(); - - if ( ! is_readable( trailingslashit( $source_path ) ) ) - return \WP_Error( 'civicrm_wp_rest_error', sprintf( __( 'The source %s is not readable.', 'civicrm' ), $source ) ); - - self::$source_directories[] = $source_path; - - } - - /** - * Registers the autoloader. - * - * @since 0.1 - * @return bool Wehather the autoloader has been registered or not - */ - private function register_autoloader() { - - return spl_autoload_register( [ $this, 'autoload' ] ); - - } - - /** - * Loads the classes. - * - * @since 0.1 - * @param string $class_name The class name to load - */ - private function autoload( $class_name ) { - - $parts = explode( '\\', $class_name ); - - if ( $this->namespace !== $parts[0] ) return; - - // remove namespace and join class path - $class_path = str_replace( '_', '-', implode( DIRECTORY_SEPARATOR, array_slice( $parts, 1 ) ) ); - - array_map( function( $source_path ) use ( $class_path ) { - - $path = $source_path . $class_path . '.php'; - - if ( ! file_exists( $path ) ) return; - - require $path; - - }, static::$source_directories ); - - } - -} diff --git a/wp-rest/Civi/Mailing-Hooks.php b/wp-rest/Civi/Mailing-Hooks.php deleted file mode 100644 index b765e1c91194118a2e265819ddd9bf1099d6a603..0000000000000000000000000000000000000000 --- a/wp-rest/Civi/Mailing-Hooks.php +++ /dev/null @@ -1,197 +0,0 @@ -<?php -/** - * CiviCRM Mailing_Hooks class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Civi; - -class Mailing_Hooks { - - /** - * Mailing Url endpoint. - * - * @since 0.1 - * @var string - */ - public $url_endpoint; - - /** - * Mailing Open endpoint. - * - * @since 0.1 - * @var string - */ - public $open_endpoint; - - /** - * The parsed WordPress REST url. - * - * @since 1.0 - * @var array - */ - public $parsed_rest_url; - - /** - * Constructor. - * - * @since 0.1 - */ - public function __construct() { - - $this->url_endpoint = rest_url( 'civicrm/v3/url' ); - - $this->open_endpoint = rest_url( 'civicrm/v3/open' ); - - $this->parsed_rest_url = parse_url( rest_url() ); - - } - - /** - * Register hooks. - * - * @since 0.1 - */ - public function register_hooks() { - - add_filter( 'civicrm_alterMailParams', [ $this, 'do_mailing_urls' ], 10, 2 ); - - add_filter( 'civicrm_alterExternUrl', [ $this, 'alter_mailing_extern_urls' ], 10, 6 ); - - } - - /** - * Replaces the open, and click - * tracking URLs for a mailing (CiviMail) - * with thier REST counterparts. - * - * @uses 'civicrm_alterExternUrl' filter - * - * @param \GuzzleHttp\Psr7\Uri $url - * @param string|null $path - * @param string|null $query - * @param string|null $fragment - * @param bool|null $absolute - * @param bool|null $isSSL - */ - public function alter_mailing_extern_urls( &$url, $path, $query, $fragment, $absolute, $isSSL ) { - - if ( $path == 'extern/url' ) { - $url = $url - ->withHost( $this->parsed_rest_url['host'] ) - ->withPath( "{$this->parsed_rest_url['path']}civicrm/v3/url" ); - } - - if ( $path == 'extern/open' ) { - $url = $url - ->withHost( $this->parsed_rest_url['host'] ) - ->withPath( "{$this->parsed_rest_url['path']}civicrm/v3/open" ); - } - - } - - /** - * Filters the mailing html and replaces calls to 'extern/url.php' and - * 'extern/open.php' with their REST counterparts 'civicrm/v3/url' and 'civicrm/v3/open'. - * - * @uses 'civicrm_alterMailParams' - * - * @since 0.1 - * @param array &$params Mail params - * @param string $context The Context - * @return array $params The filtered Mail params - */ - public function do_mailing_urls( &$params, $context ) { - - if ( in_array( $context, [ 'civimail', 'flexmailer' ] ) ) { - - $params['html'] = $this->is_mail_tracking_url_alterable( $params['html'] ) - ? $this->replace_html_mailing_tracking_urls( $params['html'] ) - : $params['html']; - - $params['text'] = $this->is_mail_tracking_url_alterable( $params['text'] ) - ? $this->replace_text_mailing_tracking_urls( $params['text'] ) - : $params['text']; - - } - - return $params; - - } - - /** - * Replace html mailing tracking urls. - * - * @since 0.1 - * @param string $contnet The mailing content - * @return string $content The mailing content - */ - public function replace_html_mailing_tracking_urls( string $content ) { - - $doc = \phpQuery::newDocument( $content ); - - foreach ( $doc[ '[href*="civicrm/extern/url.php"], [src*="civicrm/extern/open.php"]' ] as $element ) { - - $href = pq( $element )->attr( 'href' ); - $src = pq( $element )->attr( 'src' ); - - // replace extern/url - if ( strpos( $href, 'civicrm/extern/url.php' ) ) { - - $query_string = strstr( $href, '?' ); - pq( $element )->attr( 'href', $this->url_endpoint . $query_string ); - - } - - // replace extern/open - if ( strpos( $src, 'civicrm/extern/open.php' ) ) { - - $query_string = strstr( $src, '?' ); - pq( $element )->attr( 'src', $this->open_endpoint . $query_string ); - - } - - unset( $href, $src, $query_string ); - - } - - return $doc->html(); - - } - - /** - * Replace text mailing tracking urls. - * - * @since 0.1 - * @param string $contnet The mailing content - * @return string $content The mailing content - */ - public function replace_text_mailing_tracking_urls( string $content ) { - - // replace extern url - $content = preg_replace( '/http.*civicrm\/extern\/url\.php/i', $this->url_endpoint, $content ); - - // replace open url - $content = preg_replace( '/http.*civicrm\/extern\/open\.php/i', $this->open_endpoint, $content ); - - return $content; - - } - - /** - * Checks whether for a given mail - * content (text or html) the tracking URLs - * are alterable/need to be altered. - * - * @since 0.1 - * @param string $content The mail content (text or html) - * @return bool $is_alterable - */ - public function is_mail_tracking_url_alterable( string $content ) { - - return strpos( $content, 'civicrm/extern/url.php' ) || strpos( $content, 'civicrm/extern/open.php' ); - - } - -} diff --git a/wp-rest/Controller/AuthorizeIPN.php b/wp-rest/Controller/AuthorizeIPN.php deleted file mode 100644 index 4cd9da9a97786f3176f55ec59c2528a77b774554..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/AuthorizeIPN.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * AuthorizeIPN controller class. - * - * Replacement for CiviCRM's 'extern/authorizeIPN.php'. - * - * @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class AuthorizeIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'authorizeIPN'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/authorizeIPN/params', $request->get_params(), $request ); - - $authorize_IPN = new \CRM_Core_Payment_AuthorizeNetIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=AuthNet', $params ); - - /** - * Filter AuthorizeIPN object. - * - * @param CRM_Core_Payment_AuthorizeNetIPN $authorize_IPN - * @param array $params - * @param WP_REST_Request $request - */ - $authorize_IPN = apply_filters( 'civi_wp_rest/controller/authorizeIPN/instance', $authorize_IPN, $params, $request ); - - try { - - if ( ! method_exists( $authorize_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $authorize_IPN ) ) - return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $authorize_IPN ) ) ); - - $result = $authorize_IPN->main(); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Checks whether object is an instance of CRM_Core_Payment_AuthorizeNetIPN or CRM_Core_Payment_BaseIPN. - * - * Needed because the instance is being filtered through 'civi_wp_rest/controller/authorizeIPN/instance'. - * - * @since 0.1 - * @param CRM_Core_Payment_AuthorizeNetIPN|CRM_Core_Payment_BaseIPN $object - * @return bool - */ - public function instance_of_crm_base_ipn( $object ) { - - return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_AuthorizeNetIPN; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Base.php b/wp-rest/Controller/Base.php deleted file mode 100644 index 61ab9b3c63d6f239992cb464bdff3e1224b8d50a..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Base.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php -/** - * Base controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -use CiviCRM_WP_REST\Endpoint\Endpoint_Interface; - -abstract class Base extends \WP_REST_Controller implements Endpoint_Interface { - - /** - * Route namespace. - * - * @since 0.1 - * @var string - */ - protected $namespace = 'civicrm/v3'; - - /** - * Gets the endpoint namespace. - * - * @since 0.1 - * @return string $namespace - */ - public function get_namespace() { - - return $this->namespace; - - } - - /** - * Gets the rest base route. - * - * @since 0.1 - * @return string $rest_base - */ - public function get_rest_base() { - - return '/' . $this->rest_base; - - } - - /** - * Retrieves the endpoint ie. '/civicrm/v3/rest'. - * - * @since 0.1 - * @return string $rest_base - */ - public function get_endpoint() { - - return '/' . $this->get_namespace() . $this->get_rest_base(); - - } - - /** - * Checks whether the requested route is equal to this endpoint. - * - * @since 0.1 - * @param WP_REST_Request $request - * @return bool $is_current_endpoint True if it's equal, false otherwise - */ - public function is_current_endpoint( $request ) { - - return $this->get_endpoint() == $request->get_route(); - - } - - /** - * Authorization status code. - * - * @since 0.1 - * @return int $status - */ - protected function authorization_status_code() { - - $status = 401; - - if ( is_user_logged_in() ) $status = 403; - - return $status; - - } - - /** - * Wrapper for WP_Error. - * - * @since 0.1 - * @param string|\CiviCRM_API3_Exception|\WP_Error $error - * @param mixed $data Error data - * @return WP_Error $error - */ - protected function civi_rest_error( $error, $data = [] ) { - - if ( $error instanceof \CiviCRM_API3_Exception ) { - - return $error->getExtraParams(); - - } elseif ( $error instanceof \WP_Error ) { - - return $error; - - } - - return new \WP_Error( 'civicrm_rest_api_error', $error, empty( $data ) ? [ 'status' => $this->authorization_status_code() ] : $data ); - - } - -} diff --git a/wp-rest/Controller/Cxn.php b/wp-rest/Controller/Cxn.php deleted file mode 100644 index 7f7cca5c5621c3eb3441ca7060d5e1048eb85ade..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Cxn.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php -/** - * Cxn controller class. - * - * CiviConnect endpoint, replacement for CiviCRM's 'extern/cxn.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Cxn extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'cxn'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/cxn/params', $request->get_params(), $request ); - - // init connection server - $cxn = \CRM_Cxn_BAO_Cxn::createApiServer(); - - /** - * Filter connection server object. - * - * @param Civi\Cxn\Rpc\ApiServer $cxn - * @param array $params - * @param WP_REST_Request $request - */ - $cxn = apply_filters( 'civi_wp_rest/controller/cxn/instance', $cxn, $params, $request ); - - try { - - $result = $cxn->handle( $request->get_body() ); - - } catch ( Civi\Cxn\Rpc\Exception\CxnException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\ExpiredCertException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\InvalidCertException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\InvalidMessageException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } catch ( Civi\Cxn\Rpc\Exception\GarbledMessageException $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } - - /** - * Bypass WP and send request from Cxn. - */ - add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $result ) { - - // Civi\Cxn\Rpc\Message->send() - $result->send(); - - return true; - - }, 10, 4 ); - - return rest_ensure_response( $result ); - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Open.php b/wp-rest/Controller/Open.php deleted file mode 100644 index 450ef991a34897a169761dc9c1fdfcc57b4a0bf5..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Open.php +++ /dev/null @@ -1,129 +0,0 @@ -<?php -/** - * Open controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Open extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'open'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get item. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - $queue_id = $request->get_param( 'q' ); - - // track open - \CRM_Mailing_Event_BAO_Opened::open( $queue_id ); - - // serve tracker file - add_filter( 'rest_pre_serve_request', [ $this, 'serve_tracker_file' ], 10, 4 ); - - } - - /** - * Serves the tracker gif file. - * - * @since 0.1 - * @param bool $served Whether the request has been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - * @return bool $served Whether the request has been served - */ - public function serve_tracker_file( $served, $result, $request, $server ) { - - // tracker file path - $file = CIVICRM_PLUGIN_DIR . 'civicrm/i/tracker.gif'; - - // set headers - $server->send_header( 'Content-type', 'image/gif' ); - $server->send_header( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0' ); - $server->send_header( 'Content-Description', 'File Transfer' ); - $server->send_header( 'Content-Disposition', 'inline; filename=tracker.gif' ); - $server->send_header( 'Content-Length', filesize( $file ) ); - - $buffer = readfile( $file ); - - return true; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm/v3/open', - 'description' => __( 'CiviCRM Open endpoint', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'q' ], - 'properties' => [ - 'q' => [ - 'type' => 'integer' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'q' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Controller/PayPalIPN.php b/wp-rest/Controller/PayPalIPN.php deleted file mode 100644 index 5b5c38004525287b69024d51ea378cb5615f60bc..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/PayPalIPN.php +++ /dev/null @@ -1,134 +0,0 @@ -<?php -/** - * PayPalIPN controller class. - * - * PayPal IPN endpoint, replacement for CiviCRM's 'extern/ipn.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class PayPalIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'ipn'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/ipn/params', $request->get_params(), $request ); - - if ( $request->get_method() == 'GET' ) { - - // paypal standard - $paypal_IPN = new \CRM_Core_Payment_PayPalIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=PayPal_Standard', $params ); - - } else { - - // paypal pro - $paypal_IPN = new \CRM_Core_Payment_PayPalProIPN( $params ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=PayPal', $params ); - - } - - /** - * Filter PayPalIPN object. - * - * @param CRM_Core_Payment_PayPalIPN|CRM_Core_Payment_PayPalProIPN $paypal_IPN - * @param array $params - * @param WP_REST_Request $request - */ - $paypal_IPN = apply_filters( 'civi_wp_rest/controller/ipn/instance', $paypal_IPN, $params, $request ); - - try { - - if ( ! method_exists( $paypal_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $paypal_IPN ) ) - return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $paypal_IPN ) ) ); - - $result = $paypal_IPN->main(); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Checks whether object is an instance of CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN. - * - * Needed because the instance is being filtered through 'civi_wp_rest/controller/ipn/instance'. - * - * @since 0.1 - * @param CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN $object - * @return bool - */ - public function instance_of_crm_base_ipn( $object ) { - - return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_PayPalProIPN || $object instanceof \CRM_Core_Payment_PayPalIPN; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/PxIPN.php b/wp-rest/Controller/PxIPN.php deleted file mode 100644 index d68fc8d787ae3e87eb449f36b459e0b8d24d845a..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/PxIPN.php +++ /dev/null @@ -1,139 +0,0 @@ -<?php -/** - * PxIPN controller class. - * - * PxPay IPN endpoint, replacement for CiviCRM's 'extern/pxIPN.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class PxIPN extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'pxIPN'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter payment processor params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( - 'civi_wp_rest/controller/pxIPN/params', - $this->get_payment_processor_args( $request ), - $request - ); - - // log notification - \Civi::log()->alert( 'payment_notification processor_name=Payment_Express', $params ); - - try { - - $result = \CRM_Core_Payment_PaymentExpressIPN::main( ...$params ); - - } catch ( \CRM_Core_Exception $e ) { - - \Civi::log()->error( $e->getMessage() ); - \Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] ); - \Civi::log()->error( 'REQUEST ', [ 'params' => $params ] ); - - return $this->civi_rest_error( $e->getMessage() ); - - } - - return rest_ensure_response( $result ); - - } - - /** - * Get payment processor necessary params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $args - */ - public function get_payment_processor_args( $request ) { - - // get payment processor types - $payment_processor_types = civicrm_api3( 'PaymentProcessor', 'getoptions', [ - 'field' => 'payment_processor_type_id' - ] ); - - // payment processor params - $params = apply_filters( 'civi_wp_rest/controller/pxIPN/payment_processor_params', [ - 'user_name' => $request->get_param( 'userid' ), - 'payment_processor_type_id' => array_search( - 'DPS Payment Express', - $payment_processor_types['values'] - ), - 'is_active' => 1, - 'is_test' => 0 - ] ); - - // get payment processor - $payment_processor = civicrm_api3( 'PaymentProcessor', 'get', $params ); - - $args = $payment_processor['values'][$payment_processor['id']]; - - $method = empty( $args['signature'] ) ? 'pxpay' : 'pxaccess'; - - return [ - $method, - $request->get_param( 'result' ), - $args['url_site'], - $args['user_name'], - $args['password'], - $args['signature'] - ]; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Rest.php b/wp-rest/Controller/Rest.php deleted file mode 100644 index 1fe15caae97793ce16d4e3f7c9c9a06da58674f4..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Rest.php +++ /dev/null @@ -1,561 +0,0 @@ -<?php -/** - * Rest controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Rest extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'rest'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_items' ], - 'permission_callback' => [ $this, 'permissions_check' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Check get permission. - * - * @since 0.1 - * @param WP_REST_Request $request - * @return bool - */ - public function permissions_check( $request ) { - - /** - * Opportunity to bypass CiviCRM's - * authentication ('api_key' and 'site_key'), - * return 'true' or 'false' to grant - * or deny access to this endpoint. - * - * To deny and throw an error, return either - * a string, an array, or a \WP_Error. - * - * NOTE: if you use your won authentication, - * you still must log in the user in order - * to respect/apply CiviCRM ACLs. - * - * @since 0.1 - * @param null|bool|string|array|\WP_Error $grant_auth Grant, deny, or error - * @param \WP_REST_Request $request The request - */ - $grant_auth = apply_filters( 'civi_wp_rest/controller/rest/permissions_check', null, $request ); - - if ( is_bool( $grant_auth ) ) { - - return $grant_auth; - - } elseif ( is_string( $grant_auth ) ) { - - return $this->civi_rest_error( $grant_auth ); - - } elseif ( is_array( $grant_auth ) ) { - - return $this->civi_rest_error( __( 'CiviCRM WP REST permission check error.', 'civicrm' ), $grant_auth ); - - } elseif ( $grant_auth instanceof \WP_Error ) { - - return $grant_auth; - - } else { - - if ( ! $this->is_valid_api_key( $request ) ) - return $this->civi_rest_error( __( 'Param api_key is not valid.', 'civicrm' ) ); - - if ( ! $this->is_valid_site_key() ) - return $this->civi_rest_error( __( 'Param key is not valid.', 'civicrm' ) ); - - return true; - - } - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_items( $request ) { - - /** - * Filter formatted api params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/rest/api_params', $this->get_formatted_api_params( $request ), $request ); - - try { - - $items = civicrm_api3( ...$params ); - - } catch ( \CiviCRM_API3_Exception $e ) { - - $items = $this->civi_rest_error( $e ); - - } - - if ( ! isset( $items ) || empty( $items ) ) - return rest_ensure_response( [] ); - - /** - * Filter civi api result. - * - * @since 0.1 - * @param array $items - * @param WP_REST_Request $request - */ - $data = apply_filters( 'civi_wp_rest/controller/rest/api_result', $items, $params, $request ); - - // only collections of items, ie any action but 'getsingle' - if ( isset( $data['values'] ) ) { - - $data['values'] = array_reduce( $items['values'] ?? $items, function( $items, $item ) use ( $request ) { - - $response = $this->prepare_item_for_response( $item, $request ); - - $items[] = $this->prepare_response_for_collection( $response ); - - return $items; - - }, [] ); - - } - - $response = rest_ensure_response( $data ); - - // check wheather we need to serve xml or json - if ( ! in_array( 'json', array_keys( $request->get_params() ) ) ) { - - /** - * Adds our response holding Civi data before dispatching. - * - * @since 0.1 - * @param WP_HTTP_Response $result Result to send to client - * @param WP_REST_Server $server The REST server - * @param WP_REST_Request $request The request - * @return WP_HTTP_Response $result Result to send to client - */ - add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) { - - return $response; - - }, 10, 3 ); - - // serve xml - add_filter( 'rest_pre_serve_request', [ $this, 'serve_xml_response' ], 10, 4 ); - - } else { - - // return json - return $response; - - } - - } - - /** - * Get formatted api params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params - */ - public function get_formatted_api_params( $request ) { - - $args = $request->get_params(); - - $entity = $args['entity']; - $action = $args['action']; - - // unset unnecessary args - unset( $args['entity'], $args['action'], $args['key'], $args['api_key'] ); - - if ( ! isset( $args['json'] ) || is_numeric( $args['json'] ) ) { - - $params = $args; - - } else { - - $params = is_string( $args['json'] ) ? json_decode( $args['json'], true ) : []; - - } - - // ensure check permissions is enabled - $params['check_permissions'] = true; - - return [ $entity, $action, $params ]; - - } - - /** - * Matches the item data to the schema. - * - * @since 0.1 - * @param object $item - * @param WP_REST_Request $request - */ - public function prepare_item_for_response( $item, $request ) { - - return rest_ensure_response( $item ); - - } - - /** - * Serves XML response. - * - * @since 0.1 - * @param bool $served Whether the request has already been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - */ - public function serve_xml_response( $served, $result, $request, $server ) { - - // get xml from response - $xml = $this->get_xml_formatted_data( $result->get_data() ); - - // set content type header - $server->send_header( 'Content-Type', 'text/xml' ); - - echo $xml; - - return true; - - } - - /** - * Formats CiviCRM API result to XML. - * - * @since 0.1 - * @param array $data The CiviCRM api result - * @return string $xml The formatted xml - */ - protected function get_xml_formatted_data( array $data ) { - - // xml document - $xml = new \DOMDocument(); - - // result set element <ResultSet> - $result_set = $xml->createElement( 'ResultSet' ); - - // xmlns:xsi attribute - $result_set->setAttribute( 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance' ); - - // count attribute - if ( isset( $data['count'] ) ) $result_set->setAttribute( 'count', $data['count'] ); - - // build result from result => values - if ( isset( $data['values'] ) ) { - - array_map( function( $item ) use ( $result_set, $xml ) { - - // result element <Result> - $result = $xml->createElement( 'Result' ); - - // format item - $result = $this->get_xml_formatted_item( $item, $result, $xml ); - - // append result to result set - $result_set->appendChild( $result ); - - }, $data['values'] ); - - } else { - - // result element <Result> - $result = $xml->createElement( 'Result' ); - - // format item - $result = $this->get_xml_formatted_item( $data, $result, $xml ); - - // append result to result set - $result_set->appendChild( $result ); - - } - - // append result set - $xml->appendChild( $result_set ); - - return $xml->saveXML(); - - } - - /** - * Formats a single api result to xml. - * - * @since 0.1 - * @param array $item The single api result - * @param DOMElement $parent The parent element to append to - * @param DOMDocument $doc The document - * @return DOMElement $parent The parent element - */ - public function get_xml_formatted_item( array $item, \DOMElement $parent, \DOMDocument $doc ) { - - // build field => values - array_map( function( $field, $value ) use ( $parent, $doc ) { - - // entity field element - $element = $doc->createElement( $field ); - - // handle array values - if ( is_array( $value ) ) { - - array_map( function( $key, $val ) use ( $element, $doc ) { - - // child element, append underscore '_' otherwise createElement - // will throw an Invalid character exception as elements cannot start with a number - $child = $doc->createElement( '_' . $key, $val ); - - // append child - $element->appendChild( $child ); - - }, array_keys( $value ), $value ); - - } else { - - // assign value - $element->nodeValue = $value; - - } - - // append element - $parent->appendChild( $element ); - - }, array_keys( $item ), $item ); - - return $parent; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm/v3/rest', - 'description' => __( 'CiviCRM API3 WP rest endpoint wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'entity', 'action', 'params' ], - 'properties' => [ - 'is_error' => [ - 'type' => 'integer' - ], - 'version' => [ - 'type' => 'integer' - ], - 'count' => [ - 'type' => 'integer' - ], - 'values' => [ - 'type' => 'array' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'key' => [ - 'type' => 'string', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return $this->is_valid_site_key(); - - } - ], - 'api_key' => [ - 'type' => 'string', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return $this->is_valid_api_key( $request ); - - } - ], - 'entity' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ], - 'action' => [ - 'type' => 'string', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ], - 'json' => [ - 'type' => ['integer', 'string', 'array'], - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ) || is_array( $value ) || $this->is_valid_json( $value ); - - } - ] - ]; - - } - - /** - * Checks if string is a valid json. - * - * @since 0.1 - * @param string $param - * @return bool - */ - protected function is_valid_json( $param ) { - - $param = json_decode( $param, true ); - - if ( ! is_array( $param ) ) return false; - - return ( json_last_error() == JSON_ERROR_NONE ); - - } - - /** - * Validates the site key. - * - * @since 0.1 - * @return bool $is_valid_site_key - */ - private function is_valid_site_key() { - - return \CRM_Utils_System::authenticateKey( false ); - - } - - /** - * Validates the api key. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return bool $is_valid_api_key - */ - private function is_valid_api_key( $request ) { - - $api_key = $request->get_param( 'api_key' ); - - if ( ! $api_key ) return false; - - $contact_id = \CRM_Core_DAO::getFieldValue( 'CRM_Contact_DAO_Contact', $api_key, 'id', 'api_key' ); - - // validate contact and login - if ( $contact_id ) { - - $wp_user = $this->get_wp_user( $contact_id ); - - $this->do_user_login( $wp_user ); - - return true; - - } - - return false; - - } - - /** - * Get WordPress user data. - * - * @since 0.1 - * @param int $contact_id The contact id - * @return bool|WP_User $user The WordPress user data - */ - protected function get_wp_user( int $contact_id ) { - - try { - - // Get CiviCRM domain group ID from constant, if set. - $domain_id = defined( 'CIVICRM_DOMAIN_ID' ) ? CIVICRM_DOMAIN_ID : 0; - - // If this fails, get it from config. - if ( $domain_id === 0 ) { - $domain_id = \CRM_Core_Config::domainID(); - } - - // Call API. - $uf_match = civicrm_api3( 'UFMatch', 'getsingle', [ - 'contact_id' => $contact_id, - 'domain_id' => $domain_id, - ] ); - - } catch ( \CiviCRM_API3_Exception $e ) { - - return $this->civi_rest_error( $e->getMessage() ); - - } - - $wp_user = get_userdata( $uf_match['uf_id'] ); - - return $wp_user; - - } - - /** - * Logs in the WordPress user, needed to respect CiviCRM ACL and permissions. - * - * @since 0.1 - * @param WP_User $user - */ - protected function do_user_login( \WP_User $user ) { - - if ( is_user_logged_in() ) return; - - wp_set_current_user( $user->ID, $user->user_login ); - - wp_set_auth_cookie( $user->ID ); - - do_action( 'wp_login', $user->user_login, $user ); - - } - -} diff --git a/wp-rest/Controller/Soap.php b/wp-rest/Controller/Soap.php deleted file mode 100644 index 17402cc579a834ca8854014e683a53aad5011399..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Soap.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Soap controller class. - * - * Soap endpoint, replacement for CiviCRM's 'extern/soap.php'. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Soap extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'soap'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::ALLMETHODS, - 'callback' => [ $this, 'get_item' ] - ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter request params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/soap/params', $request->get_params(), $request ); - - // init soap server - $soap_server = new \SoapServer( - NULL, - [ - 'uri' => 'urn:civicrm', - 'soap_version' => SOAP_1_2, - ] - ); - - $crm_soap_server = new \CRM_Utils_SoapServer(); - - $soap_server->setClass( 'CRM_Utils_SoapServer', \CRM_Core_Config::singleton()->userFrameworkClass ); - $soap_server->setPersistence( SOAP_PERSISTENCE_SESSION ); - - /** - * Bypass WP and send request from Soap server. - */ - add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $soap_server ) { - - $soap_server->handle(); - - return true; - - }, 10, 4 ); - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() {} - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() {} - -} diff --git a/wp-rest/Controller/Url.php b/wp-rest/Controller/Url.php deleted file mode 100644 index 6f1009f8fdb321c0f9a79b2d569372e629936e59..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Url.php +++ /dev/null @@ -1,216 +0,0 @@ -<?php -/** - * Url controller class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Url extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'url'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get items. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter formatted api params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( 'civi_wp_rest/controller/url/params', $this->get_formatted_params( $request ), $request ); - - // track url - $url = \CRM_Mailing_Event_BAO_TrackableURLOpen::track( $params['queue_id'], $params['url_id'] ); - - /** - * Filter url. - * - * @param string $url - * @param array $params - * @param WP_REST_Request $request - */ - $url = apply_filters( 'civi_wp_rest/controller/url/before_parse_url', $url, $params, $request ); - - // parse url - $url = $this->parse_url( $url, $params ); - - $this->do_redirect( $url ); - - } - - /** - * Get formatted api params. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params - */ - protected function get_formatted_params( $request ) { - - $args = $request->get_params(); - - $params = [ - 'queue_id' => isset( $args['qid'] ) ? $args['qid'] ?? '' : $args['q'] ?? '', - 'url_id' => $args['u'] - ]; - - // unset unnecessary args - unset( $args['qid'], $args['u'], $args['q'] ); - - if ( ! empty( $args ) ) { - - $params['query'] = http_build_query( $args ); - - } - - return $params; - - } - - /** - * Parses the url. - * - * @since 0.1 - * @param string $url - * @param array $params - * @return string $url - */ - protected function parse_url( $url, $params ) { - - // CRM-18320 - Fix encoded ampersands - $url = str_replace( '&', '&', $url ); - - // CRM-7103 - Look for additional query variables and append them - if ( isset( $params['query'] ) && strpos( $url, '?' ) ) { - - $url .= '&' . $params['query']; - - } elseif ( isset( $params['query'] ) ) { - - $url .= '?' . $params['query']; - - } - - if ( strpos( $url, 'mailto' ) ) $url = strstr( $url, 'mailto' ); - - return apply_filters( 'civi_wp_rest/controller/url/parsed_url', $url, $params ); - - } - - /** - * Do redirect. - * - * @since 0.1 - * @param string $url - */ - protected function do_redirect( $url ) { - - wp_redirect( $url ); - - exit; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm_api3/v3/url', - 'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'qid', 'u' ], - 'properties' => [ - 'qid' => [ - 'type' => 'integer' - ], - 'q' => [ - 'type' => 'integer' - ], - 'u' => [ - 'type' => 'integer' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'qid' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'q' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'u' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Controller/Widget.php b/wp-rest/Controller/Widget.php deleted file mode 100644 index 13fa1e2adde648de8c24b1278039385569bd5c21..0000000000000000000000000000000000000000 --- a/wp-rest/Controller/Widget.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php -/** - * Widget controller class. - * - * Widget endpoint, replacement for CiviCRM's 'extern/widget.php' - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Controller; - -class Widget extends Base { - - /** - * The base route. - * - * @since 0.1 - * @var string - */ - protected $rest_base = 'widget'; - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes() { - - register_rest_route( $this->get_namespace(), $this->get_rest_base(), [ - [ - 'methods' => \WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_item' ], - 'args' => $this->get_item_args() - ], - 'schema' => [ $this, 'get_item_schema' ] - ] ); - - } - - /** - * Get item. - * - * @since 0.1 - * @param WP_REST_Request $request - */ - public function get_item( $request ) { - - /** - * Filter mandatory params. - * - * @since 0.1 - * @param array $params - * @param WP_REST_Request $request - */ - $params = apply_filters( - 'civi_wp_rest/controller/widget/params', - $this->get_mandatory_params( $request ), - $request - ); - - $jsonvar = 'jsondata'; - - if ( ! empty( $request->get_param( 'format' ) ) ) $jsonvar .= $request->get_param( 'cpageId' ); - - $data = \CRM_Contribute_BAO_Widget::getContributionPageData( ...$params ); - - $response = 'var ' . $jsonvar . ' = ' . json_encode( $data ) . ';'; - - /** - * Adds our response data before dispatching. - * - * @since 0.1 - * @param WP_HTTP_Response $result Result to send to client - * @param WP_REST_Server $server The REST server - * @param WP_REST_Request $request The request - * @return WP_HTTP_Response $result Result to send to client - */ - add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) { - - return rest_ensure_response( $response ); - - }, 10, 3 ); - - // serve javascript - add_filter( 'rest_pre_serve_request', [ $this, 'serve_javascript' ], 10, 4 ); - - } - - /** - * Get mandatory params from request. - * - * @since 0.1 - * @param WP_REST_Resquest $request - * @return array $params The widget params - */ - protected function get_mandatory_params( $request ) { - - $args = $request->get_params(); - - return [ - $args['cpageId'], - $args['widgetId'], - $args['includePending'] ?? false - ]; - - } - - /** - * Serve jsondata response. - * - * @since 0.1 - * @param bool $served Whether the request has already been served - * @param WP_REST_Response $result - * @param WP_REST_Request $request - * @param WP_REST_Server $server - * @return bool $served - */ - public function serve_javascript( $served, $result, $request, $server ) { - - // set content type header - $server->send_header( 'Expires', gmdate( 'D, d M Y H:i:s \G\M\T', time() + 60 ) ); - $server->send_header( 'Content-Type', 'application/javascript' ); - $server->send_header( 'Cache-Control', 'max-age=60, public' ); - - echo $result->get_data(); - - return true; - - } - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema() { - - return [ - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'civicrm_api3/v3/widget', - 'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ), - 'type' => 'object', - 'required' => [ 'cpageId', 'widgetId' ], - 'properties' => [ - 'cpageId' => [ - 'type' => 'integer', - 'minimum' => 1 - ], - 'widgetId' => [ - 'type' => 'integer', - 'minimum' => 1 - ], - 'format' => [ - 'type' => 'integer' - ], - 'includePending' => [ - 'type' => 'boolean' - ] - ] - ]; - - } - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args() { - - return [ - 'cpageId' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'widgetId' => [ - 'type' => 'integer', - 'required' => true, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'format' => [ - 'type' => 'integer', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_numeric( $value ); - - } - ], - 'includePending' => [ - 'type' => 'boolean', - 'required' => false, - 'validate_callback' => function( $value, $request, $key ) { - - return is_string( $value ); - - } - ] - ]; - - } - -} diff --git a/wp-rest/Endpoint/Endpoint-Interface.php b/wp-rest/Endpoint/Endpoint-Interface.php deleted file mode 100644 index 9497cde5099ecbd7936571b0b73e318652abea7f..0000000000000000000000000000000000000000 --- a/wp-rest/Endpoint/Endpoint-Interface.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Endpoint Interface class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST\Endpoint; - -interface Endpoint_Interface { - - /** - * Registers routes. - * - * @since 0.1 - */ - public function register_routes(); - - /** - * Item schema. - * - * @since 0.1 - * @return array $schema - */ - public function get_item_schema(); - - /** - * Item arguments. - * - * @since 0.1 - * @return array $arguments - */ - public function get_item_args(); - -} diff --git a/wp-rest/Plugin.php b/wp-rest/Plugin.php deleted file mode 100644 index 8c94296c71fb4414af98d9961dd214f3030d2cda..0000000000000000000000000000000000000000 --- a/wp-rest/Plugin.php +++ /dev/null @@ -1,204 +0,0 @@ -<?php -/** - * Main plugin class. - * - * @since 0.1 - */ - -namespace CiviCRM_WP_REST; - -use CiviCRM_WP_REST\Civi\Mailing_Hooks; - -class Plugin { - - /** - * Constructor. - * - * @since 0.1 - */ - public function __construct() { - - $this->register_hooks(); - - $this->setup_objects(); - - } - - /** - * Register hooks. - * - * @since 1.0 - */ - protected function register_hooks() { - - add_action( 'rest_api_init', [ $this, 'register_rest_routes' ] ); - - add_filter( 'rest_pre_dispatch', [ $this, 'bootstrap_civi' ], 10, 3 ); - - add_filter( 'rest_post_dispatch', [ $this, 'maybe_reset_wp_timezone' ], 10, 3); - - } - - /** - * Bootstrap CiviCRM when hitting a the 'civicrm' namespace. - * - * @since 0.1 - * @param mixed $result - * @param WP_REST_Server $server REST server instance - * @param WP_REST_Request $request The request - * @return mixed $result - */ - public function bootstrap_civi( $result, $server, $request ) { - - if ( false !== strpos( $request->get_route(), 'civicrm' ) ) { - - $this->maybe_set_user_timezone( $request ); - - civi_wp()->initialize(); - - } - - return $result; - - } - - /** - * Setup objects. - * - * @since 0.1 - */ - private function setup_objects() { - - /** - * Filter to replace the mailing tracking URLs. - * - * @since 0.1 - * @param bool $replace_mailing_tracking_urls - */ - $replace_mailing_tracking_urls = apply_filters( 'civi_wp_rest/plugin/replace_mailing_tracking_urls', false ); - - // keep CIVICRM_WP_REST_REPLACE_MAILING_TRACKING for backwards compatibility - if ( - $replace_mailing_tracking_urls - || ( defined( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING' ) && CIVICRM_WP_REST_REPLACE_MAILING_TRACKING ) - ) { - // register mailing hooks - $mailing_hooks = ( new Mailing_Hooks )->register_hooks(); - - } - - } - - /** - * Registers Rest API routes. - * - * @since 0.1 - */ - public function register_rest_routes() { - - // rest endpoint - $rest_controller = new Controller\Rest; - $rest_controller->register_routes(); - - // url controller - $url_controller = new Controller\Url; - $url_controller->register_routes(); - - // open controller - $open_controller = new Controller\Open; - $open_controller->register_routes(); - - // authorizenet controller - $authorizeIPN_controller = new Controller\AuthorizeIPN; - $authorizeIPN_controller->register_routes(); - - // paypal controller - $paypalIPN_controller = new Controller\PayPalIPN; - $paypalIPN_controller->register_routes(); - - // pxpay controller - $paypalIPN_controller = new Controller\PxIPN; - $paypalIPN_controller->register_routes(); - - // civiconnect controller - $cxn_controller = new Controller\Cxn; - $cxn_controller->register_routes(); - - // widget controller - $widget_controller = new Controller\Widget; - $widget_controller->register_routes(); - - // soap controller - $soap_controller = new Controller\Soap; - $soap_controller->register_routes(); - - /** - * Opportunity to add more rest routes. - * - * @since 0.1 - */ - do_action( 'civi_wp_rest/plugin/rest_routes_registered' ); - - } - - /** - * Sets the timezone to the users timezone when - * calling the civicrm/v3/rest endpoint. - * - * @since 0.1 - * @param WP_REST_Request $request The request - */ - private function maybe_set_user_timezone( $request ) { - - if ( $request->get_route() != '/civicrm/v3/rest' ) return; - - $timezones = [ - 'wp_timezone' => date_default_timezone_get(), - 'user_timezone' => get_option( 'timezone_string', false ) - ]; - - // filter timezones - add_filter( 'civi_wp_rest/plugin/timezones', function() use ( $timezones ) { - - return $timezones; - - } ); - - if ( empty( $timezones['user_timezone'] ) ) return; - - /** - * CRM-12523 - * CRM-18062 - * CRM-19115 - */ - date_default_timezone_set( $timezones['user_timezone'] ); - \CRM_Core_Config::singleton()->userSystem->setMySQLTimeZone(); - - } - - /** - * Resets the timezone to the original WP - * timezone after calling the civicrm/v3/rest endpoint. - * - * @since 0.1 - * @param mixed $result - * @param WP_REST_Server $server REST server instance - * @param WP_REST_Request $request The request - * @return mixed $result - */ - public function maybe_reset_wp_timezone( $result, $server, $request ) { - - if ( $request->get_route() != '/civicrm/v3/rest' ) return $result; - - $timezones = apply_filters( 'civi_wp_rest/plugin/timezones', null ); - - if ( empty( $timezones['wp_timezone'] ) ) return $result; - - // reset wp timezone - date_default_timezone_set( $timezones['wp_timezone'] ); - - return $result; - - } - -} diff --git a/wp-rest/README.md b/wp-rest/README.md deleted file mode 100644 index 77234de84a195dc6fbb22e1e7d460ff7d44587f2..0000000000000000000000000000000000000000 --- a/wp-rest/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# CiviCRM WP REST API Wrapper - -This is a WordPress plugin that aims to expose CiviCRM's [extern](https://github.com/civicrm/civicrm-core/tree/master/extern) scripts as WordPress REST endpoints. - -This plugin requires: - -- PHP 7.1+ -- WordPress 4.7+ -- CiviCRM to be installed and activated. - -### Endpoints - -1. `civicrm/v3/rest` - a wrapper around `civicrm_api3()` - - **Parameters**: - - - `key` - **required**, the site key - - `api_key` - **required**, the contact api key - - `entity` - **required**, the API entity - - `action` - **required**, the API action - - `json` - **optional**, json formatted string with the API parameters/argumets, or `1` as in `json=1` - - By default all calls to `civicrm/v3/rest` return XML formatted results, to get `json` formatted result pass `json=1` or a json formatted string with the API parameters, like in the example 2 below. - - **Examples**: - - 1. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&group=Administrators` - - 2. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&json={"group": "Administrators"}` - -2. `civicrm/v3/url` - a substition for `civicrm/extern/url.php` mailing tracking - -3. `civicrm/v3/open` - a substition for `civicrm/extern/open.php` mailing tracking - -4. `civicrm/v3/authorizeIPN` - a substition for `civicrm/extern/authorizeIPN.php` (for testing Authorize.net as per [docs](https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method)) - - **_Note_**: this endpoint has **not been tested** - -5. `civicrm/v3/ipn` - a substition for `civicrm/extern/ipn.php` (for PayPal Standard and Pro live transactions) - - **_Note_**: this endpoint has **not been tested** - -6. `civicrm/v3/cxn` - a substition for `civicrm/extern/cxn.php` - -7. `civicrm/v3/pxIPN` - a substition for `civicrm/extern/pxIPN.php` - - **_Note_**: this endpoint has **not been tested** - -8. `civicrm/v3/widget` - a substition for `civicrm/extern/widget.php` - -9. `civicrm/v3/soap` - a substition for `civicrm/extern/soap.php` - - **_Note_**: this endpoint has **not been tested** - -### Settings - -Set the `CIVICRM_WP_REST_REPLACE_MAILING_TRACKING` constant to `true` to replace mailing url and open tracking calls with their counterpart REST endpoints, `civicrm/v3/url` and `civicrm/v3/open`. - -_Note: use this setting with caution, it may affect performance on large mailings, see `CiviCRM_WP_REST\Civi\Mailing_Hooks` class._